Atributo: global_init_slot
El pragma define el orden de inicialización de las POU y las listas de variables globales: las variables dentro de una GVL o una POU se inicializan de arriba a abajo. Si hay varias listas de variables globales, el orden de inicialización no está definido.
La inicialización no se aplica a la inicialización de valores literales, por ejemplo 1
, 'hello'
, 3.6
, o constantes de tipos de datos base. Sin embargo, debe definir el orden de inicialización usted mismo si existen dependencias entre las listas. Puede asignar una ranura de inicialización definida a una GVL o POU con el 'global_init_slot'
atributo.
Las constantes se inicializan antes que las variables y en el mismo orden que las variables. Durante la inicialización, las POU se ordenan según el valor de <slot>. Luego se genera el código de inicialización de las constantes y posteriormente el código de inicialización de las variables.
Sintaxis:
{attribute 'global_init_slot' := '<slot>'}
Insertar ubicación | El pragma actúa siempre sobre toda la GVL o POU y por tanto debe estar situado por encima del |
| Valor entero que define la posición en el orden de las llamadas El valor predeterminado para una POU (programa, bloque de funciones) es 50000. El valor predeterminado para una GVL es 49990. Un valor más bajo significa una inicialización anterior. |
Sugerencia
Si a varias POU se les ha asignado el mismo valor para el 'global_init_slot'
atributo, entonces el orden de su inicialización permanece indefinido.
El proyecto incluye dos listas de variables globales. GVL_1
y GVL_2
, así como el PLC_PRG
programa que utiliza las variables de ambas listas. GVL_1
utiliza la variable B
para inicializar la variable A
, que se inicializa en 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;
En este caso, el compilador imprime un error porque GVL_2.B
se utiliza para inicializar GVL_1.A
antes de GVL_2 ha sido inicializado. Puede evitar esto utilizando el global_init_slot
atribuir a la posición GVL_2 antes de GVL_1 en la secuencia de inicialización.
En este ejemplo, GVL_1 debe tener al menos un valor de ranura de 49989 para lograr la primera inicialización dentro del programa. Cada valor inferior tiene el mismo efecto:
GVL_2
{attribute 'global_init_slot' := '100'} VAR_GLOBAL B : INT := 1000; END_VAR
Utilizando GVL_2.C
en la parte de implementación de PLC_PRG
tampoco es crítico incluso sin usar un pragma porque ambos GVL se inicializan antes que el programa en cualquier caso.
Para más información, ver: Global Init Slots