El pragma {attribute 'global_init_slot'} define la secuencia de inicialización de POU o listas de variables globales.
Las variables de una lista (GVL o POU) se inicializan en sentido descendente.
Si hay disponibles diversas listas de variables globales, no se definirá la secuencia de inicialización.
La secuencia de inicialización es irrelevante para los valores literales, como por ejemplo 1, 'hello', 3.6, o para constantes de tipos de datos base. No obstante, si existen dependencias entre las diferentes listas, deberá definir la secuencia de inicialización por su cuenta. Para ello, puede asignar un intervalo de inicialización a una GVL o a una POU mediante el attribute global_init_slot.
{attribute 'global_init_slot' := '<intervalo>'}
Sustituya <intervalo> por un valor entero que defina la posición del orden de inicialización. El valor predeterminado para una POU (programa, bloque de funciones) es 50 000. El valor predeterminado para una GVL es 49 990. Un valor inferior provoca una inicialización precoz. Cuando se trate de varias POU o GVL que transmiten el mismo valor para el atributo global_init_slot, la secuencia de su inicialización quedará sin definir. Esta circunstancia quedará indicada como error de programación detectado en la categoría Compilación de la vista Mensajes.
El pragma {attribute 'global_init_slot'} se aplica a toda la GVL o POU y debe encontrarse por tanto encima de la declaración de VAR_GLOBAL o de la POU.
En el ejemplo se incluyen 2 listas de variables globales, GVL_1 y GVL_2, además de un programa PLC_PRG que utiliza variables de ambas listas.
GVL_1 utiliza la variable B para inicializar una variable A que se inicializa en la GVL_2 con un valor de 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;
Al compilar este ejemplo, se mostrará un error de programación en la categoría Compilación de la vista Mensajes, dado que GVL_2.B se utiliza para inicializar GVL_1.A antes de que se inicialice GVL_2. Para evitarlo, utilice el attribute global_init_slot para colocar GVL_2 antes de GVL_1 en la secuencia de inicialización.
GVL_2 debe tener un valor de intervalo de 49989 o inferior para lograr la inicialización más temprana dentro del programa.
GVL_2:
{attribute 'global_init_slot' := '100'}
VAR_GLOBAL
B : INT := 1000;
C : INT := 10;
END_VAR
Puede incluso utilizar GVL_2.C en la parte de implementación de PLC_PRG sin pragma, ya que ambas GVL se inicializan antes del programa en cualquier caso.