鄭 振,趙大興
(湖北工業(yè)大學(xué)機(jī)械工程學(xué)院,湖北 武漢 430068)
許多學(xué)者對(duì)工業(yè)自動(dòng)化控制領(lǐng)域數(shù)據(jù)傳輸進(jìn)行了研究。文獻(xiàn)[1]設(shè)計(jì)了一種與底層鏈路無(wú)關(guān)的ModBus協(xié)議的協(xié)議棧,較好實(shí)現(xiàn)了數(shù)據(jù)的可靠通信,但其控制算法協(xié)議復(fù)雜,移植困難,對(duì)硬件的要求比較高。文獻(xiàn)[2]一種基于Modbus-RTU協(xié)議設(shè)計(jì)的庫(kù)房環(huán)境實(shí)時(shí)監(jiān)控系統(tǒng),在可靠性與穩(wěn)定性上取得了一定的效果,但其傳輸距離存在明顯的局限性。文獻(xiàn)[3]基于ARM處理器和MODBUS-RTU通訊協(xié)議的溫控系統(tǒng),通過(guò)RS232/485總線組成二級(jí)通信網(wǎng)絡(luò),采用MODBUS協(xié)議“主-從”方式通信,但其通訊響應(yīng)慢,時(shí)效性不高。文獻(xiàn)[4]基于PROFIBUS現(xiàn)場(chǎng)總線實(shí)現(xiàn)了,PLC控制系統(tǒng)穩(wěn)定、高效的數(shù)據(jù)通訊,但其硬件成本比較高、研究投入大。文獻(xiàn)[5]提出了基于FreeModbus協(xié)議棧的Modbus/TCP數(shù)據(jù)通訊控制系統(tǒng),較好實(shí)現(xiàn)了數(shù)據(jù)的遠(yuǎn)程通訊與傳輸,但其模塊高度集成化,無(wú)法根據(jù)需求進(jìn)行定制更改。為了解決工業(yè)自動(dòng)化中的傳輸距離短、時(shí)效性低、成本過(guò)高的問(wèn)題,本文設(shè)計(jì)了一種基于uIP協(xié)議棧和Modbus TCP協(xié)議采集數(shù)據(jù),并把數(shù)據(jù)傳輸至服務(wù)器端的一種數(shù)據(jù)通訊系統(tǒng)。
基于Modbus TCP高速網(wǎng)絡(luò)數(shù)據(jù)通訊系統(tǒng)可以看做是在以太網(wǎng)上運(yùn)行的Modbus,但其僅僅采用TCP/IP標(biāo)準(zhǔn),簡(jiǎn)單地把Modbus所傳輸?shù)男畔M(jìn)行處理,再通過(guò)以太網(wǎng)發(fā)送給目標(biāo)設(shè)備。這種方式使得任何Modbus TCP設(shè)備可以通過(guò)以太網(wǎng)進(jìn)行連接和通信。而Modbus TCP網(wǎng)絡(luò)的從站設(shè)備數(shù)量?jī)H僅局限于網(wǎng)絡(luò)物理層的承載能力,因此一個(gè)Modbus TCP主站可以控制更多的從站設(shè)備,極大提高了設(shè)備的利用率。基于ModbusTCP高速網(wǎng)絡(luò)數(shù)據(jù)通訊系統(tǒng)采用STM32F407VET6,網(wǎng)絡(luò)協(xié)議采用uIP協(xié)議棧,通信協(xié)議采用Modbus TCP協(xié)議,最終通過(guò)uIP和Modbus TCP實(shí)現(xiàn)對(duì)數(shù)據(jù)高速、實(shí)時(shí)采集。系統(tǒng)硬件結(jié)構(gòu)如圖1所示。

圖1 系統(tǒng)硬件結(jié)構(gòu)
主控采用ST(意法半導(dǎo)體)最新的ARM內(nèi)核STM32系統(tǒng)處理器(ARM Cortex-M4內(nèi)核)STM32F407VET6(LQFP100)。此款微控制器擁有豐富的硬件資源,極大的flash和RAM,主頻可達(dá)168 MHz。主控板主要負(fù)責(zé)數(shù)字量或者模擬量的信號(hào)采集、控制網(wǎng)絡(luò)的鏈接、數(shù)據(jù)的解析和傳輸,實(shí)現(xiàn)了數(shù)據(jù)的高速通訊。最小系統(tǒng)原理如圖2所示。

