0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Variant類型的變量指令說明

機器人及PLC自動化應(yīng)用 ? 來源:機器人及PLC自動化應(yīng)用 ? 作者:機器人及PLC自動化 ? 2022-03-30 15:13 ? 次閱讀

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;

審核編輯:郭婷

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 指令
    +關(guān)注

    關(guān)注

    1

    文章

    607

    瀏覽量

    35716
  • 數(shù)據(jù)類型
    +關(guān)注

    關(guān)注

    0

    文章

    236

    瀏覽量

    13624

原文標題:S7-1200 比較操作 - 變量 指令說明

文章出處:【微信號:gh_a8b121171b08,微信公眾號:機器人及PLC自動化應(yīng)用】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    Linux環(huán)境變量配置方法

    Linux上環(huán)境變量配置分為設(shè)置永久變量和臨時變量兩種。環(huán)境變量設(shè)置方法同時要考慮環(huán)境Shell類型,不同
    的頭像 發(fā)表于 10-23 13:39 ?171次閱讀

    PLC指令的簡要說明

    PLC(可編程邏輯控制器)的指令雖然因不同的制造商和型號而有所差異,但有一些指令是相對比較通用的。
    的頭像 發(fā)表于 09-18 14:15 ?502次閱讀

    技術(shù)干貨驛站 ▏深入理解C語言:基本數(shù)據(jù)類型變量

    在C語言中,數(shù)據(jù)類型變量是編程的基礎(chǔ),也是理解更復(fù)雜概念的關(guān)鍵。數(shù)據(jù)類型決定了變量的內(nèi)存分配、存儲范圍和操作方式,而變量則是存儲數(shù)據(jù)的容器
    的頭像 發(fā)表于 07-26 17:53 ?2138次閱讀
    技術(shù)干貨驛站 ▏深入理解C語言:基本數(shù)據(jù)<b class='flag-5'>類型</b>和<b class='flag-5'>變量</b>

    RISC-V指令說明哪里有?

    RISC-V指令說明哪里有?匯編指令文檔哪有?
    發(fā)表于 04-30 17:44

    關(guān)于go中接口類型的表示方法

    go是一個靜態(tài)性語言,每個變量都有靜態(tài)的類型,因此每個變量在編譯階段中有明確的變量類型,比如像:int、float32、MyType。
    的頭像 發(fā)表于 04-28 10:13 ?373次閱讀

    鴻蒙TypeScript學(xué)習(xí)第14天:【聯(lián)合類型

    聯(lián)合類型(Union Types)可以通過管道(|)將變量設(shè)置多種類型,賦值時可以根據(jù)設(shè)置的類型來賦值。
    的頭像 發(fā)表于 04-12 15:28 ?452次閱讀
    鴻蒙TypeScript學(xué)習(xí)第14天:【聯(lián)合<b class='flag-5'>類型</b>】

    C語言數(shù)據(jù)類型有哪些

    在 C 語言中,數(shù)據(jù)類型指的是用于聲明不同類型變量或函數(shù)的一個廣泛的系統(tǒng)。變量類型決定了變量
    發(fā)表于 03-20 10:56 ?484次閱讀
    C語言數(shù)據(jù)<b class='flag-5'>類型</b>有哪些

    C語言變量應(yīng)用詳解

    變量其實只不過是程序可操作的存儲區(qū)的名稱。C 中每個變量都有特定的類型類型決定了變量存儲的大小和布局,該范圍內(nèi)的值都可以存儲在內(nèi)存中,運算
    發(fā)表于 03-18 11:18 ?406次閱讀
    C語言<b class='flag-5'>變量</b>應(yīng)用詳解

    字符型、指針型等變量等該如何初始化

     對于數(shù)值類型變量往往初始化為0,但對于其他類型變量,如字符型、指針型等變量等該如何初始化呢?
    的頭像 發(fā)表于 03-18 11:02 ?1476次閱讀

    介紹一下MOVE_BLK_VARIANT指令在使用中應(yīng)注意的問題

    塊移動指令包括兩個:MOVE_BLK和MOVE_BLK_VARIANT,實際項目中都經(jīng)常被用到。
    的頭像 發(fā)表于 03-04 10:51 ?2522次閱讀
    介紹一下MOVE_BLK_<b class='flag-5'>VARIANT</b><b class='flag-5'>指令</b>在使用中應(yīng)注意的問題

    loop指令的用法及功能

    通常分為兩種類型:條件循環(huán)和計數(shù)循環(huán)。條件循環(huán)是根據(jù)循環(huán)條件的真假來判斷是否繼續(xù)執(zhí)行循環(huán)體的代碼,而計數(shù)循環(huán)是通過設(shè)置循環(huán)變量的初始值、終止條件和每次循環(huán)后的變化規(guī)則來控制循環(huán)次數(shù)。 最常見的循環(huán)指令是for循環(huán)
    的頭像 發(fā)表于 02-14 16:12 ?2208次閱讀

    循環(huán)指令loop規(guī)定循環(huán)次數(shù)

    景。 什么是循環(huán)指令 循環(huán)指令是一種迭代控制結(jié)構(gòu),它允許程序多次執(zhí)行相同或類似的代碼塊。循環(huán)指令通常由三個關(guān)鍵組件組成:初始化、條件和更新。初始化用于設(shè)置循環(huán)變量的初始值,條件定義了繼
    的頭像 發(fā)表于 02-14 16:10 ?1676次閱讀

    Harmony 鴻蒙頁面級變量的狀態(tài)管理

    @State裝飾的變量是組件內(nèi)部的狀態(tài)數(shù)據(jù),當這些狀態(tài)數(shù)據(jù)被修改時,將會調(diào)用所在組件的build方法進行UI刷新。 @State狀態(tài)數(shù)據(jù)具有以下特征: 支持多種類型數(shù)據(jù):支持class、number
    的頭像 發(fā)表于 01-25 10:42 ?596次閱讀
    Harmony 鴻蒙頁面級<b class='flag-5'>變量</b>的狀態(tài)管理

    Harmony 鴻蒙應(yīng)用級變量的狀態(tài)管理

    應(yīng)用級變量的狀態(tài)管理 在前面的章節(jié)中,已經(jīng)講述了如何管理頁面級變量的狀態(tài),本章將說明如何管理應(yīng)用級變量的狀態(tài),具體接口說明請參考應(yīng)用級
    的頭像 發(fā)表于 01-24 21:30 ?505次閱讀
    Harmony 鴻蒙應(yīng)用級<b class='flag-5'>變量</b>的狀態(tài)管理

    C語言:指針中內(nèi)存是如何存放變量

    在程序中定義一個變量,那么在程序編譯的過程中,系統(tǒng)會根據(jù)你定義變量類型來分配「相應(yīng)尺寸」的內(nèi)存空間。那么如果要使用這個變量,只需要用變量
    發(fā)表于 01-08 10:14 ?477次閱讀