直接跳到内容

变量

什么是变量

变量来源于数学,是计算机语言中能储存计算结果或能表示值的抽象概念。变量可以通过变量名访问,为了在数据运算过程中使用、标识这些变量,每个变量都需要有一个名字,即变量名。控制算法组态中所用到的变量的名称和数据类型必须是事先明确的,这就需要首先对用到的变量进行定义,这个定义过程叫做变量声明。

变量分类

根据变量地址、数据类型、掉电保持、常量、作用域等属性的不同,对变量可以进行如下划分:如下图所示:

img

  • 地址:有直接地址属性的变量和无直接地址属性的变量
  • 数据类型:标准类型变量、自定义类型变量、功能块变量。

​ 标准类型包括:布尔型(BOOL)、字节型(BYTE)、字型(WORD)、双字型(DWORD)、长字型(LWORD)、短整型(SINT)、无符号短整型(USINT)、整型(INT)、长整型(LINT)、无符号整型(UINT)、无符号长整型(ULINT)、32位整型(DINT)和无符号32位整型(UDINT)、64位整型(LINT)和无符号64位整型(ULINT);另外还有实型(REAL)、长实型(LREAL)、字符串(STRING)、数组(ARRAY)和时间日期型(TIME、TIME_OF_DAY、DATE、DATE_AND_TIME、LTIME、LTIME_OF_DAY、LDATE、LDATE_AND_TIME)

​ 自定义类型包括:结构体(STRUCT)、枚举(ENUM)、数组别名(ARRAY)

​ 功能块实例变量:作为功能块的实例,其保留有独立的功能块数据映像,使功能块多次调用时其多个实例可以保留各自的数据副本。

  • 掉电保持:有掉电保持属性的变量和无掉电保持属性的变量。具有掉电保持属性可以时数据在控制器掉电后重新上电时,其数据值恢复到掉点前的数值。
  • 常量:有常量属性的变量和无常量属性的变量。有常量属性的变量在只能作为右值参与逻辑运算。
  • 全局变量和局部变量:全局变量可以在整个设备中使用,但是同一设备中的全局变量不可重名;局部变量只可以在所属的POU中使用,在不同POU中的局部变量可以重名。
  • 网络变量:为可以进行网络间数据通信的变量。
  • 注释:变量注释的最大长度为256字节。

变量命名

变量的区分与识别主要靠变量名,变量的命名需要符合命名规范。

变量名的命名规范

  • 变量名由字母、数字和下划线组成,支持中文变量名,不得包含空格或特殊字符
  • 变量名由字母或下划线开头
  • 变量名不能是关键字等系统保留字
  • 变量名大小写不敏感。例如,Varname和VARNAME为相同的变量
  • 变量名的最大长度不可超出软件配置的限制

变量定义

变量在使用前首先需要对变量进行定义。变量的定义主要有手动定义和自动声明两种方式:

手动定义变量

手动定义变量是指在变量定义窗口,通过右键菜单或快捷键来定义变量的方式,其操作入口如下:

  1. 在变量定义视图的空白处,右键点击,选择右键菜单 插入

2.在变量定义视图的空白处,右键点击,输入快捷键 Ctrl + I

如下图所示:

img

操作插入变量命令后,会在当前变量定义列表的最后添加一个定义的变量,名称默认为"global+n"。

双击变量的名称栏,将变量名改为"globalVarBool02",修改变量的各属性为设定值,即完成变量的手动定义:

img

自动声明变量

手动定义变量是指在程序逻辑编辑过程中,当出现一个符合变量名规则的新标识符时,系统会自动弹出对话框,提示用户进行变量定义。如下图所示:

img

如上图,当在编辑程序逻辑"newName := 100;" 其中"newName"符合标识符规则并且未在设备中定义过,那么在光标离开其所在行时,软件将会自动识别出这种情况自动弹出右侧的"自动声明"对话框。在该对话框中,变量的名称是不可修改的。默认情况下,变量会定义在当前POU中;如需要将变量定义为全局变量,那么需要打开“范围”下拉框选择VAR_GLOBAL,之后在"对象"下拉框选择需要的全局变量组即可。

依次输入变量的各属性,点击确定,可完成变量的自动定义。

如在程序编辑区域进行多行编辑,当焦点切换后有多个标识符被识别,则会依次弹出多个"自动声明"对话框提示用户进行变量定义。

在程序编辑区,如需要对变量的属性进行修改,也可通过打开变量声明对话框的方式来操作:

选中程序编辑区中变量文本(文本语言)或变量对应的图形元件(图形语言),点击Shift + F2 ,可再次打开该变量的自动声明对话框,更新变量属性后点击确定,完成对变量属性的修改。

img

全局变量与局部变量

根据作用域的不同,变量分为全局变量和局部变量两类。

