变量有直接变量和符号变量两种。直接变量类似传统可编程控制器的操作数,它对应某一可寻址的存储单元。符号变量用符号表示变量,其存储地址由编译器在编译时指定。
直接变量
直接变量用百分数符号“%”开始,随后是位置前缀符号和大小前缀符号。如果有分级,则用无符号整数表示分级,并用小数点符号“.”分隔。如:%IX0.0
直接变量表示例子:
%IX1.3或者%I1.3 (*表示输入单元1的第3位*) %IW4 (*表示输入字4*) %MD48 (*表示双字,位于存储器48*) %Q* (*表示输出在一个未特定的单元*)
符号变量
符号变量是指用标识符表示的变量,变量的存储地址可以不需要在定义时指定,而是在编译时由编译器分配。可以用AT关键字给符号变量指定存储地址,如:
bBool AT %IX1 (*bBool存储在输入位1*) bBool2 AT %QX1 (*bBoo2存储在输出位1*) bBool3 AT %I* (*bBoo3存储在输出位置*) bBool4 AT %M* (*bBoo4存储在某个寄存器*)
变量属性
变量的属性值可以赋予变量相关的功能。
除了以上的属性,IEC 61131-3标准还为变量提供了以下附加属性。
变量声明
变量声明用于建立与数据类型的关系,即告诉编译器变量属于什么数据类型。可以在变量声明时指定变量初始值,如果不作指定,则变量被初始化为数据类型的默认值。变量声明的格式 如下:
<直接变量/符号变量> : <数据类型> ; <直接变量/符号变量> : <数据类型> := <初始值>;
变量赋值
使用赋值符号“:=”对变量赋值,如:
bBool := TRUE;
变量定义时,可赋值初值,如:
bBool : BOOL := TRUE; str : STRING(30) := ‘HWQ’; intArray : ARRAY [1..5] OF INT := [1,2,3,4,5];
变量的初始化
变量在系统启动时进行初始化,初始化时变量的值根据以下的准则确定:
- 变量具有的被保持的值。
- 用户在声明变量时规定的初始值。
- 变量所属数据类型提供的默认初始值。
电源掉电后再启动,称为系统热启动。此时,变量的值应根据是否由附加属性RETAIN来确定。如果变量具有属性RETAIN,则变量恢复掉电前的值。反之,变量初始值由用户规定的初始值或者该变量对应数据类型的默认初始值确定,称之为系统的冷启动。
对IEC61131-3变量的介绍到这里结束,有什么疑问大家可以在评论区留言