圖2 最小系統(tǒng)原理
作為一款以太網(wǎng)控制器,DP83848設(shè)計(jì)用于在最嚴(yán)苛的環(huán)境中實(shí)現(xiàn)以太網(wǎng)連接,可在-55~125℃的軍用級(jí)溫度范圍內(nèi)滿足 IEEE 802.3u標(biāo)準(zhǔn)。其功耗低,有標(biāo)準(zhǔn)的3.3 V MAC接口,最大數(shù)據(jù)傳輸速率理論可達(dá)100 Mb/s。DP83848提供兩個(gè)靈活的LED指示燈,一個(gè)用于鏈路,另一個(gè)用于速度。此外,MII和RMII都得到了支持,以確保設(shè)計(jì)的簡(jiǎn)便性和靈活性。其典型應(yīng)用電路如圖3所示,該模塊在電路板上電路如圖4所示。

圖3 DP83848典型應(yīng)用電路

圖4 DP83848網(wǎng)絡(luò)模塊電路
STM32不僅支持JTAG接口,還支持SWD接口進(jìn)行編程調(diào)試。SWD模式需要的引腳少,只需要通過(guò)簡(jiǎn)單的4根線與JLINK仿真器連接,即可完成開(kāi)發(fā)過(guò)程中程序的下載和跟蹤調(diào)試。SWD接口的引腳為SWDIO,GND,3.3 V,SWCLK。系統(tǒng)調(diào)試接口電路如圖5所示。

圖5 調(diào)試接口
本系統(tǒng)用于高速網(wǎng)絡(luò)傳輸,對(duì)電源功耗以及電源穩(wěn)定性有較高要求,電源模塊的設(shè)計(jì)是否合理關(guān)系到整個(gè)系統(tǒng)能否正常運(yùn)行,因此選擇良好的電源芯片變得十分重要。
在設(shè)計(jì)系統(tǒng)輸入電源時(shí),為了整個(gè)系統(tǒng)的演示方便,本系統(tǒng)使用電腦USB提供所需的電能,選擇ASM1117-3.3電源芯片作為5 V轉(zhuǎn)3.3 V電壓轉(zhuǎn)換芯片,在電源芯片前后加上合適電容,其作用是濾除相應(yīng)高頻低頻信號(hào)干擾。在電路板上留出了多個(gè)5 V以及3.3 V接口用于給外設(shè)供電,同時(shí)在電源與地之間接一個(gè)防反接二極管M7,可承受瞬間反向電壓,達(dá)到保護(hù)電路的目的。電源電路圖如圖6所示。

圖6 電源電路
該控制系統(tǒng)的架構(gòu)功能示意圖如圖7所示。TCP/IP協(xié)議是數(shù)據(jù)傳輸可靠性的保證,而數(shù)據(jù)傳輸速度取決于該網(wǎng)絡(luò)的帶寬。通訊雙方接收信息事先約定好數(shù)據(jù)報(bào)文的格式,是處理器對(duì)數(shù)據(jù)有效信息進(jìn)行提取的關(guān)鍵。

圖7 軟件功能示意圖
對(duì)于嵌入式系統(tǒng)而言,若能夠運(yùn)行本地 TCP/IP,則系統(tǒng)可以是公司局域網(wǎng)甚至是全球互聯(lián)網(wǎng)。嵌入式設(shè)備有了TCP/IP 的支持,設(shè)備將可以與網(wǎng)絡(luò)中的其他主機(jī)進(jìn)行通信,但是要使嵌入式設(shè)備進(jìn)行網(wǎng)絡(luò)通信,該設(shè)備必須要能運(yùn)行可實(shí)現(xiàn)的TCP/IP協(xié)議棧[6]。uIP協(xié)議棧就屬于這樣的網(wǎng)絡(luò)協(xié)議棧,其重點(diǎn)是在應(yīng)用層方面,即TCP/IP協(xié)議,對(duì)于底層協(xié)議(比如鏈路層協(xié)議),則一般由硬件實(shí)現(xiàn)。TCP/IP數(shù)據(jù)流如圖8所示。

