剩余变量-保持,持续

提示!

如果打开了一个 V2.3 project 的项目,保留变量的声明依然有效,但是永久变量的声明需要重新建立,见 “永久变量”: 还要建立一个自己的永久全局变量列表。

提示!

不要将 AT 声明 与 "VAR RETAIN" 或者"VAR PERSISTENT 合并在一起使用!

见如下内容:

“保留变量”

“永久变量”

“剩余变量行为一览表”

保留变量

被声明为“保留”的变量是始终独立于PLC的,但是一般会在一个单独的内存区域。在项目内他们的POU或者全局变量列表声明关键词是 RETAIN

例子:

VAR RETAIN

 iRem1 : INT; (* 1. Retain variable*)

END_VAR

在控制器意外关闭,或者正常开关控制器的情况下,保留变量都保持其值(或在线命令 热复位.。在重新启动程序时存储的值将被进一步处理。无论是以它们的初始值,或是以标准初始化,所有其它变量都重新被初始化。

应用举例:生产设备中的 工件计数器,电源故障后应继续计数。

但保留变量在 原始复位被重新初始化 - 对比于持久变量 - 在 冷复位 和应用程序下载。

保留属性可以结合永久属性。见下图: “剩余变量行为一览表”

提示!

如果一个局部变量在程序中被声明为VAR RETAIN,那么 这个变量肯定会存储在保留区域(如同全局保留变量)。

如果一个 功能块中的局部变量被声明为VAR RETAIN,那么此功能块的整个实例都会被保存在保留区域(POU的所有数据),据此只有声明了的保留变量会被做保留处理。

如果一个函数中的局部变量被声明为VAR RETAIN是无效的。变量不会被保存在保留区域内。如果一个函数中的局部变量被声明为PERSISTENT也是无效的 !!

 

永久变量

永久变量可通过关键词“PERSISTENT”识别 (VAR_GLOBAL PERSISTENT),只能在 原始复位中重新初始化。对比于保留变量,他们在下载后保留其值。操作时间计数器就是永久变量的一个应用实例,它在断电或者下载后依然继续工作。见如下: “剩余变量行为一览表”

永久变量处理方式如下所示,它是不同于 CoDeSys V2.3 :   

永久变量只能在 一个对象类型的具体全局变量列表中 被声明, 分配给一个 应用程序。每个应用程序只能有一个这样的列表。

与V3.3.0.1一样,以“VAR_GLOBAL PERSISTENT”作声明与“VAR_GLOBAL PERSISTENT RETAIN”或者“VAR_GLOBAL RETAIN PERSISTENT”的声明效果相同。

与保留变量一样,永久变量也存储在一个单独的内存空间。

例子:

VAR_GLOBAL PERSISTENT RETAIN

 iVarPers1 : DINT; (* 1. Persistent+Retain Variable App1 *)

 bVarPers : BOOL;  (* 2. Persistent+Retain Variable App1 *)

END_VAR

提示!

目前只有全局永久变量。

目标系统必须为每个程序的永久变量列表提供一个 单独的内存区域  。

在每一个重新-加载的应用程序中, PLC上的永久变量列表都会针对此项目被核查。在PLC上的列表通过应用名称进行识别。在不一致 的情况下,系统会提示用户r重新初始化所有的应用程序的永久变量。不一致性的产生可能是因为重命名或删除的列表中的现有的声明或对已有列表声明的其他修改。

提示!

请认真考虑永久变量列表声明部分 的任何改动以及 由此造成的重新初始化的影响 !

新的声明只能加在列表的最后。下载声明会被作为“新动作”进行检测,不需要对整个列表进行初始化。

剩余变量行为一览表

x = 保留值    - = 初始值

在线命令之后

VAR

VAR RETAIN

VAR PERSISTENT VAR RETAIN PERSISTENT VAR PERSISTENT RETAIN

热复位 <application>

-

x

x

冷复位<application>

-

-

x

原始复位 <application>

-

-

-

下载<application>

-

-

x

在线改变 <application>

x

x

x

重启 PLC

-

x

x