摘 要:為使數(shù)控系統(tǒng)具備網(wǎng)絡(luò)訪問功能,,通過移植嵌入式TCP/IP協(xié)議棧—uIP,并且編寫網(wǎng)絡(luò)控制芯片驅(qū)動程序接口以及能實現(xiàn)HTTP協(xié)議的通用應(yīng)用程序,,使數(shù)控系統(tǒng)具備Web服務(wù)器的功能,。用戶可以使用PC接入Internet,通過標(biāo)準(zhǔn)瀏覽器遠(yuǎn)程監(jiān)測數(shù)控系統(tǒng)的運行狀態(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)品的市場競爭力。TCP/IP協(xié)議已經(jīng)在全球互聯(lián)網(wǎng)上取得了巨大成功,,通過實現(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ù),,可以為用戶提供一個統(tǒng)一,、簡潔的操作界面。
整個設(shè)計中的關(guān)鍵是TCP/IP協(xié)議棧的實現(xiàn),,完全從零開始去實現(xiàn)一個嵌入式TCP/IP協(xié)議將耗費大量的時間和資源,,導(dǎo)致產(chǎn)品跟不上市場需求。而商業(yè)的TCP/IP的網(wǎng)絡(luò)組件實現(xiàn)過于復(fù)雜,需要占用大量的系統(tǒng)資源,,同
時會導(dǎo)致成本的提高,,本設(shè)計選用精簡的開源uIP協(xié)議棧作為網(wǎng)絡(luò)通信協(xié)議,采用嵌入式的uIP協(xié)議棧,,編寫基于DOS操作系統(tǒng)的網(wǎng)絡(luò)芯片驅(qū)動程序接口,,在應(yīng)用層實現(xiàn)HTTP協(xié)議,最后將其運用于華中數(shù)控的HNC-21系統(tǒng),,使系統(tǒng)具備了遠(yuǎn)程監(jiān)控功能,。
1 uIP協(xié)議棧分析
uIP協(xié)議棧是專為8/16 bit的嵌入式微處理器設(shè)計的小型TCP/IP協(xié)議棧,采用BSD授權(quán),,遵循RFC標(biāo)準(zhǔn),,完全由C語言編寫,具有良好的互操作性,、完整的源代碼和注釋,,可免費用于非商業(yè)和商業(yè)用途。uIP協(xié)議棧有多
個版本,,本設(shè)計采用的是uIP0.9,。
為了減小代碼量,,降低對系統(tǒng)資源的要求,uIP的內(nèi)部實現(xiàn)具有如下特點[1]:只實現(xiàn)了網(wǎng)絡(luò)通信所必要的協(xié)議機制,;不支持內(nèi)存動態(tài)分配機制,,使用單一的全局緩沖區(qū)收發(fā)數(shù)據(jù)包;各層協(xié)議不嚴(yán)格獨立,,緊密耦合,;
應(yīng)用程序主動參與部分協(xié)議棧的功能實現(xiàn)。
uIP協(xié)議處于網(wǎng)絡(luò)通信的中間層,,其設(shè)計重點放在IP(網(wǎng)際互聯(lián)協(xié)議),、ICMP(網(wǎng)絡(luò)控制報文協(xié)議)和TCP(傳輸控制協(xié)議)的實現(xiàn)上, UDP(用戶數(shù)據(jù)報協(xié)議)和ARP(地址解析協(xié)議)實現(xiàn)只是作為可選模塊,。其體系結(jié)構(gòu)[2]如圖1所示,。
uIP協(xié)議棧提供了三個函數(shù)給底層設(shè)備驅(qū)動程序:uip_periodic()、uip_init()和uip_input(),。其中uip_input()和uip_periodic()在內(nèi)部的實現(xiàn)采用同一個函數(shù),,即uip_process(u8_t flag),區(qū)別在于調(diào)用的參數(shù)和使用情況不同,。uIP協(xié)議棧中應(yīng)用程序基于事件驅(qū)動模式,,作為一個獨立的模塊由用戶實現(xiàn)。為了將應(yīng)用程序掛接到uIP中,,用戶需將宏UIP_APPCALL()定義為自己的應(yīng)用程序函數(shù)名,。
2 嵌入式Web服務(wù)器的實現(xiàn)
uIP協(xié)議棧以函數(shù)庫的形式提供,本身不提供底層網(wǎng)絡(luò)驅(qū)動和上層應(yīng)用程序,。因此為了完成指定的功能,,開發(fā)者必須添加網(wǎng)卡芯片的驅(qū)動模塊和特定的應(yīng)用程序模塊。
2.1 uIP協(xié)議棧的移植
協(xié)議的實現(xiàn)核心是\uip目錄下的7個程序文件[3],,本設(shè)計中用到uip.c、uip.h,、uip_arp.c,、uip_arp.h、uip_arch.h 5個文件,。其中uip.c和uip.h實現(xiàn)了IP,、TCP、ICMP協(xié)議,,uip_arp.c和uip_arp.h實現(xiàn)了ARP協(xié)議,。\unix目錄下有5個程序文件,本設(shè)計中用到的主要是uip_arch.c和uipopt.h,。其中uip_arch.c是校驗和文件,,uipopt.h是參數(shù)配置文件,。
設(shè)計中根據(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,,允許同時開啟5個TCP連接,。因為在應(yīng)用層只需要實現(xiàn)HTTP協(xié)議,設(shè)置UIP_LISTENPORTS為1,。最后根據(jù)實際應(yīng)用修改MAC地址,、IP地址、子網(wǎng)掩碼和網(wǎng)關(guān)地址中相應(yīng)的宏變量,。
2.2 網(wǎng)卡驅(qū)動程序接口
本設(shè)計中使用的網(wǎng)絡(luò)控制芯片是臺灣Realtek公司的RTL8019AS,,系統(tǒng)環(huán)境是16位的DOS操作系統(tǒng)。設(shè)計中遵循Packet Driver接口協(xié)議來操作網(wǎng)卡,,提供給上層的函數(shù)接口包括網(wǎng)絡(luò)芯片的初始,、發(fā)包、收包,。
網(wǎng)卡的初始化接口函數(shù)int tapdev_init(void),,主要完成獲取網(wǎng)卡句柄和Packet Driver[4-5]提供服務(wù)的軟中斷號、注冊網(wǎng)絡(luò)數(shù)據(jù)包的接收程序,。函數(shù)流程如圖2所示,。
網(wǎng)卡的接收數(shù)據(jù)包接口函數(shù)為unsigned int tapdev_read(void),主要功能是判斷是否有新的數(shù)據(jù)包到來,。如果有,,則將數(shù)據(jù)存儲到全局變量uip_buf中供進一步的處理,并返回數(shù)據(jù)包的長度,。
網(wǎng)卡的發(fā)送數(shù)據(jù)包接口函數(shù)int tapdev_send(void)通過調(diào)用Packet Driver的send_pkt()將封裝好的數(shù)據(jù)包發(fā)送到以太網(wǎng),。全局變量uip_len表示要發(fā)送的數(shù)據(jù)包長度。發(fā)送數(shù)據(jù)包的實現(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ù)包長度
intr(pkt_interrupt,®s);
if(regs.r_flags &CARRY)
continue;
break;
}
2.3 應(yīng)用層協(xié)議實現(xiàn)
HTTP(HyperText Transfer Protocol)超文本傳輸協(xié)議是用于從WWW服務(wù)器傳輸超文本到本地瀏覽器的傳送協(xié)議,。要實現(xiàn)Web服務(wù)器[6]的功能,,就需要在應(yīng)用層實現(xiàn)HTTP協(xié)議。HTTP協(xié)議采用的是客戶端與服務(wù)器模式,。在客戶端產(chǎn)生數(shù)據(jù)請求,,在服務(wù)器端產(chǎn)生應(yīng)答數(shù)據(jù),然后以Web頁面形式返回給客戶端。為了達(dá)到統(tǒng)一通用的要求,,Web頁面采用HTML格式傳輸,。
設(shè)計中將應(yīng)用層函數(shù)http_call定義為宏UIP_APPCALL, 主程序首先調(diào)用函數(shù)uip_listen開啟80號端口監(jiān)聽。如果監(jiān)測到遠(yuǎn)程連接請求,,分配一個連接項給客戶端,,然后等待客戶端的發(fā)送具體的數(shù)據(jù)請求。在接收到客戶端的數(shù)據(jù)請求后,,根據(jù)相應(yīng)語法解析請求指令,,將相關(guān)信息以網(wǎng)頁形式返回到客戶端。
用戶只要通過標(biāo)準(zhǔn)的瀏覽器輸入相應(yīng)的IP地址就可以查看服務(wù)器提供的Web網(wǎng)頁,。Web服務(wù)器軟件實現(xiàn)框圖如圖3所示,。
3 Web服務(wù)器的應(yīng)用
將設(shè)計的Web服務(wù)器應(yīng)用于華中數(shù)控HNC-21系統(tǒng),可遠(yuǎn)程監(jiān)控機床的當(dāng)前運行位置,、參數(shù)設(shè)置,、報警信息等。設(shè)置數(shù)控系統(tǒng)的IP地址為192.168.0.2,,同時設(shè)置相應(yīng)的子網(wǎng)掩碼和默認(rèn)網(wǎng)關(guān),,然后將數(shù)控系統(tǒng)接入局域網(wǎng)。在接入同一局域網(wǎng)的PC機上打開瀏覽器窗口,,在地址欄中輸入192.168.0.2,,出現(xiàn)圖4所示界面,說明Web服務(wù)器已運行成功,。
按照本設(shè)計中的配置參數(shù),,整個系統(tǒng)中核心協(xié)議的實現(xiàn)代碼量約為20 KB,核心協(xié)議的實現(xiàn)占用的內(nèi)存約為10 KB,資源占用量很小,,能很好地滿足資源有限環(huán)境下的應(yīng)用需求,。采用移植精簡的TCP/IP協(xié)議棧uIP,使數(shù)控系統(tǒng)具有網(wǎng)絡(luò)接入功能,,是一種低成本,、高效的網(wǎng)絡(luò)接入方案。通過實現(xiàn)Web服務(wù)器的功能,,可以讓用戶使用統(tǒng)一,、簡潔的界面對數(shù)控系統(tǒng)進行遠(yuǎn)程監(jiā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)用實現(xiàn)[D].成都:電子科技大學(xué),2007.
[6] JEREMEY B.嵌入式系統(tǒng)Web服務(wù)器-TCP/IP Lean[M].陳向群,譯.北京:機械工業(yè)出版社,2003:313-319.