《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 面向設(shè)備監(jiān)控的LwIP協(xié)議棧擴(kuò)展設(shè)計(jì)
面向設(shè)備監(jiān)控的LwIP協(xié)議棧擴(kuò)展設(shè)計(jì)
來源:電子技術(shù)應(yīng)用2013年第6期
孫棣華1,2,陸 旭1,2,廖孝勇1,2,鄭林江2,3,余楚中1
1.重慶大學(xué) 自動化學(xué)院,重慶400044; 2.重慶大學(xué) 信息物理社會可信服務(wù)計(jì)算教育部重點(diǎn)實(shí)驗(yàn)室,重慶400044; 3.重慶大學(xué) 計(jì)算機(jī)學(xué)院,重慶400044
摘要: 針對遠(yuǎn)程設(shè)備監(jiān)控中數(shù)據(jù)傳輸速度慢、傳輸距離有限、無法監(jiān)控設(shè)備網(wǎng)絡(luò)狀態(tài)等問題,提出一種基于改進(jìn)輕型IP協(xié)議棧(LwIP)的設(shè)備監(jiān)控方案。在嵌入式ARM硬件平臺和μC/OS-Ⅱ軟件平臺基礎(chǔ)上,采用LwIP協(xié)議棧實(shí)現(xiàn)了監(jiān)控終端網(wǎng)絡(luò)通信功能。通過擴(kuò)展LwIP中因特網(wǎng)信報(bào)控制協(xié)議(ICMP)模塊中的報(bào)文應(yīng)答機(jī)制,完成了對ICMP數(shù)據(jù)報(bào)文的監(jiān)聽和處理,以達(dá)到對遠(yuǎn)端設(shè)備的實(shí)時(shí)監(jiān)控。實(shí)驗(yàn)結(jié)果證明了設(shè)計(jì)方案的可行性和實(shí)用性。
中圖分類號: TP274+.2
文獻(xiàn)標(biāo)識碼: A
文章編號: 0258-7998(2013)06-0010-04
Expansion design of LwIP in device monitoring
Sun Dihua1,2,Lu Xu1,2,Liao Xiaoyong1,2,Zheng Linjiang2,3,Yu Chuzhong1
1.College of Automation,Chongqing University,Chongqing 400044,China; 2.Key Laboratory of Dependable Service Computing in Cyber Physical Society of Ministry of Education, Chongqing University,Chongqing 400044,China; 3.College of Computer Science,Chongqing University,Chongqing 400044,China
Abstract: Aiming at problems of slow speed of data transmission, restricted transmission distance and difficulty to get monitoring device network state in remote device monitoring, this paper designs a new device monitoring scheme which is based on improved LwIP. This scheme realizes the function of the network by transplanting LwIP on ARM platform and μC/OS-Ⅱ system. In order to achieve the purpose of real-time monitoring on remote device, it completes monitoring and treatment of the ICMP message by improving ICMP support in LwIP. The experimental results prove the feasibility and practicability of the scheme.
Key words : LwIP;device monitoring;STM32F207;ICMP

    設(shè)備監(jiān)控系統(tǒng)可獲得設(shè)備的工作環(huán)境參數(shù)和設(shè)備運(yùn)行狀況,對確保設(shè)備安全正常運(yùn)行、充分發(fā)揮設(shè)備效能、提高企業(yè)經(jīng)濟(jì)效益有極其重要的作用[1]。目前已有許多企業(yè)構(gòu)建了設(shè)備監(jiān)控系統(tǒng),但大部分是通過RS232、RS485和CAN總線等協(xié)議進(jìn)行通信,不僅在數(shù)據(jù)傳輸距離和傳輸速度上有很大限制,而且無法直接接入互聯(lián)網(wǎng),無法滿足信息化條件下對企業(yè)生產(chǎn)作業(yè)管理的要求[2]。本文將結(jié)合嵌入式技術(shù)和網(wǎng)絡(luò)技術(shù),設(shè)計(jì)一種遠(yuǎn)程設(shè)備監(jiān)控方案,保證設(shè)備工作狀態(tài)的準(zhǔn)確采集和快速傳遞,同時(shí)輔助工作人員實(shí)現(xiàn)對現(xiàn)場設(shè)備的及時(shí)維護(hù)與管理。

    瑞士計(jì)算機(jī)科學(xué)院的Adam Dunkels等開發(fā)了一套用于嵌入式系統(tǒng)的TCP/IP協(xié)議棧-LwIP,這是一種既可以移植到操作系統(tǒng)上,又可以獨(dú)立運(yùn)行的輕型嵌入式TCP/IP協(xié)議棧,其主要特點(diǎn)是在保持TCP協(xié)議主要功能的基礎(chǔ)上減少了對RAM的占用[2-3]。LwIP作為一種嵌入式網(wǎng)絡(luò)協(xié)議棧,具有相對齊全的功能,并提供一套非常完善的內(nèi)存管理方法,適合在32位的低端嵌入式系統(tǒng)中使用。
    在綜合考慮設(shè)計(jì)成本和穩(wěn)定性等多方面因素后,本文在32位ARM處理器 STM32F207和嵌入式實(shí)時(shí)操作系統(tǒng)μC/OS-II組成的軟硬件平臺上移植和改進(jìn)LwIP協(xié)議棧,從而實(shí)現(xiàn)了對遠(yuǎn)端設(shè)備的監(jiān)控與管理。
