保留变量用关键字RETAIN来识别,这些变量保持它们的值即使是在控制器的非正常关闭时和正常的关闭和其中的一个控制器或在命令'联机' '复位'时。当程序重新运行时,存储的值将进行进一步的处理。一个具体的例子是生产线上的饼形计数器在电源故障后重新开始计数。
所有其它的变量从新初始化,不是用它们的初始化值或标准初始化的值。
与永久变量相反,保留变量在程序的一个新的下载时重新初始化。
永久变量通过关键字PERSISTENT来识别。不象保留变量,这些变量在一个重新下载或在执行命令“联机”'复位 (初始值)'或“Online”'复位 (冷)'之后保留它们的值,但在关闭和控制器开不保留它们的值,因为它们不保存在保留区。如果永久变量需要在控制器的非正常关闭后保留它们的值,那么它们必须另外定义为保留变量。永久保留变量的一个具体例子是一个操作定时器在电源故障之后重新定时。
例如:
VAR RETAIN
rem1:INT; (* 1. 保持变量*)
END_VAR
注意:
1.如果一个局部变量定义为保留变量,变量将保存在保留区(象一个全局保留变量)
2.如果在功能模块中的一个局部变量定义为保留变量,功能模块的整个实例将会保存在保留区(POU的所有数据),因而只有定义的保留变量才处理为保留变量。
3.如果在功能中的局部变量定义为保留变量,这不起任何作用,变量将不保存在保留区内!如果一个局部变量在功能中定义为永久变量,这也不起任何作用。