Sektion: VarArrays
Der Parameter VarArrays erlaubt Arrays mit konfigurierbarer Größe zu erzeugen.
SEC VarArrays                                       //optional: yes, modifier: [UPDATE]]
    SEC VarArray : <slot identifier>                    //optional: yes, modifier []
            Variable := <variable name>;                //optional: no, type: InstancePath
            Var_Count := <variable count>;              //optional: no, type: InstancePath
            Inst_Name := <instance name>;               //optional: yes, type: StringLiteral
            Pragmas := [<pragma1>, <pragma2>,...];      //optional: yes, type: Pragmalist
            Var_Decl_Flags := <Flag1> | <Flag2> | ... ; //optional: yes, type: Flags
    END_SEC
END_SECDetails über die Syntax der Definitionstypen sind im Kapitel Syntax der Moduldeklaration beschrieben.
- Die Definition - Variableist ein Eingangs-Instanzpfad relativ zum Modulfunktionsbaustein. Der Typ ist- POINTER TO <ELEMTYPE>.- <ELEMTYPE>kann ein beliebiger Typ sein.
- Das Target des Abschnitts - VarArraymuss das Array konfigurierbarer Größe eindeutig identifizieren.
- Var_Countist der Eingangs-Instanzpfad einer ganzzahligen Eingangsvariable- Variabledes Funktionsbausteins. Damit diese Variable im Editor zur Konfiguration angezeigt wird, muss sie entsprechend als Parameter deklariert werden. Alternativ kann auch die- Var_CountVariable eines Multi-Slots oder eines Multi-InstRefs verwendet werden. Mehrere VarArrays dürfen dieselbe- Var_Count-Variable verwenden. Ist die Größe des Arrays 0, dann wird kein Array angelegt sondern der Zeiger des Arrays auf 0 gesetzt.
- Inst_Namelegt den Namen der erzeugten Array-Variable fest. Die Platzhalter- %Instancename%und- %VariablePath%(Groß-/Kleinschreibung spielt keine Rolle) werden dabei durch den Instanznamen der Modulinstanz bzw. den Instanzpfad der Pointer-Variable (wobei Punkte durch Unterstriche ausgetauscht werden) ersetzt. Wenn die Definition weggelassen wird, gilt der Defaultwert- AC_ARRAY_%VariablePath%.
- Es ist ein Fehler, wenn zwei verschiedene VarArrays eines Moduls einen identischen - Inst_Namehaben, der nicht den Platzhalter- %VariablePath%enthält.
- Pragmasenthält eine Liste von Compiler-Pragmas, welche vor der erzeugten Array-Variable eingesetzt wird.
- Var_Decl_Flagserlaubt es den variablen Typ des angelegten Arrays genauer zu spezifizieren. Erlaubte Flags sind- NONE,- RETAINund- PERSISTENT. Diese Flags bewirken, dass sie zu der Sektion- VAR_INPUT, in der das Array angelegt wird, hinzugefügt werden (z.B. für das Flag- RETAIN,- VAR_INPUT RETAIN).
SEC VAR_ARRAYS
        SEC VAR_ARRAY : NameList
                Variable  := psNameList;
                Var_Count := uiArraySize;
        END_SEC
        ...
        SEC PARAM : ArraySize
                Variable := uiArraySize;
                Name     := TL.ArraySize_Name;
                Desc     := TL.ArraySize_Desc;
        END_SEC
END_SECDer Funktionsbaustein muss im Deklarationsteil folgende Deklaration enthalten: uiArraySize: UINT := 7; psNameList: POINTER TO STRING;.