李蔚,童玲,田雨
(電子科技大學(xué)自動化工程學(xué)院,成都611731)
李蔚(碩士研究生),研究方向為測控技術(shù)與儀器;童玲(教授、博士生導(dǎo)師),研究方向為測試計量技術(shù)及儀器;田雨(講師、博士),研究方向為微波與通信測試。
微機電系統(tǒng)、片上系統(tǒng)、無線通信和低功耗嵌入式技術(shù)的飛速發(fā)展孕育出無線傳感器網(wǎng)絡(luò)(wireless sensor networks,WSN),并以其低功耗、低成本、分布式和自組織的特點帶來了信息感知的一場變革。無線傳感器網(wǎng)絡(luò)具有能量受限、多跳通信、拓?fù)浣Y(jié)構(gòu)頻繁多變等特征[1]。ZigBee[2]規(guī)范是基于IEEE802.15.4[3]標(biāo)準(zhǔn)的,具有低傳輸速率、低功耗、協(xié)議簡單、時延短、網(wǎng)絡(luò)容量大、優(yōu)良的網(wǎng)絡(luò)拓?fù)淠芰Φ葍?yōu)點。這些優(yōu)點極好地支持了無線傳感器網(wǎng)絡(luò),因此許多研究機構(gòu)把ZigBee作為事實上的無線傳感器網(wǎng)絡(luò)國際標(biāo)準(zhǔn)[4]。
如圖1所示,無線傳感器網(wǎng)絡(luò)的體系結(jié)構(gòu)類似于TCP/IP協(xié)議體系,由物理層、數(shù)據(jù)鏈路層(MAC)、網(wǎng)絡(luò)層、傳輸層和應(yīng)用層組成[5]。物理層負(fù)責(zé)數(shù)據(jù)的調(diào)制解調(diào)、信道編碼、無線發(fā)送與接收;MAC層負(fù)責(zé)數(shù)據(jù)成幀、幀檢測、媒體訪問和差錯控制;網(wǎng)絡(luò)層負(fù)責(zé)路由生成與路由選擇,維護(hù)等;傳輸層負(fù)責(zé)控制數(shù)據(jù)流的傳輸,保障數(shù)據(jù)通信質(zhì)量。
本文以TI公司推出的符合IEEE802.15.4標(biāo)準(zhǔn)芯片CC2531為核心的硬件平臺。CC2531以8051微處理器為內(nèi)核,自身攜帶的射頻收發(fā)模塊既滿足無線通信需求,又滿足了低功耗設(shè)計。
在無線傳感器網(wǎng)絡(luò)中,網(wǎng)絡(luò)層是體系結(jié)構(gòu)中的核心,主要功能:
①為上層提供網(wǎng)絡(luò)管理接口,上層可通過接口有效監(jiān)視、控制網(wǎng)絡(luò)運行,查詢路由表、鄰居表等信息;
②負(fù)責(zé)路由生成與維護(hù),路由選擇及數(shù)據(jù)轉(zhuǎn)發(fā)。
圖2是ZigBee規(guī)范給出的網(wǎng)絡(luò)層的參考模型。數(shù)據(jù)服務(wù)可以通過網(wǎng)絡(luò)層數(shù)據(jù)服務(wù)訪問點訪問(NLDE_SAP),管理服務(wù)可以通過網(wǎng)絡(luò)管理服務(wù)訪問點(NLME_SAP)訪問。
圖1 無線傳感器網(wǎng)絡(luò)體系結(jié)構(gòu)
圖2 網(wǎng)絡(luò)層參考模型
如圖3所示,網(wǎng)絡(luò)層的數(shù)據(jù)服務(wù)分為發(fā)送和接收服務(wù)。網(wǎng)絡(luò)層接收到MAC數(shù)據(jù)幀,由函數(shù) handle_mcps_data_ind()對其進(jìn)行解析,交給網(wǎng)絡(luò)層數(shù)據(jù)幀或命令幀處理函數(shù)處理。對于網(wǎng)絡(luò)層數(shù)據(jù)幀,處理函數(shù)將判斷自己是否是目的地或該幀是否是廣播幀。如果是,則送上層處理;反之將數(shù)據(jù)幀交給轉(zhuǎn)發(fā)函數(shù) nwk_forward()處理,為該幀尋找路由,并通過發(fā)送函數(shù)nwk_tx()發(fā)送到MAC層。對于需要轉(zhuǎn)發(fā)的命令幀,則同樣交由轉(zhuǎn)發(fā)函數(shù)處理。
圖3 網(wǎng)絡(luò)層數(shù)據(jù)服務(wù)實現(xiàn)
對于上層實體,可通過 nlde_data_request()發(fā)送數(shù)據(jù),網(wǎng)絡(luò)層同樣將交由轉(zhuǎn)發(fā)函數(shù)處理并發(fā)送出去。轉(zhuǎn)發(fā)函數(shù)在發(fā)送和接收處理過程中,實現(xiàn)網(wǎng)絡(luò)層一個重要功能,即數(shù)據(jù)幀選擇路由,或選擇性地把數(shù)據(jù)幀緩沖起來并發(fā)起路由發(fā)現(xiàn)。
網(wǎng)絡(luò)管理服務(wù)主要是為上層提供網(wǎng)絡(luò)管理接口。
網(wǎng)絡(luò)的建立進(jìn)程由協(xié)調(diào)器上層通過調(diào)用nlme_network_formation_req()發(fā)起。首先通過調(diào)用MAC層的能量掃描服務(wù),對指定的信道進(jìn)行能量檢測。掃描完成之后選擇能量可接受范圍的信道,接著調(diào)用MAC層的主動掃描服務(wù)對選擇出來的信道進(jìn)行網(wǎng)絡(luò)發(fā)現(xiàn)。主動掃描完成之后,選擇存在網(wǎng)絡(luò)最少的信道,進(jìn)行網(wǎng)絡(luò)建立。
設(shè)備加入網(wǎng)絡(luò)進(jìn)程是設(shè)備的上層通過調(diào)用nlme_discovery_network_req()發(fā)起的。函數(shù)首先調(diào)用MAC層的主動掃描服務(wù)在指定信道上進(jìn)行網(wǎng)絡(luò)發(fā)現(xiàn),旨在發(fā)現(xiàn)通信范圍內(nèi)的網(wǎng)絡(luò)設(shè)備,并存儲到自己的鄰居表中。網(wǎng)絡(luò)發(fā)現(xiàn)完成之后,選擇一個網(wǎng)絡(luò)深度最小設(shè)備作為父節(jié)點,并發(fā)出入網(wǎng)請求。父節(jié)點收到入網(wǎng)請求之后,給請求設(shè)備分配一個網(wǎng)絡(luò)地址并附在請求響應(yīng)中。請求設(shè)備接收到響應(yīng)之后,設(shè)備成功的加入網(wǎng)絡(luò)。
設(shè)備離開網(wǎng)絡(luò)的進(jìn)程是上層通過調(diào)用nlme_leave_req()發(fā)起的,函數(shù)將廣播一個離開命令,其他設(shè)備收到離開命令后,將刪除對應(yīng)設(shè)備的路由表項和鄰居表項,表示設(shè)備已經(jīng)離開了網(wǎng)絡(luò)。
路由算法是網(wǎng)絡(luò)層的核心和難點,無線傳感器網(wǎng)絡(luò)的應(yīng)用特點要求路由算法簡單高效。本文基于ZigBee規(guī)范,主要實現(xiàn)最小路由成本的多跳路由算法和多對一路由算法。最小路由成本算法是以最小路由成本選擇最優(yōu)路徑,多對一路由算法是輔助算法。為了減輕匯聚節(jié)點附近的節(jié)點負(fù)載,本文把支持該算法的設(shè)備定義為集中器。為實現(xiàn)路由算法,本文制定了3個命令:路由請求命令、路由響應(yīng)命令、路由記錄命令。同時制定3種表:路由表(表1)、路由發(fā)現(xiàn)表(表2),路由記錄表(表3)。路由器需要維護(hù)路由發(fā)現(xiàn)表和路由表,集中器需要維護(hù)3種表。
表1 路由表項
表2 路由發(fā)現(xiàn)表項
表3 路由記錄表項
路由發(fā)現(xiàn)的發(fā)起一般在轉(zhuǎn)發(fā)函數(shù)處理過程中,沒有相應(yīng)到目的設(shè)備的路由時,則調(diào)用nwk_init_discovery_route()發(fā)起路由發(fā)現(xiàn)。該函數(shù)將檢查路由發(fā)現(xiàn)表,看其是否有與發(fā)起者和路由請求命令幀序列號相對應(yīng)的表項。如果有,則認(rèn)為已經(jīng)發(fā)起了路由發(fā)現(xiàn),這時就可以等待路由發(fā)現(xiàn)完成;反之,則廣播一般的路由請求命令,同時向路由發(fā)現(xiàn)表添加新的表項,表項的路由請求命令幀序列號設(shè)為路由請求命令幀的序列號,發(fā)起者地址設(shè)為節(jié)點地址,發(fā)送者地址設(shè)為發(fā)送路由請求命令的地址,累積的前向成本設(shè)為0。網(wǎng)絡(luò)層還需向路由表添加新的表項,表項的目的地址設(shè)置目的設(shè)備的地址,狀態(tài)域設(shè)置為路由發(fā)現(xiàn)中其他標(biāo)志域名都設(shè)置為FALSE。
對于支持多對一路由算法的集中器,路由發(fā)現(xiàn)的發(fā)起是周期性的,廣播多對一路由請求命令幀,路由請求的目的地址為廣播地址,這是為了讓其他設(shè)備可以維持到集中器的路由。集中器不用添加新的路由表和路由發(fā)現(xiàn)表項。
其他設(shè)備接收到廣播的路由請求命令時,分為一般路由請求和多對一路由請求處理。處理一般的路由請求的處理流程如圖4所示。
圖4 處理一般路由請求流程
對于多對一路由請求,路由發(fā)現(xiàn)表項的處理和一般的路由請求的處理是一樣的,區(qū)別在于路由表中是建立到集中器的路由。路由表項的Many-to-one域和路由記錄發(fā)起域設(shè)為TRUE,同時還應(yīng)轉(zhuǎn)發(fā)該路由請求命令幀。
路由回復(fù)命令是一般的路由請求發(fā)起的,設(shè)備的接收到路由回復(fù)命令時,處理流程如圖5所示。
集中器周期性發(fā)起路由發(fā)現(xiàn)時,接收設(shè)備都建立了到集中器的路由,但集中器并沒有到其他設(shè)備路由。多對一路由算法采取了一種策略:設(shè)備在向集中器發(fā)送數(shù)據(jù)之前,向集中器發(fā)送一個路由記錄命令,目的是讓集中器可以記錄設(shè)備轉(zhuǎn)發(fā)數(shù)據(jù)的路徑,路徑是由到集中器的路由確定。初始時,路由記錄命令在載荷域記錄當(dāng)前設(shè)備的地址,中繼計數(shù)記為1。
圖5 處理路由回復(fù)流程
設(shè)備接收到路由記錄命令時,把自己的網(wǎng)絡(luò)地址附在命令幀的載荷中,并把中繼計數(shù)加1,同時轉(zhuǎn)發(fā)該路由記錄命令到下一跳設(shè)備。如果是集中器接收到路由記錄命令,則向路由記錄表添加新的表項,表項的目的地址域設(shè)為路由記錄命令的發(fā)起者,中繼計數(shù)設(shè)為命令幀載荷中的中繼計數(shù),載荷中的地址集合則存儲在路徑域。
當(dāng)集中器向設(shè)備發(fā)送數(shù)據(jù)時,則把相應(yīng)的路由記錄表項的路徑域附在數(shù)據(jù)幀中,設(shè)備中繼該數(shù)據(jù)幀時,則根據(jù)數(shù)據(jù)幀的路徑域來轉(zhuǎn)發(fā)到目的設(shè)備。
本文的實現(xiàn)方案在CC2531的硬件平臺上進(jìn)行了驗證,實驗表明,路由算法滿足無線傳感網(wǎng)絡(luò)的多跳通信和低功耗要求,同時有效減輕了網(wǎng)絡(luò)設(shè)備的負(fù)載。網(wǎng)絡(luò)組網(wǎng)具有自組織性,網(wǎng)絡(luò)管理接口擴(kuò)展性強。
[1]Akyildiz IF,Su W,Sankarasubramaniam Y,et al.A Survey On Sensor Networks[J].IEEE Communications M agazine,2002,40(8):102-114.
[2]ZigBee Alliance.ZigBee Specification ZigBee Document 053474r17[S],2008-01-17.
[3]IEEE 802.15.4-2003.Wireless Medium Access Control(MAC)and Physical Layer(PHY)Specification for Low Rate Wireless Personal Area Networks[S],2003.
[4]孫利民,李建中,陳渝.無線傳感器網(wǎng)絡(luò)[M].北京:清華大學(xué)出版社,2005.
[5]王殊,等.無線傳感器網(wǎng)絡(luò)的理論及應(yīng)用[M].北京:北京航空航天大學(xué)出版社,2007.