持久性变量在声明部分VAR_GLOBAL RETAIN PERSISTENT
持久性全局变量列表中声明。对于在持久性编辑器之外使用PERSISTENT
关键字标记的变量,会在那里添加实例路径。
从CODESYS 3.3.0.1 版开始,使用PERSISTENT RETAIN
声明变量与使用RETAIN PERSISTENT
或PERSISTENT
声明变量的效果相同。
全局持久性变量列表中的声明语法PersistentVars
:
VAR_GLOBAL PERSISTENT RETAIN <identifier> : <data type> (:= <initialization>)?; <instance path to POU variable> END_VAR
POU 中的声明语法
<scope> PERSISTENT RETAIN <identifier> : <data type> ( := <initialization> )?; // ( ... )? : Optional END_VAR <scope> : 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
功能块FB_A
中的声明:
FUNCTION_BLOCK FB_A VAR_INPUT END_VAR VAR_OUTPUT END_VAR VAR PERSISTENT iPersistentCounter_A : INT; END_VAR
程序中的声明PLC_PRG
:
VAR fb_A1 : FB_A; END_VAR
可能的申报地点
直接在持久性全局变量列表中 |
该变量是持久变量,位于受保护的内存区域。 |
在持久性变量列表中有实例路径的程序中本地运行 在功能块中本地使用,并在持久性变量列表中使用实例路径 |
变量具有持久性,位于受保护内存区和内存中(双重分配)。 |
仅在本地程序中使用 仅在本地功能块中 |
该变量不持久。信息窗口中将显示警告。 提示单击“Declarations Add All Instance Paths” 将变量导入持久变量列表。 |
局部函数 |
本声明无任何效力。变量不持久。 |
在持久性编辑器中,单击“Declarations Add All Instance Paths” (如果本地变量标有PERSISTENT
)。
尽可能避免用PERSISTENT
标记函数块中声明的变量。这是因为功能块实例完全存储在剩余内存中,而不仅仅是标记变量。