变量的类型
IEC 61131-3标准定义了9种不同的变量类型,表所示为变量的类型关键字和它们的用法。
变量的附加属性
IEC 61131-3标准在定义变量的同时,也定义了变量的附加属性(或限定符),并通过它们将附加的特性赋给变量。变量的附加属性在IEC 61131-3标准中,并非所有变量类型都具有附加属性。应用附加属性要遵循下列准则。
(1)在VAR,VAR_INPUT,VAR_OUTPUT,VAR_GLOBAL段内声明的变量允许使用附加属性RETAIN和NON_RETAIN。
(2)当功能块或程序实例中使用附加属性RETAIN和NON_RETAIN时,所有实例的成员都被处理为具有RETAIN和NON_RETAIN属性。除非成员本身是功能块,或者在功能块或程序类型的声明中明确被作为RETAIN和NON_RETAIN使用。
(3)在VAR_CONFIG实例中允许使用附加属性RETAIN和NON_RETAIN。这时,所有该结构变量的成员,包括嵌套结构的成员都具有相应的附加属性。
(4)当没有说明附加属性的变量初始化时,应根据热启动特性确定其初始值。
(5)附加属性CONSTANT说明该变量是不允许改变其值的特殊变量。因此,同时对某个变量附加CONSTANT和RETAIN属性是没有必要的。这时,只需用CONSTANT的附加属性。在掉电后的热启动时,该变量仍可保持该常数值。
(6)对VAR和VAR_GLOBAL变量,可以附加CONSTANT属性。
(7)上升沿和下降沿的边沿检测属性只对输入变量有效,读/写和只读属性只对存取变量有效。
(8)一般附加属性的关键字是紧跟在变量关键字后的。例如,VAR CONTANT:VAR_OUTPUT RETAIN等。但上升沿、下降沿的边沿检测属性及读/写、只读属性的关键字是在变量数据类型后的。例如,VAR RI:REAL_EDGE;VAR RW:READ_WRITE。
属性READ_ONLY和READ-WRITE是专为变量类型VAR_ACCESS保留的。在配置层,不允许对VAR_ACCESS使用其他限定符。
变量的初始化
变量在资源或配置启动时进行初始化,给变量赋初始值。初始化后变量的值根据下列准则确定:
(1)当系统停止初始化时,变量具有的被保持的值,如再启动时为掉电前的保持值;
(2)用户规定的初始值;
(3)根据变量的有关数据类型提供的约定初始值。
电源掉电后的再启动,称为系统的热启动。这时,变量的值应该根据是否有附加属性RETAIN来确定。如果具有该属性,则变量恢复到掉电前的值;如果没有该属性,则称为系统的冷启动。这时,变量初始值由用户规定的初始值或该变量对应的数据类型的默认初始值(当没有用户规定初始值时)确定。这表明,变量初始值取值有优先级,RETAIN提供最高优先级,系统默认初始值提供最低优先级。
需要注意的是,有外部输入的变量不能由用户规定其初始值。例如,VAR_INPUT、VAR_EXTERNAL段声明的变量不能赋予初始值。
变量声明
在IEC 61131-3标准中,变量用于初始化、处理和储存用户数据。变量声明用于建立变量与它的数据类型之间的关系,在变量声明中可以对一些变量设置用户的初始值,变量声明和初始化在变量声明段同时完成。
变量的声明以表的变量类型关键字开始,它表示该变量段内说明的变量类型,中间是变量声明段本体,变量声明段以END_VAR结束。具有相同数据类型的变量可以集中声明。
在每一个程序组织单元(POU)的开始部分,必须对变量予以声明,这就包括对变量数据类型、变量属性(如电池后备、初始值或物理地址赋值等)的定义。
对不同的变量类型,POU变量的声明分为不同的段/声明块,每个段/声明块对应于一种变量类型,并可以包括一个或多个变量,且相同变量类型的块的次序和数量可以自由决定。
(1)局部布尔变量
VAR VarLocalB1,VarLocalB2 : BOOL;END_VAR(*局部布尔变量*)
(2)调用接口(输入参数)VAR_INPUT Varln1,Varln2 : REAL; END_V AR(输入变量)
V AR_IN_OUT VarInOut1,VarInOut2 : UNIT; END_VAR(输入/输出变量)
(3)返回值(输出参数)
VAR_OUTPUT VarFunOut : TNT; END_V AR(*输出变量*)
(4)全局接口(全局/外部变量和存取路径)
VAR_EXTERNAL VarExt1 : WORD;END_VAR(*外部,来自其他POU*) VAR_GLOBAL VarGlob1 : WORD;END_VAR(*全局,用于其他POU*) VAR_ACCESS V arAccess1 : WORD;END_VAR(*到配置的存取路径*)
除了文本形式定义变量以外,对于POU接口的简单变量的声明,IEC 61131-3标准提供了图形表达的定义方式。但必须说明的是,对于数组数据类型,对变量或初始值的声明,必须使用文本化的表达方式。