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.

Beispiele
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).