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

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

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

S7-1200:DB_ANY類型

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

TIA 博途 V12,S7-1200 V2.0開始,支持DB_ANY類型。

DB_ANY 數(shù)據(jù)類型用來標(biāo)識任意數(shù)據(jù)塊。對于 S7-1200,可以選擇訪問編程期間尚不可用的數(shù)據(jù)塊。為此,在訪問塊的塊接口中創(chuàng)建一個 DB_ANY 數(shù)據(jù)類型的塊參數(shù)。數(shù)據(jù)塊名稱或先前分配給數(shù)據(jù)塊名稱的 DB_ANY 數(shù)據(jù)類型的變量將在運行期間傳送到此參數(shù)。

DB_ANY目前有4種用法以及2個隱藏指令:

1. DB_ANY指向非優(yōu)化DB塊,可以在程序中使用DB_ANY.%絕對地址。

這種方法LAD和SCL都可以使用,這種使用方式類似于S7-300/S7-400的BLOCK_DB,如圖1-2所示。

bfdbaef8-9386-11ec-952b-dac502259ad0.jpg

圖1 指令詳情

SCL的版本,如圖2所示。

bff062c6-9386-11ec-952b-dac502259ad0.jpg

圖2 指令SCL版本

使用這種方式時注意:

(1) CPU編譯時不檢查數(shù)據(jù)類型,可能會出現(xiàn)如圖3所示的錯誤。所以請一定核實數(shù)據(jù)類型。

c001efe6-9386-11ec-952b-dac502259ad0.jpg

圖3 錯誤的數(shù)據(jù)類型

(2)不檢查地址存在與否。如果調(diào)用不存在的地址,CPU會報錯如圖4所示的區(qū)域長度錯誤,所以敬請注意。

c015e3d4-9386-11ec-952b-dac502259ad0.jpg

圖4 區(qū)域長度錯誤

(3)這種絕對地址是不支持變址,例如%DBW[x]不支持。

(4)不支持對符號名的訪問,例如Input_1.Static_1不支持。

DB_ANY作為輸入形參,調(diào)用參數(shù)的時候三種方式:

(1)在DB_ANY參數(shù)引腳填寫DB塊號,如圖5所示

c026db6c-9386-11ec-952b-dac502259ad0.jpg

圖5 參數(shù)為DB塊號

(2)在DB_ANY參數(shù)引腳填寫DB塊符號名,如圖6所示

c036b4ce-9386-11ec-952b-dac502259ad0.jpg

圖6 參數(shù)為DB塊符號名

(3)在DB_ANY參數(shù)引腳填寫DB_ANY類型的變量,如圖7-8所示

c0504fa6-9386-11ec-952b-dac502259ad0.jpg

圖7 參數(shù)為DB_ANY類型變量

c069fec4-9386-11ec-952b-dac502259ad0.jpg

圖8 DB_ANY類型變量的定義

DB_ANY作為輸出、輸入輸出形參,調(diào)用參數(shù)的時候只能參考圖7的方式。

根據(jù)(1)中的程序,計算結(jié)果都是一樣的,如圖9所示。

c079994c-9386-11ec-952b-dac502259ad0.jpg

圖9 計算結(jié)果

2. TIA 博途 V13SP1,S7-1200 V4.0開始,如果DB_ANY指向通過PLC數(shù)據(jù)類型(UDT)或者系統(tǒng)數(shù)據(jù)類型(例如IEC_TIMER等)建立的DB塊

此時S7-1200在SCL中提供了兩個指令用于DB_ANY和Variant類型之間進行轉(zhuǎn)化,如圖10所示,如圖11-12所示為指令參數(shù):

c08de9b0-9386-11ec-952b-dac502259ad0.jpg

圖10 指令位置

c0a56c7a-9386-11ec-952b-dac502259ad0.jpg

