從TIA V13SP1 開始,S7-1200 V4.0開始,支持以下處理Variant類型的變量的指令,如圖1所示。
圖1 指令位置
VariantGet、VariantPut
圖2 VariantGet指令詳情
圖3 VariantPut指令詳情
VariantGet
表1 VariantGet指令說明
參數(shù) | 聲明 | 數(shù)據(jù)類型 | 說明 |
---|---|---|---|
SRC | Input | Variant | 待讀取的變量 |
DST | Output | 基本數(shù)據(jù)類型、復雜數(shù)據(jù)類型 | 讀取的結(jié)果 |
注意:DST不能是復雜數(shù)據(jù)類型的數(shù)組。
說明:
1. VariantGet的SRC是FC/FB的Input/Output/InOut/Temp以及OB的Temp中定義為Variant類型的參數(shù)。
2. VariantGet將Variant參數(shù)指向的變量讀取到DST中,要求Variant參數(shù)指向的變量一定要和DST的變量類型相同。
3. 建議讀取之前使用IS_NULL判斷Variant是否指向NULL。通過Variant判斷指令確定指向的變量類型,或者數(shù)組類型。
4. 如果雙方是相同元素的數(shù)組類型,其長度可以不同,讀取時只按照雙方中元素少的數(shù)量讀取。
5. 如果雙方類型不相同,則不會發(fā)生讀取。如果激活指令的ENO功能,則ENO=False。
VariantPut
表2 VariantPut指令說明
參數(shù) | 聲明 | 數(shù)據(jù)類型 | 說明 |
---|---|---|---|
SRC | Input | 基本數(shù)據(jù)類型、復雜數(shù)據(jù)類型 | 待讀取的變量 |
DST | Input | Variant | 讀取的結(jié)果 |
注意:SRC不能是復雜數(shù)據(jù)類型的數(shù)組。
1. VariantPut的DST是FC/FB的Input/Output/InOut/Temp以及OB的Temp中定義為Variant類型的參數(shù)。
2. VariantPut將SRC的變量寫入到Variant參數(shù)指向的變量中,要求Variant參數(shù)指向的變量一定要和SRC的變量類型相同。
3. VariantPut無法初始化一個Variant類型變量。所以建議寫入之前使用IS_NULL判斷Variant是否指向NULL。通過Variant判斷指令確定指向的變量類型,或者數(shù)組類型。
4. 如果雙方是相同元素的數(shù)組類型,其長度可以不同,讀取時只按照雙方中元素少的數(shù)量讀取。
5. 如果雙方類型不相同,則不會發(fā)生讀取。如果激活指令的ENO功能,則ENO=False。
使用場合:
通常,VariantGet、VariantPut用在不定長度數(shù)組,但數(shù)組長度有固定上限時,或者有多種數(shù)據(jù)類型的數(shù)組時,都會非常高效。
此外,這兩個指令還可以配合DB_ANY_TO_VARIANT與VARIANT_TO_DB_ANY實現(xiàn)更多功能。
使用舉例:
編寫FC16,根據(jù)不同的輸入類型,調(diào)用不同F(xiàn)C17和FC18,F(xiàn)C17的InOut為“VGP1”,F(xiàn)C18的InOut為“VGP2”,如圖4圖5所示。
圖4 參數(shù)設置
圖5 例子程序
CountOfElements
LAD | 操作數(shù) | 說明 |
---|---|---|
Variant | 如果操作數(shù)對應的實參為數(shù)組或者P#指針格式,該指令返回元素總個數(shù),否則返回0。返回值RET_VAL為UDInt類型。操作數(shù)是FC/FB的Input/Output/InOut/Temp以及OB的Temp中定義為Variant類型的參數(shù)。 |
CountOfElements(操作數(shù)),操作數(shù)是FC/FB的Input/Output/InOut/Temp中定義為Variant類型的參數(shù),如果操作數(shù)對應的實參為數(shù)組或者P#指針格式,CountOfElements(操作數(shù))為元素總個數(shù)。
注意:
1. 如果Variant指向單個變量,則返回0。
2. 如果Variant 指向 Array of Bool,則填充元素包含在計數(shù)中。(例如,Array[0..1] of Bool 將返回 8)。
使用方法:
元素個數(shù)(UDInt) := CountOfElements(操作數(shù));
使用舉例:
編寫FC,檢查輸入的3個Variant變量類型,分別判斷實參是否是數(shù)組形式,如果是則輸出True,不是則輸出False,此外如果是數(shù)組則輸出數(shù)組元素個數(shù),不是則輸出0,如圖6-9所示。
圖6 參數(shù)設置
圖7 例子程序1
圖8 例子程序2
圖9 FC10的調(diào)用
由圖9中可知,Array[0..1] of "UDT_1"是數(shù)組,元素個數(shù)是2,Array[0..1, 0..2] of Byte是數(shù)組,該二維數(shù)組元素總個數(shù)是2×3=6,P#M100.0 BYTE 2視作數(shù)組,元素個數(shù)是2。
審核編輯:劉清
-
ENOB
+關注
關注
2文章
14瀏覽量
13558 -
DST
+關注
關注
0文章
9瀏覽量
9728 -
SRC
+關注
關注
0文章
60瀏覽量
17993
原文標題:移動操作 - 變量 指令說明
文章出處:【微信號:gh_a8b121171b08,微信公眾號:機器人及PLC自動化應用】歡迎添加關注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論