劉立博,丁茹
(沈陽理工大學(xué)機械工程學(xué)院,遼寧 沈陽 110159)
Modbus通信協(xié)議是由美國Modicon(莫迪康)公司于1979年發(fā)明的,2004年,中國國家標(biāo)準(zhǔn)委員會正式將Modbus作為國家標(biāo)準(zhǔn)。由于其開放性、可擴展性和標(biāo)準(zhǔn)化使其成為工控領(lǐng)域應(yīng)用范圍最廣的通信協(xié)議,通過Modbus協(xié)議可以將不同廠商的不同設(shè)備以簡單可靠的方式接入通信網(wǎng)絡(luò),實現(xiàn)系統(tǒng)的集中監(jiān)控、分散控制功能。
臺達DVP系列PLC具有網(wǎng)絡(luò)通信功能,其COM2(RS485接口)支持主站(master)或從站(slave)之通信協(xié)議。利用其自帶的Modbus讀寫相關(guān)應(yīng)用指令,可以實現(xiàn)PLC與多種設(shè)備之間的主從、從主通信。本篇論文采用一臺DVP系列PLC與一個美國ATMEL公司的ATMEGA2560單片機實驗板和一個觸摸屏(HMI)組成通信網(wǎng)絡(luò),其中單片機與PLC之間利用Modbus RTU協(xié)議建立主從通信,將單片機采集到的距離、運動姿態(tài)傳感器數(shù)據(jù)傳輸?shù)絇LC中做儲存,觸摸屏與
PLC之間通過Ethernet(以太網(wǎng))建立通信,再由觸摸屏顯示出來,為PLC控制擴展出一個基于Modbus協(xié)議的位姿監(jiān)控功能,其硬件原理框圖如圖1所示。圖1中,Trig為觸發(fā)測距引腳;Echo為返回測距結(jié)果引腳;SDA為串行數(shù)據(jù)引腳;SCL為時鐘引腳;MAX485為TTL轉(zhuǎn)RS485轉(zhuǎn)換器。
圖1 硬件原理框圖
在串行鏈路中,Modbus作為一種簡單的主從協(xié)議(客戶機/服務(wù)器協(xié)議)進行通信。客戶機作為主站向服務(wù)器發(fā)送請求;服務(wù)器(從站)接到請求后,對請求進行分析并作出應(yīng)答。Modbus通信協(xié)議主要具有兩種模式,分別是ASCII(美國標(biāo)準(zhǔn)信息交換代碼)模式和RTU(遠程終端單元)模式。在ASCII模式中,數(shù)據(jù)位中的每個8bit都被分為兩個ASCII字符發(fā)送,消息幀的開始與結(jié)束處有標(biāo)記并且采用的是簡單一些的LRC校驗方式。這種模式的優(yōu)點是操作簡單并且不容易產(chǎn)生錯誤,缺點是數(shù)據(jù)傳輸效率比較低,不適用于數(shù)據(jù)較多的情況下使用。在RTU模式中,數(shù)據(jù)位中的每個8bit包含兩個4bit的十六進制字符,消息幀的開始與結(jié)束處沒有標(biāo)記但采用的是復(fù)雜一些的CRC校驗方式。這種模式的優(yōu)點是在相同波特率的情況下,數(shù)據(jù)傳輸效率比較高。本文中的通信需要傳輸多組傳感器數(shù)據(jù),所以采用的是Modbus-RTU模式進行通信。Modbus的通信幀被稱為應(yīng)用數(shù)據(jù)單元(Application Data Unit,ADU),其包括通信地址段、功能代碼段、數(shù)據(jù)段和校驗段,功能代碼段和數(shù)據(jù)段組合成為協(xié)議數(shù)據(jù)單元(Protocol Data Unit,PDU),具體結(jié)構(gòu)如圖2所示(RTU模式)。
圖2 Modbus-RTU通信幀結(jié)構(gòu)
起始位與結(jié)束位:通信幀的起始與結(jié)束字符,因為RTU并沒有在開始與結(jié)束處進行標(biāo)記,因此,多個Modbus通信幀之間的時間間隔要大于3.5個字符的時間才能成功識別通信幀。
設(shè)備地址:Modbus通信中從站設(shè)備的地址,其有效范圍是0~247(十進制)。
功能代碼:在Modbus協(xié)議中已經(jīng)規(guī)定了一些通用的功能代碼如:01功能碼表示讀取線圈狀態(tài);02功能碼表示讀取離散量狀態(tài);03功能碼表示讀取保持寄存器等。
數(shù)據(jù)區(qū):數(shù)據(jù)區(qū)中有2個16進制的數(shù)據(jù)位,數(shù)據(jù)范圍是00~FF(16進制)。
CRC校驗:循環(huán)冗余校驗。
本設(shè)計中,PLC與單片機間通過RS485接口通信,PLC的從站通信設(shè)置程序如圖3所示。
圖3 從站通信設(shè)置梯形圖
圖中,由特殊功能繼電器M1002在PLC啟動時提供正向脈沖,觸發(fā)程序啟動。首先,通過對D1120賦值對RS485通信格式進行設(shè)置:數(shù)據(jù)長度為8,無奇偶校驗,通信停止位設(shè)置為1,通信傳輸速率設(shè)置為9600,無起始與結(jié)束字符。M1120置位則設(shè)定通信格式保持。對D1129賦值K100設(shè)置通信逾時的時間為100ms。M1143置位則通信模式為Modbus-RTU模式。輔助繼電器M0的功能為將M1122(COM2送信要求)置位并啟動MODRD指令,其中K1為將聯(lián)機裝置地址設(shè)置為1,H1100為第一筆數(shù)據(jù)在PLC中的通信地址,K5為讀取數(shù)據(jù)的筆數(shù),此指令的執(zhí)行結(jié)果為通過Modbus依次讀取H1100、H1101、H1102、H1103、H1104數(shù)據(jù)地址中的當(dāng)前數(shù)據(jù)信息并將返回值以十六進制數(shù)值形式依次儲存到特殊數(shù)據(jù)寄存器D1073、D1075、D1077、D1079、D1081中,此時,通信成功標(biāo)志特殊功能寄存器M1127閉合,同時,將數(shù)據(jù)傳送給一般寄存器D0~D4做顯示(D0~D4對應(yīng)觸摸屏中5個數(shù)據(jù)顯示窗口內(nèi)存地址),隨之將M1127復(fù)位。M1129特殊功能輔助繼電器的作用是當(dāng)PLC或單片機發(fā)生某些突發(fā)情況造成通信逾時的情況下,自動將M1129置為on,程序中由M1129觸發(fā)送信要求M1122再讀取一次,同時,將M1129復(fù)位。
單片機的程序包含Modbus的主站通信程序以及對超聲波測距傳感器和運動姿態(tài)傳感器的應(yīng)用程序,采用ARDUINO IDE開發(fā)環(huán)境,使用C語言編寫,使用Kalman庫、Wire庫以及Math庫對運動傳感器回傳的數(shù)據(jù)進行解析,使用ModbusMaster庫對Modbus主站進行通信設(shè)置。主程序流程圖如圖4所示。
圖4 主程序流程圖
在主循環(huán)程序中,需要對各傳感器回傳的數(shù)字量信號進行解算處理。對于日本TDK公司的MPU6050運動姿態(tài)傳感器:首先,利用Wire庫讀出傳感器內(nèi)部寄存器中的測量值,由于噪音等因素的影響,該值存在數(shù)據(jù)偏移的現(xiàn)象,所以對偏移量進行校準(zhǔn),之后利用Math庫計算出各運動參數(shù),為進一步保證各參數(shù)的準(zhǔn)確度,最后,利用Kalman庫對各運動參數(shù)進行濾波處理得出最終的運算結(jié)果。其中,橫滾角Roll與俯仰角Pitch的計算公式為:
式中,x、y、z分別為加速度計的三個坐標(biāo)軸分量(存儲于MPU6050芯片內(nèi)部寄存器)。
橫滾角速度RollRate與俯仰角速度PitchRate的計算公式為:
式中,Gyrx與Gyry分別為角速度計的x軸與y軸的分量(存儲于MPU6050芯片內(nèi)部寄存器)。
對于HC-SR04超聲波測距傳感器:首先,觸發(fā)傳感器發(fā)出超聲波脈沖,然后,等待反射回的脈沖,使用pulseIn()函數(shù)記錄此過程的時間t并換算出距離distance(cm)。即為:
式中,pulseIn()所記錄的時間t單位為微秒,聲速v為344m/s,所以距離distance=344*100/1000000*pulseIn()/2約等于pulseIn()/58.0。
最后,利用ModbusMaster庫中的node.writeSingleRegister指令,將各數(shù)值存入相應(yīng)寄存器中。具體程序如下:
其中,Modbus通信地址與PLC通信地址的對應(yīng)關(guān)系如表1所示。
表1 DVP系列PLC裝置通信地址(部分)
為驗證傳感器測量的數(shù)據(jù)是否成功通過Modbus協(xié)議經(jīng)過單片機與PLC回傳到觸摸屏上做顯示,按照本文所述方案搭建實驗電路如圖5所示。將PLC程序與單片機程序成功焼寫之后,經(jīng)上電測試可以實現(xiàn)Modbus通信,所顯示數(shù)據(jù)均為傳感器實際測量的數(shù)據(jù)。
圖5 實驗電路
本文著重介紹了Modbus協(xié)議的基本結(jié)構(gòu)與原理,設(shè)計了基于Modbus-RTU協(xié)議的單片機與臺達DVP系列PLC的主從通信系統(tǒng),實現(xiàn)了對HC-SR04超聲波測距傳感器以及MPU6050運動姿態(tài)傳感器所測量數(shù)據(jù)的傳輸,搭配功能靈活的單片機為PLC擴展出位姿監(jiān)控功能。該系統(tǒng)可搭配多種傳感器應(yīng)用于各種需要數(shù)據(jù)傳輸?shù)腜LC控制系統(tǒng)中,為其它基于臺達DVP系列PLC的功能擴展提供了很好的參考。