Skip to main content

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 VAR_GLOBAL o declaración POU.

<slot>

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.

ejemplo 267. Ejemplo

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