一直想寫關于S7-1200VARIANT數據類型的使用,正好昨天看見一個帖子“variant數據類型如何做指針尋址?”,借這機會談一下我在這方面的體會,希望能給大家以幫助。
S7-1200/1500相比S7-300/400,增加了一個重要的數據類型VARIANT,手冊這樣寫:“Variant 數據類型可以指向不同數據類型的變量或參數。Variant指針可以指向結構和單獨的結構元素。 Variant 指針不會占用存儲器的任何空間。”。看上去和ANY指針有異曲同工之處,在TIA PORTAL手冊給出了它們的不同:
我是這么理解的,之所以出現Variant,是因為S7-1200/1500出現了優化塊訪問這種方式,而P#這種方式無法適應現在的優化塊。
對于S7-1200,在V13SP1之前,Variant數據類型除了程序自帶的庫,基本無法使用。
在V13SP1出現后,增加了若干和Variant相關的指令,其中Zui有用的我覺得就是MOVE_BLK_VARIANT和Serialize/Deserialize,其他的只是一些判斷比較,只有這兩個能真正的從Variant提取變量。(VariantGet/VariantPut不提,只能復制完全一樣的變量,目前為止沒發現太多價值的2個指令)
MOVE_BLK_VARIANT:可以看做S7-1200版的非優化的SFC20。輸入輸出不限定于優化或是非優化。非優化塊之間的復制(如果不寫成符號尋址)無所不能,但是只要出現優化塊只能是數組或單個變量。輸入輸出可以是數組名也可以是ANY指針,還可以是單個變量(不一定是數組中的元素),但要求輸入輸出數組元素或者ANY指針的數據類型一致。通常是用來復制數組的部分元素,也可以解決Variant類型的逐個元素復制,配合循環非常好用。
Serialize/Deserialize:主要用于任意塊和非優化塊(BYTE數組或BYTE類型的ANY指針)之間的轉換。對于這種方法來說,既可以在程序中直接使用,也可以做成通用塊(需要一個較大的非優化塊),既可以在LAD使用,也可以在SCL使用,還不用考慮Serialize的輸入和Deserialize的輸出是非優化還是優化塊,可以彌補MOVE_BLK_VARIANT不能覆蓋的優化UDT的復制轉化。和MOVE_BLK_VARIANT類似,利用Variant類型的逐個元素復制,配合循環能實現很多功能。
舉個常見的例子,從模擬量模塊讀入連續多個變量并轉化成工程量,在這之前,主要方法是在SCL中用POLK_BLK寫,有了這兩個指令就不需要了,見下面的例子:
配合數組元素比較類型和元素個數的指令,可以實現程序的通用性。
在這里還需要多說一句:除了EQ_TYPE,EQ_ElemType外,S7-1200中任意非優化變量寫成任意ANY指針格式,指令都會將其認作數組。例如一個REAL數組,寫成P#INT就會被認為為2倍元素個數的INT數組,例如一個TIME類型,寫成P#DWORD,會認為是一個元素的DWORD數組。這點非常有用,根據這個可以輕松實現各種類型的復制,這就是前述MOVE_BLK_VARIANT非優化塊之間的復制(如果不寫成符號尋址)無所不能的原因。當然AT也可以實現,只是提供一種思路。
有了這些鋪墊,就可以回答Zui前面帖子“variant數據類型如何做指針尋址?”的答案了:
- 西門子S7-200 SMART PLC 在食用菌培育實驗室的應用 2024-12-02
- 西門子WINCC 讀取天氣預報-VBS-XML接口 2024-12-02
- 如何將西門子S7 程序中的符號表變量導入到 WinCC 中 2024-12-02
- 基于WINCC和西門子S7-200的PLC無線通訊方案 2024-12-02
- 西門子S7-1500為什么將某一個字中的單一地址定義為PLC數據類型會造成整個字被覆蓋 2024-12-02
- 西門子S7-1200 S7通訊 2024-12-02
- 西門子PLC S7-200常見問題故障及解決辦法 2024-12-02
- 西門子PID參數預整定遇到的兩個問題和解決方法 2024-12-02
- 關于西門子S7-1500中央機架的組態控制功能 2024-12-02
- TIA Portal下S7-1500的PROFINET IO系統的組態控制 2024-12-02
- 關于西門子PLC高速輸出端子與第三方伺服驅動器連接 2024-12-02
- 修改參數可以防止PROFIBUS從站掉站? 2024-12-02
- 西門子博途V14 信息中心幫助文件亂碼解決方法 2024-12-02
- 使用 HMI 變量作為塊輸入輸出參數時,為什么有時會出現通過觸摸屏不能修改 CPU 數據 2024-12-02
- 西門子發布體積Zui小的Sinamics完美無諧波GH180高壓變頻器 2024-12-02
聯系方式
- 電 話:13510737515
- 聯系人:董海波
- 手 機:13185520415
- 微 信:13185520415