汪韓韓,楊 輝,張 華,朱淑云
(1. 南昌大學 機器人研究所,南昌 330031;2. 華東交通大學 科研處,南昌 330013;3. 南昌大學 教務處,南昌330031;4. 南昌大學 科學技術學院,南昌 330031)
MODBUS RTU協(xié)議是莫迪康公司發(fā)明的一種廣泛應用于自動化控制領域的工業(yè)通訊標準。協(xié)議規(guī)定,控制器之間通訊采用主從技術,即主機可對各從機尋址,發(fā)出廣播信息,從機返回信息作為對查詢的響應[1]。該協(xié)議支持RS-232、RS-422、RS-485和Ethernet等多種接口類型的通訊設備。而本文研究的是基于RS-485接口,采用MODBUS RTU通信協(xié)議,組態(tài)王作為主端,智能儀表為從端,進行相互握手、互相數據交換,并且利用KingView6.5開發(fā)平臺對通訊過程進行實時監(jiān)測和管理,從而完成整個通信系統(tǒng)的設計和實現。
控制器以RTU模式在MODBUS總線上通訊時,具體信息格式定義如表1所示。
MAC_ID:設備地址,組態(tài)王對智能儀表從端的訪問地址,定義為01,如若是多機通訊,可以依次疊加02,03…;
Function ID:功能代碼,組態(tài)王對智能儀表從端的命令操作;
Ptr Addr:待查詢數據起始地址,2字節(jié),首字節(jié)為高地址;
Ptr Numb:待查詢數據數量,2字節(jié),從起始地址開始,地址依次加一;
CRC:循環(huán)冗余校驗碼,2字節(jié),從MAC_ID至Ptr numb計算CRC值,如計算值與實際值相同則傳送正確;若不相同證明錯誤,丟棄該幀,重新檢測;
T1-T2-T3-T4:靜止時間,當發(fā)送或接收數據時需延時>3.5個字符;
除主機查詢模式下的數據格式外,還有主機寫數據、從機應答等數據格式,具體見MODBUS協(xié)議標準,這里不再重復敘述。
基本通訊參數配置為:波特率9600bps,數據位8位,無奇偶校驗,停止位1位,通訊方式RS485總線傳輸模式,通訊超時時間1000ms。
從站設備COM配置可按配置向導依次進行。選擇驅動——莫迪康MODBUS RTU(COM),定義邏輯名稱——智能儀表01,選擇串行口——COM1,選擇設備地址——1.0(1為設備地址,不打包),嘗試恢復時間與最長恢復時間——30s和24h。如需配置多臺智能儀表,方法類似[2]。
配置完設備端口之后,則需要在數據詞典定義變量,如表2所示。
表1 數據傳輸格式
表2 數據詞典用戶變量
智能儀表作為從機端,硬件配置為485總線接口,軟件一般使用固化好的通信協(xié)議或自主開發(fā)編程設計,這里給出示例。以Stc89c52為例,利用串行中斷進行MODBUS RTU通訊設計,其中T2計數器用于產生9600bps波特率,22M晶振下,初始值設置為TL2=0xCC,TH2=0xCD,中斷服務子程序如圖1所示。
圖1 發(fā)送接收串行中斷服務子程序
單片機應答程序是主程序Main()函數中的,詳細流程圖如圖2所示。為滿足通訊需求,我們需要分析串口接收的命令,對不同的功能指令做出相應的答復。首先,對接收命令中數據依次進行校驗,包括地址碼校驗、功能碼校驗、CRC校驗、地址范圍校驗等,若出錯則給出相應的出錯指令。其次,根據功能碼把與單片機相對應的地址、數據等一一寫入待發(fā)送數組中,具體發(fā)送格式依功能碼的不同而不同,詳細參考《MODBUS中文協(xié)議手冊》。最后,啟動發(fā)送函數BeginSend(),將發(fā)送數據發(fā)送至發(fā)送接收緩存區(qū)[3]。
應答流程圖中只給出了1、3、5、16四種功能碼指令,即足以滿足實現本文對組態(tài)王中離散變量和模擬變量讀寫操作要求,如需添加強制多個線圈、預置單個寄存器等功能指令,可進行額外拓展,見圖中省略部分。
為滿足實時調試和監(jiān)控相關的參數與狀態(tài),開發(fā)相應的組態(tài)王通訊調試界面,如圖3所示。其中1號參變量設定為:DI1~DI8分別用兩組黃、綠、紅、藍的按鍵顯示輸入狀態(tài)10101100,當為1時按鍵按下,當為0時按鍵彈起;DO1~DO8分別用兩組黃、綠、紅、藍的LED燈表示輸出狀態(tài)01010011,當為1時燈亮,當為0時燈滅;AI1~AI8分別顯示輸入寄存器值11,22,33,444,555,666,7777,8888;AO1~AO8則分別表示預置寄存器值8888,7777, 666, 555,444,33,22,11。另外,2號參變量設置:DI1~DI8分別讀入00111000;DO1~DO8分別寫出11000111;AI1~AI8分別讀入6,216,56,7676,356,46,1986,66;AO1~AO8分別寫出66,1986,46,356,7676,56,216,6。
從通信結果來看,效果良好,能夠實時穩(wěn)定地讀和寫數據。針對測試過程中遇到的問題,給出了解決方案,主要有以下兩點:1)寄存器數值超出上限0~65535。解決方案——設置智能儀表中變量初始值和原始值,并將實際數據縮小至一定倍數,然后在組態(tài)王中將相應的參變量擴大適當的倍數即可。2)多機通訊測試時,部分監(jiān)控參數錯亂變化且無規(guī)律。由于在組態(tài)王中設置的各從機通訊參數中“采集頻率”都是相同的,導致采集數據時出現了數據沖突,因此,設置不同的“采集頻率”能夠很好地解決以上問題。
在本文設計的組態(tài)王與智能儀表通信系統(tǒng)中,采用標準的MODBUS RTU數據傳輸格式,詳細描述了通信參數配置,并給出了《組態(tài)王與單片機通信工程》平臺的調試方案與測試結果。實驗結果表明該方法簡單有效、穩(wěn)定可靠。
圖2 單片機應答流程圖
圖3 組態(tài)王與2臺單片機通信工程測試平臺
[1] MODBUS Application Protocol Specification V1.1b [k].MODBUS-IDA,2006.
[2] 北京亞控科技發(fā)展有限公司.組態(tài)王6.5使用手冊[Z].2010.
[3] 尤慧芳.MODBUS RTU單片機通信程序編寫方法[J].工業(yè)控制計算機,2009,22(12):86-87.
[4] 胡雄峰,鄭應霞.基于MODBUS-RTU通訊協(xié)議的組態(tài)王與TOP9500通訊[J].工業(yè)控制計算機,2010,23(3):9-10.
[5] 劉杰,王慧.組態(tài)王與單片機多機串口通信的設計[J].電子設計工程,2009,17(7):7-11.
[6] 呂國芳,唐海龍,李進.基于Modbus RTU的串口調試軟件的實現[J].計算機技術與發(fā)展,2009,19(9):236-241.