EcoStruxure Machine Expert 1.1版本不支持M258、LMC058和LMC078控制器。

Attribute global_init_slot

概述

pragma {attribute 'global_init_slot'} 定义 POU 或全局变量列表的初始化顺序。

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

如果有若干全局变量列表可用,则不定义初始化顺序。

初始化顺序与字面值(如 1'hello'3.6)无关,与基本数据类型的常量也无关。然而,如果不同列表之间存在依赖关系,则必须自己定义初始化顺序。为此,您可以使用 attribute global_init_slot 为 GVL 或 POU 分配定义的初始化时隙。

语法

{attribute 'global_init_slot' := '<时隙>'}

将<时隙>替换为定义在初始化顺序中的位置的整数值。POU(程序、功能块)的缺省值为 50,000。GVL 的缺省值为 49,990。值越小,初始化就越早。如果若干 POU 或 GVL 的属性 global_init_slot 的值相同,则其初始化顺序保持为未定义。这将在消息视图生成类别中作为检测到的程序错误而被指示出来。

pragma {attribute 'global_init_slot'} 适用于整个 GVL 或 POU,因此必须位于 VAR_GLOBAL 或 POU 声明上方。

示例

示例中包含 2 个变量列表 GVL_1 和 GVL_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。为避免这种情况,可使用 attribute global_init_slot,以便在初始化顺序中,将 GVL_2 置于 GVL_1 之前。

GVL_2 的时隙值不得大于 49989,这样才能最早在程序中初始化。

GVL_2

{attribute 'global_init_slot' := '100'}
VAR_GLOBAL
  B : INT := 1000;
  C : INT := 10;
END_VAR

您甚至可以在没有 pragma 的 PLC_PRG 的实现部分中使用 GVL_2.C,因为在两种情况下,两个 GVL 都在程序之前被初始化。