Array mit variabler Länge
In Funktionsbausteinen, Funktionen oder Methoden können Sie im Deklarationsabschnitt VAR_IN_OUT Arrays mit variabler Länge deklarieren. Um zur Laufzeit die Indexgrenzen des tatsächlich verwendeten Arrays zu ermitteln, stehen Ihnen die Operatoren LOWER_BOUND und UPPER_BOUND zur Verfügung. LOWER_BOUND liefert die Untergrenze, UPPER_BOUND liefert die Obergrenze.
![]() | An ein Array mit variabler Länge dürfen nur statisch deklarierte Arrays übergeben werden. Dynamische Arrays, die mit Hilfe des Operators __NEW erzeugt wurden, dürfen nicht übergeben werden. |
Syntax
Deklaration eines eindimensionalen Arrays mit variabler Länge
<variable name> : ARRAY[*] OF <data type> := [<initialization>];
| Name des Arrays Beispiel: |
| Datentyp eines Elements:
Hinweis: Referenzen und Pointer auf BIT-Variablen sind ungültige Deklarationen, ebenso wie Arraykomponenten mit Basistyp BIT. |
| Initialwerte des Arrays (optional) |
Deklaration eines mehrdimensionalen Arrays mit variabler Länge
<variable name> : ARRAY[*, *] OF <data type> := [<initialization>];
| Name des Arrays Beispiel: |
| Deklaration eines zweidimensionalen Arrays variabler Länge Formal steht ein Stern für jede Dimension variabler Länge. Die Dimensionen sind mit Komma separiert. Erlaubt sind beliebig viele Dimensionen variabler Länge. |
Syntax der Operatoren zur Grenzindexberechnung
LOWER_BOUND( <variable name> , <dimension number> )
UPPER_BOUND( <variable name> , <dimension number> )
Beispiel
Die Funktion AddValues addiert die Integerwerte der Arrayelemente und gibt als Ergebnis die ermittelte Summe zurück. Die Summe wird über alle zur Laufzeit vorhandenen Arrayelemente berechnet. Da die tatsächliche Anzahl an Arrayelementen erst zur Laufzeit bekannt sein wird, wird die lokale Variable als eindimensionales Array variabler Länge deklariert. An diese Additionsfunktion können Arrays mit verschiedener, fester Länge übergeben werden.
FUNCTION AddValues : DINT;
VAR_IN_OUT
aData : ARRAY [*] OF INT;
END_VAR
VAR
nIdx : DINT;
nSum : DINT;
END_VAR
nSum := 0;
FOR nIdx := LOWER_BOUND(aData,1) TO UPPER_BOUND(aData,1) DO
nSum := nSum + aData[nIdx];
END_FOR;
AddValues := nSum;