TIA V13SP1 開始,S7-1200 V4.0開始,支持以下處理Variant類型的變量的指令,如圖1-2所示。

圖1 LAD中Variant類型的變量比較操作指令

圖2 SCL中Variant類型的變量比較操作指令
注:EQ_TypeOfDB、NE_TypeOfDB、TypeOfDB指令參見DB_ANY。
EQ_Type、NE_Type、TypeOf
表1 LAD指令詳情

SCL指令:TypeOf(操作數(shù)),操作數(shù)是FC/FB的Input/Output/InOut/Temp中定義為Variant類型的參數(shù),該語句輸出是數(shù)據(jù)類型,在程序中只能用在IF與CASE進行比較。
用法1:IF指令,操作數(shù)對應(yīng)的實參的類型與一個變量類型的比較,例如:
IF (TypeOf(操作數(shù)1) = 變量類型(例如Byte))
。..
END_IF;
用法2:IF指令,兩個操作數(shù)對應(yīng)的實參的類型比較,例如:
IF (TypeOf(操作數(shù)1) = TypeOf(操作數(shù)2))
。..
END_IF;
用法3:CASE OF指令,操作數(shù)對應(yīng)的實參的類型與多個變量類型的比較,例如:
CASE (TypeOf(操作數(shù))) OF
Byte:
。..
Int:
。..
ELSE
。..
END_CASE;
使用舉例:
編寫FC,檢查輸入Variant變量類型,Byte則輸出True,其它則輸出False,如圖3-6所示。

圖3 FC6參數(shù)定義

圖4 程序詳情
SCL的版本程序,如圖5所示。

圖5 SCL版本的程序
OB1多次調(diào)用該FC6,可以看到結(jié)果,“DB16”.Static_1是Byte類型,“DB16”.Static_3不是Byte類型。

圖6 OB1多次調(diào)用FC6
EQ_ElemType、NE_ElemType、TypeOfElements
表2 LAD指令說明

SCL指令:TypeOfElements(操作數(shù)),操作數(shù)是FC/FB的Input/Output/InOut/Temp中定義為Variant類型的參數(shù),該語句輸出是數(shù)據(jù)類型,在程序中只能用在IF與CASE進行比較。
比較之前,通常先使用IS_ARRAY檢查操作數(shù)對應(yīng)的實參是否是數(shù)組類型。
用法1:IF指令,操作數(shù)對應(yīng)的實參為數(shù)組類型,對該數(shù)組元素的類型與一個變量類型的比較,例如:
IF (TypeOfElements(操作數(shù)1) = 變量類型(例如Byte))
。..
END_IF;
用法2:IF指令,兩個操作數(shù)對應(yīng)的實參均為數(shù)組類型的類型,比較它們數(shù)組元素的類型,例如:
IF (TypeOfElements(操作數(shù)1) = TypeOfElements(操作數(shù)2))
。..
END_IF;
用法3:CASE OF指令,操作數(shù)對應(yīng)的實參為數(shù)組類型,對該數(shù)組元素的類型與多個變量類型的比較,例如:
CASE (TypeOfElements(操作數(shù))) OF
Byte:
。..
Int:
。..
ELSE
。..
END_CASE;
注意
1.如果上述三種用法操作數(shù)不是數(shù)組類型,但是數(shù)據(jù)類型和比較對象的數(shù)據(jù)類型相同,也會當做該數(shù)據(jù)類型的數(shù)組進行處理,相當于執(zhí)行的TypeOf指令。
2.用法2,也可以是這樣的:
IF (TypeOfElements(操作數(shù)1) = TypeOf(操作數(shù)2))
。..
END_IF;
或者
IF (TypeOf(操作數(shù)1) = TypeOfElements(操作數(shù)2))
。..
END_IF;
即一邊是數(shù)組,一邊不是數(shù)組的比較。
使用舉例:
編寫FC,檢查輸入Variant變量類型,數(shù)組元素如果是Byte則輸出1為True,輸出2為False,數(shù)組元素如果是Int則輸出1為False,輸出2為True,其余情況輸出1為False,輸出2為False,如圖7-10所示。

