如何在使用结构化文本的 CCW 中避免在案例标签中使用文字?



我正在使用连接组件工作台(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

相关内容

  • 没有找到相关文章

最新更新