李 濤 ,王雙友
(1.河北工程大學 信息與電氣工程學院,邯鄲 056038;2.邯鄲學院 軟件學院,邯鄲 056005)
Modbus協議是應用于電子控制器上的一種通用語言。它可以使不同廠商生產的控制設備連入工業網絡,已經成為一個通用工業標準[1]。由于其實現成本相對低廉,Modbus通信協議在配電系統中所占的份額大大超過了其他協議,成為低壓配電上應用最廣泛的通信協議。同時以太網技術因其價格低廉、穩定可靠、通信速率高等特點在工業控制中被廣泛應用,智能配電系統的網絡化成為必然的發展趨勢。針對這一現狀,本文設計了一種實現Modbus協議在RS485總線網絡和以太網2種組網之間轉換的協議轉換單元,使智能配電系統以低成本、高效率完成組網方式的轉換,以實現智能配電的網絡化。
Modbus協議轉換單元的系統結構如圖1所示,主要由主控芯片和網絡芯片構成。主控芯片采用意法半導體的32位處理器STM32F103C8T6。STM32具有功耗低、片上資源豐富的特點。網絡芯片選擇WIZnet公司的支持全硬件TCP/IP協議棧的W5300。主控芯片和網絡芯片通過SPI總線連接。

圖1 協議轉換單元結構示意Fig.1 Structure diagram of protocol conversion
協議轉換單元主要完成Modbus-RTU和Mod bus-TCP協議報文的轉換,從而將基于RS485總線的各種儀器儀表等電網下位機設備順利接入以太網組網的智能配電系統中。同時,引入心跳檢測機制,避免TCP連接因長時間沒有收發數據而發生異常。
控制器采用由德意法半導體推出的基于ARM Cortex-M3內核的32位處理器STM32F103C8T6。其工作頻率為72 MHz[2],執行速度高達1.25 DMIPS,具有豐富的片上資源。它內置高速存儲器(64 K字節的Flash和20 KB的RAM),豐富的I/O接口和APB總線外設,2個12位10通道的A/D轉換器,多種通信接口 (2個 I2C、2個 SPI和 3個 USART接口),方便實現與串口設備和網絡芯片的通信。
網絡接口芯片選用WIZnet的W5300。W5300是一款多功能網絡接口芯片,內部集成10/100 Mb/s以太網控制器,支持自動應答[3],兼容IEEE802.3 10 base-T和802.3 100BASE-TX,內部還集成全硬件TCP/IP協議棧、MAC層和物理層,使用時只需要進行Socket編程。同時支持直接并行總線、間接并行總線、SPI總線接口和4個獨立端口同時運行,內部有用于數據發送和接收16 KB存儲器。
協議轉換單元硬件電路主要由電源電路、STM32最小系統、W5300系統和網絡變壓電路組成。
網絡芯片W5300與控制器接口有3種方式:直接總線接口、間接總線接口和SPI總線接口。因STM32F103C8T6有片上的硬件SPI接口,所以在本系統中,W5300通過 SPI接口和STM32連接。W5300則是通過將SPI_EN引腳拉高來實現SPI操作。
W5300通過4個引腳連接網絡變壓器控制以太網數據的收發。如圖2所示,TXOP和TXON引腳控制數據的發送;RXIP和RXIN引腳控制數據的接收。
軟件部分主要包括系統參數設置、系統初始化、以太網口數據收發、串口數據收發和Modbus協議報文格式的調整。
Modbus是一種工業現場總線標準,有2種協議版本:串行鏈路標準和工業以太網協議標準。在標準Modbus網絡中,系統一般可采用ASCII和RTU 2種通信模式[4]。二者區別在于一個信息中的每8位字節是2個ASCII碼傳輸還是2個十六進制數傳輸。由于在同樣的波特率下,RTU模式比ASCII模式能夠傳送更多的數據[5],所以只研究RTU的串行鏈路標準和基于TCP的工業以太網協議標準的報文格式的轉換。標準的Modbus協議物理層接口有RS232、RS422、RS485和以太網口,采用主從通信方式。主機可對各從機尋址發出廣播信息,從機返回信息作為對查詢的響應。
在RTU模式中,信息之間至少需要3.5個字符的靜止時間,可通過選擇的波特率計算靜止時間,作為信息幀傳輸結束的標志。RTU模式下Modbus的幀結構如表1所示。

圖2 以太網收發電路Fig.2 Ethernet transceiver circuit

表1 RTU消息幀Tab.1 RTU message frame
Modbus協議根據設備地址,請求功能代碼,發送數據,錯誤校驗,建立主機查詢格式。從機響應信息也用Modbus協議組織,包括從機地址、動作代碼、返回數據和錯誤校驗。若在接收信息時出現錯誤,從機會返回一個錯誤幀作為應答。
Modbus-TCP是運行在TCP/IP上的Modbus報文傳輸協議,采用客戶機、服務器模式。Modbus客戶機根據需要向Modbus服務器發送建立連接的請求,Modbus服務器在收到一個請求后,就會激活一個本地操作進行讀、寫或其他操作。其數據幀格式如圖3所示。

圖3 Modbus TCP數據幀格式Fig.3 Data frame format of Modbus TCP
協議轉換單元要收發以太網數據必須正確配置W5300,啟動時要完成W5300的初始化。W5300初始化主要有基本設置 (模式、中斷等寄存器設置)、網絡參數設置、端口設置。
Modbus的以太網標準是可靠的數據傳輸,基于TCP協議,所以W5300端口模式為TCP,端口固定為502。網絡參數包括W5300的IP地址、子網掩碼、MAC地址和網關地址。在系統初始化過程中,是按照預先設置好或修改后的參數來執行的。這些參數保存在STM32自身Flash開辟的一段存儲空間中,省去了外接E2PROM。系統參數可以通過串口交互界面、上位機軟件和WEB服務器3種方式修改。修改后的參數同樣會保存到Flash中,保證系統重啟后能正常工作。
協議轉換在數據收發的過程中完成。轉換單元接收到串口數據后按照Modbus-RTU協議進行分析,然后按照Modbus-TCP的幀格式重新組裝數據幀通過以太網口發出;同樣模塊接收到以太網的數據后也會完成Modbus-TCP到Modbus-RTU數據格式的轉換。
在Modbus-RTU模式通信過程中,消息發送要以3.5個字符以上時間停頓開始。在最后一個傳輸字符之后,也要間隔至少3.5個字符時間的停頓作為數據幀傳輸的結束。通過設置的波特率可以計算3.5個字符的時間間隔,來設置定時器。進入定時中斷則表示一個完整的數據幀接收完成,從而可以進行協議轉換。數據接收完成后轉換單元會對遵循RTU格式的數據幀先進行CRC校驗,判斷數據是否正確,然后再提取功能碼、數據和設備地址。根據設備地址生成MBAP報頭。MBAP報頭和之前提取的功能碼、數據組成了Modbus-TCP的數據幀,再將該數據幀封裝到TCP的數據報文中,發到以太網。具體處理流程如圖4所示。

圖4 中斷處理流程Fig.4 Flow chat of interrupt processing
Modbus-TCP到Modbus-RTU數據格式的轉換和上面的流程基本相同,只是順序相反。
以太網數據的接收也采用中斷模式。W5300有中斷輸出引腳、全局和端口的中斷寄存器。STM32通過讀取中斷寄存器,區分數據接收、發送超時等中斷信息,根據不同的中斷進入相應的中斷處理程序。
在系統設計初期存在建立TCP連接后,如果長時間不收發數據,傳輸會出現異常。這也是其它實現類似轉換功能的模塊存在的通病。所以在需要長時間保持TCP連接的情況下,如何確保TCP連接處于正常連接狀態成為關鍵問題。經過多種方法的實驗,本系統最終采用心跳檢測機制,即在一定時間間隔發送心跳報文,在收到對方應答后來確認鏈路通暢。如果出現超時中斷則需要重新進行TCP連接,通信過程如圖5所示。系統引入心跳檢測后,多次實驗均未出現異常。

圖5 心跳檢測Fig.5 Heartbeat detection
系統測試采用PC來模擬智能配電網中的上位機和下位機設備,模塊一端通過串口連接電腦的串口,另一端用網線連接電腦網口。電腦安裝Modbus Poll軟件和Wireshark軟件,Modbus Poll是Modbus設備模擬工具,幫助Modbus通訊設備開發人員進行Modbus通訊協議的模擬和測試,用于監控、測試、調試Modbus通訊設備,支持寄存器和線圈的讀寫等功能,支持Modbus的RTU、ASCII和TCP協議。Wireshark軟件可以分析TCP連接建立的過程,數據報文的格式、內容,心跳報文的傳輸等。用Wireshark軟件抓包分析,可以保證測試的準確性。經過對串口從9600 b/s~115200 b/s的多個波特率的測試,在不同波特率下系統均能準確無誤地進行數據的收發和協議的轉換,如圖6所示。

圖6 協議轉換測試Fig.6 Protocol conversion test
本文針對串行鏈路和工業以太網的Modbus協議轉換提出了一種基于STM32+W5300的協議轉換單元,并實現了系統的設計和軟件調試。此協議轉換單元支持多波特率、多串口總線,具有結構簡單、使用方便,能夠滿足智能配電系統和其它基于Modbus現場總線的工業控制領域的要求,工程應用前景廣闊。
[1]鞏全成,吳亞鋒,李江江.RS-485總線以太網接口轉換裝置研究[J].計算機工程,2012,38(22):248-250.
[2]張河新,王曉輝,黃曉東.基于STM32和CAN總線的智能數據采集節點設計[J].化工自動化及儀表,2012,39(1):78-80
[3] 王廣維,張浩然.基于ARM和W5100的嵌入式以太網通信接口設計[J].微型機與應用,2011,30(5):50-53.
[4]陳德仙,鄭登峰,俞國勇.基于MODBUS協議的智能配電系統設計[J].江蘇電器,2007(4):25-28.
[5] 鄭鴻彥,苗世洪,張軍民.基于ARM9微處理器的MODBUS通信協議的實現[J].電氣應用,2007,26(5):45-79.