《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 嵌入式Modbus/TCP網(wǎng)關(guān)的設(shè)計(jì)與實(shí)現(xiàn)
嵌入式Modbus/TCP網(wǎng)關(guān)的設(shè)計(jì)與實(shí)現(xiàn)
徐鳳亮1,,王宜懷2
1. 蘇州衛(wèi)生職業(yè)技術(shù)學(xué)院 信息中心,,江蘇 蘇州 215000; 2. 蘇州大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,江蘇 蘇州 215000
摘要: 設(shè)計(jì)并實(shí)現(xiàn)了一種基于嵌入式系統(tǒng)的Modbus/TCP協(xié)議轉(zhuǎn)換網(wǎng)關(guān),,允許用戶(hù)通過(guò)以太網(wǎng)對(duì)Modbus現(xiàn)場(chǎng)總線(xiàn)設(shè)備進(jìn)行監(jiān)控,實(shí)現(xiàn)了以太網(wǎng)與現(xiàn)場(chǎng)總線(xiàn)的互聯(lián),。測(cè)試結(jié)果表明該網(wǎng)關(guān)工作穩(wěn)定可靠,。對(duì)工業(yè)以太網(wǎng)與現(xiàn)場(chǎng)總線(xiàn)互聯(lián)的深入應(yīng)用具有較高的參考價(jià)值和實(shí)際意義。
中圖分類(lèi)號(hào): TP311
文獻(xiàn)標(biāo)識(shí)碼: A
Design and implementation of embedded Modbus/TCP gateway
XU Feng Liang1, WANG Yi Huai2
1. Information Centre, Suzhou Health College, Suzhou 215000, China;2. Computer Science and Technology College, Soochow University, Suzhou 215000, China
Abstract: This paper designs and implements a Modbus/TCP protocol gateway based on embedded system, allowing users to monitor and control Modbus field device through Ethernet, which makes the inter-connection between the industrial Ethernet and the fieldbus available. It also provides a valuable reference to the interconnection of the industrial Ethernet with the fieldbus.
Key words : Modbus/TCP; fieldbus; gateway

    隨著企業(yè)信息化進(jìn)程的深入發(fā)展,,實(shí)現(xiàn)企業(yè)上層的管理網(wǎng)絡(luò)與現(xiàn)場(chǎng)控制網(wǎng)絡(luò)的無(wú)縫連接顯得越來(lái)越重要,。基于質(zhì)量分析的生產(chǎn)管理,、與安全相關(guān)的測(cè)試監(jiān)控都要求現(xiàn)場(chǎng)的儀器儀表能對(duì)現(xiàn)場(chǎng)的信息進(jìn)行處理并能及時(shí)被上級(jí)監(jiān)控和管理網(wǎng)絡(luò)訪(fǎng)問(wèn)與控制,,最終納入到企業(yè)信息管理系統(tǒng)統(tǒng)一的框架中。
  目前,,構(gòu)成底層控制網(wǎng)絡(luò)的現(xiàn)場(chǎng)總線(xiàn)技術(shù)已獲得了廣泛的應(yīng)用,。多種現(xiàn)場(chǎng)總線(xiàn)標(biāo)準(zhǔn)并存而相互間無(wú)法兼容的問(wèn)題一直困擾著工業(yè)界。將工業(yè)以太網(wǎng)應(yīng)用到現(xiàn)場(chǎng)控制網(wǎng)絡(luò)已成為當(dāng)前研究的熱點(diǎn)和未來(lái)發(fā)展的趨勢(shì),。如何使這種網(wǎng)絡(luò)結(jié)構(gòu)與工業(yè)以太網(wǎng)技術(shù)相結(jié)合,,實(shí)現(xiàn)底層生產(chǎn)與上層管理的緊密集成是當(dāng)前研究的熱點(diǎn)。
