Zugriff auf ARRAY-Datentyp und ARRAY-Elemente
Falls Sie eine Variable basierend auf einem ARRAY-Datentyp deklarieren wollen (dadurch wird eine ARRAY-Variable deklariert), geben Sie den Namen des ARRAY-Datentyps (z.B. myType
) als Datentyp in der Deklaration von Variablen ein. Als Alternative können Sie die ARRAY-Angabe direkt bei der Deklaration der Variable eingeben (auch dadurch wird eine ARRAY-Variable deklariert); siehe var2
und var3
im folgenden Beispiel.
Falls Sie eine ARRAY-Variable einer anderen ARRAY-Variable zuweisen wollen, müssen beide auf dem gleichen Datentyp mit dem gleichen Index-Unterbereich basieren. Bei einem STRING
-Basisdatentyp muss auch die Länge übereinstimmen.
Falls Sie ein ARRAY-Element in Zuweisungen verwenden wollen, geben Sie den Namen der Variable oder des Funktionsbausteins (z.B. var1
oder TONArr1
) und den ARRAY-Index (z.B. 2
) in []
eingeschlossen (z.B. var1[2]
oder TONArr1[30]
) ein. Handelt es sich um ein ARRAY-Element mit mehreren Dimensionen, trennen Sie die ARRAY-Indexe durch das Zeichen ,
voneinander (z.B. var6[1,2]
). Als Erweiterung zur →IEC-Norm ist es möglich, jeden der ARRAY-Index in []
hintereinander anzugeben (z.B. var6[1][2]
).
Sie können ein ARRAY-Element einem anderen ARRAY-Element nur zuweisen, sofern beide auf den gleichen Datentypen basieren.
Als ARRAY-Index können Sie einen →Ausdruck eingeben, der einen Wert vom →Datentyp DINT
liefert. Ein eingegebener ARRAY-Index muss Teil des Index-Unterbereichs sein. Falls Sie ARRAY-Indizes als →Konstante eingeben (z.B. var1[2]
), werden ungültige ARRAY-Indizes automatisch von logi.CAD 3 als Fehler gekennzeichnet.
Falls Sie→Variablen und/oder Operatoren für ARRAY-Indizes verwenden (z.B. var1[3+3]
), werden diese Angaben bei der Eingabe im ST-Editor nicht auf ihre Gültigkeit geprüft. Der ARRAY-Index wird erst beim Ausführen der Anwendung berechnet. Falls der berechnete ARRAY-Index außerhalb des Index-Unterbereichs liegen, wird bei der Ausführung die überschrittene Grenze verwendet (also: x
, falls ARRAY-Index < x
, und y
, falls ARRAY-Index > y
). Außerdem wird der Ausgang ENO
der umfassenden →POE auf den Wert FALSE
(bzw. einer Entsprechung) gesetzt.
logi.cals empfiehlt Ihnen, Code in Ihrer Anwendung (z.B. IF
-Anweisungen) einzufügen, um ARRAY-Indizes zu erkennen, die außerhalb des Index-Unterbereichs liegen.
VAR var1: myType; (* 'myType' wurde so als Array-Datentyp deklariert: 'ARRAY [1..9] OF INT := [1, 2, 3]' *) var2: ARRAY [1..9] OF INT := [9(1)]; var3: ARRAY [1..2] of BOOL := [2(TRUE)]; var4: inputData; (* 'inputData' wurde so als Array-Datentyp deklariert: 'ARRAY [0..1] OF BOOL := [2(TRUE)]' *) var5: ARRAY [1..2] of WORD; var6: ARRAY [1..2, 1..3] OF INT := [2([3(25)])]; var7: ARRAY [1..2, 1..3, 1..4] OF INT := [2([3([4(15)])])]; END_VAR (* Zuweisungen: ARRAY-Variable auf ARRAY-Variable *) var1 := var2; (* OK, da 'var1' und 'var2' auf gleichem Datentyp mit dem gleichen Index-Unterbereich basieren *) var5 := var3; (* Fehler, da 'var5' und 'var3' nicht auf gleichem Datentyp basieren *) var3 := var4; (* Fehler, da 'var3' und 'var4' zwar auf gleichem Datentyp basieren, aber nicht mit dem gleichen Index-Unterbereich *) (* Zuweisungen mit ARRAY-Element *) var1[2] := 5; (* OK, da '5' für Datentyp 'INT' erlaubt *) var3[1] := FALSE; (* OK, da 'FALSE' für Datentyp 'BOOL' erlaubt *) var4[1] := 5; (* Fehler, da '5' für Datentyp 'BOOL' nicht erlaubt *) var1[13] := 5; (* Fehler, da Index '13' außerhalb des Index-Unterbereichs '1..9' liegt *) var1[0] := 5; (* Fehler, da Index '0' außerhalb des Index-Unterbereichs '1..9' liegt *) var3[1] := var4[1]; (* OK, da 'var3' und 'var4' auf gleichem Datentyp basieren *) var3[1] := var4[6]; (* Fehler, da Index '6' für 'var4' außerhalb des Index-Unterbereichs '0..1' liegt *) var1[2] := var3[2]; (* Fehler, da 'var1' vom Typ 'BOOL' und 'var3' vom Typ 'INT'. 'BOOL' ist nicht implizit nach 'INT' konvertierbar. *) var5[1] := var3[1]; (* OK, da 'var3' vom Typ 'BOOL' und 'var5' vom Typ 'WORD'. 'BOOL' ist implizit nach 'WORD' konvertierbar. *) var1[3+3] := 5; (* Eingabe möglich, Ausführung OK. Grund: '3+3' ergibt den gültigen Index '6'. *) (* Empfehlung: zusätzlichen Code einfügen, der prüft, ob ein ungültiger Index entstehen könnte. *) var1[4*3] := 5; (* Eingabe möglich, aber Ausführung erfolgt mit 'var1[9]' (statt 'var1[12]'). Grund: '4*3' ergibt den ungültigen Index '12'. *) (* Zusätzlich wird 'ENO' der darüberliegenden POE bei der Ausführung auf 'FALSE' gesetzt. *) (* Empfehlung: zusätzlichen Code einfügen, der prüft, ob ein ungültiger Index entstehen könnte. *) (* Zuweisungen auf ein ARRAY-Element mit 2 Dimensionen *) var6[1,2] := 5; (* Zuweisung von '5' auf das Element 'var6[1,2]' *) var6[2][1] := 10; (* Zuweisung von '10' auf das Element 'var6[2,1]' *) (* Zuweisungen auf ein ARRAY-Element mit 3 Dimensionen *) var7[1,2,3] := 5; (* Zuweisung von '5' auf das Element 'var7[1,2,3]' *) var7[2][1][4] := 10; (* Zuweisung von '10' auf das Element 'var7[2,1,4]' *) (* Die Zuweisungen auf ein ARRAY-Element mit 4 Dimensionen sind analog zu den Zuweisungen auf ein ARRAY-Element mit 3 Dimensionen. *)
Anzeige für ARRAY-Variablen
Die Anzeige für ARRAY-Variable ist auf den Basis-Typ in der Sicht Instanzen beschränkt. Falls Sie nicht angezeigte ARRAY-Elemente in die Sicht Variablenwerte einfügen wollen (um dort deren Werte zu beobachten/testen), ziehen Sie einfach den Basis-Typ in die Sicht Variablenwerte und bearbeiten Sie den eingefügten Eintrag (vervollständigen Sie ihn um den benötigten ARRAY-Index).