CASE_OF
使用 CASE_OF 可根据数值选择要执行的操作。
操作数
CASE numeric_expression OF
选择器 1: 语句;
选择器 N: 语句; ELSE
结构化文本
操作数 | 类型 | 格式 | 输入 |
|---|---|---|---|
Numeric_ expression | SINT INT DINT REAL | 标签表达式 | 赋值为数值的标签或表达式 (数值表达式) |
Selector | SINT INT DINT REAL | 立即数 | 与 numeric_expression 的类型相同 |
重要提示:
REAL 值极有可能位于一定的值范围内,而不是与某个特定值精确匹配,因此如果使用 REAL 值,就必须为选择器设定一个值范围。
说明
语法在下表中说明。

下面是输入选择器值时所用的语法。
当选择器为 | 输入 |
一个值 | 值: 语句 |
多个不同的值 | value1、value2、valueN:<语句> 使用逗号 (,) 分隔每个值。 |
值范围 | value1..valueN : <语句> 使用两个句点 (..) 来标识范围。 |
多个不同的值加上值范围 | valuea, valueb, value1..valueN : <语句> |
CASE 结构类似于 C 或 C++ 编程语言中的 switch 语句。对于 CASE 结构,控制器只执行与第一个匹配的选择器值关联的语句。总是在该选择器的语句后中断执行,并转到 END_CASE 语句。
影响数学状态标志
否
严重/轻微故障
无
示例
如果要实现以下要求 | 输入以下结构化文本 |
如果配方号 = 1,则成分 A 出口 1 = 打开 (1) 成分 B 出口 4 = 打开 (1) | CASE recipe_number OF |
1: Ingredient_A.Outlet_1 :=1; Ingredient_B.Outlet_4 :=1; | |
如果配方号 = 2 或 3,则 成分 A 出口 4 = 打开 (1) 成分 B 出口 2 = 打开 (1) | 2,3: Ingredient_A.Outlet_4 :=1; Ingredient_B.Outlet_2 :=1; |
如果配方号 = 4、5、6 或 7,则成分 A 出口 4 = 打开 (1) 成分 B 出口 2 = 打开 (1) | 4..7:Ingredient_A.Outlet_4 :=1; Ingredient_B.Outlet_2 :=1; |
如果配方号 = 8、11、12 或 13,则成分 A 出口 1 = 打开 (1) 成分 B 出口 4 = 打开 (1) | 8,11..13 Ingredient_A.Outlet_1 :=1; Ingredient_B.Outlet_4 :=1; |
否则所有出口 = 关闭 (0) | ELSE |
Ingredient_A.Outlet_1 [:=]0; Ingredient_A.Outlet_4 [:=]0; Ingredient_B.Outlet_2 [:=]0; Ingredient_B.Outlet_4 [:=]0; | |
END_CASE; |
每当控制器发生以下情况时,[:=] 都会指示控制器清空出口标签:
进入运行模式。
在配置 SFC 为自动复位的情况下,离开 SFC 的程序步。这仅适用于在步动作中嵌入该赋值语句,或通过该动作使用 JSR 指令调用结构化文本例程。
提供反馈