參數(shù) 聲明 數(shù)據(jù)類型 說明
in Input DB_ANY 待讀取的數(shù)據(jù)塊
err Output Int 錯誤信息
Ret_val Return Variant Variant類型參數(shù)

圖11 DB_ANY_TO_VARIANT參數(shù)

c0b59078-9386-11ec-952b-dac502259ad0.jpg

參數(shù) 聲明 數(shù)據(jù)類型 說明
in Input Variant Variant類型參數(shù)
err Output Int 錯誤信息
Ret_val Return DB_ANY 待寫入的數(shù)據(jù)塊

圖12 VARIANT_TO_DB_ANY指令參數(shù)

對于這兩個指令,注意:

1. DB_ANY類型實參一定是通過PLC數(shù)據(jù)類型(UDT)或者系統(tǒng)數(shù)據(jù)類型建立的DB塊,否則指令會報錯。

2. Variant類型指向的變量類型,一定要和DB_ANY指向的建立DB塊的數(shù)據(jù)類型相同,否則指令會報錯。

3. DB_ANY_TO_VARIANT是目前S7-1200唯一可以初始化FC/FB/OB的Temp中的Variant變量的指令,如果運行正確,則可以使用后續(xù)Variant處理指令,例如VariantGet,MOVE_BLK_VARIANT,Serialize等。

4. 同(3),VARIANT_TO_DB_ANY所使用的Variant輸入,如果來自于FC/FB/OB的Temp中的Variant變量,也一定是通過DB_ANY_TO_VARIANT初始化過的才可以。

5. 如果形參類型是Variant的FC/FB/指令,在實參填寫了DB塊,要求該DB一定是基于UDT或者系統(tǒng)數(shù)據(jù)類型建立,并且FC/FB/指令將按照UDT或者系統(tǒng)數(shù)據(jù)類型來處理該變量,例如:

這種用法是正確的,輸入是UDT_1類型建的DB,右邊是UDT_1類型的變量,如圖13所示。

c0c3e06a-9386-11ec-952b-dac502259ad0.jpg

圖13 正確使用

這種用法是不正確的,輸入是UDT_1類型建的DB,右邊是DB_ANY類型的變量,如圖14所示。

c0ef74a0-9386-11ec-952b-dac502259ad0.jpg

圖14 錯誤使用

這種方法的使用場合:

如果每種產(chǎn)品有大量數(shù)據(jù),有很多種產(chǎn)品,每種產(chǎn)品的數(shù)據(jù)都是相同結(jié)構(gòu)??梢曰谙嗤Y(jié)構(gòu)建立UDT,每一種產(chǎn)品基于UDT建立DB(也可以在一個DB中建立UDT的數(shù)組,但是從變量名處就無法分清哪種變量對應(yīng)哪種產(chǎn)品)。然后在一個DB塊內(nèi)建立DB_ANY的數(shù)組,在每個DB_ANY變量的起始值處填寫需要指向的DB塊號??梢酝ㄟ^循環(huán)的方式訪問每個DB_ANY,將其轉(zhuǎn)化為UDT,處理后再送回該DB_ANY。

例子1:DB37-DB40均為基于UDT1建立的DB,如圖15所示。DB36建立數(shù)據(jù)類型為Array[0..3] of DB_ANY的變量,如圖16所示,起始值分別是DB37,DB38,DB39,DB40。FC22的參數(shù)InOut為UDT_1類型變量,用于數(shù)據(jù)處理,如圖17所示。FC21多次調(diào)用FC22,如圖18所示。

c104b7ca-9386-11ec-952b-dac502259ad0.jpg

圖15 待使用的DB_ANY引用的數(shù)據(jù)塊

c12066c8-9386-11ec-952b-dac502259ad0.jpg

圖16 DB_ANY數(shù)組及起始值

c1326846-9386-11ec-952b-dac502259ad0.jpg

圖17 用于處理UDT_1類型變量的FC22(程序略)

c14308a4-9386-11ec-952b-dac502259ad0.jpg

