李小勇,婁顏超
(喀什師范學(xué)院,喀什844006)
隨著信息技術(shù)、網(wǎng)絡(luò)技術(shù)和嵌入式系統(tǒng)的飛速發(fā)展,微型化嵌入式設(shè)備接入互聯(lián)網(wǎng)是大勢所趨。相對于中小型WEB服務(wù)器,微型嵌入式 WEB服務(wù)器的優(yōu)點顯而易見。其體積小、價格低,最重要的是功耗非常低,攜帶和部署方便、快捷。在遠距離分布式測控系統(tǒng)中,希望控制節(jié)點具有接入網(wǎng)絡(luò)的功能,這樣可以方便地實現(xiàn)基于網(wǎng)絡(luò)的分布式測控;同時,出于成本考慮,也希望控制節(jié)點經(jīng)濟、高效。本文針對分布式測控系統(tǒng)中對于監(jiān)控節(jié)點的需求而設(shè)計,考慮以一種實用的方式實現(xiàn)定制化的微型嵌入式WEB服務(wù)器。網(wǎng)絡(luò)通信功能采用開源微型TCP/IP協(xié)議棧uIP實現(xiàn),嵌入式WEB服務(wù)器以uIP協(xié)議棧作為基礎(chǔ),采用SSI(服務(wù)器端包含)技術(shù)實現(xiàn)。當(dāng)嵌入式WEB服務(wù)器上電運行后,可實現(xiàn)以動態(tài)的方式將包含有傳感器、執(zhí)行器信息的HTTP數(shù)據(jù)發(fā)送給客戶端,客戶端也能夠以HTTP請求的方式向服務(wù)器端發(fā)出控制命令。此外,設(shè)計了可配置網(wǎng)絡(luò)參數(shù)的功能,以方便部署服務(wù)器。
硬件部分由8位模數(shù)混合型單片機C8051F340、10/100 Mbps自適應(yīng)以太網(wǎng)控制器CP2200、網(wǎng)絡(luò)轉(zhuǎn)接器、傳感器與接口電路、執(zhí)行器與驅(qū)動電路、電源組成。系統(tǒng)硬件組成框圖如圖1所示。
網(wǎng)絡(luò)通信電路設(shè)計分成兩個部分:一部分為C8051F340[1]與 CP2200[2]的硬件接口電路設(shè)計,另一部分為CP2200與RJ45網(wǎng)絡(luò)轉(zhuǎn)接器的硬件接口電路設(shè)計。網(wǎng)絡(luò)通信硬件接口電路如圖2所示。
1.2.1 C8051F340與CP2200硬件接口電路設(shè)計
將CP2200的MOTEN和MUXEN引腳接地,使CP2200工作在非復(fù)用Intel總線模式。單片機P3口作為地址線,P4口作為數(shù)據(jù)線分別與CP2200地址線和數(shù)據(jù)線相連。CP2200的讀寫控制信號線分別與單片機的P1.6、P1.7兩引腳相連。C8051F340的P0.2引腳被分配給,與CP2200芯片的中斷信號相連。當(dāng)CP2200的14個中斷事件中的任何一個產(chǎn)生中斷時,CP2200將中斷狀態(tài)寄存器中相應(yīng)的標(biāo)志位置1,并將引腳驅(qū)動到低電平來通知主機。在被允許的中斷的所有中斷標(biāo)志位都被主機清0之前引腳將一直保持低電平。
圖1 系統(tǒng)硬件總體框圖
圖2 網(wǎng)絡(luò)通信硬件電路接口設(shè)計
1.2.2 CP2200與RJ45網(wǎng)絡(luò)轉(zhuǎn)接器硬件
CP2200與RJ45連接時使用的引腳有RX+、RX-、TX+、TX-,利用 RJ45實現(xiàn)與網(wǎng)絡(luò)的連接。CP2200的LINK和ACT引腳與LINK LED和ACT LED引腳相連,用來指示網(wǎng)絡(luò)狀態(tài),其中LINK是當(dāng)檢測到有效連接脈沖時有效,ACT則是發(fā)送或接收一個數(shù)據(jù)包時有效。
軟件設(shè)計總體上采用層次式設(shè)計結(jié)構(gòu),是組合式嵌入式軟件設(shè)計方法[3]的一種實現(xiàn)方式。從TCP/IP模型的角度看,Ethernet初始化模塊和ARP協(xié)議模塊位于網(wǎng)絡(luò)接入層,完成以太網(wǎng)控制器的物理層初始化(PHY)、媒體訪問控制層初始化(MAC)和網(wǎng)絡(luò)地址解析(ARP),該層負責(zé)為上層提供通信接口和收發(fā)通信鏈路上的比特流信號。TCP/IP協(xié)議棧模塊分為兩個部分,以IP協(xié)議為核心的部分位于TCP/IP的網(wǎng)際互連層,以TCP協(xié)議為核心的部分位于TCP/IP模型的傳輸層?;赟SI技術(shù)的WEB服務(wù)器位于TCP/IP模型的應(yīng)用層。軟件總體設(shè)計示意圖如圖3所示。
圖3 軟件總體設(shè)計示意圖
對于8位單片機,硬件資源是十分有限的,采用RTOS結(jié)合TCP/IP的設(shè)計方法用來接入網(wǎng)絡(luò),目前沒有實際應(yīng)用意義,而僅移植TCP/IP協(xié)議棧來實現(xiàn)網(wǎng)絡(luò)接入可以獲得良好的實時通信效果。在本設(shè)計中,移植目前常用的開源微型網(wǎng)絡(luò)協(xié)議棧uIP[4-6],版本采用uIP 0.6。圖4為網(wǎng)絡(luò)數(shù)據(jù)包接收處理總體流程。
圖4 網(wǎng)絡(luò)數(shù)據(jù)包接收處理過程
當(dāng)從uIP接收到原始TCP消息后,需要調(diào)用TCP協(xié)議解析函數(shù)對消息體解析。由于HTTP協(xié)議是基于TCP的協(xié)議,因而只需檢查TCP消息體中是否包含HTTP協(xié)議。如果包含HTTP協(xié)議,則進入該協(xié)議處理流程中;如果不包含,則放棄目前的消息,繼續(xù)接收和解析下一個TCP消息體。
TCP消息處理流程如圖5所示,該流程對應(yīng)于圖4中處理TCP消息部分。WEB服務(wù)器設(shè)計基于TCP協(xié)議,并采用 HTTP[7-8]協(xié)議實現(xiàn)。
圖5 TCP消息處理流程
SSI[9-10](服務(wù)器端包含)技術(shù)是動態(tài)生成網(wǎng)頁的一種技術(shù)實現(xiàn)方式。當(dāng)需要在響應(yīng)的WEB頁面中增加小段動態(tài)信息時,采用SSI技術(shù)是一種合適的選擇。在8位單片機上構(gòu)建基于SSI機制的嵌入式WEB服務(wù)器,需要編寫專門的WEB模板解析函數(shù),用以在HTML模板中生成動態(tài)信息。SSI解析功能與參與HTTP響應(yīng)的流程關(guān)系如圖6所示。
要實現(xiàn)WEB服務(wù)器內(nèi)容動態(tài)響應(yīng)客戶端請求的效果,需要做到實時改變HTTP消息頭和HTTP消息正文中WEB頁面特定內(nèi)容的數(shù)據(jù)。在采用SSI技術(shù)達到這個目標(biāo)時,本設(shè)計并未實現(xiàn)SSI全部功能,原因是解析SSI所有類型腳本需要編寫標(biāo)準(zhǔn)的SSI解析引擎,要占據(jù)大量的代碼空間,同時對于8位單片機的運行效率也是一個挑戰(zhàn),故在腳本類型的實現(xiàn)上作了很大的簡化。SSI解析函數(shù)僅處理一種嵌入式SSI腳本類型,即顯示變量值。SSI腳本的一般通用格式為:<!--#element attribute=value attribute=value...-->。其中,element為腳本命令類型,attribute為腳本變量,value為變量名。命令類型和變量不同,解析方式也不同。
圖6 SSI解析參與HTTP響應(yīng)流程
WEB模板文件通常在單片機code區(qū)定義,該區(qū)僅具有只讀屬性,適合存放靜態(tài)的數(shù)據(jù)。WEB模板文件是一種符合HTML標(biāo)準(zhǔn)[11]的數(shù)據(jù)格式定義。如要增加數(shù)據(jù)動態(tài)顯示功能,需將動態(tài)顯示數(shù)值的地方插入SSI腳本。例如,在 WEB模板文件Test.html中需要動態(tài)顯示當(dāng)前溫度的位置,插入一個名為<!--#echo var="TEMPERATURE"-->的標(biāo)簽。模板定義示例如下:
(1)HTTP1.1協(xié)議響應(yīng)頭模板定義
(2)Test.html的 WEB模板文件體定義
處理來自客戶端的HTTP1.1請求。HTTP請求由3部分組成,分別是:請求行、消息報頭、請求正文。在本文中,被處理的HTTP請求包括GET方式和POST方式。GET方式請求用來獲取服務(wù)器中特定WEB頁面,如果GET請求URL中附加用戶信息,服務(wù)器不作出處理。POST請求正文一般帶有用戶附加信息,服務(wù)器接收請求后要對這些信息進行處理。
2.6.1 處理GET方式HTTP請求
當(dāng)有客戶端向服務(wù)器地址為192.168.131.112發(fā)送GET方式HTTP請求,獲取一個WEB文件名為Test.html的頁面時,通常發(fā)送一個包含但不限于如下內(nèi)容的HTTP1.1請求:
TCP協(xié)議解析程序、HTTP協(xié)議解析程序分別識別這個網(wǎng)絡(luò)數(shù)據(jù)為TCP消息,同時是HTTP1.1 GET方式請求。當(dāng)判斷存在Test.html網(wǎng)頁時,WEB服務(wù)器啟動SSI解析函數(shù),置換這個網(wǎng)頁的模板文件和HTTP1.1協(xié)議響應(yīng)頭模板中所有嵌入的SSI腳本,然后以HTTP響應(yīng)的形式發(fā)送給客戶端。
2.6.2 處理POST方式HTTP請求
當(dāng)有客戶端向服務(wù)器地址為192.168.131.112發(fā)送POST方式HTTP請求,表示要通過表單向服務(wù)器提交數(shù)據(jù)。如向服務(wù)器提交新的網(wǎng)絡(luò)參數(shù)表單,通常發(fā)送一個包含但不限于如下內(nèi)容的HTTP1.1請求:
服務(wù)器端通過協(xié)議解析程序判斷這是一個HTTP1.1 POST方式請求。當(dāng)判斷存在IpConfig.html頁面時,服務(wù)器從請求正文中獲取新的網(wǎng)絡(luò)參數(shù)信息,并更新當(dāng)前的網(wǎng)絡(luò)參數(shù)。當(dāng)客戶端再次向服務(wù)器發(fā)起HTTP請求時,需要使用新的主機地址,這個示例新地址為192.168.131.113。同樣的,通過POST請求方式也可以用來向服務(wù)器發(fā)出控制指令,服務(wù)器根據(jù)指令完成動作。
設(shè)定局域網(wǎng)路由器網(wǎng)絡(luò)參數(shù):IP地址為192.168.131.1,子網(wǎng)掩碼為255.255.255.0。設(shè)定局域網(wǎng)內(nèi)PC機IP地址:192.168.131.100。設(shè)定嵌入式 WEB服務(wù)器IP地址:192.168.131.112。子網(wǎng)掩碼均相同。將嵌入式 WEB服務(wù)器接入局域網(wǎng)中,通過PC機ping WEB服務(wù)器檢查服務(wù)器的響應(yīng)速度和丟包率,實驗結(jié)果如圖7和圖8所示。
圖7 網(wǎng)絡(luò)連通性測試
圖8 網(wǎng)絡(luò)通信穩(wěn)定性測試
通過實際運行與調(diào)試,基本達到了預(yù)期目的??蛻舳税l(fā)送HTTP GET方式請求獲取動態(tài)WEB頁面,發(fā)送POST方式請求時,在請求正文附加表單數(shù)據(jù),服務(wù)器通過處理表單數(shù)據(jù)完成對應(yīng)的動作。
[1]Silicon Semiconductor Inc.C8051f34X datasheet[EB/OL].(2006-08)[2014-06].http://www.silabs.com/products/mcu/Pages/8-Bit-Microcontrollers.aspx.
[2]Silicon Laboratories Inc.Single chip ethernet controller CP2200/1[EB/OL].(2001-05)[2014-06].http://www.silabs.com.
[3]王博.可組合嵌入式軟件建模與驗證技術(shù)研究綜述[J].軟件學(xué)報,2014,25(2):234-253.
[4]Adam Dunkels.Full TCP/IP for 8 Bit Architectures[C]//In Proceedings of the First ACM/Usenix International Conference on Mobile Systems,Applications and Services.San Francisco:May 2003.
[5]A Dunkels.uIP-a TCP/IP stack for 8-and 16-bit microcontrollers[EB/OL].(2003-03)[2014-06].http://www.sics.se/~adam/publications.html.
[6]趙國鋒,邱作雨,張毅.基于單片機的嵌入式TCP/IP協(xié)議棧的設(shè)計與實現(xiàn)[J].計算機技術(shù)與發(fā)展,2009(3):137-140.
[7]The World Wide Web Consortium (W3C),Network Working Group.RFC 2616.Hypertext Transfer Protocol-HTTP/1.1[EB/OL].(1999-06)[2014-06].http://www.w3.org/Protocols/rfc2616/rfc2616.html.
[8]高嵩.基于HTTP協(xié)議的嵌入式遠程監(jiān)控系統(tǒng)的研究[D].北京:北京工業(yè)大學(xué),2013.
[9]The Apache Software Foundation.Apache Tutorial:Introduction to Server Side Includes[EB/OL].[2014-06].http://httpd.apache.org/docs/2.2/howto/ssi.html.
[10]潘琢金,王秋實.嵌入式Web服務(wù)器中動態(tài) Web技術(shù)的研究[J].計算機工程與設(shè)計,2010,31(18):3975-3978.
[11]W3C org.W3C Recommendation for HTML[EB/OL].(2011-11)[2014-06].http://www.w3.org/community/webed/wiki/HTML.