1

我正在使用 Connected Components Workbench (CCW),文档中给出的 case 语句的语法是:

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:意外语句

有没有办法避免不同情况下的明确数字?

4

1 回答 1

3

一种选择是改用枚举。您首先需要将枚举定义为类型。该枚举又可以是您想要的任何原始数据类型。如果添加编译指示“qualified_only”,可以使代码看起来更优雅。例如,假设您将新类型定义为:

{attribute 'qualified_only'}
TYPE E_State :
(
    A := 0,
    B := 1,
    C := 2
) USINT;
END_TYPE

您在这里的基本意思是,这是一个将占用 1 个字节空间的枚举(因为基本类型是 USINT),并且如果您想使用该枚举,则需要在其前面加上枚举(在本例中为“E_State”)。请注意,您不需要在此处显式声明数字。如果你不写任何数字,编译器会自动假设第一个为零,并在后面的每个数字上加一。所以这也可以:

{attribute 'qualified_only'}
TYPE E_State :
(
    A,
    B,
    C
) USINT;
END_TYPE

您甚至不需要声明基本类型。如果你没有声明任何东西(所以不要在上面写 USINT),编译器会自动假设它是一个 INT。

在程序或功能块的 switch-case 中使用它会使它看起来像这样:

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
于 2018-05-01T19:42:08.163 回答