枚举
枚举是一种用户定义的数据类型,由逗号分隔的成员列表(枚举值)组成,用于声明用户定义的变量。
你在 a 中声明一个枚举 DUT 对象,您已经通过单击在项目中创建了该对象 添加对象。
在应用程序代码中,您可以像使用常量一样使用枚举成员,其标识符 <enumeration name>.<member name>
在项目中全局识别。
有关更多信息,请参阅: DUT
声明
语法
{attribute 'strict'}
TYPE <enumeration name> :
(
<member name> := <value>
) <base data type> := <initialization> ;
END_TYPE
| 可选 该编译指示的效果是按如下所述进行严格的类型测试。 编译指示是可选的,但建议使用。 |
| 可在代码中用作数据类型的枚举名称 示例: |
| 任意数量的成员,但至少有两个成员 枚举是圆括号中以逗号分隔的成员名称列表。右括号前的最后一个成员不需要逗号。所有成员都有相同的数据类型。 成员的值自动初始化:从 0 开始,值连续增加 1。您也可以为各个成员显式分配固定的初始值。 示例: |
| 可选 您可以显式分配以下基本数据类型之一:
默认: |
| 可选 可以将其中一个成员明确声明为初始成员。 默认:如果未明确指定初始化,则自动使用顶级成员执行初始化。 |
{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
默认情况下。但是,您也可以声明明确基于另一种整数数据类型的枚举
使用基本数据类型的枚举 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> ;
如果使用用户定义的枚举声明枚举变量,则可以使用枚举成员初始化该变量。
PROGRAM PLC_PRG VAR colorCar: COLOR; colorTaxi : COLOR := COLOR.yellow; END_VAR
变量 colorCar
初始化为 COLOR.black
。这是所有类型枚举变量的默认初始化 COLOR
并在类型声明中以这种方式定义。变量 colorTaxi
有自己的初始化。
如果未指定初始化,则初始化值为 0。
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 的值,则该值是默认初始化,如果没有,则为列表中的第一个成员。
使用 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>
。枚举成员在项目中全局识别,且访问方式唯一。因此,一个成员名称可以在不同的枚举中使用。
会员: 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;
有关更多信息,请参阅: 枚举命名空间。