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]' *) 

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