嵌入式Modbus/TCP網(wǎng)關(guān)的設(shè)計(jì)與實(shí)現(xiàn)
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)編寫。網(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)用并不開放源代碼,所以本文在對(duì)幾種開放源代碼的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沒有直接使用屬于操作系統(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ī)制等此類系統(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ì)訪問(wèn)層EMAC控制器。EMAC控制器通過(guò)RMII接口訪問(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的源代碼目錄srcnetif下找到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)的客戶機(jī)/服務(wù)器模式是一種請(qǐng)求/響應(yīng)行為。嵌入式Modbus/TCP網(wǎng)關(guān)將充當(dāng)Web服務(wù)器??蛻魴C(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ù))??蛻魴C(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)的配置信息返回給客戶機(jī)。
(3)用戶填寫網(wǎng)關(guān)發(fā)送的表單頁(yè)面,輸入新的IP地址、子網(wǎng)掩碼和網(wǎng)關(guān)地址,然后點(diǎn)擊提交按鈕,客戶機(jī)向網(wǎng)關(guān)發(fā)出POST方法的請(qǐng)求。其中對(duì)用戶填寫數(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)收到客戶機(jī)POST方法的請(qǐng)求后擦除片外
Flash中原有的配置信息,然后燒寫新的信息,從而保證網(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客戶機(jī)需要對(duì)串行鏈路中的服務(wù)器進(jìn)行查詢時(shí),首先會(huì)向Modbus/TCP網(wǎng)關(guān)的502端口發(fā)起連接請(qǐng)求,網(wǎng)關(guān)監(jiān)聽到這一請(qǐng)求后會(huì)執(zhí)行中斷服務(wù)程序,喚醒處于等待狀態(tài)的T_modbusServer任務(wù),并與之建立TCP連接,Modbus/TCP客戶機(jī)就會(huì)發(fā)送一個(gè)Modbus/TCP請(qǐng)求幀并等待網(wǎng)關(guān)的響應(yīng)信息。網(wǎng)關(guān)在收到Modbus/TCP客戶機(jī)的請(qǐng)求信息后會(huì)對(duì)幀進(jìn)行分析處理,最后生成一個(gè)Modbus RTU格式的查詢幀并發(fā)送到串行鏈路中去。之后繼續(xù)監(jiān)聽串行鏈路,若收到串行鏈路上的RTU響應(yīng)幀,則將該幀封裝成Modbus/TCP應(yīng)答幀,發(fā)送給以太網(wǎng)的Modbus/TCP客戶機(jī),并斷開連接。
5 測(cè)試
網(wǎng)關(guān)采用了第三方的Modbus客戶機(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客戶機(jī),通過(guò)以太網(wǎng)與網(wǎng)關(guān)相連,并且運(yùn)行Commview軟件捕捉以太網(wǎng)通信的全過(guò)程并計(jì)算響應(yīng)時(shí)間。測(cè)試時(shí)由Modbus/TCP客戶機(jī)通過(guò)網(wǎng)關(guān)循環(huán)查詢串行通信鏈路中的三臺(tái)Modbus服務(wù)器, 串行通信的波特率設(shè)置為9 600 b/s,無(wú)校驗(yàn)位,停止位為1。網(wǎng)關(guān)連續(xù)工作48 h未發(fā)生查詢失敗。根據(jù)Commview捕捉到的以太網(wǎng)數(shù)據(jù)包的間隔時(shí)間可以計(jì)算出Modbus/TCP客戶機(jī)一次查詢響應(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)越多的工廠和企業(yè)擁有了自己的信息管理網(wǎng)絡(luò)。有用戶提出將自己的控制系統(tǒng)(如中央空調(diào)系統(tǒng))的管理納入到企業(yè)信息管理系統(tǒng)統(tǒng)一的框架中去。利用嵌入式Modbus/TCP網(wǎng)關(guān)可以在保留現(xiàn)有的控制設(shè)備和布線網(wǎng)絡(luò)的情況下,使用戶通過(guò)企業(yè)的信息網(wǎng)絡(luò)對(duì)整個(gè)控制系統(tǒng)進(jìn)行監(jiān)控,既滿足了用戶升級(jí)的愿望又減少了成本的支出。本文引用地址:http://2s4d.com/article/151848.htm linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
tcp/ip相關(guān)文章:tcp/ip是什么
評(píng)論