CASE:创建多路分支

描述

CASE:创建多路分支

说明

使用“创建多路分支”指令,可以根据表达式的值执行多个指令序列中的一个。

表达式的值必须为整数或位字符串。执行 CASE 指令时,会将表达式(变量)的值与多个常数的值进行比较。如果表达式(变量)的值等于某个常数的值,则满足条件且将执行紧跟在该常数后编写的指令。常数可以为不同值:

可按如下方式声明此指令:

CASE OF

: ;

: ;

<常量 X>: <指令 X>; // X >= 3

ELSE ;

END_CASE;

参数

下表列出了该指令的参数:

参数 数据类型 存储区 说明
位字符串、整数 I、Q、M、D、L 与设定的常数值进行比较的值。
<常数>
局部常量和全局常量可进行编程。
位字符串 - 若为位字符串,则常数可以为以下值:
二进制数(例如,2#10)
八进制数(例如,8#77)
十六进制数(例如,16#AD)
未定型的常数(例如,1000)
如果为典型字节变量,则字节常数(例如,BYTE#2)必须进行编程。
如果为典型 WORD 变量,则字节或 WORD 常数(例如,BYTE#2、WORD# 2)必须进行编程。
如果为典型 DWord 变量,则字节、WORD 或 DWord 常数(例如,BYTE#2、WORD#2、DWORD#2)必须进行编程。
如果为典型 LWord 变量,则字节、WORD、DWord 或 LWord 常数(例如,BYTE#2、WORD#2、DWORD#2、LWORD#2)必须进行编程。
整数 若为整数,则常数可以为以下值:
整数(例如,5)
整数范围(例如,15 到 20)
由整数和范围组成的枚举(例如,10、11、15 到 20)
- - 当表达式的值等于某个常数值时,将执行的各种指令。如果不满足条件,则执行 ELSE 后编写的指令。如果两个值不相等,则执行这些指令。

有关有效数据类型的更多信息,请参见“另请参见”。

如果表达式的值等于第一个常数(<常数 1>)的值,则将执行紧跟在该常数后编写的指令(<指令 1>)。程序将从 END_CASE 后继续执行。

如果表达式的值不等于第一个常量(<常量 1>)的值,则会将该值与下一个设定的常量值进行比较。以这种方式执行 CASE 指令直至比较的值相等为止。如果表达式的值与所有设定的常数值均不相等,则将执行 ELSE 后编写的指令(<指令 0>)。ELSE 是一个可选的语法部分,可以省略。

此外,CASE 指令也可通过使用 CASE 替换一个指令块来进行嵌套。END_CASE 表示 CASE 指令结束。

示例

以下示例说明了该指令的工作原理:

SCL
CASE "Tag_Value" OF
0 :
"Tag_1" := 1;
1,3,5 :
"Tag_2" := 1;
6...10 :
"Tag_3" := 1;
16,17,20...25 :
"Tag_4" := 1;
ELSE
"Tag_5" := 1;
END_CASE;

下表将通过具体的操作数值对该指令的工作原理进行说明:

操作数
Tag_Value 0 1、3、5 6、7、8、9、10 16, 17, 20, 21, 22, 23, 24, 25 2
Tag_1 1 - - - -
Tag_2 - 1 - - -
Tag_3 - - 1 - -
Tag_4 - - - 1 -
Tag_5 - - - - 1
1:操作数的信号状态将设置为“1”。
-:操作数的信号状态将保持不变。

  CASE语句用来选择几个分支程序部分之一。选择是基于选择表达式当前值的。 使用“创建多路分支”指令,可以根据数字表达式的值执行多个指令序列中的一个。 表达式的值必须为整数。执行该指令时,会将表达式的值与多个常数的值进行比较。如果表达式的值等 于某个常数的值,则将执行紧跟在该常数后编写的指令。常数可以为以下值: • 整数(例如,5) • 整数的范围(例如,15..20) • 由整数和范围组成的枚举(例如,10、11、15..20) CASE语句按下列规则执行: ·选择表达式必须返回一个整数类型的值。 ·当CASE语句被处理时,程序检查是否选择表达式的值包含在指定的值表之中。如果找到匹配项,列表指定的语句部分将被执行。 ·如果没有发现匹配项,程序选择ELSE后面的语句,或者如果ELSE分支不存在则无语句可执行。 如果表达式的值等于第一个常数(<常数 1="">)的值,则将执行紧跟在该常数后编写的指令(<指令 1="">)。程序将从 END_CASE 后继续执行。如果表达式的值不等于第一个常数(<常数 1="">)的值,则会将该值与下一个设定的常数值进行比较。以这种方式执行 CASE 指令直至比较的值相等为止。如果表达式的值与所有设定的常数值均不相等,则将执行 ELSE 后编写的指令(<指令 0="">)。ELSE 是一个可选的语法部分,可以省略。此外,CASE 指令也可通过使用 CASE 替换一个指令块来进行嵌套。END_CASE 表示 CASE 指令结束。   字符串 根据管角value输入数来决定OUT1输出的数   FUNCTION FC1 : INT   建立FC1程序,输出反馈值得属性是INT整数 VAR_input     value:INT; END_VAR   VAR_outPUT     OUT1:INT; END_VAR   VAR_TEMP     END_VAR       CASE value OF         1 :                      OUT1:=1  ;         2 :                     OUT1:=2    ;         3 :                    OUT1:=3     ;         4 :                     OUT1:=4    ;         5 :                    OUT1:=5     ;         6 :                     OUT1:=6     ;       ELSE:   不是1-6 就输出99                OUT1:=99  ;     END_CASE;         FC1 := OUT1;  FC1的反馈值和OUT1值一致. END_FUNCTION  

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分