|
在codesys 中,pragma 定义了 POU 和全局变量列表的初始化顺序:GVL 或 POU 中的变量从上到下初始化。如果有多个全局变量列表,则不定义初始化顺序。 但是,如果列表之间存在依赖关系,则必须自己定义初始化顺序。您可以将定义的初始化槽分配给GVL 或 POU 'global_init_slot' 属性。
例如:GLV中的NowTime引用POU中的stdNow
直接编译时会出现报错,这是因为 GVL 和 POU 在编译时都分配有一个称为“槽号”的 ID,该编号决定了它们的初始化顺序。默认情况下,POU 的槽号为 50000,而 GVL 的槽号为49910。由于槽号较小的对象会先被编译初始化,而 GVL 中的变量 NowTime 依赖于定义在 POU 中的 stdNow,因此编译时会因依赖顺序错误而报错。
通过添加 global_init_slot 属性,可以手动调整其编译初始化顺序,从而避免此类编译错误。
句法: {attribute 'global_init_slot' := '<slot>'} 插入位置 | pragma 始终作用于整个 GVL 或 POU,因此它必须位于 VAR_GLOBAL 或 POU 声明。 | <slot> | 整数值,定义调用顺序中的位置 POU(程序、功能块)的默认值为 50000。GVL 的默认值为 49990。较低的值意味着较早的初始化。 |
|