精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

S7-1200:DB_ANY類型

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

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

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

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

1. DB_ANY指向非優化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編譯時不檢查數據類型,可能會出現如圖3所示的錯誤。所以請一定核實數據類型。

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

圖3 錯誤的數據類型

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

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

圖4 區域長度錯誤

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

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

DB_ANY作為輸入形參,調用參數的時候三種方式:

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

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

圖5 參數為DB塊號

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

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

圖6 參數為DB塊符號名

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

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

圖7 參數為DB_ANY類型變量

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

圖8 DB_ANY類型變量的定義

DB_ANY作為輸出、輸入輸出形參,調用參數的時候只能參考圖7的方式。

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

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

圖9 計算結果

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

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

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

圖10 指令位置

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

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

圖11 DB_ANY_TO_VARIANT參數

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

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

圖12 VARIANT_TO_DB_ANY指令參數

對于這兩個指令,注意:

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

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

3. DB_ANY_TO_VARIANT是目前S7-1200唯一可以初始化FC/FB/OB的Temp中的Variant變量的指令,如果運行正確,則可以使用后續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或者系統數據類型建立,并且FC/FB/指令將按照UDT或者系統數據類型來處理該變量,例如:

這種用法是正確的,輸入是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 錯誤使用

這種方法的使用場合:

如果每種產品有大量數據,有很多種產品,每種產品的數據都是相同結構。可以基于相同結構建立UDT,每一種產品基于UDT建立DB(也可以在一個DB中建立UDT的數組,但是從變量名處就無法分清哪種變量對應哪種產品)。然后在一個DB塊內建立DB_ANY的數組,在每個DB_ANY變量的起始值處填寫需要指向的DB塊號。可以通過循環的方式訪問每個DB_ANY,將其轉化為UDT,處理后再送回該DB_ANY。

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

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

圖15 待使用的DB_ANY引用的數據塊

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

圖16 DB_ANY數組及起始值

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的調用

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

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

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

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

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

例如:

每個Modbus_Master的站點,需要將其要讀/寫的數據結構做成UDT,并生成對應DB塊。這里DB42是基于modbus_Instu 這個UDT建立,如圖20所示。

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

圖20 modbus從站數據

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

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

圖21 所有從站的參數

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

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

圖22 FB2參數

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

圖23 程序詳情1

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

圖24 程序詳情2

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

圖25 程序在OB1中的調用

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

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

圖26 修改MODE

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

表1 TypeOfDB指令

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

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

表2 指令參數

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

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

用法1:IF指令,操作數對應的類型與一個變量類型的比較,例如:

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

用法2:IF指令,兩個操作數對應的類型比較,例如:

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

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

CASE (TypeOfDB(操作數)) 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) 當FC/FB的輸入形參數據類型為TO_PositioningAxis時,外部實參可以使用DB_ANY數據類型的變量。
(2) 在MC_MoveAbsolute/MC_MoveRelative指令的參數Axis處,實參可以直接使用DB_ANY數據類型的變量。
(3) 當FC/FB的輸入形參數據類型為TO_CommandTable時,外部實參可以使用DB_ANY數據類型的變量。
(4) 在MC_CommandTable指令的參數CommandTable處,實參可以直接使用DB_ANY數據類型的變量。

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

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

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

圖29 程序詳情

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

圖30 程序在OB1中的調用

診斷緩沖區的報錯如圖31所示:

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

圖31 報錯信息

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

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

圖32 FB6的參數設置

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

圖33 程序詳情

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

圖34 FB7中循環調用FB6

最后在OB1調用FB7即可

優勢:

1. 以往和軸有關的塊都需要逐個調用,現在利用DB_ANY和FB的數組,可以用一個循環完成。

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

5. 隱藏指令

在SCL中有兩個用于轉化的指令,沒有放在指令列表中:

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

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

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

審核編輯 :李倩

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • plc
    plc
    +關注

    關注

    5008

    文章

    13167

    瀏覽量

    462191
  • 數據類型
    +關注

    關注

    0

    文章

    236

    瀏覽量

    13610

原文標題:S7-1200:DB_ANY類型

文章出處:【微信號:gh_a8b121171b08,微信公眾號:機器人及PLC自動化應用】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    西門子plc S7-1200/S7-1500優化的DB塊與標準的DB塊整體對比

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

    基于S7-1200的設備與網絡組態

    本文檔內容介紹了基于S7-1200的設備與網絡組態,以及S7-1200的概要及功能。
    發表于 09-25 18:14 ?28次下載
    基于<b class='flag-5'>S7-1200</b>的設備與網絡組態

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

    S7-1200 系列是一款可編程邏輯控制器 (PLC, Programmable Logic Controller),可以控制各種自動化應用。S7-1200設計緊湊、成本低廉且具有功能強大的指令集
    發表于 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之間的通信。此
    發表于 09-26 19:06 ?11次下載
    WinCC V7.2與<b class='flag-5'>S7-1200</b>的PLC通訊

    S7-1200運動控制的結構及原理

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

    s7-1200系統手冊

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

    S7-1200入門手冊

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

    s7-1200技術規范

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

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

    S7-1200 的 PROFINET 通信口可以做 S7 通信的服務器端或客戶端(CPU V2.0及以上版本)。S7-1200 僅支持 S7 單邊通信,僅需在客戶端單邊組態連接和編程,
    的頭像 發表于 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及觸摸屏上的用法
    發表于 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數據類型我們也叫做UDT數據類型,是由多個不同數據類型元素組成的數據結構,
    的頭像 發表于 04-18 11:58 ?3780次閱讀
    <b class='flag-5'>S7-1200</b>中UDT<b class='flag-5'>類型</b>變量的使用方法

    S7-1200 PWM功能簡介

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

    S7-1200開放式以太網通信實現數據交換

    1.S7-1200 CPU Clinet 將發送數據區 DB4 塊中的 10 個字節的數據發送到 S7-1200 CPU server 的接收數據區 DB4 塊中;
    的頭像 發表于 02-03 13:40 ?2814次閱讀

    S7-1200S7-300的選型區別

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

    西門子博途中DB_ANY數據類型的使用

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