TIA TIA Portal V18 Wunschliste [Diskussion]

Status
Für weitere Antworten geschlossen.
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich möchte das Siemens diese Array-Deklarierung, die wir aktuell haben, komplett wegschmeißt und wir "Array[5] of INT" usw. machen. Array mit 5 Integern. Fertig.
Wahrscheinlich machst Du Dir weniger Feinde, als Du denkst.

ABER: Dann sollte es wie in anderen Programmiersprachen auch üblich umgesetzt werden:

C#:
int[] array = new int[5];

Dieses Array enthält die Elemente array[0] bis array[4]. Die Elemente des Arrays werden mit dem Standardtyp des Elementtyps initialisiert (0 für ganze Zahlen).

Folglich liegst Du falsch, wenn Du denkst, dass das Array[5] 5 Integerwerte hätte. Es hat 6 Integerwerte und beginnt bei 0 ;)

Im übrigen akzeptiere ich das fehlende r und n; die 2. bedeutet aber, dass du den "Scherz" nicht verstanden hast ;)
Stimmt, hatte ich nicht verstanden (y)


VG

MFreiberger
 
Wie ist das eigentlich bei optimierten DBs? Auf welche Variable greift denn das Visu_Array_Element[0] zu, wenn es das in der SPS nicht gibt?

Aber die Lösung für Neuanlagen ist halt, in der SPS immer ein Array von 0 bix x zu deklarieren. Bei Bestandsanlagen, die nicht bei 0 in der SPS beginnen, hat man dann im HMI Indexverschiebungen, wenn man unbedingt ein Array anlegen will/muss. Wenn der DB nichtoptimiert ist, kannst DU aber im HMI auch Einzelvariablen anlegen. Dann musst Du aber Adressmultiplexen...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wie ist das eigentlich bei optimierten DBs? Auf welche Variable greift denn das Visu_Array_Element[0] zu, wenn es das in der SPS nicht gibt?

Aber die Lösung für Neuanlagen ist halt, in der SPS immer ein Array von 0 bix x zu deklarieren. Bei Bestandsanlagen, die nicht bei 0 in der SPS beginnen, hat man dann im HMI Indexverschiebungen, wenn man unbedingt ein Array anlegen will/muss. Wenn der DB nichtoptimiert ist, kannst DU aber im HMI auch Einzelvariablen anlegen. Dann musst Du aber Adressmultiplexen...
Das ist das geile bei HMI / SPS Arrays.
Legst du ein Array[0..15] of Sonstwas in der Steuerung an wird das zu einem Array[1..16] in der HMI. Ist doch ganz logisch!:sneaky:
I love it.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wo passiert das denn? Das würde ich für ein Bug halten. Das wurde so bisher auch nicht beschrieben.
bei nichtoptimierten DBs wird aus SPS[1...16] -> HMI[0...15]
bei nichtoptimierten DBs wird aus SPS[0...16] -> HMI[0...16]
HMI fängt immer bei 0 an...

Bei optimierten DBs weiss ich nicht, was da passiert.
 
bei nichtoptimierten DBs wird aus SPS[1...16] -> HMI[0...15]
bei nichtoptimierten DBs wird aus SPS[0...16] -> HMI[0...16]
HMI fängt immer bei 0 an...

Bei optimierten DBs weiss ich nicht, was da passiert.
Ja, @ducati: wie Du schon gesagt hast: "Andersrum". Ich hatte mich auf SPS[1..16] -> HMI[0..15] bezogen.

Müsste auch bei optimierten DBs so sein. Meine ich gesehen zu haben.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich glaube die HMI fängt immer von mindestens 1 an. Kann mich aber auch irren. Auf jeden Fall ist es irgendwie unterschiedlich und nicht logisch.
Das HMI fängt immer bei 0 an, nicht bei 1!
Im Übrigen machen das Bausteine von SIEMENS, die mit Arrays arbeiten intern auch (Serialize/Deserialize).

Aus meiner Sicht gibt es überhaupt keinen Grund mit 1 statt mit 0 zu starten. Zumindest für Arrays, bei denen nur die Größe wichtig ist.
Also, wenn es einfach nur um 16 Elemente geht, ist Array[0..15] und NICHT Array[1..16] zu verwenden.
Ausnahmen wurden genannt, tun hierfür aber nichts zur Sache.

VG
 
