.
‘global_init_slot’属性
.
.

此编译附注定义功能块或全局变量列表的初始化顺序。

列表中的变量(GVL或POU)从上到下初始化。

如果存在多个全局变量列表,则未定义初始化顺序。

初始化不适用于文字值的初始化,例如1“hello”3.6或基本数据类型的常量。但是,如果列表之间存在依赖关系,则必须自己定义初始化顺序。您可以使用“global_init_slot”属性将已定义的初始化插槽分配给GVL或POU。

常量在变量之前初始化,且初始化顺序与变量相同。在初始化过程中,POU将根据<slot>的值进行排序。然后生成用于初始化常量的代码,之后生成用于初始化变量的代码。

语法

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

<slot>: 整数值,用于定义呼叫顺序中的位置。POU(程序,功能块)的默认值为50000。GVL的默认值为49990。较低的值表示较早的初始化。警告:如果多个块或 GVL 的'global_init_slot'属性收到相同的值,则初始化顺序将保持不确定。

插入位置:编译附注始终会影响整个GVL或POU,因此它必须位于VAR_GLOBAL或POU声明的上方。

.

.示例

该程序包括两个全局变量列表GVL_1GVL_2,以及一个PLC_PRG程序,该程序使用两个列表中的变量。GVL_1使用变量B初始化变量A,该变量在GVL_2中初始化,值为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;

 

.

 

.

 

在这种情况下,编译器将打印错误,因为GVL_2.B用于在初始化GVL_2之前初始化GVL_1.A。您可以通过使用global_init_slot属性在初始化序列中将GVL_2放在GVL_1之前来防止这种情况。

在此示例中,GVL_1必须至少具有49989的插槽值,以便在程序内实现最早的初始化。每个较低的值都具有相同的效果:

.GVL_2 {attribute 'global_init_slot' := '100'} VAR_GLOBAL B : INT := 1000; END_VAR


 

注意:即使在不使用编译指示的情况下,在PLC_PRG的实现部分中使用GVL_2.C也不是至关重要的,因为在任何一种情况下,两个GVL均在程序之前进行了初始化。