Skip to main content

Variablendeklaration

Variablendeklaration wo und wie

Sie können Variablen an folgenden Stellen deklarieren:

Für weitere Informationen siehe: Tastaturkürzel bei der Variablendeklaration

Syntax

<pragma>

<scope> <type qualifier>

    <identifier> AT <address> : <data type> := <initial value> ;

END_VAR

<pragma>

Wiederholt optional (nie, einmal oder mehrmals)

Pragma

Ein Pragma ist eine Compiler-Anweisung, um beispielsweise Optimierungen wie Speicherplatzbedarf oder Laufzeitverbesserungen zu erreichen.

<scope>

Obligatorisch

Gültigkeitsbereich

  • VAR

  • VAR_CONFIG

    Hinweis: Wenn in Funktionsbausteinen Variablen mit unvollständigen Adressangaben (beispielsweise AT %I*) deklariert sind, müssen die Variablen in der Variablenkonfiguration VAR_CONFIG fertig deklariert werden. Erst dann können Sie auf eine solche Variable in einer lokalen Instanz zugreifen.

  • VAR_EXTERNAL

  • VAR_GLOBAL

  • VAR_INPUT

  • VAR_INST

  • VAR_IN_OUT

  • VAR_OUTPUT

  • VAR_STAT

  • VAR_TEMP

<type qualifier>

Optional

Typqualifizierer

  • CONSTANT

  • RETAIN

  • PERSISTENT

<identifier>

Obligatorisch

Bezeichner, Variablenname

Hinweis: Die im Kapitel „Bezeichnervergabe“ aufgeführten Regeln müssen Sie bei der Vergabe eines Bezeichners zwingend beachten. Zusätzlich finden Sie dort Empfehlungen zur Vereinheitlichung bei der Namensvergabe.

AT %<address>

Optional

Die Adresse setzt sich zusammen aus:

<Speicherbereich> <optionales Größenpräfix> <Speicherposition>

Der Speicherbereich ist aufgeteilt in Eingangs-, Ausgangs- oder Merkerspeicherbereich (I, Q oder M)

Beispiel

  • AT %I* // Incomplete address

  • AT %I7.5

  • AT %IW0

  • AT %QX7.5

  • AT %MD48

<data type>

Obligatorisch

Datentyp

  • Elementarer Datentyp

  • Benutzerdefinierter Datentyp

  • Funktionsbaustein

<initial value>

Optional

Initialwert, Initialisierung als Literal, Variable oder Ausdruck

Beispiel 12. Beispiel

Globale Variablenliste GVL

{attribute 'qualified_only'}
{attribute 'linkalways'}
VAR_GLOBAL CONSTANT
    g_ciMAX_A : INT := 100;
    g_ciSPECIAL : INT := g_ciMAX_A - 10;
END_VAR

Konfigurationsvariablen GVL_CONFIG

{attribute 'qualified_only'}
VAR_CONFIG
    // Generated instance path of variable at incomplete address
    PLC_PRG.fbDoItNow.XLOCINPUT AT %I*: BOOL := TRUE;
END_VAR

Funktionsbaustein FB_DoIt

METHOD METH_Last : INT
VAR_INPUT
    iVar : INT;
END_VAR
VAR_INST
    iLast : INT := 0;
END_VAR

METH_Last := iLast;
iLast := iVar;

FUNCTION_BLOCK FB_DoIt
VAR_INPUT
    wInput AT %IW0 : WORD; (* Input variable *)
END_VAR
VAR_OUTPUT
    wOutput AT %QW0 : WORD; (* Output variable *)
END_VAR
VAR_IN_OUT
    aData_A : ARRAY[0..1] OF DATA_A; // Formal variable
END_VAR
VAR_EXTERNAL
        GVL.g_ciMAX_A : INT; // Declared in object GVL
END_VAR
VAR_STAT
    iNumberFBCalls : INT;
END_VAR
VAR
    iCounter: INT;
    xLocInput AT %I* : BOOL := TRUE; // VAR_CONFIG
END_VAR

iNumberFBCalls := iNumberFBCalls + 1;

IEC-Programm PLC_PRG

PROGRAM PLC_PRG
VAR
    iLoop: INT;
    iTest: INT;
    fbDoItNow : FB_DoIt;
    iTest_200: INT;
    aData_Now : ARRAY[0..1] OF DATA_A := [(iA_1 := 1, iA_2 := 10, dwA_3 := 16#00FF),(iA_1 := 2, iA_2 := 20, dwA_3 := 16#FF00)];
END_VAR

iTest := GVL.g_ciMAX_A;
iTest_200 :=  2 * GVL.g_ciMAX_A;
fbDoItNow(aData_A := aData_Now);
FOR iLoop := 0 TO GVL.g_ciSPECIAL DO
    ;
END_FOR