文獻標識碼: A
隨著企業信息化進程的深入發展,實現企業上層的管理網絡與現場控制網絡的無縫連接顯得越來越重要。基于質量分析的生產管理、與安全相關的測試監控都要求現場的儀器儀表能對現場的信息進行處理并能及時被上級監控和管理網絡訪問與控制,最終納入到企業信息管理系統統一的框架中。
目前,構成底層控制網絡的現場總線技術已獲得了廣泛的應用。多種現場總線標準并存而相互間無法兼容的問題一直困擾著工業界。將工業以太網應用到現場控制網絡已成為當前研究的熱點和未來發展的趨勢。如何使這種網絡結構與工業以太網技術相結合,實現底層生產與上層管理的緊密集成是當前研究的熱點。
1 Modbus協議及網關拓撲結構
Modbus現場總線協議是Modicon公司于1978年提出的一種現場總線協議[1]。通過此協議,控制器相互之間、控制器經由網絡和其他設備之間可以進行通信。該協議內容可以免費獲得,因此Modbus的串行鏈路版本在市場上長期占有主導地位。大量的產品已直接運行或兼容Modbus串行鏈路版本。
Modbus/TCP工業以太網協議是1999年被開發的Modbus協議的另一版本[2],允許用戶通過以太網訪問設備。協議的開放性及簡單易學,使它比很多受商業利益驅使的協議取得更快的發展,受到眾多第三方產品廠商、終端用戶、系統集成商的廣泛支持[3]。
本文設計和實現了一種嵌入式協議轉換網關,通過Modbus/TCP協議將傳統的串行鏈路通信的Modbus現場總線與以太網相連。用戶經由以太網對Modbus設備進行數據采集并對Modbus設備進行遠程訪問和控制。同時網關還提供Web服務功能,允許通過Web瀏覽器直接配置網關的IP地址等信息并保存到網關的非易失性存儲器中。圖1是嵌入式Modbus/TCP網關的連接示意圖。
2 網關總體設計
網關選用了ATMEL公司生產的AT91RM9200高性能32位工業級嵌入式微處理器作為網關硬件系統的核心。網關的軟件系統將移植μC/OS-II嵌入式實時操作系統和實現TCP/IP協議棧,并在此基礎上設計應用層程序。網關的總體設計結構如圖2。網關的設計方案將采用開放源代碼的嵌入式操作系統和TCP/IP協議棧,因此在取得較高性價比的基礎上可取得最佳的擴展性。
3 硬件設計
AT91RM9200是著名半導體廠商ATMEL力推的一款基于ARM920T內核的工業級嵌入式微處理器,為最大功能、最低功耗、最低成本的嵌入式系統提供了一個完整的解決方案[4],它除具備ARM微處理器傳統優勢以外,其性能、可靠性和擴展性都大大超過普通的商業級ARM7核心的嵌入式微處理器。硬件系統的結構如圖3。
4 軟件系統設計
嵌入式實時操作系統在目前的嵌入式應用中使用越來越廣泛,尤其在功能復雜、系統龐大的應用中顯得愈來愈重要[5]。網關采用了μC/OS-II實時操作系統。μC/OS-II實時操作系統是專門為嵌入式應用設計的,除了與CPU硬件相關部分是用匯編語言編寫外,其他絕大部分代碼用C語言編寫。μC/OS-II具有執行效率高、占用空間小、實時性能優良、可靠性高、可擴展性強和移植性好等特點[6]。
選擇合適的ARM處理器的開發工具可以加快嵌入式系統的開發進度、節約成本、提高效率。CodeWarrior for ARM Developer Suite V1.2集成開發環境是ARM公司推出的新一代ARM集成開發工具,網關的所有程序代碼均在此集成開發環境中編譯、鏈接、調試。
4.1 μC/OS-II初始化程序設計
μC/OS-II操作系統運行前需要對硬件系統的片內和片外存儲器、系統堆棧等進行初始化。這些工作與硬件系統相關,難以用C語言實現,需要用匯編語言實現。系統在執行完初始化程序之后就將系統的軟硬件環境帶到一個合適的狀態,為啟動μC/OS-II準備好正確的環境,最后通過跳轉指令執行μC/OS-II主函數main中的第一條C語句[7]。
初始化程序的設計不屬于μC/OS-II操作系統的移植,但是其質量的好壞關系到整個系統程序的運行。初始化程序的執行步驟如下:(1)定義程序的入口點;(2)設置異常向量; (3)執行硬件初始化;(4)在CP15控制寄存器中,將AT91RM9200配置成小端模式; (5)初始化堆棧指針寄存器SP; (6)開放系統中斷;(7)初始化C變量;(8)運行μC/OS-II操作系統。
4.2 μC/OS-II移植
μC/OS-II在最初設計時就已經考慮到了系統的可移植性。移植的絕大部分工作集中在多任務切換的實現上。這部分代碼主要是進行處理器狀態的保存、切換和恢復,主要用匯編語言來實現[8]。網關采用μC/OS-II V2.52版本的內核,其全部源代碼量大約是6 000~7 000行,共16個文件。移植到ARM處理器上,主要修改3個與ARM體系結構相關的文件:os_cpu.h、os_cpu_c.c和os_cpu_a.s,代碼量大約是500行,另外還要添加μC/OS-II系統時鐘節拍的代碼。
時鐘節拍初始化代碼需要根據具體的硬件系統來編寫。網關選用分頻后的系統內部時鐘做為定時器的輸入,通過對AIC高級中斷控制器進行設置,μC/OS-II利用AT91RM9200片內定時器1提供的周期性系統時鐘節拍中斷。
4.3 TCP/IP協議棧移植
考慮到商業TCP/IP協議棧價格昂貴,有的僅提供庫函數調用并不開放源代碼,所以本文在對幾種開放源代碼的TCP/IP協議棧進行比較后選用2006年3月發布的穩定版本LwIP 1.1.1協議棧[9]移植到μC/OS-II操作系統和硬件系統上。
LwIP對μC/OS-II的支持也非常好,文檔管理和軟件版本升級比較完善。LwIP的移植主要涉及兩部分:操作系統模擬層的修改和以太網硬件驅動程序的設計。
對于嵌入式系統來說,操作系統中進程切換的代價相當昂貴。LwIP沒有直接使用屬于操作系統的函數調用及數據結構,而是用操作系統模擬層來代替這些函數的使用。所有TCP/IP協議都在μC/OS-II的一個任務tcpip_thread中運行。網關的應用層程序建立單獨的T_httpServer任務(進程)和T_modbusServer任務(進程),通過μC/OS-II的郵箱、消息隊列等與lwIP任務(進程)進行通信。
操作系統模擬層使用統一的接口來提供定時器、進程同步及消息傳遞機制等此類系統服務。因此移植LwIP需針對μC/OS-II操作系統修改模擬層中的與處理器和編譯工具相關的include文件、與操作系統相關的數據結構和函數,主要涉及LwIP的sys_arch.c和sys_arch.h文件。
以太網硬件驅動程序的設計包括LwIP接口函數設計和硬件相關函數設計。AT91RM9200微處理器集成了以太網媒質訪問層EMAC控制器。EMAC控制器通過RMII接口訪問物理層芯片DM9161,實現以太網數據的傳輸。以太網設備驅動程序需要實現EMAC層的接收、發送、初始化以及中斷處理功能。LwIP提供了一個網絡驅動程序的參考模板,即LwIP的源代碼目錄\src\netif下找到ethernetif.c文件,根據微處理器的硬件修改其中的6個函數即可。
4.4 應用層程序設計
在嵌入式操作系統μC/OS-II和LwIP的基礎上進行應用層程序的設計,主要實現嵌入式Modbus/TCP網關的兩個主要功能:通過網關的Web服務功能對網關進行配置;通過Modbus/TCP協議將Modbus串行通信鏈路與以太網相連。
4.4.1 Web服務功能設計
HTTP協議實現的客戶機/服務器模式是一種請求/響應行為。嵌入式Modbus/TCP網關將充當Web服務器。客戶機是任意一臺與網關以太網接口相連的計算機。
(1)網關復位啟動后,μC/OS-II運行T_httpServer任務(啟動Web服務)。客戶機可以通過瀏覽器向網關發出HTTP的GET方法的請求。
(2)網關收到該請求后對請求消息中的方法字段進行判斷。如果是GET方法,則表示是第一次請求,網關執行__Handler_HTTPGet( )函數,將固化在片外Flash中的HTTP表單頁面和網關的配置信息返回給客戶機。
(3)用戶填寫網關發送的表單頁面,輸入新的IP地址、子網掩碼和網關地址,然后點擊提交按鈕,客戶機向網關發出POST方法的請求。其中對用戶填寫數據進行驗證的工作是通過嵌在表單頁面中的javascript程序實現的,減輕了網關的負擔。
(4)網關收到客戶機POST方法的請求后擦除片外
Flash中原有的配置信息,然后燒寫新的信息,從而保證網關的配置在復位后不會丟失,配置信息在網關重啟后生效。
4.4.2 Modbus/TCP協議轉換功能設計
Modbus/TCP嵌入式網關復位啟動之后會進行一系列的初始化操作,最后啟動T_modbusServer任務,該任務實現Modbus/TCP幀與串行鏈路中的Modbus RTU幀之間的轉發。當Modbus/TCP客戶機需要對串行鏈路中的服務器進行查詢時,首先會向Modbus/TCP網關的502端口發起連接請求,網關監聽到這一請求后會執行中斷服務程序,喚醒處于等待狀態的T_modbusServer任務,并與之建立TCP連接,Modbus/TCP客戶機就會發送一個Modbus/TCP請求幀并等待網關的響應信息。網關在收到Modbus/TCP客戶機的請求信息后會對幀進行分析處理,最后生成一個Modbus RTU格式的查詢幀并發送到串行鏈路中去。之后繼續監聽串行鏈路,若收到串行鏈路上的RTU響應幀,則將該幀封裝成Modbus/TCP應答幀,發送給以太網的Modbus/TCP客戶機,并斷開連接。
5 測試
網關采用了第三方的Modbus客戶機測試工具ModbusPoll V4.2和服務器測試工具ModbusSlave V4.1進行測試。在一臺PC機上運行多個ModbusSlave程序模擬不同的設備和設備功能狀態,該PC機通過串行通信鏈路與網關相連。另一臺PC機運行ModbusPoll程序,模擬Modbus/TCP客戶機,通過以太網與網關相連,并且運行Commview軟件捕捉以太網通信的全過程并計算響應時間。測試時由Modbus/TCP客戶機通過網關循環查詢串行通信鏈路中的三臺Modbus服務器, 串行通信的波特率設置為9 600 b/s,無校驗位,停止位為1。網關連續工作48 h未發生查詢失敗。根據Commview捕捉到的以太網數據包的間隔時間可以計算出Modbus/TCP客戶機一次查詢響應的實際時間約為110 ms。網關各部分均正常,主控芯片僅微微發熱。網關直流5 V電源,輸入電流為55 mA,總功率僅為0.275 W。
隨著企業管理信息化的迅速發展,越來越多的工廠和企業擁有了自己的信息管理網絡。有用戶提出將自己的控制系統(如中央空調系統)的管理納入到企業信息管理系統統一的框架中去。利用嵌入式Modbus/TCP網關可以在保留現有的控制設備和布線網絡的情況下,使用戶通過企業的信息網絡對整個控制系統進行監控,既滿足了用戶升級的愿望又減少了成本的支出。
參考文獻
[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工業以太網的現狀與發展[J],2004,17(9):14-15.
[4] ARM920-based microcontroller AT91RM9200,ATMEL Corporation Inc[DB/OL]. http://www.atmel.com/,2003.
[5] 宋延昭.嵌入式操作系統介紹及選型原則[J].工業控制計算機,2005,18(7):41-42.
[6] LABROSSE J J著.嵌入式實時操作系統μC/OS-II(第2版)[M].邵貝貝,等譯.北京:北京航空航天大學出版,
2003.
[7] 朱義君.AT91系列ARM微控制器體系結構與開發實例[M].北京:北京航空航天大學出版社,2005.
[8] 邸曉鴻. μC/OS-II在Nios上的移植[J].單片機與嵌入式系統應用,2004(9):79-81.
[9] LwIP介紹[EB/OL].http://savannah.nongnu.org/projects/lwip/,2002.