1 系統(tǒng)硬件平臺
    設(shè)備監(jiān)控系統(tǒng)主要包括以太網(wǎng)通信和本地?cái)?shù)據(jù)采集兩大模塊。采用STM32F207系列作為開發(fā)板核心處理器,硬件功能模塊主要包括網(wǎng)絡(luò)功能模塊、串口設(shè)備驅(qū)動模塊、A/D模塊、看門狗定時(shí)器功能模塊、Flash數(shù)據(jù)讀寫模塊等,通過各模塊之間的互相輔助與合作,保證監(jiān)控終端的穩(wěn)定可靠工作,實(shí)現(xiàn)配電狀態(tài)檢測、網(wǎng)絡(luò)狀態(tài)檢測以及環(huán)境溫濕度數(shù)據(jù)采集等功能,并通過以太網(wǎng)向上位機(jī)傳遞現(xiàn)場設(shè)備信息[4]。硬件電路結(jié)構(gòu)框圖如圖1所示。

3 LwIP協(xié)議的移植與改進(jìn)
3.1 LwIP協(xié)議進(jìn)程模式

    LwIP的設(shè)計(jì)與實(shí)現(xiàn)采用分層模式,每層協(xié)議都解決網(wǎng)絡(luò)通信的一部分問題并作為獨(dú)立的模塊來實(shí)現(xiàn),提供一些與其他協(xié)議的接口函數(shù)。各層之間通過共享內(nèi)存的方式實(shí)現(xiàn)通信,從而減少了內(nèi)存拷貝開銷,提高其性能[5]。LwIP所支持的協(xié)議主要包括IP、ICMP、UDP和TCP等協(xié)議,這些模塊能夠完成網(wǎng)絡(luò)通信的主要功能。除此之外,還設(shè)計(jì)了一些輔助模塊,主要包括內(nèi)存管理子系統(tǒng)、操作系統(tǒng)模擬層、網(wǎng)絡(luò)API函數(shù)等[6]。
3.2 LwIP協(xié)議的移植
    (1)與CPU或編譯器相關(guān)的文件移植
    修改/include/arch目錄下cc.h文件中有關(guān)數(shù)據(jù)長度、字的高低位順序等的宏定義。同時(shí),使用_packed關(guān)鍵字聲明結(jié)構(gòu)體struct,以便LwIP讀取pbuf結(jié)構(gòu)體中不同長度的數(shù)據(jù)[2]。
    (2)與操作系統(tǒng)相關(guān)的部分
    LwIP中使用信號量通信,所以在 sys_arch.h、sys_arch.c中應(yīng)實(shí)現(xiàn)信號量結(jié)構(gòu)體sys_sem_t和相關(guān)的信號量處理函數(shù),包括sys_sem_new()、sys_ sem _free()、sys_sem_signal()、sys_arch_sem_wait()等,完成信號量的建立、釋放、發(fā)送和等待接收功能。同時(shí),LwIP使用消息隊(duì)列來緩沖、傳遞數(shù)據(jù)報(bào)文, 因此需要實(shí)現(xiàn)消息隊(duì)列結(jié)構(gòu)體sys_mbox_t以及相應(yīng)的操作函數(shù)(包括sys_mbox_new()、sys_mbox_free()、sys_mbox_post()等),從而實(shí)現(xiàn)消息隊(duì)列的創(chuàng)建、釋放、發(fā)送和獲取等功能。
    LwIP與外界網(wǎng)絡(luò)連接的線程都有獨(dú)立的等待超時(shí)時(shí)間,也就要求在移植過程中用戶要實(shí)現(xiàn)sys_arch_