圖18 程序詳情

c1639c5e-9386-11ec-952b-dac502259ad0.jpg

圖19 FC21在OB1的調(diào)用

例子2:使用在Modbus上的一個例子。

Modbus輪詢時,通常多次調(diào)用Modbus_Master(或者MB_MASTER),每個Modbus_Maste使用不同的參數(shù)。也可以寫成一個Modbus_Master,這需要在參數(shù)中采取變量的形式,但DATA_PTR這個變量只能采取一種結(jié)構(gòu)、UDT的數(shù)組,或者二維數(shù)組。這種方法可以,但不夠靈活,因為每個站點變量大小結(jié)構(gòu)可能各不相同。現(xiàn)在的話可以通過DB_ANY的方式來做到一個完全通用的Modbus輪詢程序。

前提:TIA 博途 V15,S7-1200 V4.2 版本MODBUS(RTU) V4.0版本,如果不是這些版本,某些功能需要被簡化。

1. TIA 博途 V14,S7-1200 V4.2 ,則Modbus_Master的DATA_PTR只能是非優(yōu)化塊,程序中的Static_2只能作為InOut。

2. S7-1200 V4.0/V4.1,則Array [*] of Struct也將不支持,程序中的InOut_1需要改為Variant,處理程序需要使用MOVE_BLK_VARIANT。

例如:

每個Modbus_Master的站點,需要將其要讀/寫的數(shù)據(jù)結(jié)構(gòu)做成UDT,并生成對應(yīng)DB塊。這里DB42是基于modbus_Instu 這個UDT建立,如圖20所示。

c17e74c0-9386-11ec-952b-dac502259ad0.jpg

圖20 modbus從站數(shù)據(jù)

DB43建立Struct的數(shù)組(最好是UDT的數(shù)組),其元素包含實際的DATA_PTR所在DB塊(參考圖20),以及相關(guān)的Modbus_Master參數(shù)。這個數(shù)組作為FB2的InOut,如圖21所示。該數(shù)組可以根據(jù)站點個數(shù)決定數(shù)組元素個數(shù)。

c19cf63e-9386-11ec-952b-dac502259ad0.jpg

圖21 所有從站的參數(shù)

FB2為modbus具體程序,InOut_1為變長數(shù)組,指向圖21的數(shù)組,如圖22-24所示。

c1be749e-9386-11ec-952b-dac502259ad0.jpg

圖22 FB2參數(shù)

c1e81c22-9386-11ec-952b-dac502259ad0.jpg

圖23 程序詳情1

c207bf82-9386-11ec-952b-dac502259ad0.jpg

圖24 程序詳情2

c219b58e-9386-11ec-952b-dac502259ad0.jpg

圖25 程序在OB1中的調(diào)用

需要注意的是,例子中使用CB1241,因為是RS485模式,所以下面MODE起始值是4,如圖26所示。

c227e47e-9386-11ec-952b-dac502259ad0.jpg

圖26 修改MODE

3. TIA 博途 V15開始,S7-1200 V4.2開始,增加以下指令,用于DB_ANY變量與數(shù)據(jù)類型的比較,見表1。

表1 TypeOfDB指令

LAD SCL 位置
EQ_TypeOfDB TypeOfDB 基本指令 -- 比較操作 -- 變量
NE_TypeOfDB

DB_ANY指向的數(shù)據(jù)塊不限于PLC數(shù)據(jù)類型(UDT)或者系統(tǒng)數(shù)據(jù)類型建立的DB塊,還可以是TO軸的DB塊,以及FB的背景數(shù)據(jù)塊,見表2。

表2 指令參數(shù)

