枚举是用户定义的类型,由多个通过逗号分隔的字符串常量组成。这些常量称为枚举值。枚举值是项目中全局常量的标识符。
枚举值在工程的所有区域中都能识别,即使枚举值是在 POU 声明的。
枚举通过添加对象对话框在工程中作为 DUT 对象创建。
注意: 本地枚举只能在 TYPE 中声明。
TYPE <enum identifier>: (<enum_0>|:=<value>,<enum_1>|:=<value>, ...,<enum _n>|:=<value>)|<base data type>|:=<default value>;
END_TYPE
可额外使用以下元素:
o初始化单个枚举值
o定义 <base data type>(请参阅文段 IEC 61131-3 标准的第二次扩展)
o定义用于初始化所有分量的缺省值
<variable identifier> : <enum identifier>| := <initialization value>
<enum identifier> 类型变量可以使用枚举值 <enum_..>。
如果... |
则... |
---|---|
o如果在枚举声明中未定义 <default value>(请参见以下示例),并且 o如果也没有为 <enum identifier> 类型变量的声明定义显式初始化值 |
用第一个枚举分量的值来初始化该变量。除非在枚举声明中用值 0 初始化了分量,否则便适用这一规则。在这种情况下,也会用值 0 来初始化此变量。 |
枚举声明
TYPE TRAFFIC_SIGNAL: (red, yellow, green:=10);
(* The initial value for each of the colors is red 0, yellow 1, green 10 *)
END_TYPE
在此声明中,前两个分量采用缺省初始化值:
red = 0, yellow = 1
第三个分量的初始化值被显式定义:
green = 10
实现中的使用
TRAFFIC_SIGNAL1 : TRAFFIC_SIGNAL;
TRAFFIC_SIGNAL1:=10; (* The value of the TRAFFIC_SIGNAL1 is "green" *)
FOR i:= red TO green DO
i := i + 1;
END_FOR;
枚举声明
TYPE COLOR :
(
red,
yellow,
green
) := green;
END_TYPE
实现中的使用
c1 : COLOR;
c2 : COLOR := yellow;
在这种情况下,变量 c1 用值 green 来初始化。为 c2 定义初始化值 yellow。
您可以使用枚举的类型名称(作为范围操作符)来消除枚举常量访问的歧义。
因此,可以在不同枚举中使用相同常量。
示例
使用名称相同的分量来定义两个枚举
TYPE COLORS_1: (red, blue);
END_TYPE
TYPE COLORS_2: (green, blue, yellow);
END_TYPE
在一个块中使用来自不同枚举的名称相同的分量
colorvar1 : COLORS_1;
colorvar2 : COLORS_2;
(* valid: *)
colorvar1 := COLORS_1.blue;
colorvar2 := COLORS_2.blue;
(* invalid: *)
colorvar1 := blue;
colorvar2 := blue;
您可以显式指定枚举的基本数据类型,默认情况下是 INT。
枚举的显式其他基本数据类型的示例
TYPE COLORS_2 : (yellow, blue, green:=16#8000)DINT;
END_TYPE
注意: strict 属性被自动分配给添加到项目中 TYPE 声明上方的行中的每个枚举。这就导致在以下情况下在编译过程中检测到错误:
o使用枚举类型变量的算术运算
o将常量值分配给枚举类型的变量,而该常量值与枚举值不一致
o将非常量值分配给枚举类型的变量,而该非常量值是非枚举类型的其他数据类型
您可以显式添加或删除此属性。
语法:{attribute 'strict'}