跳到主要内容

枚举

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

ST 语法

TYPE <枚举类型名称> :
(
<组件声明> ,
<组件声明>
)
;
END_TYPE

<枚举类型名称>

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

例子: COLOR_BASIC

<组件声明>

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

成员的值是自动初始化的:从 0 开始,值连续递增 1。还可以为各个成员明确地分配固定的初始值。

例子: yellow := 1

<default 初始化值>

可选的

可以将其中一个成员声明为初始成员。如果未指定初始化,则使用top成员自动执行初始化。

示例

TYPE COLOR_BASIC :
(
yellow,
green,
blue,
black
) // Basic data type is INT, default initialization for all COLOR_BASIC variables is yellow
;
END_TYPE

具有基本数据类型的枚举

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

<基本数据类型> : INT | UINT | SINT | USINT | DINT | UDINT | LINT | ULINT | BYTE | WORD | DWORD | LWORD

示例 基本数据类型 DWORD 的枚举

TYPE COLOR :
(
white := 16#FFFFFF00,
yellow := 16#FFFFFF00,
green := 16#FF00FF00,
blue := 16#FF0000FF,
black := 16#88000000
)
;
END_TYPE

枚举变量的声明和初始化

ST语法

<变量名> : <枚举类型名> ( := <初始化值> ) ;

用于声明具有用户定义数据类型的枚举变量 <枚举类型名>,这可以用枚举组件初始化。

示例

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

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

PROGRAM PLC_PRG
VAR
cbFlower : COLOR_BASIC;
cbTree: COLOR_BASIC := green;
END_VAR
  • 变量 cbFlower 初始化为 COLOR_BASIC.yellow.这是所有类型枚举变量的默认初始化 COLOR_BASIC.因为枚举声明没有指定初始化的组件,系统会自动使用值为0的组件进行初始化。这通常是枚举组件中的第一个。但是,它也可以是另一个不在第一个位置但初始化为 0 的组件。

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

提示

如果为类型和变量指定值,则适用以下规则:如果枚举包含 0 的值,则此值是默认初始化,如果不是,则为列表中值最小的组件。

使用 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.e2.

对枚举组件的唯一访问

枚举组件也可以用作带有标识符的常量变量 <枚举类型名称>#<组件名称>.枚举组件在项目中被全局识别,并且对它们的访问是唯一的。因此,可以在不同的枚举中使用组件名称。

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;