圖8 TCP/IP數(shù)據(jù)流
上述就是發(fā)送數(shù)據(jù)的過(guò)程,接收則執(zhí)行相反的操作。為了減小代碼體積,實(shí)現(xiàn)基本TCP/IP功能,uIP移除了許多并不必需的應(yīng)用程序和協(xié)議棧之間接口,比如軟件錯(cuò)誤報(bào)告機(jī)制和動(dòng)態(tài)的TCP連接相關(guān)的服務(wù)類型配置,以減輕單片機(jī)RAM的壓力,降低單片機(jī)的購(gòu)置成本。同時(shí),uIP 采用事件驅(qū)動(dòng)方式,當(dāng)有事件發(fā)生時(shí),會(huì)觸發(fā)相應(yīng)的應(yīng)用程序,該程序可以指定宏定義,這樣就可實(shí)現(xiàn)uIP調(diào)用用戶應(yīng)用程序。與其他TCP/IP協(xié)議棧不同的是,uIP協(xié)議棧可以通過(guò)應(yīng)用程序來(lái)實(shí)現(xiàn)重傳機(jī)制,正是由于uIP所面對(duì)的目標(biāo)對(duì)象架構(gòu)RAM并不大,網(wǎng)絡(luò)設(shè)備將數(shù)據(jù)包發(fā)送出去之后,uIP并沒(méi)有跟蹤數(shù)據(jù)包內(nèi)容,因此當(dāng)數(shù)據(jù)包丟失時(shí),uIP則需要進(jìn)行重傳。當(dāng)uIP要重傳某個(gè)數(shù)據(jù)包的片段時(shí),會(huì)設(shè)置重傳標(biāo)記,然后通知應(yīng)用程序,重傳該片段[7]。應(yīng)用程序通過(guò)協(xié)議棧的調(diào)度來(lái)實(shí)現(xiàn)數(shù)據(jù)重傳,使數(shù)據(jù)傳輸可靠性相比于其他協(xié)議棧更有效。
Modbus TCP通信協(xié)議遵循基本的主從通信模式:主站設(shè)備采取主動(dòng)查詢的方式,發(fā)出啟動(dòng)請(qǐng)求給從站設(shè)備,然后由從站設(shè)備根據(jù)接收到的啟動(dòng)請(qǐng)求內(nèi)容,準(zhǔn)備數(shù)據(jù)響應(yīng)發(fā)送給主站設(shè)備。Modbus TCP通信系統(tǒng)包括能夠連接至以太網(wǎng)的Modbus TCP從機(jī),以及能夠連接至以太網(wǎng)的Modbus TCP主機(jī)或網(wǎng)絡(luò)服務(wù)器。
與普通Modbus不同的是,Modbus TCP協(xié)議使用了一種專用的報(bào)文頭識(shí)別單元MBAP報(bào)文頭,可以使持多個(gè)獨(dú)立的Modbus終端設(shè)備在使用同一個(gè)IP地址時(shí)不會(huì)發(fā)生沖突。在Modbus TCP中,如果將報(bào)文分成多個(gè)信息包依次發(fā)送,并在MBAP報(bào)文頭上攜帶附加數(shù)據(jù)的長(zhǎng)度信息,以此來(lái)使接收端識(shí)別報(bào)文的邊界,接收端也可以接收到數(shù)據(jù)。TCP/IP上的MODBUS請(qǐng)求/響應(yīng)圖如圖9所示。

圖9 TCP/IP上的MODBUS請(qǐng)求/響應(yīng)
Modbus TCP協(xié)議通過(guò)功能碼來(lái)反映傳輸正常響應(yīng)或傳輸錯(cuò)誤響應(yīng)(即異常響應(yīng))[8]。正常通訊過(guò)程響應(yīng)如圖10a所示。當(dāng)產(chǎn)生錯(cuò)誤或者異常響應(yīng)時(shí),服務(wù)器依舊會(huì)返回與客戶機(jī)相同的功能碼,并在該異常碼后增加一個(gè)錯(cuò)誤碼,以此來(lái)告知客戶機(jī)產(chǎn)生異常的原因,從而實(shí)現(xiàn)錯(cuò)誤信息反饋。異常響應(yīng)如圖10b所示。

(a)正常響應(yīng)

(b)異常響應(yīng)圖10 響應(yīng)過(guò)程
QT可以同時(shí)開(kāi)發(fā)GUI和非GUI程序。該軟件提供了大量的應(yīng)用接口程序及范例,并提供對(duì)CAN和Modbus的支持,極大縮短了開(kāi)發(fā)時(shí)間。而Qt Creator是用于開(kāi)發(fā)QT應(yīng)用程序的軟件,可通過(guò)直接調(diào)用控件,對(duì)控件進(jìn)行編程,類似于C++的編程方式完成上位機(jī)的制作。
在本設(shè)計(jì)中用到了文本框、下拉式菜單、按鈕、定時(shí)器等組件。利用這些具有圖形化接口的控件,可方便編寫(xiě)用戶程序。其界面效果如圖11所示。

