《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 通信與網(wǎng)絡(luò) > 設(shè)計(jì)應(yīng)用 > 基于uIP協(xié)議棧的嵌入式Web服務(wù)器的實(shí)現(xiàn)
基于uIP協(xié)議棧的嵌入式Web服務(wù)器的實(shí)現(xiàn)
來(lái)源:微型機(jī)與應(yīng)用2011年第4期
張 勇1,朱志紅1,2,田茂勝1,2
(1.華中科技大學(xué) 國(guó)家數(shù)控系統(tǒng)工程技術(shù)研究中心,湖北 武漢430074;2.武漢華中數(shù)控股份有限公
摘要: 為使數(shù)控系統(tǒng)具備網(wǎng)絡(luò)訪問(wèn)功能,通過(guò)移植嵌入式TCP/IP協(xié)議?!猽IP,并且編寫網(wǎng)絡(luò)控制芯片驅(qū)動(dòng)程序接口以及能實(shí)現(xiàn)HTTP協(xié)議的通用應(yīng)用程序,使數(shù)控系統(tǒng)具備Web服務(wù)器的功能。用戶可以使用PC接入Internet,通過(guò)標(biāo)準(zhǔn)瀏覽器遠(yuǎn)程監(jiān)測(cè)數(shù)控系統(tǒng)的運(yùn)行狀態(tài)。
Abstract:
Key words :

摘  要:為使數(shù)控系統(tǒng)具備網(wǎng)絡(luò)訪問(wèn)功能,通過(guò)移植嵌入式TCP/IP協(xié)議棧—uIP,并且編寫網(wǎng)絡(luò)控制芯片驅(qū)動(dòng)程序接口以及能實(shí)現(xiàn)HTTP協(xié)議的通用應(yīng)用程序,使數(shù)控系統(tǒng)具備Web服務(wù)器的功能。用戶可以使用PC接入Internet,通過(guò)標(biāo)準(zhǔn)瀏覽器遠(yuǎn)程監(jiān)測(cè)數(shù)控系統(tǒng)的運(yùn)行狀態(tài)。
關(guān)鍵詞: uIP協(xié)議棧;HTTP協(xié)議;Web服務(wù)器;數(shù)控系統(tǒng)

    數(shù)控技術(shù)的網(wǎng)絡(luò)化是數(shù)字制造技術(shù)的發(fā)展方向,利用網(wǎng)絡(luò)技術(shù)使數(shù)控系統(tǒng)具備遠(yuǎn)程監(jiān)控和故障診斷功能可以極大地提高產(chǎn)品的市場(chǎng)競(jìng)爭(zhēng)力。TCP/IP協(xié)議已經(jīng)在全球互聯(lián)網(wǎng)上取得了巨大成功,通過(guò)實(shí)現(xiàn)TCP/IP協(xié)議使系統(tǒng)直接接入內(nèi)部網(wǎng)或者互聯(lián)網(wǎng),這種方案利用了現(xiàn)有的網(wǎng)絡(luò)線路,避免了成本高昂、繁瑣的布線工作,已成為大多數(shù)用戶的選擇。而基于Web服務(wù)器的遠(yuǎn)程監(jiān)控技術(shù),可以為用戶提供一個(gè)統(tǒng)一、簡(jiǎn)潔的操作界面。
    整個(gè)設(shè)計(jì)中的關(guān)鍵是TCP/IP協(xié)議棧的實(shí)現(xiàn),完全從零開始去實(shí)現(xiàn)一個(gè)嵌入式TCP/IP協(xié)議將耗費(fèi)大量的時(shí)間和資源,導(dǎo)致產(chǎn)品跟不上市場(chǎng)需求。而商業(yè)的TCP/IP的網(wǎng)絡(luò)組件實(shí)現(xiàn)過(guò)于復(fù)雜,需要占用大量的系統(tǒng)資源,同
時(shí)會(huì)導(dǎo)致成本的提高,本設(shè)計(jì)選用精簡(jiǎn)的開源uIP協(xié)議棧作為網(wǎng)絡(luò)通信協(xié)議,采用嵌入式的uIP協(xié)議棧,編寫基于DOS操作系統(tǒng)的網(wǎng)絡(luò)芯片驅(qū)動(dòng)程序接口,在應(yīng)用層實(shí)現(xiàn)HTTP協(xié)議,最后將其運(yùn)用于華中數(shù)控的HNC-21系統(tǒng),使系統(tǒng)具備了遠(yuǎn)程監(jiān)控功能。
1 uIP協(xié)議棧分析
    uIP協(xié)議棧是專為8/16 bit的嵌入式微處理器設(shè)計(jì)的小型TCP/IP協(xié)議棧,采用BSD授權(quán),遵循RFC標(biāo)準(zhǔn),完全由C語(yǔ)言編寫,具有良好的互操作性、完整的源代碼和注釋,可免費(fèi)用于非商業(yè)和商業(yè)用途。uIP協(xié)議棧有多
個(gè)版本,本設(shè)計(jì)采用的是uIP0.9。
    為了減小代碼量,降低對(duì)系統(tǒng)資源的要求,uIP的內(nèi)部實(shí)現(xiàn)具有如下特點(diǎn)[1]:只實(shí)現(xiàn)了網(wǎng)絡(luò)通信所必要的協(xié)議機(jī)制;不支持內(nèi)存動(dòng)態(tài)分配機(jī)制,使用單一的全局緩沖區(qū)收發(fā)數(shù)據(jù)包;各層協(xié)議不嚴(yán)格獨(dú)立,緊密耦合;
應(yīng)用程序主動(dòng)參與部分協(xié)議棧的功能實(shí)現(xiàn)。
    uIP協(xié)議處于網(wǎng)絡(luò)通信的中間層,其設(shè)計(jì)重點(diǎn)放在IP(網(wǎng)際互聯(lián)協(xié)議)、ICMP(網(wǎng)絡(luò)控制報(bào)文協(xié)議)和TCP(傳輸控制協(xié)議)的實(shí)現(xiàn)上, UDP(用戶數(shù)據(jù)報(bào)協(xié)議)和ARP(地址解析協(xié)議)實(shí)現(xiàn)只是作為可選模塊。其體系結(jié)構(gòu)[2]如圖1所示。

    uIP協(xié)議棧提供了三個(gè)函數(shù)給底層設(shè)備驅(qū)動(dòng)程序:uip_periodic()、uip_init()和uip_input()。其中uip_input()和uip_periodic()在內(nèi)部的實(shí)現(xiàn)采用同一個(gè)函數(shù),即uip_process(u8_t flag),區(qū)別在于調(diào)用的參數(shù)和使用情況不同。uIP協(xié)議棧中應(yīng)用程序基于事件驅(qū)動(dòng)模式,作為一個(gè)獨(dú)立的模塊由用戶實(shí)現(xiàn)。為了將應(yīng)用程序掛接到uIP中,用戶需將宏UIP_APPCALL()定義為自己的應(yīng)用程序函數(shù)名。
2 嵌入式Web服務(wù)器的實(shí)現(xiàn)
    uIP協(xié)議棧以函數(shù)庫(kù)的形式提供,本身不提供底層網(wǎng)絡(luò)驅(qū)動(dòng)和上層應(yīng)用程序。因此為了完成指定的功能,開發(fā)者必須添加網(wǎng)卡芯片的驅(qū)動(dòng)模塊和特定的應(yīng)用程序模塊。
2.1 uIP協(xié)議棧的移植
    協(xié)議的實(shí)現(xiàn)核心是\uip目錄下的7個(gè)程序文件[3],本設(shè)計(jì)中用到uip.c、uip.h、uip_arp.c、uip_arp.h、uip_arch.h  5個(gè)文件。其中uip.c和uip.h實(shí)現(xiàn)了IP、TCP、ICMP協(xié)議,uip_arp.c和uip_arp.h實(shí)現(xiàn)了ARP協(xié)議。\unix目錄下有5個(gè)程序文件,本設(shè)計(jì)中用到的主要是uip_arch.c和uipopt.h。其中uip_arch.c是校驗(yàn)和文件,uipopt.h是參數(shù)配置文件。
    設(shè)計(jì)中根據(jù)需要修改uipopt.h,使用靜態(tài)IP地址,故將UIP_FIXEDADDR設(shè)置為1;不支持?jǐn)?shù)據(jù)包分割重組,設(shè)置UIP_REASSEMBLY為0;不需要UDP協(xié)議支持,設(shè)置UIP_UDP為0;設(shè)置UIP_CONNS為5,允許同時(shí)開啟5個(gè)TCP連接。因?yàn)樵趹?yīng)用層只需要實(shí)現(xiàn)HTTP協(xié)議,設(shè)置UIP_LISTENPORTS為1。最后根據(jù)實(shí)際應(yīng)用修改MAC地址、IP地址、子網(wǎng)掩碼和網(wǎng)關(guān)地址中相應(yīng)的宏變量。
