CASE:創(chuàng)建多路分支
說明
使用“創(chuàng)建多路分支”指令,可以根據(jù)表達(dá)式的值執(zhí)行多個(gè)指令序列中的一個(gè)。
表達(dá)式的值必須為整數(shù)或位字符串。執(zhí)行 CASE 指令時(shí),會(huì)將表達(dá)式(變量)的值與多個(gè)常數(shù)的值進(jìn)行比較。如果表達(dá)式(變量)的值等于某個(gè)常數(shù)的值,則滿足條件且將執(zhí)行緊跟在該常數(shù)后編寫的指令。常數(shù)可以為不同值:
可按如下方式聲明此指令:
CASE
<常量 X>: <指令 X>; // X >= 3
ELSE
END_CASE;
參數(shù)
下表列出了該指令的參數(shù):
| 參數(shù) | 數(shù)據(jù)類型 | 存儲(chǔ)區(qū) | 說明 |
|---|---|---|---|
|
|
位字符串、整數(shù) | I、Q、M、D、L | 與設(shè)定的常數(shù)值進(jìn)行比較的值。 |
|
<常數(shù)> 局部常量和全局常量可進(jìn)行編程。 |
位字符串 | - |
若為位字符串,則常數(shù)可以為以下值: 二進(jìn)制數(shù)(例如,2#10) 八進(jìn)制數(shù)(例如,8#77) 十六進(jìn)制數(shù)(例如,16#AD) 未定型的常數(shù)(例如,1000) 如果為典型字節(jié)變量,則字節(jié)常數(shù)(例如,BYTE#2)必須進(jìn)行編程。 如果為典型 WORD 變量,則字節(jié)或 WORD 常數(shù)(例如,BYTE#2、WORD# 2)必須進(jìn)行編程。 如果為典型 DWord 變量,則字節(jié)、WORD 或 DWord 常數(shù)(例如,BYTE#2、WORD#2、DWORD#2)必須進(jìn)行編程。 如果為典型 LWord 變量,則字節(jié)、WORD、DWord 或 LWord 常數(shù)(例如,BYTE#2、WORD#2、DWORD#2、LWORD#2)必須進(jìn)行編程。 |
| 整數(shù) |
若為整數(shù),則常數(shù)可以為以下值: 整數(shù)(例如,5) 整數(shù)范圍(例如,15 到 20) 由整數(shù)和范圍組成的枚舉(例如,10、11、15 到 20) |
||
|
|
- | - | 當(dāng)表達(dá)式的值等于某個(gè)常數(shù)值時(shí),將執(zhí)行的各種指令。如果不滿足條件,則執(zhí)行 ELSE 后編寫的指令。如果兩個(gè)值不相等,則執(zhí)行這些指令。 |
有關(guān)有效數(shù)據(jù)類型的更多信息,請(qǐng)參見“另請(qǐng)參見”。
如果表達(dá)式的值等于第一個(gè)常數(shù)(<常數(shù) 1>)的值,則將執(zhí)行緊跟在該常數(shù)后編寫的指令(<指令 1>)。程序?qū)?END_CASE 后繼續(xù)執(zhí)行。
如果表達(dá)式的值不等于第一個(gè)常量(<常量 1>)的值,則會(huì)將該值與下一個(gè)設(shè)定的常量值進(jìn)行比較。以這種方式執(zhí)行 CASE 指令直至比較的值相等為止。如果表達(dá)式的值與所有設(shè)定的常數(shù)值均不相等,則將執(zhí)行 ELSE 后編寫的指令(<指令 0>)。ELSE 是一個(gè)可選的語法部分,可以省略。
此外,CASE 指令也可通過使用 CASE 替換一個(gè)指令塊來進(jìn)行嵌套。END_CASE 表示 CASE 指令結(jié)束。
示例
以下示例說明了該指令的工作原理:
| 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; |
下表將通過具體的操作數(shù)值對(duì)該指令的工作原理進(jìn)行說明:
| 操作數(shù) | 值 | ||||
|---|---|---|---|---|---|
| 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:操作數(shù)的信號(hào)狀態(tài)將設(shè)置為“1”。 -:操作數(shù)的信號(hào)狀態(tài)將保持不變。 |
|||||
CASE語句用來選擇幾個(gè)分支程序部分之一。選擇是基于選擇表達(dá)式當(dāng)前值的。 使用“創(chuàng)建多路分支”指令,可以根據(jù)數(shù)字表達(dá)式的值執(zhí)行多個(gè)指令序列中的一個(gè)。 表達(dá)式的值必須為整數(shù)。執(zhí)行該指令時(shí),會(huì)將表達(dá)式的值與多個(gè)常數(shù)的值進(jìn)行比較。如果表達(dá)式的值等 于某個(gè)常數(shù)的值,則將執(zhí)行緊跟在該常數(shù)后編寫的指令。常數(shù)可以為以下值: ? 整數(shù)(例如,5) ? 整數(shù)的范圍(例如,15..20) ? 由整數(shù)和范圍組成的枚舉(例如,10、11、15..20) CASE語句按下列規(guī)則執(zhí)行: ·選擇表達(dá)式必須返回一個(gè)整數(shù)類型的值。 ·當(dāng)CASE語句被處理時(shí),程序檢查是否選擇表達(dá)式的值包含在指定的值表之中。如果找到匹配項(xiàng),列表指定的語句部分將被執(zhí)行。 ·如果沒有發(fā)現(xiàn)匹配項(xiàng),程序選擇ELSE后面的語句,或者如果ELSE分支不存在則無語句可執(zhí)行。 如果表達(dá)式的值等于第一個(gè)常數(shù)(<常數(shù) 1="">)的值,則將執(zhí)行緊跟在該常數(shù)后編寫的指令(<指令 1="">)。程序?qū)?END_CASE 后繼續(xù)執(zhí)行。如果表達(dá)式的值不等于第一個(gè)常數(shù)(<常數(shù) 1="">)的值,則會(huì)將該值與下一個(gè)設(shè)定的常數(shù)值進(jìn)行比較。以這種方式執(zhí)行 CASE 指令直至比較的值相等為止。如果表達(dá)式的值與所有設(shè)定的常數(shù)值均不相等,則將執(zhí)行 ELSE 后編寫的指令(<指令 0="">)。ELSE 是一個(gè)可選的語法部分,可以省略。此外,CASE 指令也可通過使用 CASE 替換一個(gè)指令塊來進(jìn)行嵌套。END_CASE 表示 CASE 指令結(jié)束。
根據(jù)管角value輸入數(shù)來決定OUT1輸出的數(shù) ? FUNCTION FC1 : INT? ?建立FC1程序,輸出反饋值得屬性是INT整數(shù) 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??
-
數(shù)字
+關(guān)注
關(guān)注
1文章
1700瀏覽量
52546 -
指令
+關(guān)注
關(guān)注
1文章
623瀏覽量
37529 -
字符串
+關(guān)注
關(guān)注
1文章
596瀏覽量
23165
原文標(biāo)題:西門子博途 SCL--CASE:創(chuàng)建多路分支
文章出處:【微信號(hào):gh_a8b121171b08,微信公眾號(hào):機(jī)器人及PLC自動(dòng)化應(yīng)用】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
一起學(xué)LabVIEW——Case結(jié)構(gòu)
關(guān)于case分支名的求助
煉獄傳奇-if_else與case之戰(zhàn)
求問關(guān)于中斷case結(jié)構(gòu)的問題!!!!
優(yōu)化技巧:提前if判斷幫助CPU分支預(yù)測(cè)
Linux Shell系列教程之(十三)Shell分支語句case … esac教程
第十二課 C51開關(guān)分支語句
C語言的switch case多分支選擇語句的詳細(xì)資料說明
CASE:創(chuàng)建多路分支
評(píng)論