组态软件编程语法之变量

简介: 组态软件编程语法之变量

变量

与数据的外部表示相反,变量提供能够改变其内容的数据对象的识别方法。例如,可改变与PLC输入/输出或存储器有关的数据。变量可以被声明为基本数据类型、一般数据类型和衍生数据类型。

1.变量的表示

在IEC 61131-3标准中,变量分为单元素变量和多元素变量。

1)单元素变量

单元素变量(Single-element Variable)用于表示基本数据类型的单一数据元素、衍生的枚举数据类型或子范围数据类型的数据元素,或上述数据类型的衍生数据元素。单元素变量可以是直接变量或符号变量。

(1)直接变量(Direct Variable)以百分号“%”开始,随后是位置前缀符号和大小写前缀符号。如果有分级,则用整数表示分级,并用小数点“.”分隔表示直接变量。

fe8a9d897b7d47c6acb98fda2a570eb6.png


表是直接表示变量中前缀符号的定义。

167e72207e8447f7a6431a1fdc636ea6.png


表是直接表示变量的示例。直接变量可用于程序、功能块、配置和资源的声明中。一个可编程控制器系统的程序存取另一个可编程控制器中的数据时,采用分级寻址的方式,这应被认为是一种语言的扩展。

直接变量类似于传统可编程控制器中的操作数,它对应于一个可寻址的存储器单元。需要注意的是,在早期可编程控制器的产品中并没有对操作数进行明确定义,所以一些产品用编号表示操作数。在IEC 61131-3标准中,将存储器的地址分为输入单元、输出单元和存储器单元,并且用直接表示变量的方法来表示变量。直接表示变量的值可根据变量的地址直接存取。例如,VAR_INPUT AT %IX2.3:BOOL;END_VAR表示一个变量直接从%IX2.3地址读取布尔数据类型的数据。


(2)符号变量(Symbolic Variable)

符号变量是用符号表示的变量,其地址对不同的可编程控制器可以不同,从而为程序的移植创造条件。例如,在VAR_INPUT SW_1 AT %IX2.3:BOOL;END_VAR中,用符号变量SW_1表示从%IX2.3地址读取布尔量。当实际地址改变时,在程序的其他部分仍使用该符号变量,因此,只需要对该地址进行修改,对程序的其他部分可以不修改,就可以完成整个程序的移植。

直接表示变量和符号表示变量借助于分级地址指令表语言中的应用,给一个标志或I/O地址指定一个数据类型,这样能使编程系统检查是否正在正确地存取该变量。例如,一个被说明为“AT %QD5:DINT”的变量不会因疏忽而以UINT或REAL类型存取。用直接表示变量代替至今还在程序中经常使用的直接PLC地址,在这种情况下,地址的作用与变量名(如%IW4)一样。

符号变量的声明及其使用与正常变量的声明和使用一样,只不过其存取位置不能由编程系统自由地指定,而限于由用户以“AT”指定的地址。这些变量对应于预先由分配表或符号表指定的地址。

在程序、资源和配置中,直接表示变量和符号变量可以用于变量类型VAR,VAR_GLOBAL,VAR_EXTERRNAL和VAR_ACCESS的声明。在功能块中,它们只能用VAR_EXTERNAL输入。


2)多元素变量

多元素变量(Multi-element Variable)包括衍生数据类型中数组类型的变量和结构化数据类型的变量。

数组数据类型变量也称为数组变量,它用符号变量名和随后的下标表示。下标包含在一对括号内,用逗号分隔。例如,数组变量AI:ARRAY[1…3,1…8] OF REAL表示数组变量AI,它是由3×8个实数数据类型的变量组成的,各组成变量是:AI[1,1],AI[1,2],…,AI[1,8],AI[2,1],AI[2,2],…,AI[2,8],AI[3,1],AI[3,2],…,AI[3,8]。

结构数据类型变量也称为结构变量,它用结构变量名表示。

访问数组中的元素,可以通过选择方括号内整数的数组注脚(索引)的方法。对结构元素寻址,可以采用“结构的变量名.结构部件名”的形式。

相关文章
|
6月前
|
存储 开发者 Python
探索代码的奥秘:从变量到函数的编程之旅
【8月更文挑战第31天】本文将带你走进编程的世界,从基础的变量概念出发,逐步深入到复杂的函数设计。我们将通过实际的代码示例,探讨如何高效地组织和复用代码,以及在面对复杂问题时如何应用模块化思维来简化解决方案。无论你是初学者还是有经验的开发者,这篇文章都将为你提供新的视角和启发,帮助你更好地理解编程语言的内在逻辑和美学。
|
7月前
|
存储 分布式计算 索引
Python函数式编程入门窥探
Python本身不是一门函数式编程语言,但是它参考了一些函数式编程语言很好的地方,除了可以写出更可读的代码外。还能用它来实现一些特定功能,本身也提供了强大的注解系统和函数和对象之间的灵活调用。
|
存储 自然语言处理 编译器
【C语言航路】第十五站:程序环境和预处理(上)
【C语言航路】第十五站:程序环境和预处理
72 0
|
编译器 Linux C语言
【C语言航路】第十五站:程序环境和预处理(下)
【C语言航路】第十五站:程序环境和预处理(上)
71 0
|
存储 算法 C语言
《信任的进化》游戏简易版逻辑算法的实现(C语言)
《信任的进化》游戏简易版逻辑算法的实现(C语言)
|
存储 编译器 程序员
抽丝剥茧C语言(高阶)程序环境和预处理
抽丝剥茧C语言(高阶)程序环境和预处理
LabVIEW编程语法学习笔记之变量
LabVIEW编程语法学习笔记之变量
180 0
|
机器学习/深度学习 Python
深度之眼(九)——python函数--面向过程的编程(上)
深度之眼(九)——python函数--面向过程的编程(上)
135 0
深度之眼(九)——python函数--面向过程的编程(上)
|
C++ Python
深度之眼(九)——python函数--面向过程的编程(下)
深度之眼(九)——python函数--面向过程的编程(下)
137 0
深度之眼(九)——python函数--面向过程的编程(下)
|
设计模式 Java
掌握接口,从这三则案例开始! | 带你学《Java面向对象编程》之六十二
本节手把手带着读者借助接口和工厂设计模式完成获取类信息、处理绘图、设计图形类三则案例。
掌握接口,从这三则案例开始!  | 带你学《Java面向对象编程》之六十二