2.2 網(wǎng)卡驅(qū)動(dòng)程序接口
    本設(shè)計(jì)中使用的網(wǎng)絡(luò)控制芯片是臺(tái)灣Realtek公司的RTL8019AS,系統(tǒng)環(huán)境是16位的DOS操作系統(tǒng)。設(shè)計(jì)中遵循Packet Driver接口協(xié)議來(lái)操作網(wǎng)卡,提供給上層的函數(shù)接口包括網(wǎng)絡(luò)芯片的初始、發(fā)包、收包。
    網(wǎng)卡的初始化接口函數(shù)int tapdev_init(void),主要完成獲取網(wǎng)卡句柄和Packet Driver[4-5]提供服務(wù)的軟中斷號(hào)、注冊(cè)網(wǎng)絡(luò)數(shù)據(jù)包的接收程序。函數(shù)流程如圖2所示。

    網(wǎng)卡的接收數(shù)據(jù)包接口函數(shù)為unsigned int tapdev_read(void),主要功能是判斷是否有新的數(shù)據(jù)包到來(lái)。如果有,則將數(shù)據(jù)存儲(chǔ)到全局變量uip_buf中供進(jìn)一步的處理,并返回?cái)?shù)據(jù)包的長(zhǎng)度。
    網(wǎng)卡的發(fā)送數(shù)據(jù)包接口函數(shù)int tapdev_send(void)通過(guò)調(diào)用Packet Driver的send_pkt()將封裝好的數(shù)據(jù)包發(fā)送到以太網(wǎng)。全局變量uip_len表示要發(fā)送的數(shù)據(jù)包長(zhǎng)度。發(fā)送數(shù)據(jù)包的實(shí)現(xiàn)代碼如下:
while(times--)
{
    regs.r_ax=PD_SEND;
    regs.r_ds=FP_SEG(tmpbuf); //temp為待發(fā)送數(shù)據(jù)包緩存區(qū)
    regs.r_si=FP_OFF(tmpbuf);
    regs.r_cx=uip_len; //待發(fā)送數(shù)據(jù)包長(zhǎng)度
    intr(pkt_interrupt,&regs);
    if(regs.r_flags &CARRY)
        continue;
    break;
}
2.3 應(yīng)用層協(xié)議實(shí)現(xiàn)
    HTTP(HyperText Transfer Protocol)超文本傳輸協(xié)議是用于從WWW服務(wù)器傳輸超文本到本地瀏覽器的傳送協(xié)議。要實(shí)現(xiàn)Web服務(wù)器[6]的功能,就需要在應(yīng)用層實(shí)現(xiàn)HTTP協(xié)議。HTTP協(xié)議采用的是客戶端與服務(wù)器模式。在客戶端產(chǎn)生數(shù)據(jù)請(qǐng)求,在服務(wù)器端產(chǎn)生應(yīng)答數(shù)據(jù),然后以Web頁(yè)面形式返回給客戶端。為了達(dá)到統(tǒng)一通用的要求,Web頁(yè)面采用HTML格式傳輸。
    設(shè)計(jì)中將應(yīng)用層函數(shù)http_call定義為宏UIP_APPCALL, 主程序首先調(diào)用函數(shù)uip_listen開啟80號(hào)端口監(jiān)聽。如果監(jiān)測(cè)到遠(yuǎn)程連接請(qǐng)求,分配一個(gè)連接項(xiàng)給客戶端,然后等待客戶端的發(fā)送具體的數(shù)據(jù)請(qǐng)求。在接收到客戶端的數(shù)據(jù)請(qǐng)求后,根據(jù)相應(yīng)語(yǔ)法解析請(qǐng)求指令,將相關(guān)信息以網(wǎng)頁(yè)形式返回到客戶端。
    用戶只要通過(guò)標(biāo)準(zhǔn)的瀏覽器輸入相應(yīng)的IP地址就可以查看服務(wù)器提供的Web網(wǎng)頁(yè)。Web服務(wù)器軟件實(shí)現(xiàn)框圖如圖3所示。

