Skip to main content

枚举

枚举是一种用户定义的数据类型,由逗号分隔的成员列表(枚举值)组成,用于声明用户定义的变量。

你在 a 中声明一个枚举 DUT 对象,您已经通过单击在项目中创建了该对象 添加对象

在应用程序代码中,您可以像使用常量一样使用枚举成员,其标识符 <enumeration name>.<member name> 在项目中全局识别。

有关更多信息,请参阅: DUT

声明

语法

{attribute 'strict'}

TYPE <enumeration name> :

(

    <member name> := <value>

) <base data type> := <initialization> ;

END_TYPE

{attribute 'strict'}

可选

该编译指示的效果是按如下所述进行严格的类型测试。

编译指示是可选的,但建议使用。

<enumeration name>

可在代码中用作数据类型的枚举名称

示例: COLOR_BASIC

    <member name> := <initial value>

任意数量的成员,但至少有两个成员

枚举是圆括号中以逗号分隔的成员名称列表。右括号前的最后一个成员不需要逗号。所有成员都有相同的数据类型。

成员的值自动初始化:从 0 开始,值连续增加 1。您也可以为各个成员显式分配固定的初始值。

示例: yellow := 1

<base data type>

可选

您可以显式分配以下基本数据类型之一:

INT | UINT | SINT | USINT | DINT | UDINT | LINT | ULINT | BYTE | WORD | DWORD | LWORD

默认: INT

:= <initialization>

可选

可以将其中一个成员明确声明为初始成员。

默认:如果未明确指定初始化,则自动使用顶级成员执行初始化。

227. 示例
{attribute 'qualified_only'}
{attribute 'strict'}
TYPE COLOR_BASIC :
(
    yellow,
    green,
    blue,
    black
) // Basic data type is INT, default initialization for all COLOR_BASIC variables is yellow
;
END_TYPE


使用显式基本数据类型的枚举

IEC 61131-3 标准的扩展

枚举声明的基本数据类型是 INT 默认情况下。但是,您也可以声明明确基于另一种整数数据类型的枚举

228. 示例

使用基本数据类型的枚举 DWORD

TYPE COLOR :
(
        white := 16#FFFFFF00,
        yellow := 16#FFFFFF00,
        green := 16#FF00FF00,
        blue := 16#FF0000FF,
        black := 16#88000000
) DWORD := black
; // Basic data type is DWORD, default initialization for all COLOR variables is black
END_TYPE


严格的编程规则

重要

CODESYS V3.5 SP7 及更高版本,编译指令 {attribute 'strict'} 声明枚举时会自动添加到第一行。

添加编译指示时会激活严格的编程规则 {attribute 'strict'}

. 以下代码被视为编译器错误:
  • 使用枚举成员的算术运算

    例如,枚举变量不能用作计数器变量 FOR 循环。

  • 将不对应于枚举值的常量值分配给枚举成员

  • 将具有另一种数据类型作为枚举的非常量变量赋值给枚举成员

算术运算可能导致将未声明的值分配给枚举成员。更好的编程风格是使用 SWITCH/CASE 用于处理成员值的语句。

枚举变量的声明和初始化

语法

<variable name> : <enumeration name> := <initialization> ;

如果使用用户定义的枚举声明枚举变量,则可以使用枚举成员初始化该变量。

229. 示例
PROGRAM PLC_PRG
VAR
    colorCar: COLOR;
    colorTaxi : COLOR := COLOR.yellow;
END_VAR

变量 colorCar 初始化为 COLOR.black。这是所有类型枚举变量的默认初始化 COLOR 并在类型声明中以这种方式定义。变量 colorTaxi 有自己的初始化。



如果未指定初始化,则初始化值为 0。

230. 示例
PROGRAM PLC_PRG
VAR
    cbFlower : COLOR_BASIC;
    cbTree: COLOR_BASIC := COLOR_BASIC.green;
END_VAR

变量 cbFlower 初始化为 COLOR_BASIC.yellow。这是所有类型枚举变量的默认初始化 COLOR_BASIC。由于枚举声明未指定要初始化的成员,因此系统会自动使用值为 0 的成员进行初始化。这通常是第一个枚举成员。但是,它也可以是另一个不在第一个位置但显式初始化为 0 的成员

变量 cbTree 具有明确的初始化。



如果没有为类型和变量指定任何值,则适用以下规则:如果枚举包含 0 的值,则该值是默认初始化,如果没有,则为列表中的第一个成员。

231. 示例

使用 0 成员进行初始化

TYPE ENUM :
(
    e1 := 2,
    e2 := 0,
    e3
)
;
END_TYPE

PROGRAM PLC_PRG
VAR
    e : ENUM;
END_VAR

变量 e 初始化为 ENUM.e2

使用第一个成员进行初始化

TYPE ENUM2 :
(
    e1 := 3,
    e2 := 1,
    e3
)
;
END_TYPE

PROGRAM PLC_PRG
VAR
    e2 : ENUM2;
END_VAR

变量 e2 初始化为 ENUM.e1



对枚举成员的唯一访问权限

IEC 61131-3 标准的扩展

枚举成员也可以作为常量变量使用,标识符为 <enumeration name>.<member name> 。枚举成员在项目中全局识别,且访问方式唯一。因此,一个成员名称可以在不同的枚举中使用。

232. 示例

会员: blue

PROGRAM PLC_PRG
VAR
    cbFlower : COLOR_BASIC;
    colorCar : COLOR;
END_VAR

(* unambiguous identifiers although the component names are identical *)
cbFlower := COLOR_BASIC.blue;
colorCar := COLOR.blue;

(* invalid code *)
cbFlower := blue;
colorCar := blue;


有关更多信息,请参阅: 枚举命名空间