EcoStruxure Machine Expert Version 1.1 unterstützt nicht die Controller M258, LMC058 und LMC078.

Attribute global_init_slot

Überblick

Das pragma {attribute 'global_init_slot'} definiert die Initialisierungssequenz für die POUs oder globalen Variablenlisten.

Die Variablen in einer Liste (GVL oder POU) werden von oben nach unten initialisiert.

Wenn mehrere globale Variablenlisten verfügbar sind, dann ist keine Initialisierungssequenz definiert.

Für Literalwerte, wie z. B. 1, 'hello', 3.6, oder für Konstanten des Basis-Datentyps ist die Initialisierungssequenz irrelevant. Wenn jedoch Abhängigkeiten zwischen den verschiedenen Listen vorliegen, müssen Sie die Initialisierungssequenz selbst definieren. Dazu können Sie einer GVL oder POU über attribute global_init_slot eine definierte Initialisierungsposition zuweisen.

Syntax

{attribute 'global_init_slot' := '<Position>'}

Ersetzen Sie <Position> durch einen Ganzzahl, die auf die Position innerhalb der Initialisierungs­reihenfolge verweist. Der Standardwert für eine POU (Programm, Funktionsbaustein) beträgt 50.000. Der Standardwert für eine GVL ist 49.990. Ein niedrigerer Wert bewirkt eine frühere Initiali­sierung. Wenn mehrere POUs oder GVLs über denselben Wert für das Attribut global_init_slot verfügen, bleibt die Reihenfolge ihrer Initialisierung unbestimmt. Diese Situation wird in der Ansicht Meldungen als Programmierfehler in der Kategorie Übersetzen angegeben.

Das pragma {attribute 'global_init_slot'} ist gültig für die gesamte GVL bzw. POU und muss deshalb über VAR_GLOBAL oder über der POU-Deklaration positioniert sein.

Beispiel

Dieses Beispiel umfasst die 2 globalen Variablenlisten GVL_1 und GVL_2 sowie das Programm PLC_PRG, das Variablen aus beiden Listen verwendet.

GVL_1 verwendet die Variable B für die Initialisierung einer Variablen A, die in GVL_2 mit dem Wert 1000 initialisiert wird.

GVL_1:

VAR_GLOBAL //49990
  A : INT := GVL_2.B*100;
END_VAR

GVL_2:

VAR_GLOBAL //49990
    B : INT := 1000;
  C : INT := 10;
END_VAR

PLC_PRG:

PROGRAM PLC_PRG //50000
VAR
    ivar: INT := GVL_1.A;
    ivar2: INT;
END_VAR
ivar:=ivar+1;
ivar2:=GVL_2.C;

Bei der Generierung dieses Beispiels wird ein Programmierfehler in der Kategorie Übersetzen in der Ansicht Meldungen ausgegeben, da GVL_2.B für die Initialisierung von GVL_1.A vor der Initialisierung von GVL_2 verwendet wird. Um das zu vermeiden, verwenden Sie attribute global_init_slot, um GVL_2 in der Initialisierungssequenz vor GVL_1 zu positionieren.

GVL_2 darf höchstens den Positionswert 49989 erhalten, um die früheste Initialisierung innerhalb des Programms zu erzielen.

GVL_2:

{attribute 'global_init_slot' := '100'}
VAR_GLOBAL
  B : INT := 1000;
  C : INT := 10;
END_VAR

Sie können sogar GVL_2.C im Implementierungsteil von PLC_PRG ohne ein Pragma verwenden, da beide GVLs in jedem Fall vor dem Programm initialisiert werden.