3 Web服務(wù)器的應(yīng)用
    將設(shè)計(jì)的Web服務(wù)器應(yīng)用于華中數(shù)控HNC-21系統(tǒng),可遠(yuǎn)程監(jiān)控機(jī)床的當(dāng)前運(yùn)行位置、參數(shù)設(shè)置、報(bào)警信息等。設(shè)置數(shù)控系統(tǒng)的IP地址為192.168.0.2,同時(shí)設(shè)置相應(yīng)的子網(wǎng)掩碼和默認(rèn)網(wǎng)關(guān),然后將數(shù)控系統(tǒng)接入局域網(wǎng)。在接入同一局域網(wǎng)的PC機(jī)上打開瀏覽器窗口,在地址欄中輸入192.168.0.2,出現(xiàn)圖4所示界面,說(shuō)明Web服務(wù)器已運(yùn)行成功。

    按照本設(shè)計(jì)中的配置參數(shù),整個(gè)系統(tǒng)中核心協(xié)議的實(shí)現(xiàn)代碼量約為20 KB,核心協(xié)議的實(shí)現(xiàn)占用的內(nèi)存約為10 KB,資源占用量很小,能很好地滿足資源有限環(huán)境下的應(yīng)用需求。采用移植精簡(jiǎn)的TCP/IP協(xié)議棧uIP,使數(shù)控系統(tǒng)具有網(wǎng)絡(luò)接入功能,是一種低成本、高效的網(wǎng)絡(luò)接入方案。通過(guò)實(shí)現(xiàn)Web服務(wù)器的功能,可以讓用戶使用統(tǒng)一、簡(jiǎn)潔的界面對(duì)數(shù)控系統(tǒng)進(jìn)行遠(yuǎn)程監(jiān)控,降低了用戶的使用難度。

參考文獻(xiàn)
[1] ADAM D.uIP-a free small TCP/IP stack[EB\OL].[2010-06-25].http://www.sic.se/~adam/download/uip-doc-0.6.pdf.
[2] ADAM D.Full TCP/IP for 8-bit architectures[EB\OL].[2010-06-25].http://www.sics.se/~adam/mobisys2003.pdf.
[3] Doxygen. uIP 0.9 reference manual[EB\OL].[2010-06-25].http://www.sics.se/~adam/download/uip0.9-refman.pdf.
[4] FTP Software Inc.PC/TCP packet driver specification[EB\OL].[2010-06-25].http://www.crynwr.com/packet_ driver.html.
[5] 黃皓.ARP協(xié)議分析及在網(wǎng)絡(luò)安全中的應(yīng)用實(shí)現(xiàn)[D].成都:電子科技大學(xué),2007.
[6] JEREMEY B.嵌入式系統(tǒng)Web服務(wù)器-TCP/IP Lean[M].陳向群,譯.北京:機(jī)械工業(yè)出版社,2003:313-319.

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