timeouts()函數(shù), 返回當(dāng)前該線程所對應(yīng)的timeout隊(duì)列指針。另外,LwIP 中網(wǎng)絡(luò)數(shù)據(jù)的處理需要新建任務(wù)來完成操作, 有必要實(shí)現(xiàn)sys_thread_new()函數(shù)來保證數(shù)據(jù)處理任務(wù)在操作系統(tǒng)中能夠被建立。
    (3)相關(guān)庫函數(shù)的實(shí)現(xiàn)
    LwIP協(xié)議棧中用到了8個(gè)外部函數(shù),主要完成16 bit數(shù)據(jù)的高低字節(jié)交換、32 bit數(shù)據(jù)的大小頭對調(diào)、返回字符串長度、字符串比較、內(nèi)存數(shù)據(jù)塊拷貝、指定長度的數(shù)據(jù)塊清零等功能,與系統(tǒng)或編譯器有關(guān),需要用戶實(shí)現(xiàn)。
    (4)網(wǎng)絡(luò)設(shè)備驅(qū)動程序
    在LwIP中可以有多個(gè)網(wǎng)絡(luò)接口,每個(gè)網(wǎng)絡(luò)接口都對應(yīng)了一個(gè)struct netif結(jié)構(gòu),這個(gè)netif包含了相應(yīng)網(wǎng)絡(luò)接口的屬性、收發(fā)函數(shù)。在網(wǎng)絡(luò)設(shè)備驅(qū)動程序中主要是實(shí)現(xiàn)4個(gè)網(wǎng)絡(luò)接口函數(shù):網(wǎng)卡初始化、網(wǎng)卡接收數(shù)據(jù)、網(wǎng)卡發(fā)送數(shù)據(jù)以及網(wǎng)卡中斷處理函數(shù)。
3.3 LwIP問題分析
    LwIP中對ICMP協(xié)議的數(shù)據(jù)處理比較簡單,基本流程如圖3所示。底層物理接口將接收ICMP包并向上傳送至網(wǎng)絡(luò)層,經(jīng)由IP模塊中的ip_input()函數(shù)移交到ICMP層處理,在ICMP協(xié)議中調(diào)用icmp_input()函數(shù)解析出IP包頭、ICMP包頭及數(shù)據(jù)內(nèi)容。一些ICMP信息被傳遞到更高協(xié)議層并被傳輸層的一些特殊函數(shù)處理,其中函數(shù)icmp_dest_unreach()用來通過傳輸層的UDP協(xié)議發(fā)送目標(biāo)無法到達(dá)消息[7]。通常情況下,使用ICMP ECHO信息來探測LwIP協(xié)議移植情況,主要在函數(shù)icmp_input()中完成對ICMP ECHO信息的響應(yīng),包括地址信息驗(yàn)證、目的與源地址進(jìn)行交換、修改ICMP數(shù)據(jù)類型、求取校驗(yàn)和,然后通過IP層協(xié)議中的ip_output()將應(yīng)答信息回傳。

    但是在設(shè)備監(jiān)控中,要求LwIP能夠識別ICMP_ER類型的回送報(bào)文。因此,需要對LwIP中的ICMP模塊進(jìn)行補(bǔ)充,以滿足嵌入式終端對局域網(wǎng)中設(shè)備網(wǎng)絡(luò)狀態(tài)的監(jiān)控。另外,為了模擬類似Linux系統(tǒng)中ping功能系統(tǒng)調(diào)用,需要開發(fā)相應(yīng)的功能接口函數(shù)來組成所需IP數(shù)據(jù)包,并通過IP層的報(bào)文發(fā)送函數(shù)ip_output()或者原始套接字將數(shù)據(jù)包發(fā)送到目的主機(jī),以達(dá)到監(jiān)控網(wǎng)絡(luò)狀態(tài)的目的。
3.4 LwIP改進(jìn)方法
    根據(jù)以上所述問題,本文所采取的改進(jìn)方法主要包括合成ICMP報(bào)文、建立套接字并發(fā)送報(bào)文到目的地址、添加ICMP協(xié)議支持這三個(gè)基本步驟。
    (1)ping指令簡介
    因特網(wǎng)包探索器ping(packet internet groper),是用來檢查網(wǎng)絡(luò)是否通暢或者網(wǎng)絡(luò)連接速度的命令。ping發(fā)送一個(gè)ICMP包,發(fā)送請求消息給目的主機(jī)并報(bào)告是否收到所希望的ICMP應(yīng)答。ping本質(zhì)上屬于IP協(xié)議層,并且根據(jù)用戶輸入不同的指令參數(shù)返回網(wǎng)絡(luò)狀態(tài)信息。
    (2)合成ICMP_ER報(bào)文
    LwIP本身具有一套較為完善的內(nèi)存管理機(jī)制,利用pbuf結(jié)構(gòu)實(shí)現(xiàn)數(shù)據(jù)傳遞,這與BSD中的Mbuf 很相似。pbuf主要用于保存用戶應(yīng)用程序與LwIP之間互相傳遞的用戶數(shù)據(jù)。利用LwIP提供的內(nèi)存分配函數(shù)pbuf_alloc(),在RAM中分配一塊空間存儲IP數(shù)據(jù)包,數(shù)據(jù)大小為sizeof(struct icmp_echo_hdr),然后填充icmp_echo_hdr類型對象iecho。基本過程如下:
    q=pbuf_alloc(PBUF_IP,sizeof(struct IcmpHeader),
PBUF_RAM);
    iecho=q->payload;
    iecho->type=ICMP_ECHO;
    iecho->code=0;
    iecho->seqno=htons(1);
    iecho->id=htons(13);
    iecho->chksum=0;  //由硬件求取校驗(yàn)和
    (3)通過RAW套接字發(fā)送請求
    RAW SOCKET可以接收本機(jī)網(wǎng)卡上的所有數(shù)據(jù)幀或者數(shù)據(jù)包,這對于監(jiān)聽網(wǎng)絡(luò)的流量和分析是很有作用的。所以選擇利用LwIP提供的API套接字函數(shù)操作建立RAW SOCKET,并調(diào)用lwip_sendto()函數(shù)將數(shù)據(jù)通過RAW SOCKET發(fā)送到目的IP?;具^程如下:
    sockfd=socket(AF_INET,SOCK_RAW,IPPROTO_ICMP);
    lwip_sendto(sockfd,q->payload, sizeof(q->payload), 0,
(struct sockaddr *) & dest_addr,sizeof(dest_addr));
    (4)修改ICMP協(xié)議文件
    為了實(shí)現(xiàn)對ICMP_ER消息的監(jiān)聽和處理,需要對/src/core/ipv4目錄下的icmp.c文件做補(bǔ)充修改。在主要的報(bào)文處理函數(shù)icmp_input()中,添加ICMP_ER消息中斷響應(yīng)方法,由于IP包頭已經(jīng)被剝離,所以需要在switch(type){}框架中添加case ICMP_ER:單元,主要處理是計(jì)算響應(yīng)時(shí)間和消息存活時(shí)間,并提取icmp_seq、對方IP地址等相關(guān)信息,主要實(shí)現(xiàn)方法如下:
    case ICMP_ER:
    timeofrecv = OSTimeGet();
    iechr = (struct IcmpHeader *)p->payload;
    timeofsend = iechr->timestamp;
    timeofrecv = (timeofrecv - timeofsend) * 1000 /
OS_TICKS_PER_SEC;
    printf("%d byte from %s: icmp_seq=%u ttl=%d rtt=
%u ms \n\r",ntohs(iphdr->_len),ip_ntoa(&(iphdr->src)),
ntohs(iecho->seqno),IPH_TTL(iphdr),timeofrecv);
4 實(shí)驗(yàn)分析
4.1 LwIP移植情況測試

    移植情況測試是通過設(shè)備監(jiān)控終端與PC之間的網(wǎng)絡(luò)ping指令實(shí)現(xiàn)的。監(jiān)控終端IP地址為:172.20.36.93,主機(jī)IP地址為:172.20.36.72。從圖4中可以看出,終端響應(yīng)時(shí)間為1 ms,可以滿足數(shù)據(jù)快速收發(fā)的要求,數(shù)據(jù)存活時(shí)間為ttl=255 ms,丟包率為0,說明LwIP協(xié)議已經(jīng)移植成功。

