西門子SCL編程入門教程連載(15)-Variant類型
西門子S7-1200/1500系列PLC提供Variant數(shù)據(jù)類型用于對數(shù)據(jù)進(jìn)行引用,有著比ANY類型更強(qiáng)大的功能。今天這篇文章,我們就來聊聊Variant類型,并使用SCL語言編寫一個簡單的例程。
本文包括如下幾個主題:
1、認(rèn)識Variant類型;
2、Variant與ANY類型的區(qū)別;
3、Variant類型使用示例

1、認(rèn)識Variant類型
Variant是西門子S7-1200/1500系列PLC支持的一種新數(shù)據(jù)類型,它是一種可以指向基本數(shù)據(jù)類型、復(fù)雜數(shù)據(jù)類型或者用戶自定義類型的引用。Variant的使用限于FB/FC/OB的形參,也就是說,只能在FB/FC/OB的參數(shù)列表中聲明某個參數(shù)的類型為Variant,但FB的靜態(tài)參數(shù)列表除外,也不能聲明數(shù)據(jù)塊(DB)的元素為Variant類型;
可以給FB/FC的Variant形參賦任何類型的變量,調(diào)用該FB/FC時,不僅會傳遞變量的值,而且會傳遞變量的類型;可以使用SCL指令TypeOf識別變量的類型并做相應(yīng)的處理;
2、Variant與ANY類型的區(qū)別
有兩點:
-
兩者支持的數(shù)據(jù)類型不同
ANY可以指向輸入緩存區(qū)(I)、輸出緩存區(qū)(Q)、外設(shè)(PI/PO)、位存儲區(qū)(M)、數(shù)據(jù)塊(DB)等存儲區(qū),支持基本數(shù)據(jù)類型、字符串等;但不支持?jǐn)?shù)組、用戶自定義類型等復(fù)雜數(shù)據(jù)類型;
Variant可以引用幾乎所有的數(shù)據(jù)類型(數(shù)組、結(jié)構(gòu)、UDT)的變量,比ANY功能強(qiáng)大;
注:S7-300/400/1500支持ANY類型 -
占用空間大小不同
ANY需要占用10個字節(jié)的存儲空間,當(dāng)把一個變量定義為ANY類型時,無論其是否指向目標(biāo)變量,都要占用10個字節(jié)的存儲空間;
Variant不占用背景數(shù)據(jù)塊或者工作存儲器的空間。Variant只是對另一個實例(可以理解為變量)的引用,相當(dāng)于該實例的一個別名。在使用Variant指向該實例時,該實例已經(jīng)被創(chuàng)建了;
3、Variant類型使用示例
舉個例子,創(chuàng)建一個功能,名稱為FC_VariantDemo,參數(shù)如下:
輸入:
-
oprand1,Variant類型;
-
oprand2,Variant類型;
輸出:
-
ouput1,INT類型;
-
ouput2,TIME類型;
FC功能描述:
-
若oprand1和oprand2的類型為整數(shù),將兩者相加,并將結(jié)果輸出到output1中;
-
若oprand1和oprand2的類型為TIME,將兩者相加,并將結(jié)果輸出到output2中;
參數(shù)聲明如下圖:

代碼如下:

上述代碼中的TypeOf指令用來判斷變量的類型,VariantGet指令可以訪問一個Variant引用并獲取其真實的數(shù)值及類型;這兩個指令及其它與Variant操作的指令我們將在下一篇文章詳細(xì)介紹。
創(chuàng)建DB_VariantDemo,添加元素如下:

在OB1中調(diào)用FC_VariantDemo的示例如下圖所示:

好了,關(guān)于Variant類型就先介紹這么多。我開通了微信視頻號,以視頻的方式分享工控小知識。具有視頻號內(nèi)測權(quán)限的小伙伴歡迎掃描下方的二維碼關(guān)注我的視頻號:
-
Origin(Pro):學(xué)習(xí)版的窗口限制【數(shù)據(jù)繪圖】 2020-08-07
-
如何卸載Aspen Plus并再重新安裝,這篇文章告訴你! 2020-05-29
-
CAD視口的邊框線看不到也選不中是怎么回事,怎么解決? 2020-06-04
-
教程 | Origin從DSC計算焓和比熱容 2020-08-31
-
Aspen Plus安裝過程中RMS License證書安裝失敗的解決方法,親測有效! 2021-10-15
-
CAD外部參照無法綁定怎么辦? 2020-06-03
-
CAD中如何將布局連帶視口中的內(nèi)容復(fù)制到另一張圖中? 2020-07-03
