CASE:创建多路分支
说明
使用“创建多路分支”指令,可以根据表达式的值执行多个指令序列中的一个。
表达式的值必须为整数或位字符串。执行 CASE 指令时,会将表达式(变量)的值与多个常数的值进行比较。如果表达式(变量)的值等于某个常数的值,则满足条件且将执行紧跟在该常数后编写的指令。常数可以为不同值:
可按如下方式声明此指令:
CASE
<常量 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
-
数字
+关注
关注
1文章
1693浏览量
51267 -
指令
+关注
关注
1文章
606浏览量
35646 -
字符串
+关注
关注
1文章
577浏览量
20485
原文标题:西门子博途 SCL--CASE:创建多路分支
文章出处:【微信号:gh_a8b121171b08,微信公众号:机器人及PLC自动化应用】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论