保持变量定义

支持的数据类型

以下数据类型不能被存储:

  • 指针
  • 接口
  • 联合体
  • WSTRING
  • 常量
  • 列表中的数据类型数组

其他所有的类型都支持。包含枚举,附属数据类型,数组的数组以及多维数组:

ARRAY[0..9] OF ARRAY[5..6, 7..8, 9..10] OF INT

属性 'ac_persist'

属性 'ac_persist' 可以用于

  • 变量
  • 结构体实例
  • 功能块实例
  • 结构体成员
  • 功能块成员

{attribute 'ac_persist' [ := '<PERSISTENCE_GROUP>']}

PERSISTENCE_GROUP是保留组的名称。必须通过 IEC 进行定义。如果没有保留组,相关表达式必须通过属性 'ac_persist_set_default_group'在之后进行定义。

如果一个结构体实例或者功能块实例表标记为“保持型”并且定义至少一个成员也被标记为“保持”那么将会出现一个错误信息。

保持实例的示例

变量t被分配给保持组PROCESS。所有的成员都将作为保持变量被存储。

PROGRAM PLC_PRG
VAR
    {attribute 'ac_persist' := 'PROCESS'}
    t : TON;
END_VAR
 

功能块保持成员示例

成员 iNumIOs被分配给一个保持组CONFIG。这个成员将会在功能块所有实例中被保存为保持变量(如果没有明确被属性'ac_persist_exclude'定义)。

FUNCTION_BLOCK FB
VAR
    {attribute 'ac_persist' := 'CONFIG'}
    iNumIOs : INT := 0;
END_VAR
 
属性 'ac_persist_set_default_group'

如果这个组名在属性'ac_persist'中丢失,组必须通过属性'ac_persist_set_default_group'在连接的功能块实例或者结构体实例中进。属性同样可以对功能块成员进行设定。通过'ac_persist_set_default_group'定义的隐藏组将会用于变量。

允许使用'ac_persist_set_default_group''ac_persist' 或者'ac_persist_exclude'。在这种情况下当在代码编译时会有一个错误信息。

默认值示例

FUNCTION_BLOCK FB_Util
VAR
    {attribute 'ac_persist'} // no group
    i : INT := 0;
END_VAR
 
PROGRAM PLC_PRG
VAR
    {attribute 'ac_persist_set_default_group' := 'PROCESS'}
    fbu1 : FB_Util;

    {attribute 'ac_persist_set_default_group'´ := 'CONFIG'}
    fbu2 : FB_Util;
END_VAR
 
属性 'ac_persist_exclude'

属性'ac_persist_exclude'用于处理位于保持存储部分的变量,无论这个变量是位于结构体中还是功能块中被定义为“保持”类型。如果在定义部分没有存在的保持成员,那么在编译过程中将会出现一个错误信息。

处理变量示例

PROGRAM PLC_PRG
VAR
    {attribute 'ac_persist_exclude'}
    fb1 : FB;
END_VAR