北岛夜话
原创工业智能控制领域(PLC、单片机/嵌入式、机器人、通信、机器视觉)的技术及经验分享。
文章556 浏览9191563

复杂数据类型(2)——基于汇川AM系列PLC的结构化文本语言编程

上一篇文章我们介绍了数组和结构体两种复杂数据类型,今天这篇文章我们来介绍枚举和联合体。

cover.png

1、枚举

枚举是由若干常量字符串组成的数据类型,常量字符串被称为“类型值”,其定义语法为:

1-1.png

其中:

  • “identifier”为枚举类型的名称;

  • “enum_0” ~ “enum_n”为常量字符串(枚举的类型值);

  • “base data type” 为基类型,默认情况下为整数;

使用枚举的意义在于便于标识,增强可读性。比如,对于交通红绿灯,如果能将其定义为red(红)、green(绿)、yellow(黄),比直接使用数字1,2,3,可大大提高程序的可读性。

枚举类型的常量字符串本质上也是数字,默认情况下其类型为整数,并且自上而下应依次递增。也可以根据需要修改基类型,或者修改常量字符串的初始值。

举个例子:

打开InoProShop,新建项目,选择控制器AM521-0808TN。

在开发环境左侧的“POUs”(或设备树的“应用”)单击右键,在弹出的菜单中选择“添加对象”→“DUT”。

在弹出的对话框中选择“枚举”,命名为“typeTrafficLight”,如下图所示:

1.png

单击“打开”按钮,在编辑界面声明常量字符串:yellow,green和red,如下图所示:

2.png

这种声明的情况下黄灯的值为0,绿灯的值为1,红灯的值为2(依次递增)。

可以根据需要修改初始值,比如将黄灯修改为1,红灯修改为10,如下图所示:

3.png

枚举的基本类型也可以为实数,比如假设某伸缩管的长度有短、中、长、特长四个等级,则可以如下定义

4.png

枚举类型使用时可以直接用常量字符串复制,比如有个整数变量light1,可以使用下面的代码为其赋值:

light1:=typeTrafficLight.green;


2、联合体

联合体是多个变量存储在同一地址,其占用的地址空间取决于联合体中字节数最长的变量。其语法为:

1-2.png

其中:

  • “unionname”是联合体的类型名称;

  • “declaration of variables ”是声明的变量;

举个例子:

添加联合体类型typeUnionTest,如下图所示:

5.png

在其中编写代码如下图所示:

6.png

这个联合体类型中:result(布尔型)的长度为1个字节,index(整数)的长度为2个字节,value(实数)的长度为4个字节。

value在该联合体中占用的长度最长,因此该联合体所占用的地址空间大小为value的长度,即4个字节。

联合体可以将多个不同类型的变量存放到同一地址空间,有效的提高了内存利用率。

注意与前一节介绍的结构体相区别:结构体占用的地址空间是其内部所有变量的长度总和。

联合体变量在使用时也通过成员运算符“.”进行访问。比如有变量myUnion,可以给其result成员赋值,如下面的代码:

myUnion.result:=TRUE;

由于联合体成员存在于同一地址空间,赋值时会相互干扰,使用时应注意读写的时机。

好了,关于枚举和联合体先介绍到这里,后面的文章继续介绍其它复杂数据类型。

我的书《西门子S7-1200/1500 PLC SCL语言编程 ——从入门到精通》从硬件到软件,比较详细的介绍了SCL语言的编程,感兴趣的话可以扫描下面的二维码查看:

取消

感谢您的支持,欢迎常来看看!

扫码支持
一点动力,多少随意

打开支付宝扫一扫,即可进行扫码打赏哦

发表评论