Attributo: global_init_slot
Il pragma definisce l'ordine di inizializzazione delle POU e degli elenchi di variabili globali: le variabili all'interno di un GVL o di una POU vengono inizializzate dall'alto verso il basso. Se sono presenti più elenchi di variabili globali, l'ordine di inizializzazione non è definito.
L'inizializzazione non si applica, ad esempio, all'inizializzazione di valori letterali 1
, 'hello'
, 3.6
o costanti di tipi di dati di base. Tuttavia, è necessario definire personalmente l'ordine di inizializzazione se sono presenti dipendenze tra gli elenchi. È possibile assegnare uno slot di inizializzazione definito a un GVL o POU con il 'global_init_slot'
attributo.
Le costanti vengono inizializzate prima delle variabili e nello stesso ordine delle variabili. Durante l'inizializzazione, le POU vengono ordinate in base al valore per <slot>. Quindi viene generato il codice per l'inizializzazione delle costanti e successivamente il codice per l'inizializzazione delle variabili.
Sintassi:
{attribute 'global_init_slot' := '<slot>'}
Inserisci posizione | Il pragma agisce sempre sull'intero GVL o POU e quindi deve trovarsi al di sopra del |
| Valore intero che definisce la posizione nell'ordine delle chiamate Il valore predefinito per una POU (programma, blocco funzione) è 50000. Il valore predefinito per un GVL è 49990. Un valore più basso indica un'inizializzazione precedente. |
Suggerimento
Se a più POU è stato assegnato lo stesso valore per il 'global_init_slot'
attributo, l'ordine della loro inizializzazione rimane indefinito.
Il progetto include due elenchi di variabili globali GVL_1
e GVL_2
, così come il PLC_PRG
programma che utilizza le variabili di entrambe le liste. GVL_1
usa la variabile B
per inizializzare la variabile A
, che viene inizializzato in GVL_2
con 1000
.
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;
In questo caso, il compilatore stampa un errore perché GVL_2.B
viene utilizzato per l'inizializzazione GVL_1.A
prima di GVL_2 è stato inizializzato. Puoi evitarlo usando il global_init_slot
attribuire alla posizione GVL_2 prima di GVL_1 nella sequenza di inizializzazione.
In questo esempio, GVL_1 deve avere almeno un valore di slot di 49989 per ottenere la prima inizializzazione all'interno del programma. Ogni valore più basso ha lo stesso effetto:
GVL_2
{attribute 'global_init_slot' := '100'} VAR_GLOBAL B : INT := 1000; END_VAR
Usando GVL_2.C
nella parte attuativa del PLC_PRG
inoltre non è critico anche senza utilizzare un pragma perché entrambi i GVL vengono inizializzati prima del programma in entrambi i casi.
Per ulteriori informazioni, vedere: Global Init Slots