变量:PERSISTENT
持久变量在声明部分声明 VAR_GLOBAL RETAIN PERSISTENT
在持久全局变量列表中。对于标有 PERSISTENT
持久性编辑器之外的关键字,实例路径被添加到那里。
提示
作为 CODESYS V3.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
可能的申报地点 | 描述 |
---|---|
直接在持久化全局变量列表中 | 该变量是持久的并且位于受保护的内存区域中。 |
在持久变量列表中具有实例路径的程序中本地 在持久变量列表中具有实例路径的功能块中本地 | 该变量是持久的并且位于受保护的内存区域和内存中(双重分配)。 |
仅在本地程序中 仅在功能块中本地 | 该变量不是持久的。消息窗口中会显示一条警告。 提示点击 将变量导入持久变量列表。 |
在函数中本地 | 这种声明没有任何作用。该变量不是持久的。 |
提示
在持久性编辑器中,单击 PERSISTENT
.
提示
尽可能避免将变量标记为 PERSISTENT
它们在功能块中声明。这是因为功能块实例完全存储在剩余内存中,而不仅仅是标记的变量。