圖11 上位機(jī)界面
系統(tǒng)測(cè)試主要以電腦作為客戶端,單片機(jī)作為服務(wù)器,通過(guò)網(wǎng)絡(luò)調(diào)試助手發(fā)送請(qǐng)求給單片機(jī)。程序初始化采集系統(tǒng)的IP地址為192.168.1.128。單片機(jī)程序里源地址為1000,輸入寄存器個(gè)數(shù)為4,使用8路AD采集端口A0~A7作為模擬量輸入,8路IO采集端口C0~C7作為數(shù)字開(kāi)關(guān)量輸入,AD采樣的值直接賦值給輸入寄存器,數(shù)字量通過(guò)處理后賦值給線圈寄存器,然后通過(guò)協(xié)議發(fā)送至上位機(jī)端。硬件實(shí)物如圖12所示。單片機(jī)的處理流程如圖13所示。

圖12 硬件實(shí)物

圖13 單片機(jī)處理流程
為了驗(yàn)證基于Modbus TCP高速通信系統(tǒng)的正確性,需要對(duì)該系統(tǒng)的功能進(jìn)行分析,在上位機(jī)分別下發(fā)了4組指令,得到其發(fā)回的數(shù)據(jù),并進(jìn)行解析。

表1 測(cè)試報(bào)文數(shù)據(jù)
從表1可以看出,在發(fā)送請(qǐng)求的12位16進(jìn)制數(shù)據(jù)中,前5位為固定數(shù)據(jù)。在后7位數(shù)據(jù)中,以第3組數(shù)據(jù)為例,其中:06表示在該數(shù)據(jù)后面的字節(jié)總數(shù),01表示從機(jī)地址;03表示功能碼;03 E7為啟動(dòng)請(qǐng)求,換算成十進(jìn)制為999;00 04表示為偏移地址,對(duì)應(yīng)十進(jìn)制為4 。接收反饋的數(shù)據(jù)中,前5位數(shù)據(jù)為固定數(shù)據(jù),第6位表示后面字節(jié)的總數(shù),第7位表示地址,第8位表示請(qǐng)求的功能碼,剩余數(shù)據(jù)表示各個(gè)寄存器數(shù)據(jù)。第1組由于單片機(jī)設(shè)置源地址為1000,而單片機(jī)發(fā)送源地址為0000,此時(shí)系統(tǒng)返回錯(cuò)誤響應(yīng)0x83 0x02,表示非法數(shù)據(jù)地址;第2組由于單片機(jī)保持寄存器個(gè)數(shù)只有四個(gè),而單片機(jī)請(qǐng)求讀取10個(gè),此時(shí)系統(tǒng)返回錯(cuò)誤響應(yīng)0x83 0x02,表示非法數(shù)據(jù)地址;第3次和第4次為正常響應(yīng)。
通過(guò)對(duì)發(fā)送數(shù)據(jù)和接收數(shù)據(jù)進(jìn)行分析,驗(yàn)證了該系統(tǒng)基于Modbus TCP高速通信系統(tǒng)的正確性,同時(shí)為了驗(yàn)證通信速度的穩(wěn)定性和快速性,利用Wireshark抓包工具對(duì)數(shù)據(jù)進(jìn)行抓包截取,抓包取到的網(wǎng)絡(luò)數(shù)據(jù)如圖14所示。

圖14 網(wǎng)絡(luò)數(shù)據(jù)包
從圖14可以看出,通過(guò)10 ms周期的不斷輪詢,向單片機(jī)發(fā)送數(shù)據(jù),單片機(jī)能夠在1~3 ms內(nèi)高速響應(yīng)并發(fā)回?cái)?shù)據(jù),其中通信速度、數(shù)據(jù)傳輸非常穩(wěn)定。
本文設(shè)計(jì)的以STM32F407VET6為核心的系統(tǒng),通過(guò)uIP協(xié)議棧和Modbus TCP通訊協(xié)議實(shí)現(xiàn)了對(duì)數(shù)據(jù)實(shí)時(shí)采集。該系統(tǒng)以以太網(wǎng)通訊為原型,在設(shè)備聯(lián)網(wǎng)的情況下數(shù)據(jù)就能夠高速、穩(wěn)定地傳輸?shù)竭_(dá)目的地,較好解決了工業(yè)自動(dòng)化領(lǐng)域數(shù)據(jù)傳輸?shù)姆菍?shí)時(shí)性和距離短的問(wèn)題,同時(shí)系統(tǒng)硬件結(jié)構(gòu)簡(jiǎn)單,成本較低,比較容易運(yùn)用到實(shí)際生產(chǎn)生活中。通過(guò)對(duì)該系統(tǒng)進(jìn)行性能測(cè)試與通訊實(shí)驗(yàn),結(jié)果表明該系統(tǒng)數(shù)據(jù)傳輸具有穩(wěn)定性與快速性。