Skip to main content

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_SEC

Details über die Syntax der Definitionstypen sind im Kapitel Syntax der Moduldeklaration beschrieben.

. Spezifikation:
  • Die Definition Variable ist ein Eingangs-Instanzpfad relativ zum Modulfunktionsbaustein. Der Typ ist POINTER TO <ELEMTYPE>. <ELEMTYPE> kann ein beliebiger Typ sein.

  • Das Target des Abschnitts VarArray muss das Array konfigurierbarer Größe eindeutig identifizieren.

  • Var_Count ist der Eingangs-Instanzpfad einer ganzzahligen Eingangsvariable Variable des Funktionsbausteins. Damit diese Variable im Editor zur Konfiguration angezeigt wird, muss sie entsprechend als Parameter deklariert werden. Alternativ kann auch die Var_Count Variable 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_Name legt 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_Name haben, der nicht den Platzhalter %VariablePath% enthält.

  • Pragmas enthält eine Liste von Compiler-Pragmas, welche vor der erzeugten Array-Variable eingesetzt wird.

  • Var_Decl_Flags erlaubt es den variablen Typ des angelegten Arrays genauer zu spezifizieren. Erlaubte Flags sind NONE, RETAIN und 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).

Beispiel 26. Beispiel
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_SEC

Der Funktionsbaustein muss im Deklarationsteil folgende Deklaration enthalten: uiArraySize: UINT := 7; psNameList: POINTER TO STRING;.