Aus meiner Sicht gibt es überhaupt keinen Grund mit 1 statt mit 0 zu starten. Zumindest für Arrays, bei denen nur die Größe wichtig ist.
unsere Standard-DBs stammen noch aus einer Zeit vor WinCCflex. Und da hat jemand halt in der SPS bei 1 angefangen. Das schleppt sich dann halt durch...
Also, wenn es einfach nur um 16 Elemente geht, ist Array[0..15] und NICHT Array[1..16] zu verwenden.
wenn ich 16 Elemente in der SPS benötige, würde ich ein Array[0...16] anlegen, und das nullte einfach nicht verwenden...

im HMI legst Du dann auch 0...16 an und verwendest das nullte nicht.

Hat den Vorteil, dass Motor 1 oder Messwert 1 auch im Arrayelement[1] liegt...
 
unsere Standard-DBs stammen noch aus einer Zeit vor WinCCflex. Und da hat jemand halt in der SPS bei 1 angefangen. Das schleppt sich dann halt durch...

wenn ich 16 Elemente in der SPS benötige, würde ich ein Array[0...16] anlegen, und das nullte einfach nicht verwenden...

im HMI legst Du dann auch 0...16 an und verwendest das nullte nicht.

Hat den Vorteil, dass Motor 1 oder Messwert 1 auch im Arrayelement[1] liegt...
Ja, das ist eine Möglichkeit, die ich auch schon beschrieben hatte.
Würde ich aber nur umsetzen, wenn ich das "nullte" Element sinnvoll verwenden kann.
Das man bei 0 anfängt müsste für jeden Programmierer doch tägliches Brot sein oder lasst ihr folgende Adresse einfach aus:
E0.0, AB0, E4.0, AW10.0, ....?

Aber ich halte die Lösung, einfach ein größeres Array ([0..8]) zu nehmen, für einen gangbaren Weg.


BTW: manchmal ist ein "nulltes" Element aber auch hilfreich. z.B. könnte man hier Daten zwischenpuffern und dann zu dem "richtigen" Index schreiben.

VG

MFreiberger
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja, @ducati: wie Du schon gesagt hast: "Andersrum". Ich hatte mich auf SPS[1..16] -> HMI[0..15] bezogen.

Müsste auch bei optimierten DBs so sein. Meine ich gesehen zu haben.
Habe es gerade mal getestet. Anscheinend hat sich das mit V17 oder V16 geändert.
Array [0..15] SPS ist auch [0..15] HMI

Das war definitiv mal anders.

Hab es gerade in Bildbausteinen getestet. Da ist es nämlich anders.
Definiert man einen PLC-Datentypen der z.B. ein Array von [1..16] OF STRING enthält und bindet diesen an einen Bildbaustein an, wird das Array im Bildbaustein auf [0..15] verändert. Das ist richtig verwirrend.
Aus dem Grund sollte man die Array Grenzen immer von 0 beginnend machen.
Im Bildbaustein wird immer von Null angefangen!
 
Zuletzt bearbeitet:
Habe es gerade mal getestet. Anscheinend hat sich das mit V17 oder V16 geändert.
Also bei mir ist das Verhalten zwischen V16 und V17 gleich.

Array [0..15] SPS ist auch [0..15] HMI
Das würde ich auch so erwarten.

Das war definitiv mal anders.
Vielleicht ein Bug einer Update-Version?

Vielleicht in Bildbausteinen wenn man eine UDT verwendet.
Mit Bildbausteinen arbeite ich üblicherweise nicht 🤷‍♂️

VG
 
Habe es gerade mal getestet. Anscheinend hat sich das mit V17 oder V16 geändert.
Array [0..15] SPS ist auch [0..15] HMI

Das war definitiv mal anders.

Hab es gerade in Bildbausteinen getestet. Da ist es nämlich anders.
Definiert man einen PLC-Datentypen der z.B. ein Array von [1..16] OF STRING enthält und bindet diesen an einen Bildbaustein an, wird das Array im Bildbaustein auf [0..15] verändert. Das ist richtig verwirrend.
Aus dem Grund sollte man die Array Grenzen immer von 0 beginnend machen.
Im Bildbaustein wird immer von Null angefangen!
keine Ahnung, Du verwirrst hier schon stark...

SPS[0...15] war und ist schon immer HMI[0...15]
SPS[1...16] war und ist schon immer HMI[0...15], das ist der Kritikpunkt hier, das man im HMI kein Array[1...16] anlegen kann...

nur wies bei optimierten DBs ist, weiss ich nicht...
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben