李 濤 ,王雙友
(1.河北工程大學(xué) 信息與電氣工程學(xué)院,邯鄲 056038;2.邯鄲學(xué)院 軟件學(xué)院,邯鄲 056005)
Modbus協(xié)議是應(yīng)用于電子控制器上的一種通用語言。它可以使不同廠商生產(chǎn)的控制設(shè)備連入工業(yè)網(wǎng)絡(luò),已經(jīng)成為一個(gè)通用工業(yè)標(biāo)準(zhǔn)[1]。由于其實(shí)現(xiàn)成本相對低廉,Modbus通信協(xié)議在配電系統(tǒng)中所占的份額大大超過了其他協(xié)議,成為低壓配電上應(yīng)用最廣泛的通信協(xié)議。同時(shí)以太網(wǎng)技術(shù)因其價(jià)格低廉、穩(wěn)定可靠、通信速率高等特點(diǎn)在工業(yè)控制中被廣泛應(yīng)用,智能配電系統(tǒng)的網(wǎng)絡(luò)化成為必然的發(fā)展趨勢。針對這一現(xiàn)狀,本文設(shè)計(jì)了一種實(shí)現(xiàn)Modbus協(xié)議在RS485總線網(wǎng)絡(luò)和以太網(wǎng)2種組網(wǎng)之間轉(zhuǎn)換的協(xié)議轉(zhuǎn)換單元,使智能配電系統(tǒng)以低成本、高效率完成組網(wǎng)方式的轉(zhuǎn)換,以實(shí)現(xiàn)智能配電的網(wǎng)絡(luò)化。
Modbus協(xié)議轉(zhuǎn)換單元的系統(tǒng)結(jié)構(gòu)如圖1所示,主要由主控芯片和網(wǎng)絡(luò)芯片構(gòu)成。主控芯片采用意法半導(dǎo)體的32位處理器STM32F103C8T6。STM32具有功耗低、片上資源豐富的特點(diǎn)。網(wǎng)絡(luò)芯片選擇WIZnet公司的支持全硬件TCP/IP協(xié)議棧的W5300。主控芯片和網(wǎng)絡(luò)芯片通過SPI總線連接。
圖1 協(xié)議轉(zhuǎn)換單元結(jié)構(gòu)示意Fig.1 Structure diagram of protocol conversion
協(xié)議轉(zhuǎn)換單元主要完成Modbus-RTU和Mod bus-TCP協(xié)議報(bào)文的轉(zhuǎn)換,從而將基于RS485總線的各種儀器儀表等電網(wǎng)下位機(jī)設(shè)備順利接入以太網(wǎng)組網(wǎng)的智能配電系統(tǒng)中。同時(shí),引入心跳檢測機(jī)制,避免TCP連接因長時(shí)間沒有收發(fā)數(shù)據(jù)而發(fā)生異常。
控制器采用由德意法半導(dǎo)體推出的基于ARM Cortex-M3內(nèi)核的32位處理器STM32F103C8T6。其工作頻率為72 MHz[2],執(zhí)行速度高達(dá)1.25 DMIPS,具有豐富的片上資源。它內(nèi)置高速存儲(chǔ)器(64 K字節(jié)的Flash和20 KB的RAM),豐富的I/O接口和APB總線外設(shè),2個(gè)12位10通道的A/D轉(zhuǎn)換器,多種通信接口 (2個(gè) I2C、2個(gè) SPI和 3個(gè) USART接口),方便實(shí)現(xiàn)與串口設(shè)備和網(wǎng)絡(luò)芯片的通信。
網(wǎng)絡(luò)接口芯片選用WIZnet的W5300。W5300是一款多功能網(wǎng)絡(luò)接口芯片,內(nèi)部集成10/100 Mb/s以太網(wǎng)控制器,支持自動(dòng)應(yīng)答[3],兼容IEEE802.3 10 base-T和802.3 100BASE-TX,內(nèi)部還集成全硬件TCP/IP協(xié)議棧、MAC層和物理層,使用時(shí)只需要進(jìn)行Socket編程。同時(shí)支持直接并行總線、間接并行總線、SPI總線接口和4個(gè)獨(dú)立端口同時(shí)運(yùn)行,內(nèi)部有用于數(shù)據(jù)發(fā)送和接收16 KB存儲(chǔ)器。
協(xié)議轉(zhuǎn)換單元硬件電路主要由電源電路、STM32最小系統(tǒng)、W5300系統(tǒng)和網(wǎng)絡(luò)變壓電路組成。
網(wǎng)絡(luò)芯片W5300與控制器接口有3種方式:直接總線接口、間接總線接口和SPI總線接口。因STM32F103C8T6有片上的硬件SPI接口,所以在本系統(tǒng)中,W5300通過 SPI接口和STM32連接。W5300則是通過將SPI_EN引腳拉高來實(shí)現(xiàn)SPI操作。
W5300通過4個(gè)引腳連接網(wǎng)絡(luò)變壓器控制以太網(wǎng)數(shù)據(jù)的收發(fā)。如圖2所示,TXOP和TXON引腳控制數(shù)據(jù)的發(fā)送;RXIP和RXIN引腳控制數(shù)據(jù)的接收。
軟件部分主要包括系統(tǒng)參數(shù)設(shè)置、系統(tǒng)初始化、以太網(wǎng)口數(shù)據(jù)收發(fā)、串口數(shù)據(jù)收發(fā)和Modbus協(xié)議報(bào)文格式的調(diào)整。
Modbus是一種工業(yè)現(xiàn)場總線標(biāo)準(zhǔn),有2種協(xié)議版本:串行鏈路標(biāo)準(zhǔn)和工業(yè)以太網(wǎng)協(xié)議標(biāo)準(zhǔn)。在標(biāo)準(zhǔn)Modbus網(wǎng)絡(luò)中,系統(tǒng)一般可采用ASCII和RTU 2種通信模式[4]。二者區(qū)別在于一個(gè)信息中的每8位字節(jié)是2個(gè)ASCII碼傳輸還是2個(gè)十六進(jìn)制數(shù)傳輸。由于在同樣的波特率下,RTU模式比ASCII模式能夠傳送更多的數(shù)據(jù)[5],所以只研究RTU的串行鏈路標(biāo)準(zhǔn)和基于TCP的工業(yè)以太網(wǎng)協(xié)議標(biāo)準(zhǔn)的報(bào)文格式的轉(zhuǎn)換。標(biāo)準(zhǔn)的Modbus協(xié)議物理層接口有RS232、RS422、RS485和以太網(wǎng)口,采用主從通信方式。主機(jī)可對各從機(jī)尋址發(fā)出廣播信息,從機(jī)返回信息作為對查詢的響應(yīng)。
在RTU模式中,信息之間至少需要3.5個(gè)字符的靜止時(shí)間,可通過選擇的波特率計(jì)算靜止時(shí)間,作為信息幀傳輸結(jié)束的標(biāo)志。RTU模式下Modbus的幀結(jié)構(gòu)如表1所示。
圖2 以太網(wǎng)收發(fā)電路Fig.2 Ethernet transceiver circuit
表1 RTU消息幀Tab.1 RTU message frame
Modbus協(xié)議根據(jù)設(shè)備地址,請求功能代碼,發(fā)送數(shù)據(jù),錯(cuò)誤校驗(yàn),建立主機(jī)查詢格式。從機(jī)響應(yīng)信息也用Modbus協(xié)議組織,包括從機(jī)地址、動(dòng)作代碼、返回?cái)?shù)據(jù)和錯(cuò)誤校驗(yàn)。若在接收信息時(shí)出現(xiàn)錯(cuò)誤,從機(jī)會(huì)返回一個(gè)錯(cuò)誤幀作為應(yīng)答。
Modbus-TCP是運(yùn)行在TCP/IP上的Modbus報(bào)文傳輸協(xié)議,采用客戶機(jī)、服務(wù)器模式。Modbus客戶機(jī)根據(jù)需要向Modbus服務(wù)器發(fā)送建立連接的請求,Modbus服務(wù)器在收到一個(gè)請求后,就會(huì)激活一個(gè)本地操作進(jìn)行讀、寫或其他操作。其數(shù)據(jù)幀格式如圖3所示。
圖3 Modbus TCP數(shù)據(jù)幀格式Fig.3 Data frame format of Modbus TCP
協(xié)議轉(zhuǎn)換單元要收發(fā)以太網(wǎng)數(shù)據(jù)必須正確配置W5300,啟動(dòng)時(shí)要完成W5300的初始化。W5300初始化主要有基本設(shè)置 (模式、中斷等寄存器設(shè)置)、網(wǎng)絡(luò)參數(shù)設(shè)置、端口設(shè)置。
Modbus的以太網(wǎng)標(biāo)準(zhǔn)是可靠的數(shù)據(jù)傳輸,基于TCP協(xié)議,所以W5300端口模式為TCP,端口固定為502。網(wǎng)絡(luò)參數(shù)包括W5300的IP地址、子網(wǎng)掩碼、MAC地址和網(wǎng)關(guān)地址。在系統(tǒng)初始化過程中,是按照預(yù)先設(shè)置好或修改后的參數(shù)來執(zhí)行的。這些參數(shù)保存在STM32自身Flash開辟的一段存儲(chǔ)空間中,省去了外接E2PROM。系統(tǒng)參數(shù)可以通過串口交互界面、上位機(jī)軟件和WEB服務(wù)器3種方式修改。修改后的參數(shù)同樣會(huì)保存到Flash中,保證系統(tǒng)重啟后能正常工作。
協(xié)議轉(zhuǎn)換在數(shù)據(jù)收發(fā)的過程中完成。轉(zhuǎn)換單元接收到串口數(shù)據(jù)后按照Modbus-RTU協(xié)議進(jìn)行分析,然后按照Modbus-TCP的幀格式重新組裝數(shù)據(jù)幀通過以太網(wǎng)口發(fā)出;同樣模塊接收到以太網(wǎng)的數(shù)據(jù)后也會(huì)完成Modbus-TCP到Modbus-RTU數(shù)據(jù)格式的轉(zhuǎn)換。
在Modbus-RTU模式通信過程中,消息發(fā)送要以3.5個(gè)字符以上時(shí)間停頓開始。在最后一個(gè)傳輸字符之后,也要間隔至少3.5個(gè)字符時(shí)間的停頓作為數(shù)據(jù)幀傳輸?shù)慕Y(jié)束。通過設(shè)置的波特率可以計(jì)算3.5個(gè)字符的時(shí)間間隔,來設(shè)置定時(shí)器。進(jìn)入定時(shí)中斷則表示一個(gè)完整的數(shù)據(jù)幀接收完成,從而可以進(jìn)行協(xié)議轉(zhuǎn)換。數(shù)據(jù)接收完成后轉(zhuǎn)換單元會(huì)對遵循RTU格式的數(shù)據(jù)幀先進(jìn)行CRC校驗(yàn),判斷數(shù)據(jù)是否正確,然后再提取功能碼、數(shù)據(jù)和設(shè)備地址。根據(jù)設(shè)備地址生成MBAP報(bào)頭。MBAP報(bào)頭和之前提取的功能碼、數(shù)據(jù)組成了Modbus-TCP的數(shù)據(jù)幀,再將該數(shù)據(jù)幀封裝到TCP的數(shù)據(jù)報(bào)文中,發(fā)到以太網(wǎng)。具體處理流程如圖4所示。
圖4 中斷處理流程Fig.4 Flow chat of interrupt processing
Modbus-TCP到Modbus-RTU數(shù)據(jù)格式的轉(zhuǎn)換和上面的流程基本相同,只是順序相反。
以太網(wǎng)數(shù)據(jù)的接收也采用中斷模式。W5300有中斷輸出引腳、全局和端口的中斷寄存器。STM32通過讀取中斷寄存器,區(qū)分?jǐn)?shù)據(jù)接收、發(fā)送超時(shí)等中斷信息,根據(jù)不同的中斷進(jìn)入相應(yīng)的中斷處理程序。
在系統(tǒng)設(shè)計(jì)初期存在建立TCP連接后,如果長時(shí)間不收發(fā)數(shù)據(jù),傳輸會(huì)出現(xiàn)異常。這也是其它實(shí)現(xiàn)類似轉(zhuǎn)換功能的模塊存在的通病。所以在需要長時(shí)間保持TCP連接的情況下,如何確保TCP連接處于正常連接狀態(tài)成為關(guān)鍵問題。經(jīng)過多種方法的實(shí)驗(yàn),本系統(tǒng)最終采用心跳檢測機(jī)制,即在一定時(shí)間間隔發(fā)送心跳報(bào)文,在收到對方應(yīng)答后來確認(rèn)鏈路通暢。如果出現(xiàn)超時(shí)中斷則需要重新進(jìn)行TCP連接,通信過程如圖5所示。系統(tǒng)引入心跳檢測后,多次實(shí)驗(yàn)均未出現(xiàn)異常。
圖5 心跳檢測Fig.5 Heartbeat detection
系統(tǒng)測試采用PC來模擬智能配電網(wǎng)中的上位機(jī)和下位機(jī)設(shè)備,模塊一端通過串口連接電腦的串口,另一端用網(wǎng)線連接電腦網(wǎng)口。電腦安裝Modbus Poll軟件和Wireshark軟件,Modbus Poll是Modbus設(shè)備模擬工具,幫助Modbus通訊設(shè)備開發(fā)人員進(jìn)行Modbus通訊協(xié)議的模擬和測試,用于監(jiān)控、測試、調(diào)試Modbus通訊設(shè)備,支持寄存器和線圈的讀寫等功能,支持Modbus的RTU、ASCII和TCP協(xié)議。Wireshark軟件可以分析TCP連接建立的過程,數(shù)據(jù)報(bào)文的格式、內(nèi)容,心跳報(bào)文的傳輸?shù)?。用Wireshark軟件抓包分析,可以保證測試的準(zhǔn)確性。經(jīng)過對串口從9600 b/s~115200 b/s的多個(gè)波特率的測試,在不同波特率下系統(tǒng)均能準(zhǔn)確無誤地進(jìn)行數(shù)據(jù)的收發(fā)和協(xié)議的轉(zhuǎn)換,如圖6所示。
圖6 協(xié)議轉(zhuǎn)換測試Fig.6 Protocol conversion test
本文針對串行鏈路和工業(yè)以太網(wǎng)的Modbus協(xié)議轉(zhuǎn)換提出了一種基于STM32+W5300的協(xié)議轉(zhuǎn)換單元,并實(shí)現(xiàn)了系統(tǒng)的設(shè)計(jì)和軟件調(diào)試。此協(xié)議轉(zhuǎn)換單元支持多波特率、多串口總線,具有結(jié)構(gòu)簡單、使用方便,能夠滿足智能配電系統(tǒng)和其它基于Modbus現(xiàn)場總線的工業(yè)控制領(lǐng)域的要求,工程應(yīng)用前景廣闊。
[1]鞏全成,吳亞鋒,李江江.RS-485總線以太網(wǎng)接口轉(zhuǎn)換裝置研究[J].計(jì)算機(jī)工程,2012,38(22):248-250.
[2]張河新,王曉輝,黃曉東.基于STM32和CAN總線的智能數(shù)據(jù)采集節(jié)點(diǎn)設(shè)計(jì)[J].化工自動(dòng)化及儀表,2012,39(1):78-80
[3] 王廣維,張浩然.基于ARM和W5100的嵌入式以太網(wǎng)通信接口設(shè)計(jì)[J].微型機(jī)與應(yīng)用,2011,30(5):50-53.
[4]陳德仙,鄭登峰,俞國勇.基于MODBUS協(xié)議的智能配電系統(tǒng)設(shè)計(jì)[J].江蘇電器,2007(4):25-28.
[5] 鄭鴻彥,苗世洪,張軍民.基于ARM9微處理器的MODBUS通信協(xié)議的實(shí)現(xiàn)[J].電氣應(yīng)用,2007,26(5):45-79.