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