上一篇文章我们介绍了数组和结构体两种复杂数据类型,今天这篇文章我们来介绍枚举和联合体。
1、枚举
枚举是由若干常量字符串组成的数据类型,常量字符串被称为“类型值”,其定义语法为:
其中:
“identifier”为枚举类型的名称;
“enum_0” ~ “enum_n”为常量字符串(枚举的类型值);
“base data type” 为基类型,默认情况下为整数;
使用枚举的意义在于便于标识,增强可读性。比如,对于交通红绿灯,如果能将其定义为red(红)、green(绿)、yellow(黄),比直接使用数字1,2,3,可大大提高程序的可读性。
枚举类型的常量字符串本质上也是数字,默认情况下其类型为整数,并且自上而下应依次递增。也可以根据需要修改基类型,或者修改常量字符串的初始值。
举个例子:
打开InoProShop,新建项目,选择控制器AM521-0808TN。
在开发环境左侧的“POUs”(或设备树的“应用”)单击右键,在弹出的菜单中选择“添加对象”→“DUT”。
在弹出的对话框中选择“枚举”,命名为“typeTrafficLight”,如下图所示:
单击“打开”按钮,在编辑界面声明常量字符串:yellow,green和red,如下图所示:
这种声明的情况下黄灯的值为0,绿灯的值为1,红灯的值为2(依次递增)。
可以根据需要修改初始值,比如将黄灯修改为1,红灯修改为10,如下图所示:
枚举的基本类型也可以为实数,比如假设某伸缩管的长度有短、中、长、特长四个等级,则可以如下定义
枚举类型使用时可以直接用常量字符串复制,比如有个整数变量light1,可以使用下面的代码为其赋值:
light1:=typeTrafficLight.green;
2、联合体
联合体是多个变量存储在同一地址,其占用的地址空间取决于联合体中字节数最长的变量。其语法为:
其中:
“unionname”是联合体的类型名称;
“declaration of variables ”是声明的变量;
举个例子:
添加联合体类型typeUnionTest,如下图所示:
在其中编写代码如下图所示:
这个联合体类型中:result(布尔型)的长度为1个字节,index(整数)的长度为2个字节,value(实数)的长度为4个字节。
value在该联合体中占用的长度最长,因此该联合体所占用的地址空间大小为value的长度,即4个字节。
联合体可以将多个不同类型的变量存放到同一地址空间,有效的提高了内存利用率。
注意与前一节介绍的结构体相区别:结构体占用的地址空间是其内部所有变量的长度总和。
联合体变量在使用时也通过成员运算符“.”进行访问。比如有变量myUnion,可以给其result成员赋值,如下面的代码:
myUnion.result:=TRUE;
由于联合体成员存在于同一地址空间,赋值时会相互干扰,使用时应注意读写的时机。
好了,关于枚举和联合体先介绍到这里,后面的文章继续介绍其它复杂数据类型。
我的书《西门子S7-1200/1500 PLC SCL语言编程 ——从入门到精通》从硬件到软件,比较详细的介绍了SCL语言的编程,感兴趣的话可以扫描下面的二维码查看:
发表评论