全局变量

全局变量是定义后可以在整个设备中使用,同一设备中的全局变量不可重名。

全局变量需要定义在全局变量组中。

定义全局变量:

全局变量的定义方法可参见变量定义部分内容

img当全局变量与局部变量重名时,程序中优先识别局部变量,即此时访问的非全局变量,而是同名的局部变量。

局部变量

局部变量是在POU中定义的变量,与全局变量的作用域不同:

  1. 对于PRG型的POU,其局部变量可以通过"POU名.变量名"的在本POU外访问。
  2. 对于FB和FUN型的POU,其局部变量不可在本POU外访问。

局部变量类别:

按照用途的不同,局部变量(PRG型POU除外)可以分:

输入变量(VAR_INPUT):本功能块或函数通常以输入变量作为输入进行逻辑计算;

输出变量(VAR_OUTPUT):作为本功能块逻辑运算结果向外部的输出;

输入输出变量(VAR_INOUT):同时兼有输入变量和输出变量的特性,外部变量调用本功能块时是引用方式访问调用,功能块运算返回后将影响输入输出变量连接的外部变量的值;

内部变量(VAR):内部变量不与外部变量连接,只在它所属的块中有效,通常作为逻辑运算时所需要的临时变量。

  1. 对于FB型的POU,其局部变量可以是输入变量(VAR_INPUT)、输出变量(VAR_OUTPUT)、输入输出变量(VAR_INOUT)或内部变量(VAR)。
  2. 对于FUN型的POU,其局部变量可以是输入变量(VAR_INPUT)、输入输出变量(VAR_INOUT)或内部变量(VAR)。

img

定义局部变量:

1.FB定义局部变量

打开FB型POU,在变量定义窗口,在空白处点击右键,打开右键菜单,如下两种方式添加一个局部变量:

  1. 在变量定义视图的空白处,右键点击,选择右键菜单 插入

2.在变量定义视图的空白处,右键点击,输入快捷键 Ctrl + I

添加变量完毕后,鼠标双击变量的类别输入框,在下拉框中选择所需的局部变量类型,如下图所示:

img

确定(回车或失去鼠标焦点)后,即可完成FB局部变量的定义。

如果采用自动声明的方式,在自动声明对话框中双击"范围"栏,在在下拉框中选择所需的局部变量类型(此处如果选择VAR_GLOBAL那么将会定义到全局变量组中),如下图所示:

img

确定(回车或失去鼠标焦点)后,即可完成FB局部变量的类别选择。

1.FUN定义局部变量

打开FUN型POU,在变量定义窗口,在空白处点击右键,打开右键菜单,如下两种方式添加一个局部变量:

  1. 在变量定义视图的空白处,右键点击,选择右键菜单 插入

2.在变量定义视图的空白处,右键点击,输入快捷键 Ctrl + I

添加变量完毕后,鼠标双击变量的类别输入框,在下拉框中选择所需的局部变量类型,如下图所示:

img

确定(回车或失去鼠标焦点)后,即可完成FUN局部变量的定义。

如果采用自动声明的方式,在自动声明对话框中双击"范围"栏,在在下拉框中选择所需的局部变量类型,如下图所示:

img

确定(回车或失去鼠标焦点)后,即可完成FUN局部变量的类别选择。

局部变量定义方法可参见变量定义部分内容

PLC地址变量

可以在不定义变量的情况下,用"直接表示变量"(也成为直接地址变量)直接使用。

一个单元素变量直接表示由特殊符号"%"串联而成,"直接表示变量"具体的构成规则如下:

--"%"号 和 --位置前缀I、Q或M 和 --大小前缀X、B、W、D或L 和 --一个或多个无符号整数,对位的访问可以用"."分级。

直接表示变量可以在PRG、FB、FUN或资源配置中使用。下表定义了直接表示变量的特性:

序号特性描述举例解释
位置
1输入位置 I%IW100输入位置200字节偏移的字
2输出位置 Q%QB7输出位置7字节偏移的字节
3存储器位置 M%MD40存储器位置160字节偏移的双字
大小
4位的大小 (BIT)%IX4.1输入数据类型BOOL
5字节的大小 (BYTE)%IB4输入数据类型BYTE
6字的大小 (WORD)%IW4输入数据类型WORD
7双字的大小 (DWORD)%ID4输入数据类型DWORD
8四字的大小(LWORD)%IL4输入数据类型LWORD
寻址
9简单寻址%IB01级寻址
10用"."的寻址%IX11.22级寻址

内存分布示意图如下所示:

%IB0%IB1%IB2%IB3%IB4%IB5%IB6%IB7……%IB8188%IB8189%IB8190%IB8191
%IW0%IW1%IW2%IW3……%IW4094%IW4095
%ID0%ID1……%ID2047
%IL0……
img当用户定义的变量与直接表示变量的地址重叠时,意味着变量的内存地址重叠,修改用户定义变量或修改直接表示变量的值均会影响另一方的值。

初值设置

变量初始值默认为空,如果标准类型,则按照0初始化,如果是其他类型,则按照类型的初始值初始化。

首次下装工程,用户逻辑将以初始值运算。当控制器复位后,除掉电保护属性的数据外,其它数据恢复为初始值。

您可以直接输入变量的初始值(初值格式参见数据类型详细介绍),也可以在“初值”对话框中批量设置。操作如下:

​ 在变量定义区,双击变量的初值,将进入编辑状态。

img

​ 单击按钮img,将弹出初值对话框,列出各数据元素(以数组为例),双击初值,进行修改

img

​ 单击确定

变量辅助操作

批量定义变量

手动定义变量的方式还支持批量定义变量,操作方法如下:

在变量定义视图的空白处,右键点击,选择右键菜单 定义多个变量...

img

会弹出如下图的对话框:

img

在上图的对话框中依次输入变量名称的前缀,变量名索引的下限和上限(依次下限和上限确定本次操作定义变量的个数),变量的类型以及地址和初始值等。点击确定后,可完成批量定义变量操作。

img

全局变量和局部变量均支持批量定义变量的功能。

过滤

如当前窗口定义的变量多时,可以通过过滤功能使视图只显示满足用户设置条件的变量。

在右键点击变量定义视图,选择右键菜单 过滤器设置.*..*

img

在弹出的过滤器设置对话框中,设置过滤条件,如下图设置过滤条件位变量要具有掉电保持属性:

img

过滤条件的设置可以使组合条件,如在上图变量要有保持属性的基础上,加上变量的类型限定位BOOL或DWORD类型,如下图所示:

img

点击确定后,即完成过滤条件的设定。此时再在右键点击变量定义视图,选择右键菜单 过滤

img

img

如上图所示,此时的变量定义窗口中是显示符合过滤条件设定的变量。

浏览交叉引用表

在右键点击变量定义视图的选中变量,选择右键菜单 浏览交叉引用表 可打开交叉引用表视图,显示该变量的交叉引用情况。

交叉引用的使用方法可参见查看交叉引用表部分内容

添加到监视列表

在右键点击变量定义视图的选中变量,选择右键菜单 添加到监视列表 → 选择待添加到的监视列表 可将变量添加到对应的监视列表中。

添加到监视列表的使用方法可参见监视列表部分内容

输入助手

您可以通过输入助手选择数据类型或者变量。

类型输入助手如下图所示:

img

  • 类型输入助手“类别”分为标准类型、用户自定义类型,根据您所操作的对象自动引导
  • 文本搜索:在文本搜索区域开始输入一个搜索字符串时,包含要搜索字符串的所有对象将要列出来

变量输入助手如下图所示:

img

  • 变量输入助手“类别”分为变量、函数、功能块实例、功能块、关键字、转换操作符等,根据您所操作的对象自动引导
  • 文本搜索:在文本搜索区域开始输入一个搜索字符串时,包含要搜索字符串的所有对象将要列出来
  • 过滤器:限制搜索的变量类型,包含:全局变量、当前POU、其他程序、常量、地址

输入助手可在不同位置打开,打开位置不同,显示内容不同,如下:

  • 变量定义区

​ 双击变量的数据类型,将显示数据类型选择按钮,单击按钮img,将弹出数据类型选择下拉框,单击“输入助手”命令,将弹出输出助手对话框。

​ 对话框显示用户可定义的数据类型:标准类型(标准数据类型)和用户自定义类型(工程和库中自定义的结构体、枚举、数组)。

  • 图形语言程序区

​ 双击元件,单击按钮img,将弹出输入助手对话框。

​ 输入输出类型元件:对话框显示用户可选择的变量

​ 块元件:如果双击函数名称,对话框显示功能块、函数、操作符、转换操作符;如果双击功能块示例名称,对话框显示功能块实例变量

  • 文本语言程序区

​ 右键单击“输入助手”命令,将弹出输出助手对话框。

​ 对话框显示用户可选择的变量、函数、功能块实例、功能块、关键字、转换操作符

  • 监视列表

​ 右击“名称”列的表格区域,选择“输入助手”命令,将弹出输出助手对话框。 对话框显示用户可选择的变量。

  • IO映射配置

​ 双击“名称”列的表格区域,单击按钮img,将弹出输入助手对话框。对话框显示用户可选择的变量。

  • 任务

​ 任务类型选择“状态”或者“事件”后,单击按钮img,将弹出输入助手对话框。对话框显示用户可选择的变量。

变量已经加载完毕