我正在使用连接组件工作台(CCW(,文档中给出的案例语句的语法是:
CASE <integer_expression> OF
<value> : <statement1> ;
<statement2> ;
<statementsN>
<value> : <statements> ;
<value>, <value> : <statements>;
...
ELSE
<statements> ;
END_CASE;
我想避免使用明确的数字(文字(:
CASE STATE OF
STATE_A:
// Some code
STATE_B:
// Some code
ELSE
END_CASE;
当我将变量用于案例标签时,出现编译错误:
错误 1 STATE_A:意外语句
有没有办法避免不同情况的明确数字?
一种选择是改用枚举。首先需要将枚举定义为类型。此枚举反过来可以是所需的任何基元数据类型。如果添加杂注"qualified_only",可以使代码看起来更加优雅。例如,假设您将一个新类型定义为:
{attribute 'qualified_only'}
TYPE E_State :
(
A := 0,
B := 1,
C := 2
) USINT;
END_TYPE
您在这里基本上要说的是,这是一个将占用 1 字节空间的枚举(因为基类型是 USINT(,如果要使用枚举,则需要在枚举名称前面加上枚举的名称(在本例中为"E_State"(。请注意,您不需要在此处显式声明数字。如果您不写入任何数字,编译器将自动假定第一个数字为零,并为后面的每个数字加 1。所以这也将起作用:
{attribute 'qualified_only'}
TYPE E_State :
(
A,
B,
C
) USINT;
END_TYPE
您甚至不需要声明基类型。如果您没有声明任何内容(因此不编写上面的 USINT(,编译器将自动假定它是一个 INT。
在程序或功能块的开关盒中使用它会使它看起来像这样:
PROGRAM MAIN
VAR
eState : E_State;
END_VAR
身体:
CASE eState OF
E_State.A :
// Do something A
E_State.B :
// Do something B
E_State.C :
// Do something C
ELSE
// Do something
END_CASE