一、概述
工業控制系統使用中,上位機組態軟件、HMI觸摸屏等顯示設備與控制設備PLC按指定通訊協議進行數據交換是最為基本的功能了,以施耐德Modbus TCP協議為例,只要提供了支持此協議的PLC中變量的Modbus寄存器地址和數據類型,不管此PLC是哪個廠家的,都能實現HMI與PLC之間的數據交換。
二、問題的引出
目前PLC編程的主流思路不再是使用基于絕對地址的定位變量了,而是使用變量名+數據類型的非定位變量方式。以施耐德M580為例,其X80的I/O模塊的通道值都是用Device DDT非定位變量表示的,并且不能直接指定%M、%MW等地址與其對應上。
這種表示方式對于OPC DA/UA及施耐德自己的HMI觸摸屏來說沒有什么問題,可以直接對應上,但是對于支持標準Modbus TCP協議的其它廠家觸摸屏和上位機組態軟件來說就不方便了,因為需要變量對應上標準Modbus寄存器地址才行。
三、解決辦法
孔乙己說過,回字有四種寫法。同樣的,解決上述問題也有多種方法可以實現。思路是將M580里面的DDT地址對應到%M及%MW寄存器中,從而能和HMI進行MODBUS TCP通訊,
3.1復制 Device DDT變量類型直接鏈接絕對地址
此種方法的思路是新建一個結構體變量,類型輸入與X80 I/O模塊數據類型一致如T_U_DIS_STD_IN_32,然后編寫程序鏈接上絕對地址如%MW10,詳見下圖:
第一種方法比較費地址數量,適用于I/O模塊不多,地址富余的工程項目。
如果I/O模塊過多,可以嘗試利用FOR循環編程批量鏈接地址的方式,如下圖:每一個I/O模塊使用一個FOR循環指令,將通道值(.VALUE)鏈接到%M或者%MW寄存器地址。
這種方式的優勢在于省寄存器地址,不像方法1,不管開關量還是模擬量,都必須關聯%MW寄存器地址,而且不需要的狀態等DDT變量也必須鏈接%MW寄存器地址。不過,ST編程FOR循環鏈接絕對地址有一個缺點,就是因為DDT變量名稱太過接近并且I/O模塊通道數不一樣,修改的時候容易眼花誤操作。
3.3編寫自定義DFB功能塊鏈接絕對地址
舉例32通道點X80的DI模塊,DDT中變量眾多,我們只需要轉換32個通道數值即可;
新建DFB塊DI_EXCHANGE,輸入管腳DI_INT,數據類型T_U_DIS_STD_IN_32(調用DFB時,輸入就可只填寫MOD_DIS_32_2),輸出管腳DO_OUT,數據類型ARRAY[0..31] OF EBOOL;
編寫邏輯程序,采用ST編程方式,把輸入點的值一個一個賦值到輸出,鏈接到%M寄存器,然后在MAST里面程序段中調用DI_EXCHANG即可,實現32點的DI模塊的通道值批量鏈接到了%M中。
同樣的,32點DO模塊的處理方法是類似的,新建X80_DDO_32,定義輸入IN1,數據類型T_U_DIS_STD_OUT_32,輸出OUT1,OUT2,數據類型INT,編寫ST程序鏈接上%M寄存器,在MAST里面調用新建的功能塊X80_DDO_32即可。
這些DFB功能塊做好后直接右鍵導出的功能塊類型XDB格式,可以再導入到其它程序段中直接調用即可,移植方便,無須再次制作此DFB塊。
四 小結
針對M580的X80 I/O模塊的通道值都是用Device DDT非定位變量表示,并且不能直接指定%M、%MW等地址與其對應上,但是觸摸屏和上位機組態軟件來說需要變量對應上標準Modbus寄存器地址的問題,提出了3種解決方法。這3種方法特點明確,各有優劣。
復制 Device DDT變量類型直接鏈接絕對地址法簡單明晰,適合剛入施耐德編程大門的初級工程師;ST編程FOR循環鏈接絕對地址法和編寫自定義DFB功能塊鏈接絕對地址法對工程師編程水平要求稍高,通用性更強,適合對施耐德Unity軟件編程操作有一定了解的工程師使用。
不管白貓還是黑貓,能夠抓住老鼠的貓就是好貓,同樣,不管使用何種方法操作,能耐解決實際問題就是工程師能力的體現,解決上述問題的方法也不止這三種,更多的可能性等待你去探索實踐。
編輯:jq
-
plc
+關注
關注
5016文章
13369瀏覽量
464649 -
DFB
+關注
關注
1文章
27瀏覽量
9931 -
OPC
+關注
關注
7文章
349瀏覽量
46263 -
HMI
+關注
關注
9文章
596瀏覽量
48648
原文標題:施耐德M580系列的X80 I/O模塊通道值非定位Device DDT變量鏈接到定位變量方法
文章出處:【微信號:TalkBT,微信公眾號:藍牙】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
圖紙模板中的文本變量
![圖紙模板中的文本<b class='flag-5'>變量</b>](https://file1.elecfans.com//web1/M00/F4/D5/wKgZoWcy18-AG-szAAJXO8IiHgQ099.png)
如何在文本字段中使用上標、下標及變量
![如何在文本字段中使用上標、下標及<b class='flag-5'>變量</b>](https://file1.elecfans.com//web1/M00/F4/DC/wKgaoWcy2N-AeA-xAAE3VhR0Bd8575.png)
Linux環境變量配置方法
Keil中變量不被初始化方法
![Keil中<b class='flag-5'>變量</b>不被初始化<b class='flag-5'>方法</b>](https://file.elecfans.com/web2/M00/09/16/pYYBAGD0FvWAeWpFAAAb1Fux1oA753.jpg)
請問頭文件能不能定義變量呢?
全局變量太多有哪些弊端?
TSMaster如何同時記錄標定變量和DBC信號至BLF文件
![TSMaster如何同時記錄標定<b class='flag-5'>變量</b>和DBC信號至BLF文件](https://file.elecfans.com/web2/M00/40/07/pYYBAGJrUk2AaMaTAAAQONQtdzo461.jpg)
C語言變量應用詳解
![C語言<b class='flag-5'>變量</b>應用詳解](https://file1.elecfans.com/web2/M00/C4/BC/wKgZomX3sv2AGVWeAABMt9agjcE672.png)
Linux系統中設置環境變量的方法和技巧
![Linux系統中設置環境<b class='flag-5'>變量</b>的<b class='flag-5'>方法</b>和技巧](https://file1.elecfans.com/web2/M00/BF/2C/wKgZomW7C8yAaUV-AABzQWpcKbQ210.png)
Harmony 鴻蒙頁面級變量的狀態管理
![Harmony 鴻蒙頁面級<b class='flag-5'>變量</b>的狀態管理](https://file1.elecfans.com/web2/M00/BE/2B/wKgZomWw_HiAKpg_AABYUWHyQe4370.png)
Harmony 鴻蒙應用級變量的狀態管理
![Harmony 鴻蒙應用級<b class='flag-5'>變量</b>的狀態管理](https://file1.elecfans.com//web2/M00/BE/2E/wKgZomWxEQmAW0LoAAGCOTKrbZw309.gif)
評論