1 Modbus協(xié)議及網(wǎng)關(guān)拓?fù)浣Y(jié)構(gòu)
  Modbus現(xiàn)場(chǎng)總線(xiàn)協(xié)議是Modicon公司于1978年提出的一種現(xiàn)場(chǎng)總線(xiàn)協(xié)議[1],。通過(guò)此協(xié)議,,控制器相互之間、控制器經(jīng)由網(wǎng)絡(luò)和其他設(shè)備之間可以進(jìn)行通信,。該協(xié)議內(nèi)容可以免費(fèi)獲得,,因此Modbus的串行鏈路版本在市場(chǎng)上長(zhǎng)期占有主導(dǎo)地位。大量的產(chǎn)品已直接運(yùn)行或兼容Modbus串行鏈路版本。
  Modbus/TCP工業(yè)以太網(wǎng)協(xié)議是1999年被開(kāi)發(fā)的Modbus協(xié)議的另一版本[2],,允許用戶(hù)通過(guò)以太網(wǎng)訪(fǎng)問(wèn)設(shè)備,。協(xié)議的開(kāi)放性及簡(jiǎn)單易學(xué),使它比很多受商業(yè)利益驅(qū)使的協(xié)議取得更快的發(fā)展,,受到眾多第三方產(chǎn)品廠(chǎng)商,、終端用戶(hù)、系統(tǒng)集成商的廣泛支持[3],。
  本文設(shè)計(jì)和實(shí)現(xiàn)了一種嵌入式協(xié)議轉(zhuǎn)換網(wǎng)關(guān),,通過(guò)Modbus/TCP協(xié)議將傳統(tǒng)的串行鏈路通信的Modbus現(xiàn)場(chǎng)總線(xiàn)與以太網(wǎng)相連。用戶(hù)經(jīng)由以太網(wǎng)對(duì)Modbus設(shè)備進(jìn)行數(shù)據(jù)采集并對(duì)Modbus設(shè)備進(jìn)行遠(yuǎn)程訪(fǎng)問(wèn)和控制,。同時(shí)網(wǎng)關(guān)還提供Web服務(wù)功能,,允許通過(guò)Web瀏覽器直接配置網(wǎng)關(guān)的IP地址等信息并保存到網(wǎng)關(guān)的非易失性存儲(chǔ)器中。圖1是嵌入式Modbus/TCP網(wǎng)關(guān)的連接示意圖,。

2 網(wǎng)關(guān)總體設(shè)計(jì)
  網(wǎng)關(guān)選用了ATMEL公司生產(chǎn)的AT91RM9200高性能32位工業(yè)級(jí)嵌入式微處理器作為網(wǎng)關(guān)硬件系統(tǒng)的核心,。網(wǎng)關(guān)的軟件系統(tǒng)將移植μC/OS-II嵌入式實(shí)時(shí)操作系統(tǒng)和實(shí)現(xiàn)TCP/IP協(xié)議棧,并在此基礎(chǔ)上設(shè)計(jì)應(yīng)用層程序,。網(wǎng)關(guān)的總體設(shè)計(jì)結(jié)構(gòu)如圖2,。網(wǎng)關(guān)的設(shè)計(jì)方案將采用開(kāi)放源代碼的嵌入式操作系統(tǒng)和TCP/IP協(xié)議棧,因此在取得較高性?xún)r(jià)比的基礎(chǔ)上可取得最佳的擴(kuò)展性,。
3 硬件設(shè)計(jì)
  AT91RM9200是著名半導(dǎo)體廠(chǎng)商ATMEL力推的一款基于ARM920T內(nèi)核的工業(yè)級(jí)嵌入式微處理器,,為最大功能、最低功耗,、最低成本的嵌入式系統(tǒng)提供了一個(gè)完整的解決方案[4],它除具備ARM微處理器傳統(tǒng)優(yōu)勢(shì)以外,,其性能,、可靠性和擴(kuò)展性都大大超過(guò)普通的商業(yè)級(jí)ARM7核心的嵌入式微處理器。硬件系統(tǒng)的結(jié)構(gòu)如圖3,。

4 軟件系統(tǒng)設(shè)計(jì)
    嵌入式實(shí)時(shí)操作系統(tǒng)在目前的嵌入式應(yīng)用中使用越來(lái)越廣泛,,尤其在功能復(fù)雜,、系統(tǒng)龐大的應(yīng)用中顯得愈來(lái)愈重要[5],。網(wǎng)關(guān)采用了μC/OS-II實(shí)時(shí)操作系統(tǒng)。μC/OS-II實(shí)時(shí)操作系統(tǒng)是專(zhuān)門(mén)為嵌入式應(yīng)用設(shè)計(jì)的,,除了與CPU硬件相關(guān)部分是用匯編語(yǔ)言編寫(xiě)外,,其他絕大部分代碼用C語(yǔ)言編寫(xiě)。μC/OS-II具有執(zhí)行效率高,、占用空間小,、實(shí)時(shí)性能優(yōu)良、可靠性高,、可擴(kuò)展性強(qiáng)和移植性好等特點(diǎn)[6],。
    選擇合適的ARM處理器的開(kāi)發(fā)工具可以加快嵌入式系統(tǒng)的開(kāi)發(fā)進(jìn)度,、節(jié)約成本、提高效率,。CodeWarrior for ARM Developer Suite V1.2集成開(kāi)發(fā)環(huán)境是ARM公司推出的新一代ARM集成開(kāi)發(fā)工具,,網(wǎng)關(guān)的所有程序代碼均在此集成開(kāi)發(fā)環(huán)境中編譯、鏈接,、調(diào)試,。
4.1 μC/OS-II初始化程序設(shè)計(jì)
    μC/OS-II操作系統(tǒng)運(yùn)行前需要對(duì)硬件系統(tǒng)的片內(nèi)和片外存儲(chǔ)器、系統(tǒng)堆棧等進(jìn)行初始化,。這些工作與硬件系統(tǒng)相關(guān),,難以用C語(yǔ)言實(shí)現(xiàn),需要用匯編語(yǔ)言實(shí)現(xiàn),。系統(tǒng)在執(zhí)行完初始化程序之后就將系統(tǒng)的軟硬件環(huán)境帶到一個(gè)合適的狀態(tài),,為啟動(dòng)μC/OS-II準(zhǔn)備好正確的環(huán)境,最后通過(guò)跳轉(zhuǎn)指令執(zhí)行μC/OS-II主函數(shù)main中的第一條C語(yǔ)句[7],。
    初始化程序的設(shè)計(jì)不屬于μC/OS-II操作系統(tǒng)的移植,但是其質(zhì)量的好壞關(guān)系到整個(gè)系統(tǒng)程序的運(yùn)行,。初始化程序的執(zhí)行步驟如下:(1)定義程序的入口點(diǎn);(2)設(shè)置異常向量; (3)執(zhí)行硬件初始化;(4)在CP15控制寄存器中,將AT91RM9200配置成小端模式; (5)初始化堆棧指針寄存器SP; (6)開(kāi)放系統(tǒng)中斷;(7)初始化C變量;(8)運(yùn)行μC/OS-II操作系統(tǒng),。
4.2 μC/OS-II移植
    μC/OS-II在最初設(shè)計(jì)時(shí)就已經(jīng)考慮到了系統(tǒng)的可移植性,。移植的絕大部分工作集中在多任務(wù)切換的實(shí)現(xiàn)上。這部分代碼主要是進(jìn)行處理器狀態(tài)的保存,、切換和恢復(fù),,主要用匯編語(yǔ)言來(lái)實(shí)現(xiàn)[8]。網(wǎng)關(guān)采用μC/OS-II V2.52版本的內(nèi)核,其全部源代碼量大約是6 000~7 000行,,共16個(gè)文件,。移植到ARM處理器上,主要修改3個(gè)與ARM體系結(jié)構(gòu)相關(guān)的文件:os_cpu.h,、os_cpu_c.c和os_cpu_a.s,代碼量大約是500行,,另外還要添加μC/OS-II系統(tǒng)時(shí)鐘節(jié)拍的代碼。
    時(shí)鐘節(jié)拍初始化代碼需要根據(jù)具體的硬件系統(tǒng)來(lái)編寫(xiě),。網(wǎng)關(guān)選用分頻后的系統(tǒng)內(nèi)部時(shí)鐘做為定時(shí)器的輸入,通過(guò)對(duì)AIC高級(jí)中斷控制器進(jìn)行設(shè)置,,μC/OS-II利用AT91RM9200片內(nèi)定時(shí)器1提供的周期性系統(tǒng)時(shí)鐘節(jié)拍中斷。