4.2 改進(jìn)后設(shè)備監(jiān)控功能測試
    在地址為172.20.36.72的主機(jī)上使用IP Sinffer軟件偵聽網(wǎng)絡(luò)中傳遞上來的ICMP報(bào)文,如圖5所示。分析圖5可知,主機(jī)接收到了多條由終端發(fā)送上來的ICMP報(bào)文,數(shù)據(jù)包具體內(nèi)容顯示在右側(cè)邊框中,IP數(shù)據(jù)包的內(nèi)容是ICMP_ER類型的ICMP報(bào)文;ID號0x0D與終端中所設(shè)置的報(bào)文ID相等,即iecho->id=htons(13);序號為1與終端中所設(shè)置的報(bào)文序號相等,即iecho->seqno=htons(1)。由此說明終端中所合成的ICMP_ER類型的IP報(bào)文已經(jīng)成功發(fā)送到了目的地址,并且目的主機(jī)立刻返回了ICMP請求。

 

 

    對實(shí)驗(yàn)環(huán)境的具體要求:通過監(jiān)控終端監(jiān)測IP尾數(shù)為204和128的設(shè)備網(wǎng)絡(luò)狀態(tài),同時(shí)監(jiān)測設(shè)備電源配電狀況并回顯配電狀態(tài)參數(shù)。分析圖6可知,局域網(wǎng)內(nèi)被監(jiān)控設(shè)備網(wǎng)絡(luò)連接正常,能快速響應(yīng)網(wǎng)絡(luò)檢測數(shù)據(jù)包,丟包率為0,說明對LwIP的協(xié)議棧優(yōu)化后,能夠發(fā)送網(wǎng)絡(luò)狀態(tài)檢測數(shù)據(jù),并獲得對方主機(jī)響應(yīng)。另外,監(jiān)控終端與主機(jī)網(wǎng)絡(luò)連接正常,可以將設(shè)備狀態(tài)參數(shù)通過網(wǎng)絡(luò)及時(shí)上傳到控制中心。

    本文在分析設(shè)備遠(yuǎn)程監(jiān)控實(shí)際需求的基礎(chǔ)上,以32位微處理器STM32F207系列的處理器為核心,完成了LwIP嵌入式TCP/IP協(xié)議棧的移植與改進(jìn),設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)基于改進(jìn)LwIP的設(shè)備監(jiān)控方案。該方案已經(jīng)在實(shí)驗(yàn)室環(huán)境下完成了樣機(jī)的研制并驗(yàn)證了其功能。實(shí)踐表明,改進(jìn)后的LwIP彌補(bǔ)了原有協(xié)議棧對ICMP協(xié)議功能支持上的不足,滿足了用戶需要,相信在未來的設(shè)備監(jiān)控等領(lǐng)域必將有著廣闊的應(yīng)用前景。
參考文獻(xiàn)
[1] 孫彩云,李世中,李麗麗,等.基于ZigBee技術(shù)的設(shè)備監(jiān)控系統(tǒng)設(shè)計(jì)[J].水電能源科學(xué),2010,11(28):125-127.
[2] 張亞魁.基于LwIP的嵌入式WEB服務(wù)器的研究與實(shí)現(xiàn)[D].合肥:合肥工業(yè)大學(xué),2009:14-19.
[3] 楊曄.實(shí)時(shí)操作系統(tǒng)的μC/OS-Ⅱ下TCP/IP協(xié)議棧的實(shí)現(xiàn)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2003(7):80-83.
[4] 王暉,周巧娣,章雪挺,等.基于LwIP的海洋數(shù)據(jù)采集與傳輸系統(tǒng)[J].電子技術(shù)應(yīng)用,2012,38(8):26-29.
[5] Duan Zhiyu,Zhao Zhaowang.A study of the Ethernet  throughput performance of the embedded system[J].Astronomical Research and Technology,2007,4(3):266-275.
[6] DUNKELS A.Design and implementation of the LwIP TCP/IP stack[EB/OL].(2001-2-1)[2004-2-1].http://www.ece.ualberta.ca/~cmpe401/fall2004/labs/docs/lwip.pdf.
[7] 徐鑫,曹奇英.基于LwIP協(xié)議棧的UDP協(xié)議分析與優(yōu)化[J].計(jì)算機(jī)應(yīng)用與軟件,2011,28(3):246-249.

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