圖7 FC7參數(shù)定義

圖8 程序詳情
SCL的版本程序,如圖9所示。

圖9 SCL版本的程序
OB1多次調(diào)用該FC7,可以看到結(jié)果,“DB17”.Static_1是Byte數(shù)組,“DB17”.Static_4是Int數(shù)組,“DB17”.Static_7不是以上兩種類型。

圖10 OB1多次調(diào)用FC7
IS_NULL、NOT_NULL
表3 LAD指令說明

對于SCL,雖然沒有相對應(yīng)指令,但是可以在IF指令中,將Variant變量與NULL比較
IF (操作數(shù) = NULL)
。..
END_IF;
理論上來說,對于每個參數(shù)出現(xiàn)了Variant的FC/FB,都應(yīng)該檢查該Variant變量是否指向了空指針,此處的空指針不一定是形參填寫NULL,也有可能填寫沒有初始化的Temp中的Variant。
對于最新的S7-1200 V4.2版本,只有一種情況可以初始化Temp中的Variant,就是指令DB_ANY_TO_VARIANT(參見DB_ANY),同時運行沒有錯誤,否則Temp中的Variant就相當于NULL。
使用舉例:
程序架構(gòu):OB1調(diào)用FC9,F(xiàn)C9調(diào)用FC8,F(xiàn)C8中檢查3個輸入是否是NULL,是則輸出True,不是則輸出False,F(xiàn)C9的3個Temp變量作為FC8的3個輸入,Temp_1是不賦值的Int變量,Temp_2和Temp_3是通過DB_ANY_TO_VARIANT初始化的Variant變量,其中為Temp_2初始化的DB1是不滿足DB_ANY_TO_VARIANT條件的DB塊,為Temp_3初始化的DB19是不滿足DB_ANY_TO_VARIANT條件的DB塊,最終將FC8的3個輸出關(guān)聯(lián)FC9的3個輸出至OB1中顯示,如圖11-13所示。

圖11 FC8程序詳情

圖12 FC9程序詳情
OB1調(diào)用FC9

圖13 OB1調(diào)用FC9
從圖13中可知,不滿足DB_ANY_TO_VARIANT條件的DB1初始化的Temp_2相當于NULL,其余兩個都可以視作有明確指向。
IS_ARRAY
表4 LAD指令說明

SCL指令:
IS_ARRAY(操作數(shù)),操作數(shù)是FC/FB的Input/Output/InOut/Temp中定義為Variant類型的參數(shù),當操作數(shù)對應(yīng)的實參為數(shù)組或者P#指針格式,IS_ARRAY(操作數(shù)) 為True,否則IS_ARRAY(操作數(shù)) 為False。
使用方法:
IF IS_ARRAY(操作數(shù)) THEN
。..
END_IF;
審核編輯:郭婷
-
指令
+關(guān)注
關(guān)注
1文章
617瀏覽量
37268 -
數(shù)據(jù)類型
+關(guān)注
關(guān)注
0文章
237瀏覽量
14092
原文標題:S7-1200 比較操作 - 變量 指令說明
文章出處:【微信號:gh_a8b121171b08,微信公眾號:機器人及PLC自動化應(yīng)用】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
關(guān)于協(xié)處理器自定義指令的實現(xiàn)
對浮點指令擴展中一些問題的解決與分享
蜂鳥自定義指令軟件講解和內(nèi)聯(lián)匯編(一)
利用蜂鳥內(nèi)核實現(xiàn)指令的仿真模擬
利用蜂鳥內(nèi)核來實現(xiàn)指令的仿真模擬
對浮點指令擴展中部分問題的解決與分享
Vector向量指令集簡介(一)
rt-thread studio怎么設(shè)置才能讓char變量是真正的有符號類型?
NVME控制器之指令控制模塊設(shè)計
Ansible Playbook中的變量使用技巧
RISC-V基礎(chǔ)指令詳解
三菱PLC常用指令說明
圖紙模板中的文本變量
如何在文本字段中使用上標、下標及變量

Variant類型的變量指令說明
評論