LAD指令 操作數(shù)1 操作數(shù)2 說明
操作數(shù)1
┫EQ_TypeOfDB┣
操作數(shù)2
DB_ANY 數(shù)據(jù)類型 比較操作數(shù)1對應(yīng)的DB是不是基于操作數(shù)2的數(shù)據(jù)類型建立的,是則該指令返回邏輯運算結(jié)果 (RLO)“1”。如果不是則該指令返回 RLO“0”。操作數(shù)2的數(shù)據(jù)類型包括PLC數(shù)據(jù)類型(UDT)、系統(tǒng)數(shù)據(jù)類型、TO軸、FB。
操作數(shù)1
┫NE_TypeOfDB┣
操作數(shù)2
DB_ANY 數(shù)據(jù)類型 較操作數(shù)1對應(yīng)的DB是不是基于操作數(shù)2的數(shù)據(jù)類型建立的,不是則該指令返回邏輯運算結(jié)果 (RLO)“1”。如果是則該指令返回 RLO“0”。操作數(shù)2的數(shù)據(jù)類型包括PLC數(shù)據(jù)類型(UDT)、系統(tǒng)數(shù)據(jù)類型、TO軸、FB。

SCL指令:TypeOfDB(操作數(shù)),操作數(shù)是DB_ANY類型的參數(shù),該語句輸出是數(shù)據(jù)類型,在程序中只能用在IF與CASE進行比較。

用法1:IF指令,操作數(shù)對應(yīng)的類型與一個變量類型的比較,例如:

IF (TypeOfDB(操作數(shù)1) = 變量類型(例如"UDT_1"))
...
END_IF;

用法2:IF指令,兩個操作數(shù)對應(yīng)的類型比較,例如:

IF (TypeOfDB(操作數(shù)1) = TypeOfDB(操作數(shù)2))
...
END_IF;

用法3:CASE OF指令,操作數(shù)對應(yīng)的實參的類型與多個變量類型的比較,例如:

CASE (TypeOfDB(操作數(shù))) OF
UDT_1:
...
UDT_2:
...
ELSE
...
END_CASE;

使用舉例:

編寫FC,檢查輸入DB_ANY變量類型,UDT_1則輸出True,其它則輸出False,如圖27-28所示。

c23f87aa-9386-11ec-952b-dac502259ad0.jpg

圖27 程序詳情

SCL版本程序,如圖28所示。

c2662ffe-9386-11ec-952b-dac502259ad0.jpg

圖28 SCL版本程序

4. S7-1200 V4.2開始,DB_ANY可以開始在運動控制中使用

可以使用在形參為TO_PositioningAxis和TO_CommandTable類型的實參處,包括以下幾種:

(1) 當(dāng)FC/FB的輸入形參數(shù)據(jù)類型為TO_PositioningAxis時,外部實參可以使用DB_ANY數(shù)據(jù)類型的變量。
(2) 在MC_MoveAbsolute/MC_MoveRelative指令的參數(shù)Axis處,實參可以直接使用DB_ANY數(shù)據(jù)類型的變量。
(3) 當(dāng)FC/FB的輸入形參數(shù)據(jù)類型為TO_CommandTable時,外部實參可以使用DB_ANY數(shù)據(jù)類型的變量。
(4) 在MC_CommandTable指令的參數(shù)CommandTable處,實參可以直接使用DB_ANY數(shù)據(jù)類型的變量。

與第2條對應(yīng)的是其他運動控制指令的參數(shù)Axis,直接使用DB_ANY數(shù)據(jù)類型的變量,這種用法會報錯誤,如圖29-30所示。

原因是MC_Power/MC_Reset/MC_Home指令的參數(shù)Axis,類型為TO_Axis。而MC_Halt/MC_MoveVelocity/MC_MoveJog/MC_ChangeDynamic指令的參數(shù)Axis,類型為TO_SpeedAxis。

c279bf1a-9386-11ec-952b-dac502259ad0.jpg

圖29 程序詳情

c2a0a666-9386-11ec-952b-dac502259ad0.jpg

圖30 程序在OB1中的調(diào)用

診斷緩沖區(qū)的報錯如圖31所示:

c2b6f1e6-9386-11ec-952b-dac502259ad0.jpg