4.3 TCP/IP協(xié)議棧移植
    考慮到商業(yè)TCP/IP協(xié)議棧價(jià)格昂貴,有的僅提供庫(kù)函數(shù)調(diào)用并不開(kāi)放源代碼,,所以本文在對(duì)幾種開(kāi)放源代碼的TCP/IP協(xié)議棧進(jìn)行比較后選用2006年3月發(fā)布的穩(wěn)定版本LwIP 1.1.1協(xié)議棧[9]移植到μC/OS-II操作系統(tǒng)和硬件系統(tǒng)上,。
    LwIP對(duì)μC/OS-II的支持也非常好,文檔管理和軟件版本升級(jí)比較完善,。LwIP的移植主要涉及兩部分:操作系統(tǒng)模擬層的修改和以太網(wǎng)硬件驅(qū)動(dòng)程序的設(shè)計(jì),。
  對(duì)于嵌入式系統(tǒng)來(lái)說(shuō),操作系統(tǒng)中進(jìn)程切換的代價(jià)相當(dāng)昂貴。LwIP沒(méi)有直接使用屬于操作系統(tǒng)的函數(shù)調(diào)用及數(shù)據(jù)結(jié)構(gòu),,而是用操作系統(tǒng)模擬層來(lái)代替這些函數(shù)的使用,。所有TCP/IP協(xié)議都在μC/OS-II的一個(gè)任務(wù)tcpip_thread中運(yùn)行。網(wǎng)關(guān)的應(yīng)用層程序建立單獨(dú)的T_httpServer任務(wù)(進(jìn)程)和T_modbusServer任務(wù)(進(jìn)程),,通過(guò)μC/OS-II的郵箱,、消息隊(duì)列等與lwIP任務(wù)(進(jìn)程)進(jìn)行通信。
  操作系統(tǒng)模擬層使用統(tǒng)一的接口來(lái)提供定時(shí)器,、進(jìn)程同步及消息傳遞機(jī)制等此類(lèi)系統(tǒng)服務(wù),。因此移植LwIP需針對(duì)μC/OS-II操作系統(tǒng)修改模擬層中的與處理器和編譯工具相關(guān)的include文件、與操作系統(tǒng)相關(guān)的數(shù)據(jù)結(jié)構(gòu)和函數(shù),主要涉及LwIP的sys_arch.c和sys_arch.h文件,。
  以太網(wǎng)硬件驅(qū)動(dòng)程序的設(shè)計(jì)包括LwIP接口函數(shù)設(shè)計(jì)和硬件相關(guān)函數(shù)設(shè)計(jì),。AT91RM9200微處理器集成了以太網(wǎng)媒質(zhì)訪(fǎng)問(wèn)層EMAC控制器。EMAC控制器通過(guò)RMII接口訪(fǎng)問(wèn)物理層芯片DM9161,,實(shí)現(xiàn)以太網(wǎng)數(shù)據(jù)的傳輸,。以太網(wǎng)設(shè)備驅(qū)動(dòng)程序需要實(shí)現(xiàn)EMAC層的接收、發(fā)送,、初始化以及中斷處理功能,。LwIP提供了一個(gè)網(wǎng)絡(luò)驅(qū)動(dòng)程序的參考模板,即LwIP的源代碼目錄\src\netif下找到ethernetif.c文件,,根據(jù)微處理器的硬件修改其中的6個(gè)函數(shù)即可,。
4.4 應(yīng)用層程序設(shè)計(jì)
  在嵌入式操作系統(tǒng)μC/OS-II和LwIP的基礎(chǔ)上進(jìn)行應(yīng)用層程序的設(shè)計(jì),主要實(shí)現(xiàn)嵌入式Modbus/TCP網(wǎng)關(guān)的兩個(gè)主要功能:通過(guò)網(wǎng)關(guān)的Web服務(wù)功能對(duì)網(wǎng)關(guān)進(jìn)行配置,;通過(guò)Modbus/TCP協(xié)議將Modbus串行通信鏈路與以太網(wǎng)相連,。
