EcoStruxure Machine Expert 1.1版本不支持M258、LMC058和LMC078控制器。

枚举

概述

枚举是用户定义的类型,由多个通过逗号分隔的字符串常量组成。这些常量称为枚举值。枚举值是项目中全局常量的标识符。

枚举值在工程的所有区域中都能识别,即使枚举值是在 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

IEC 61131-3 标准的第一次扩展

您可以使用枚举的类型名称(作为范围操作符)来消除枚举常量访问的歧义。

因此,可以在不同枚举中使用相同常量。

示例

使用名称相同的分量来定义两个枚举

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;

IEC 61131-3 标准的第二次扩展

您可以显式指定枚举的基本数据类型,默认情况下是 INT。

枚举的显式其他基本数据类型的示例

TYPE COLORS_2 : (yellow, blue, green:=16#8000)DINT;
END_TYPE

注意: strict 属性被自动分配给添加到项目中 TYPE 声明上方的行中的每个枚举。这就导致在以下情况下在编译过程中检测到错误:

o使用枚举类型变量的算术运算

o将常量值分配给枚举类型的变量,而该常量值与枚举值不一致

o将非常量值分配给枚举类型的变量,而该非常量值是非枚举类型的其他数据类型

您可以显式添加或删除此属性。

语法:{attribute 'strict'}