圖31 報錯信息

例子,以(1)和(3)為例,實現(xiàn)功能:FB6判斷軸使用的命令表,F(xiàn)B7包含多個軸的FB6功能,如圖32-34所示。

c2d1e60e-9386-11ec-952b-dac502259ad0.jpg

圖32 FB6的參數(shù)設(shè)置

c2eb6e08-9386-11ec-952b-dac502259ad0.jpg

圖33 程序詳情

c315e99e-9386-11ec-952b-dac502259ad0.jpg

圖34 FB7中循環(huán)調(diào)用FB6

最后在OB1調(diào)用FB7即可

優(yōu)勢:

1. 以往和軸有關(guān)的塊都需要逐個調(diào)用,現(xiàn)在利用DB_ANY和FB的數(shù)組,可以用一個循環(huán)完成。

2.命令表的類型 TO_CommandTable只能在Input,Output以及InOut這種外部引腳上,對于需要切換命令表很麻煩,現(xiàn)在用DB_ANY直接在程序內(nèi)部解決。

5. 隱藏指令

在SCL中有兩個用于轉(zhuǎn)化的指令,沒有放在指令列表中:

DB_ANY_TO_UINT以及UINT_TO_DB_ANY,這是DB_ANY和UINT類型之間的轉(zhuǎn)化。使用":="同樣可以完成它們之間的轉(zhuǎn)化。

在LAD中,如果IEC檢查沒有激活,用MOVE指令也可實現(xiàn)DB_ANY和UINT類型之間的轉(zhuǎn)化。

這2個指令對DB_ANY指向的DB塊沒有特殊要求。

審核編輯 :李倩

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

    關(guān)注

    5011

    文章

    13297

    瀏覽量

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

    關(guān)注

    0

    文章

    236

    瀏覽量

    13624

原文標(biāo)題:S7-1200:DB_ANY類型

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

