可以向变量类型的声明中添加下列属性关键字以指定范围:
oRETAIN:请参阅保留变量
oPERSISTENT:请参阅持久变量
oCONSTANT:请参阅常量 - CONSTANT和类型化文字
剩余变量可以在常规的程序运行期内保留其值。将其声明为保留变量,甚至声明为更严格的持久变量。
该声明确定在控制器进行复位、下载或重新启动的情况下,其余变量的持久程度。在应用程序中,主要是使用这两种剩余标志的组合(参阅持久变量)。
注意: 可以使用与 VAR PERSISTENT RETAIN 或 VAR RETAIN PERSISTENT 相同的方法来解释 VAR PERSISTENT 声明。
注意: 使用命令添加所有实例路径将声明为持久的变量放入持久列表对象。
声明为保留变量的变量将存储在非易失性存储器区域中。为了声明该类变量,可在 POU 的声明部分或全局变量列表中使用关键字 RETAIN。
示例
VAR RETAIN
iRem1 : INT; (* 1. Retain variable*)
END_VAR
保留变量将一直保持其值,即使是在控制器意外关闭之后以及在控制器正常重置电源后(或者当执行在线命令热复位时)。在程序重新启动时,将进一步处理保留的值。其他(非保留)变量以新方式初始化:要么使用其初始化值,要么使用其默认初始化值(如果未声明任何初始化值)。
例如,在以下情况下,您可能希望使用保留值:某个操作(如,生产机器中的数量统计)在断电后应继续运行。
但是,当执行在线命令初始值复位时,保留变量会重新初始化,与持久变量不同,持久变量是在执行在线命令冷复位时或者在应用程序下载期间进行重新初始化。
注意: 仅定义为 VAR RETAIN 的特定变量才存储在非易失性存储器中。但是,在函数中定义为 VAR RETAIN 的本地变量不会存储在非易失性存储器中。在功能中以本地方式定义 VAR RETAIN 没有任何效果。
在保留程序段 (VAR_RETAIN) 中使用系统配置库中的接口或功能块将导致系统异常,可能使控制器不可操作,从而需要重启。
|
|
|
意外的设备操作 |
|
o切勿在保留程序段 (VAR_RETAIN) 中使用 SystemConfigurationItf 库以外的接口。 o切勿在保留程序段 (VAR_RETAIN) 中使用 SystemConfiguration 库以外的功能块。 |
|
不遵循上述说明可能导致人员伤亡或设备损坏。 |
注意: 库 SystemConfigurationItf 和 SystemConfiguration 仅适用于 PacDrive 控制器(PacDrive LMC Eco、PacDrive LMC Pro/Pro2)。
持久变量以关键字 VAR_GLOBAL PERSISTENT (PERSISTENT) 来标识。仅当执行在线命令初始值复位时,才会重新初始化持久变量。与保留变量相比,持久变量的值在下载后保持不变。
注意: 切勿与 VAR PERSISTENT 一起使用 AT 声明。
应用示例:
运行时间计数器,即使在电源中断或下载之后也应继续统计。请参阅剩余变量行为一览表。
只能在对象类型持久变量的特殊全局变量列表中声明持久变量,这一列表将被分配给某个应用程序。只能向应用程序中添加一个此类列表。
注意: 包含 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
注意: 持久变量只能在持久列表对象中声明。如果在其他位置中声明持久变量,则持久变量的行为与保留变量的行为类似,并且在消息视图中将这些持久变量报告为检测到编译错误。(保留变量可以在全局变量列表或 POU 中进行声明。)
在每次重新加载应用程序时,都将比对项目的持久变量列表来检查控制器上的持久变量列表。控制器上的列表由应用程序来识别。如果出现不一致性,系统将提示您重新初始化应用程序的所有持久变量。不一致性可能是由于重命名或删除了列表中的现有声明,或者对其进行了其他修改。
注意: 请仔细考虑持久变量列表中声明部分的任何修改以及对重新初始化相关结果所造成的影响。
只能在列表的结尾添加新声明。在下载期间,这些声明将被检测为新声明,并且不需要重新初始化完整列表。如果您修改某一变量的名称或数据类型,这会被当成新的声明进行处理并会在下一次在线修改或下载时引起变量的重新初始化。
查询您的控制器对应的编程指南 提供了与剩余变量的行为有关的更多信息。
常量由关键字 CONSTANT 来标识。可以在本地或全局声明常量。
语法
VAR CONSTANT<identifier>:<type> := <initialization>;END_VAR
示例
VAR CONSTANT
c_iCon1:INT:=12; (* 1. Constant*)
END_VAR
有关可能常量的列表,请参阅操作数一章。
基本上,在使用 IEC 常量时,将使用最小的可能数据类型。如果必须使用其他数据类型,则可以通过类型化文字来实现,而不必显式声明常量。因此,将为常量提供一个用于确定类型的前缀。
语法
<类型>#<文字>;
|
<类型> |
指定所需的数据类型 可用的条目:BOOL, SINT, USINT, BYTE, INT, UINT, WORD, DINT, UDINT, DWORD, REAL, LREAL 请以大写字母书写类型。 |
|
<文字> |
指定常量 输入属于 <类型> 下指定的数据类型的数据。 |
示例
iVar1:=DINT#34;
如果常量无法转换在不丢失数据的情况下转换为目标类型,则会发出一条消息。
只要能够使用正常常量的场合中,都可以使用类型化文字。
只要激活了默认设置替换常量 (文件 > 项目设置 > 编译选项),则在线模式中的常量将在声明或监视视图中包含
符号(该符号在值列中值的前面)。例如,在此情况下,无法通过强制或写入来访问常量。