4.4.1 Web服務(wù)功能設(shè)計(jì)
  HTTP協(xié)議實(shí)現(xiàn)的客戶(hù)機(jī)/服務(wù)器模式是一種請(qǐng)求/響應(yīng)行為。嵌入式Modbus/TCP網(wǎng)關(guān)將充當(dāng)Web服務(wù)器,??蛻?hù)機(jī)是任意一臺(tái)與網(wǎng)關(guān)以太網(wǎng)接口相連的計(jì)算機(jī)。
  (1)網(wǎng)關(guān)復(fù)位啟動(dòng)后,,μC/OS-II運(yùn)行T_httpServer任務(wù)(啟動(dòng)Web服務(wù)),。客戶(hù)機(jī)可以通過(guò)瀏覽器向網(wǎng)關(guān)發(fā)出HTTP的GET方法的請(qǐng)求,。
    (2)網(wǎng)關(guān)收到該請(qǐng)求后對(duì)請(qǐng)求消息中的方法字段進(jìn)行判斷,。如果是GET方法,則表示是第一次請(qǐng)求,,網(wǎng)關(guān)執(zhí)行__Handler_HTTPGet( )函數(shù),,將固化在片外Flash中的HTTP表單頁(yè)面和網(wǎng)關(guān)的配置信息返回給客戶(hù)機(jī),。
    (3)用戶(hù)填寫(xiě)網(wǎng)關(guān)發(fā)送的表單頁(yè)面,,輸入新的IP地址、子網(wǎng)掩碼和網(wǎng)關(guān)地址,然后點(diǎn)擊提交按鈕,,客戶(hù)機(jī)向網(wǎng)關(guān)發(fā)出POST方法的請(qǐng)求,。其中對(duì)用戶(hù)填寫(xiě)數(shù)據(jù)進(jìn)行驗(yàn)證的工作是通過(guò)嵌在表單頁(yè)面中的javascript程序?qū)崿F(xiàn)的,減輕了網(wǎng)關(guān)的負(fù)擔(dān),。
  (4)網(wǎng)關(guān)收到客戶(hù)機(jī)POST方法的請(qǐng)求后擦除片外
Flash中原有的配置信息,然后燒寫(xiě)新的信息,,從而保證網(wǎng)關(guān)的配置在復(fù)位后不會(huì)丟失,配置信息在網(wǎng)關(guān)重啟后生效,。
4.4.2 Modbus/TCP協(xié)議轉(zhuǎn)換功能設(shè)計(jì)
  Modbus/TCP嵌入式網(wǎng)關(guān)復(fù)位啟動(dòng)之后會(huì)進(jìn)行一系列的初始化操作,,最后啟動(dòng)T_modbusServer任務(wù),該任務(wù)實(shí)現(xiàn)Modbus/TCP幀與串行鏈路中的Modbus RTU幀之間的轉(zhuǎn)發(fā),。當(dāng)Modbus/TCP客戶(hù)機(jī)需要對(duì)串行鏈路中的服務(wù)器進(jìn)行查詢(xún)時(shí),,首先會(huì)向Modbus/TCP網(wǎng)關(guān)的502端口發(fā)起連接請(qǐng)求,網(wǎng)關(guān)監(jiān)聽(tīng)到這一請(qǐng)求后會(huì)執(zhí)行中斷服務(wù)程序,,喚醒處于等待狀態(tài)的T_modbusServer任務(wù),,并與之建立TCP連接,Modbus/TCP客戶(hù)機(jī)就會(huì)發(fā)送一個(gè)Modbus/TCP請(qǐng)求幀并等待網(wǎng)關(guān)的響應(yīng)信息,。網(wǎng)關(guān)在收到Modbus/TCP客戶(hù)機(jī)的請(qǐng)求信息后會(huì)對(duì)幀進(jìn)行分析處理,,最后生成一個(gè)Modbus RTU格式的查詢(xún)幀并發(fā)送到串行鏈路中去。之后繼續(xù)監(jiān)聽(tīng)串行鏈路,,若收到串行鏈路上的RTU響應(yīng)幀,,則將該幀封裝成Modbus/TCP應(yīng)答幀,發(fā)送給以太網(wǎng)的Modbus/TCP客戶(hù)機(jī),,并斷開(kāi)連接,。