收藏 人收藏

    評論

    相關(guān)推薦

    西門子plc S7-1200/S7-1500優(yōu)化的DB塊與標(biāo)準(zhǔn)的DB塊整體對比

    在 TIA Portal V12 中為S7-1200/S7-1500 CPU 添加一個 DB 塊時,其缺省屬性為優(yōu)化的 DB ,優(yōu)化的 DB
    的頭像 發(fā)表于 07-28 19:55 ?4720次閱讀
    西門子plc <b class='flag-5'>S7-1200</b>/<b class='flag-5'>S7</b>-1500優(yōu)化的<b class='flag-5'>DB</b>塊與標(biāo)準(zhǔn)的<b class='flag-5'>DB</b>塊整體對比

    基于S7-1200的設(shè)備與網(wǎng)絡(luò)組態(tài)

    本文檔內(nèi)容介紹了基于S7-1200的設(shè)備與網(wǎng)絡(luò)組態(tài),以及S7-1200的概要及功能。
    發(fā)表于 09-25 18:14 ?28次下載
    基于<b class='flag-5'>S7-1200</b>的設(shè)備與網(wǎng)絡(luò)組態(tài)

    基于S7-1200的PLC的編程及擴展

    S7-1200 系列是一款可編程邏輯控制器 (PLC, Programmable Logic Controller),可以控制各種自動化應(yīng)用。S7-1200設(shè)計緊湊、成本低廉且具有功能強大的指令集
    發(fā)表于 09-25 18:39 ?24次下載

    WinCC V7.2與S7-1200的PLC通訊

    自WinCC V7.2版本起,軟件新增加了 SIMATIC S7-1200S7-1500 Channel通道,用于WinCC與 S7-1200/S7-1500 PLC之間的通信。此
    發(fā)表于 09-26 19:06 ?11次下載
    WinCC V7.2與<b class='flag-5'>S7-1200</b>的PLC通訊

    S7-1200運動控制的結(jié)構(gòu)及原理

    CPU S7-1200 兼具可編程邏輯控制器的功能和通過脈沖接口控制步進電機和伺服電機運行的運動控制功能。 運動控制功能負責(zé)對驅(qū)動器進行監(jiān)控。DC/DC/DC 型 CPU S7-1200 上配備有
    發(fā)表于 09-29 14:37 ?42次下載
    <b class='flag-5'>S7-1200</b>運動控制的結(jié)構(gòu)及原理

    s7-1200系統(tǒng)手冊

    S7-1200適用
    發(fā)表于 10-23 09:41 ?0次下載

    S7-1200入門手冊

    S7-1200適用
    發(fā)表于 10-23 09:34 ?0次下載

    s7-1200技術(shù)規(guī)范

    S7-1200適用
    發(fā)表于 10-23 09:29 ?0次下載

    S7-1200S7-1200進行S7通信的詳細資料說明

    S7-1200 的 PROFINET 通信口可以做 S7 通信的服務(wù)器端或客戶端(CPU V2.0及以上版本)。S7-1200 僅支持 S7 單邊通信,僅需在客戶端單邊組態(tài)連接和編程,
    的頭像 發(fā)表于 08-17 10:51 ?2.9w次閱讀
    <b class='flag-5'>S7-1200</b>和<b class='flag-5'>S7-1200</b>進行<b class='flag-5'>S7</b>通信的詳細資料說明

    S7-1200DB塊在PLC及觸摸屏上的用法

    S7-1200DB塊在PLC及觸摸屏上的用法
    發(fā)表于 12-17 09:32 ?7次下載
    <b class='flag-5'>S7-1200</b>的<b class='flag-5'>DB</b>塊在PLC及觸摸屏上的用法

    S7-1200中UDT類型變量的使用方法

    今天給大家講解一下S7-1200中UDT類型變量的使用方法,PLC數(shù)據(jù)類型我們也叫做UDT數(shù)據(jù)類型,是由多個不同數(shù)據(jù)類型元素組成的數(shù)據(jù)結(jié)構(gòu),
    的頭像 發(fā)表于 04-18 11:58 ?3830次閱讀
    <b class='flag-5'>S7-1200</b>中UDT<b class='flag-5'>類型</b>變量的使用方法

    S7-1200 PWM功能簡介

    S7-1200 PWM功能簡介。
    發(fā)表于 04-23 14:38 ?43次下載

    S7-1200開放式以太網(wǎng)通信實現(xiàn)數(shù)據(jù)交換

    1.S7-1200 CPU Clinet 將發(fā)送數(shù)據(jù)區(qū) DB4 塊中的 10 個字節(jié)的數(shù)據(jù)發(fā)送到 S7-1200 CPU server 的接收數(shù)據(jù)區(qū) DB4 塊中;
    的頭像 發(fā)表于 02-03 13:40 ?2848次閱讀

    S7-1200S7-300的選型區(qū)別

    在硬件擴展方面,S7-300的主機架多支持八個擴展模塊,而S7-1200支持?jǐn)U展多八個信號模塊和多三個通信模塊。以S7-300 CPU313C和S7-1200 CPU1214C為例,
    的頭像 發(fā)表于 05-04 15:18 ?1707次閱讀
    <b class='flag-5'>S7-1200</b>與<b class='flag-5'>S7</b>-300的選型區(qū)別

    西門子博途中DB_ANY數(shù)據(jù)類型的使用

    DB_ANY 數(shù)據(jù)類型用來標(biāo)識任意數(shù)據(jù)塊。對于 S7-1200/1500 系列的 CPU,可以選擇訪問編程期間尚不可用的數(shù)據(jù)塊。為此,請在訪問塊的塊接口中創(chuàng)建一個 DB_ANY 數(shù)據(jù)
    的頭像 發(fā)表于 07-04 10:17 ?1w次閱讀
    西門子博途中<b class='flag-5'>DB_ANY</b>數(shù)據(jù)<b class='flag-5'>類型</b>的使用