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.

Konstanten werden vor den Variablen und in derselben Reihenfolge wie diese initialisiert. Bei der Initialisierung werden die POUs nach dem Wert für <slot> sortiert. Anschließend wird der Code für die Initialisierung der Konstanten generiert. Danach erfolgt die Generierung des Codes für die Initialisierung der Variablen.

Syntax

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

Ersetzen Sie <Position> durch einen Ganzzahl, die auf die Position innerhalb der Initialisierungsreihenfolge 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 Initialisierung. Wenn mehrere POUs oder GVLs über denselben Wert für das Attribut global_init_slot verfügen, bleibt die Reihenfolge ihrer Initialisierung unbestimmt. Das wird als Programmierfehler in der Kategorie Generieren der Ansicht MeldungenSoMMenu/index.htm ausgewiesen.

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

Das Beispiel umfasst 2 globale Variablenlisten, GVL_1 und GVL_2, sowie ein 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 in der Kategorie Generieren der Ansicht MeldungenSoMMenu/index.htm ein Programmierfehler ausgegeben, da GVL_2.B zur Initialisierung von GVL_1.A verwendet wird, bevor GVL_2 initialisiert wurde. 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.