5 測(cè)試
  網(wǎng)關(guān)采用了第三方的Modbus客戶(hù)機(jī)測(cè)試工具M(jìn)odbusPoll V4.2和服務(wù)器測(cè)試工具M(jìn)odbusSlave V4.1進(jìn)行測(cè)試。在一臺(tái)PC機(jī)上運(yùn)行多個(gè)ModbusSlave程序模擬不同的設(shè)備和設(shè)備功能狀態(tài),,該P(yáng)C機(jī)通過(guò)串行通信鏈路與網(wǎng)關(guān)相連,。另一臺(tái)PC機(jī)運(yùn)行ModbusPoll程序,模擬Modbus/TCP客戶(hù)機(jī),,通過(guò)以太網(wǎng)與網(wǎng)關(guān)相連,,并且運(yùn)行Commview軟件捕捉以太網(wǎng)通信的全過(guò)程并計(jì)算響應(yīng)時(shí)間。測(cè)試時(shí)由Modbus/TCP客戶(hù)機(jī)通過(guò)網(wǎng)關(guān)循環(huán)查詢(xún)串行通信鏈路中的三臺(tái)Modbus服務(wù)器, 串行通信的波特率設(shè)置為9 600 b/s,,無(wú)校驗(yàn)位,,停止位為1。網(wǎng)關(guān)連續(xù)工作48 h未發(fā)生查詢(xún)失敗,。根據(jù)Commview捕捉到的以太網(wǎng)數(shù)據(jù)包的間隔時(shí)間可以計(jì)算出Modbus/TCP客戶(hù)機(jī)一次查詢(xún)響應(yīng)的實(shí)際時(shí)間約為110 ms,。網(wǎng)關(guān)各部分均正常,主控芯片僅微微發(fā)熱,。網(wǎng)關(guān)直流5 V電源,輸入電流為55 mA,,總功率僅為0.275 W,。
  隨著企業(yè)管理信息化的迅速發(fā)展,越來(lái)越多的工廠(chǎng)和企業(yè)擁有了自己的信息管理網(wǎng)絡(luò),。有用戶(hù)提出將自己的控制系統(tǒng)(如中央空調(diào)系統(tǒng))的管理納入到企業(yè)信息管理系統(tǒng)統(tǒng)一的框架中去,。利用嵌入式Modbus/TCP網(wǎng)關(guān)可以在保留現(xiàn)有的控制設(shè)備和布線(xiàn)網(wǎng)絡(luò)的情況下,使用戶(hù)通過(guò)企業(yè)的信息網(wǎng)絡(luò)對(duì)整個(gè)控制系統(tǒng)進(jìn)行監(jiān)控,,既滿(mǎn)足了用戶(hù)升級(jí)的愿望又減少了成本的支出,。
參考文獻(xiàn)
[1]  Modbus over serial line specification & implementation guide V1.0[DB/OL]. http://www.Modbus-IDA.org,2004.
[2]  Modbus messaging on TCP/IP implementation guide  V1.0.a [DB/OL].http://www.Modbus-IDA.org,2004.
[3]  鄧欣茹,丁建興,楊翼,等.Modbus/TCP工業(yè)以太網(wǎng)的現(xiàn)狀與發(fā)展[J],2004,17(9):14-15.
[4]  ARM920-based microcontroller AT91RM9200,ATMEL Corporation Inc[DB/OL]. http://www.atmel.com/,2003.
[5]  宋延昭.嵌入式操作系統(tǒng)介紹及選型原則[J].工業(yè)控制計(jì)算機(jī),2005,18(7):41-42.
[6]  LABROSSE J J著.嵌入式實(shí)時(shí)操作系統(tǒng)μC/OS-II(第2版)[M].邵貝貝,等譯.北京:北京航空航天大學(xué)出版,
2003.
[7]  朱義君.AT91系列ARM微控制器體系結(jié)構(gòu)與開(kāi)發(fā)實(shí)例[M].北京:北京航空航天大學(xué)出版社,2005.
[8]  邸曉鴻. μC/OS-II在Nios上的移植[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2004(9):79-81.
[9]  LwIP介紹[EB/OL].http://savannah.nongnu.org/projects/lwip/,2002.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載,。