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.

Array mit variabler Länge 1:

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 zur Deklaration eines eindimensionalen Arrays mit variabler Länge

<variable name> : ARRAY[*] OF <data type> ( := <initialization> )? ;
<data type> : elementary data types | user defined data types | function block types
// (...)? : Optional

Syntax zur Deklaration eines mehrdimensionalen Arrays mit variabler Länge

<variable name> : ARRAY[* ( , * )+ ] OF <data type> ( := <initialization> )? ;
<data type> : elementary data types | user defined data types | function block types
// (...)+ : One or more further dimensions
// (...)? : Optional

Syntax der Operatoren zur Grenzindexberechnung

LOWER_BOUND( <variable name> , <dimension number> )
UPPER_BOUND( <variable name> , <dimension number> )

Beispiel

Die Funktion F_SUM 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 F_Sum : DINT;
VAR_IN_OUT
    aData     : ARRAY [*] OF INT;
END_VAR
VAR
    i, nSum   : DINT;
END_VAR
nSum := 0;
 
FOR i := LOWER_BOUND(aData,1) TO UPPER_BOUND(aData,1) DO
    nSum := nSum + aData[i];
END_FOR;

F_Sum := nSum;