.

保持变量-PERSISTENT

.
.

保持变量在保持全局变量列表的声明部分VAR_GLOBAL RETAIN PERSISTENT中声明。对于在保持编辑器外部用PERSISTENT关键字标记的变量,实例路径将添加到该变量中。

 

从CODESYS版本3.3.0.1开始,使用PERSISTENT RETAIN进行变量声明与使用RETAIN PERSISTENTPERSISTENT具有相同的作用。

.全局保持变量列表PersistentVars中的声明语法:


VAR_GLOBAL PERSISTENT RETAIN
    <标识符>: <数据类型> (:= <初始化>)?;
 <POU变量的实例路径>
END_VAR
 

.POU中声明的语法


<范围> PERSISTENT RETAIN
    <标识符>: <数据类型> ( := <初始化> )?; // ( ...)? : 可选的
END_VAR
<范围> : VAR | VAR_INPUT | VAR_OUTPUT | VAR_IN_OUT | VAR_STAT | VAR_GLOBAL

 

不允许使用AT关键字分配输入,输出或内存地址。

 

永远不要在保持变量列表中使用POINTER TO数据类型。如果再次下载该应用程序,其地址可能会更改。消息窗口中显示了相应的编译器警告。

 

如果您经常更改剩余变量的名称或数据类型,则最好仅使用RETAIN关键字将它们声明为保持变量。

提示!

避免插入实例路径,因为在这种情况下会使用两倍的内存,并且可能会出现更高的周期时间。相反,在保持变量列表中声明变量。

.
.

.示例

.在保持变量列表PersistentVars中的声明:


{attribute 'qualified_only'}
VAR_GLOBAL PERSISTENT RETAIN
    g_iCounter : INT;
    // Generated instance path of persistent variable
    PLC_PRG.fb_A.iPersistentCounter_A: INT;
END_VAR
 

.Declaration in the function block FB_A:


FUNCTION_BLOCK FB_A
VAR_INPUT
END_VAR
VAR_OUTPUT
END_VAR
VAR PERSISTENT
    iPersistentCounter_A : INT;
END_VAR
 

.Declaration in the program PLC_PRG:


VAR
    fb_A1 : FB_A;
END_VAR
 
.
可能的声明位置
.

直接在保持全局变量列表中

此变量是保持变量,位于受保护的内存区域中。

在保持变量列表中具有实例路径的程序中本地

在功能块中的本地,在保持变量列表中具有实例路径

此变量是保持变量,位于受保护的内存区域和内存中(双重分配)。

仅在程序本地

仅在功能块中本地

此变量不是持保持变量。消息窗口中显示警告。

提示:单击声明 ➔ 添加所有实例路径以将变量导入到持久变量列表中。

局部地在一个函数中

这个声明没有任何作用。此变量不是持保持变量。

 

如果局部变量标记有PERSISTENT,则在保持编辑器中,单击声明 ➔ 添加所有实例路径

 

尽可能避免使用PERSISTENT标记在功能块中声明的变量。这是因为功能块实例完全存储在剩余内存中,而不仅仅是标记的变量。