無線傳感器網(wǎng)絡(luò)拓?fù)涞谋O(jiān)控與維護(hù)
掃描二維碼
隨時隨地手機(jī)看文章
摘要:以ZigBee協(xié)議為基礎(chǔ),提出了一種新的無線傳感器網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)的監(jiān)控和維護(hù)方法。創(chuàng)新性地設(shè)計(jì)了基于葉子節(jié)點(diǎn)的通訊模式,該模式運(yùn)用協(xié)議棧自有運(yùn)行流程來獲取節(jié)點(diǎn)的加入或丟失信息、實(shí)現(xiàn)網(wǎng)絡(luò)拓?fù)?/strong>的監(jiān)控,并通過設(shè)計(jì)一種基于關(guān)聯(lián)表的鏈表式存儲結(jié)構(gòu)來進(jìn)行動態(tài)網(wǎng)絡(luò)拓?fù)涞木S護(hù)。經(jīng)過在實(shí)際辦公環(huán)境監(jiān)控平臺上驗(yàn)證表明,該方法數(shù)據(jù)傳輸量小,資源占用少,操作簡便,具有較強(qiáng)的應(yīng)用推廣價值。
關(guān)鍵詞:無線傳感器網(wǎng)絡(luò);ZigBee;拓?fù)浣Y(jié)構(gòu);監(jiān)控與維護(hù)
0 引言
隨著無線傳感器網(wǎng)絡(luò)技術(shù)在軍事、工農(nóng)業(yè)、城市管理、環(huán)境監(jiān)控等各個領(lǐng)域的快速發(fā)展,作為系統(tǒng)基礎(chǔ)組成部分的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)成為研究的一個重要方面。目前,國內(nèi)外的科研機(jī)構(gòu)在網(wǎng)絡(luò)拓?fù)浒l(fā)現(xiàn)以及拓?fù)涞谋O(jiān)控和管理方面開展了大量的相關(guān)研究工作,但大多停留在理論和仿真層面,這些通過在高性能的PC機(jī)上搭建仿真模型來驗(yàn)證算法效果的研究,大多缺乏能夠應(yīng)用到實(shí)際系統(tǒng)的可行性案例。安徽財(cái)經(jīng)大學(xué)的趙濤,根據(jù)在聚合節(jié)點(diǎn)(sink)收集到網(wǎng)絡(luò)內(nèi)部節(jié)點(diǎn)報(bào)文接收或丟失的情況,通過發(fā)現(xiàn)網(wǎng)絡(luò)中所有葉子節(jié)點(diǎn)到sink節(jié)點(diǎn)的數(shù)據(jù)傳輸路徑,來推測網(wǎng)絡(luò)的邏輯拓?fù)?。該方法?jì)算比較復(fù)雜,120節(jié)點(diǎn)規(guī)模網(wǎng)絡(luò)在主頻為2.8 GHz的CPU主機(jī)上運(yùn)行尚需9秒的時間,同時會受到節(jié)點(diǎn)資源、計(jì)算速度、實(shí)施條件等限制,因此,這種方法很難在實(shí)際應(yīng)用中實(shí)現(xiàn)。德州儀器(TI)公司的官方網(wǎng)站也給出了一種獲取網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)的方法,該方法采用發(fā)送網(wǎng)絡(luò)發(fā)現(xiàn)命令的方式,并通過返回結(jié)果來確定網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)。此法雖然能夠在實(shí)際應(yīng)用中實(shí)施,但需要定期向網(wǎng)絡(luò)中的所有節(jié)點(diǎn)發(fā)送發(fā)現(xiàn)命令,因而數(shù)據(jù)消耗量巨大。
本文以Z-stack協(xié)議棧為基礎(chǔ),采用葉子節(jié)點(diǎn)通訊方式,并利用協(xié)議自身的運(yùn)行流程,提出了一種輕量數(shù)據(jù)消耗、真正面向應(yīng)用的拓?fù)浔O(jiān)控方案,同時通過設(shè)計(jì)一種基于關(guān)聯(lián)表的鏈?zhǔn)酱鎯Y(jié)構(gòu)來實(shí)現(xiàn)對網(wǎng)絡(luò)拓?fù)湫畔⒌木S護(hù),因而在解決網(wǎng)絡(luò)監(jiān)控與維護(hù)方面更具有實(shí)際應(yīng)用價值。
1 Z-stack協(xié)議棧原理簡介
作為ZigBee聯(lián)盟的一個重要的組織成員,2007年,TI公司宣布推出業(yè)界領(lǐng)先的ZigBee協(xié)議棧Z-Stack。Z-Stack符合ZigBee 2006規(guī)范,能支持多種平臺,其中包括本系統(tǒng)使用的、面向IEEE 802.15.4/ZigBee的CC2430片上系統(tǒng)解決方案。
1.1 ZigBee協(xié)議棧的體系結(jié)構(gòu)及信息傳遞流程
ZigBee協(xié)議棧的體系結(jié)構(gòu)如圖1所示,由圖可見,ZigBee協(xié)議采用分層體系結(jié)構(gòu),由物理層(PHY)、介質(zhì)接入控制子層(MAC層)、網(wǎng)絡(luò)層(NWK)和應(yīng)用層(APL)組成。其中,應(yīng)用層框架包括了應(yīng)用支持子層(APS)、ZigBee設(shè)備對象(ZDO)及由制造商制定的應(yīng)用對象。
在ZigBee網(wǎng)絡(luò)中,信息或數(shù)據(jù)的傳遞將依照上述層次結(jié)構(gòu)實(shí)現(xiàn)。上層發(fā)送的數(shù)據(jù)或指令按照應(yīng)用層-網(wǎng)絡(luò)層-MAC層-物理層的順序,從上至下依次進(jìn)行處理;底層返回的數(shù)據(jù)則按照物理層-MAC層-網(wǎng)絡(luò)層-應(yīng)用層的順序,從下至卜處理后返回給上層用戶。每個層次負(fù)責(zé)發(fā)送到本層數(shù)據(jù)的分析和判斷,并對于屬于本層次的數(shù)據(jù)或指令做出相應(yīng)的動作響應(yīng);對于不屬十本層的數(shù)據(jù),則按照規(guī)定格式打包后發(fā)送給上、下一層。
1.2 節(jié)點(diǎn)加入與失步流程
為了維護(hù)系統(tǒng)的正常運(yùn)行,ZigBee協(xié)議棧還提供了一些必須的消息響應(yīng)流程,其中包括節(jié)點(diǎn)加入網(wǎng)絡(luò)和失步響應(yīng)的流程。
節(jié)點(diǎn)加入流程如圖2所示。當(dāng)子節(jié)點(diǎn)申請加入網(wǎng)絡(luò)時,會啟動加入流程。子節(jié)點(diǎn)的加入請求通過其NWK層、MAC層、PHY層傳遞給父節(jié)點(diǎn);父節(jié)點(diǎn)收到加入通知消息后,又通過其PHY層、MAC層、NWK層將該情況上傳給應(yīng)用層,最后通過ZDO JoinIndicationCB()函數(shù)的調(diào)用,得到子節(jié)點(diǎn)加入的消息。
節(jié)點(diǎn)失步流程是指終端節(jié)點(diǎn)丟失其父節(jié)點(diǎn)的同步信號時,向上層報(bào)告的失步情況發(fā)生的流程。其具體流程如圖3所示。
終端節(jié)點(diǎn)每隔一段時間就會開啟與父節(jié)點(diǎn)的同步,當(dāng)在設(shè)定時間內(nèi)沒有接收到父節(jié)點(diǎn)的同步信號時,就會產(chǎn)生失步指示信息,協(xié)議棧將該失步信息層層上傳,最后通過調(diào)用ZDOSynclndicationCB()函數(shù),將信息傳達(dá)到應(yīng)用層。
1.3 關(guān)聯(lián)表
TI的Z-stack協(xié)議棧在全功能節(jié)點(diǎn)中可以維護(hù)associateddevices t結(jié)構(gòu)的關(guān)聯(lián)表,關(guān)聯(lián)表中保存有與本節(jié)點(diǎn)直接關(guān)聯(lián)(父子節(jié)點(diǎn))的相關(guān)信息,包括關(guān)聯(lián)節(jié)點(diǎn)的短地址、設(shè)備類型、連接狀態(tài)等,基本上可以滿足網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)監(jiān)控和維護(hù)的信息需求。
TI的ZigBee協(xié)議棧雖然可為用戶開發(fā)提供強(qiáng)大支持,但是在網(wǎng)絡(luò)監(jiān)控和維護(hù)上并沒有專用的接口。一方面,該協(xié)議棧只能發(fā)現(xiàn)節(jié)點(diǎn)加入網(wǎng)絡(luò),但是無法發(fā)現(xiàn)節(jié)點(diǎn)非主動性的丟失或退出,因而不具備網(wǎng)絡(luò)拓?fù)浔O(jiān)控的功能;另一方面,協(xié)議在每個全功能節(jié)點(diǎn)中部維護(hù)了與之關(guān)聯(lián)設(shè)備的關(guān)聯(lián)表,但是并沒有維護(hù)整體網(wǎng)絡(luò)的關(guān)聯(lián)信息,因而無法掌控網(wǎng)絡(luò)拓?fù)涞娜病hb于協(xié)議棧在網(wǎng)絡(luò)拓?fù)涔δ苌系牟蛔愫腿毕荩疚囊詤f(xié)議基本流程為基礎(chǔ),提出一種實(shí)現(xiàn)整體網(wǎng)絡(luò)拓?fù)浔O(jiān)控和維護(hù)的方法,該方法可以滿足一般系統(tǒng)對于拓?fù)浣Y(jié)構(gòu)的監(jiān)控和維護(hù)需求。
2 網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)監(jiān)控
網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)監(jiān)控的主要目的是實(shí)現(xiàn)拓?fù)浣Y(jié)構(gòu)的建立和在結(jié)構(gòu)發(fā)生變化時及時獲取變化情況,其中最主要的是實(shí)現(xiàn)節(jié)點(diǎn)加入和退出事件的捕捉。節(jié)點(diǎn)加入事件的獲取相對容易,可以通過加入節(jié)點(diǎn)主動上報(bào)等方式來獲取;而節(jié)點(diǎn)丟失事件獲取要復(fù)雜得多?,F(xiàn)階段,對節(jié)點(diǎn)丟失情況的監(jiān)控多采用系統(tǒng)定期查詢的手段。采用查詢方法時,其實(shí)時性與查詢周期的長短直接相關(guān):查詢周期設(shè)置較長,拓?fù)渥兓从硶r間增長,實(shí)時性變差;而查詢周期設(shè)置較短,則傳輸數(shù)據(jù)量增大,占用系統(tǒng)資源,往往很難在二者之間找到平衡點(diǎn)。協(xié)議棧中數(shù)據(jù)或消息的傳遞是一個復(fù)雜的過程,為了盡可能地降低系統(tǒng)資源的占用、節(jié)約能耗,除了維護(hù)系統(tǒng)正常運(yùn)行所必須的數(shù)據(jù)通訊外,還應(yīng)盡量減少人為添加(應(yīng)用層)的數(shù)據(jù)通訊量。因此,最好的辦法就是利用協(xié)議自身的數(shù)據(jù)傳遞或者節(jié)點(diǎn)加入、失步等流程來實(shí)現(xiàn)相關(guān)信息的獲取。
本文設(shè)計(jì)了一種基于網(wǎng)關(guān)——葉子節(jié)點(diǎn)通訊的節(jié)點(diǎn)丟失情況獲取方法,該方法可以利用協(xié)議棧自身的運(yùn)行流程,以較少的數(shù)據(jù)通訊量和簡單的操作,實(shí)現(xiàn)網(wǎng)絡(luò)中所有節(jié)點(diǎn)的丟失情況獲取。
2.1 節(jié)點(diǎn)加入事件的獲取
通常情況下,節(jié)點(diǎn)加入事件多采用加入節(jié)點(diǎn)主動上報(bào)的方法來獲取。該方法操作簡單,但是需要人為地發(fā)送相關(guān)加入信息,會增加系統(tǒng)數(shù)據(jù)通訊量。由圖2所示的節(jié)點(diǎn)加入流程可知,如果有子節(jié)點(diǎn)加入網(wǎng)絡(luò),加入的指示信息都會通過ZDOJoinIndmationCB()函數(shù)的調(diào)用報(bào)告給父節(jié)點(diǎn)。即該函數(shù)的調(diào)用證明有了節(jié)點(diǎn)的加入事件。因此,本文通過在此函數(shù)中添加向應(yīng)用程序報(bào)告的功能,即可通知用戶了節(jié)點(diǎn)加入事件的發(fā)生。
2.2 節(jié)點(diǎn)丟失信息的獲取
由圖3所示的流程可知,協(xié)議棧通過調(diào)用vold ZDOSyncIndicationCB(byte type,uint16 shortAddr)函數(shù)可實(shí)現(xiàn)失步情況的報(bào)告。該函數(shù)具有節(jié)點(diǎn)丟失的指示功能,并能夠指示丟失節(jié)點(diǎn)與本節(jié)點(diǎn)的父子關(guān)系和短地址等。但在實(shí)際的應(yīng)用中發(fā)現(xiàn),該函數(shù)的調(diào)用是有條件限制的,具體實(shí)施條件如下:
父節(jié)點(diǎn)丟失:從失步報(bào)告流程可知,終端節(jié)點(diǎn)能夠自動輪詢發(fā)現(xiàn)其父節(jié)點(diǎn)同步信號的丟失,而無需人為添加任何觸發(fā)條件,引發(fā)函數(shù)調(diào)用。但路由節(jié)點(diǎn)不支持與父節(jié)點(diǎn)的輪詢機(jī)制,因而不能產(chǎn)生父節(jié)點(diǎn)丟失情況的報(bào)告。
子節(jié)點(diǎn)丟失:對于包括終端節(jié)點(diǎn)在內(nèi)的所有類型節(jié)點(diǎn)的子節(jié)點(diǎn)丟失,在未加相應(yīng)處理的情況下,協(xié)議棧都不會引發(fā)該函數(shù)的調(diào)用。
由實(shí)施條件可知,該函數(shù)的丟失指示并不適用于所有類型節(jié)點(diǎn)的丟失情況,因此,如果要得到除終端父節(jié)點(diǎn)外網(wǎng)絡(luò)中所有節(jié)點(diǎn)的丟失情況,就需要人為加入其他處理,以觸發(fā)ZDOsynclndicationCB()函數(shù)的調(diào)用,從而實(shí)現(xiàn)丟失事件的獲取。
2.3 葉子節(jié)點(diǎn)通訊觸發(fā)方法
通常采用的基于查詢的網(wǎng)絡(luò)發(fā)現(xiàn)機(jī)制部需要在所有節(jié)點(diǎn)間發(fā)送數(shù)據(jù),因而增大系統(tǒng)的數(shù)據(jù)開銷。這里以圖4所示的拓?fù)浣Y(jié)構(gòu)為例,圖中的葉子通訊需要進(jìn)行14條數(shù)據(jù)的查詢和14條數(shù)據(jù)的應(yīng)答才能夠完成一次節(jié)點(diǎn)丟失情況的獲取。為了盡可能減少數(shù)據(jù)通訊和操作的復(fù)雜度,本文設(shè)計(jì)了一種基于網(wǎng)關(guān)——葉子節(jié)點(diǎn)通訊的節(jié)點(diǎn)丟失情況獲取方法,以便用較少的數(shù)據(jù)通訊量和簡單的操作來實(shí)現(xiàn)網(wǎng)絡(luò)中聽有節(jié)點(diǎn)的丟失情況獲取。
研究發(fā)現(xiàn),失步函數(shù)的觸發(fā)可以通過加入數(shù)據(jù)通訊來實(shí)現(xiàn)。因?yàn)樵跀?shù)據(jù)發(fā)送的過程中,協(xié)議棧會開啟數(shù)據(jù)發(fā)送流程,數(shù)據(jù)發(fā)送后則會自動檢測接收方應(yīng)答幀。這樣,如果節(jié)點(diǎn)丟失,則發(fā)送節(jié)點(diǎn)無法接收到有效應(yīng)答,進(jìn)而引發(fā)節(jié)點(diǎn)失步指示函數(shù)的觸發(fā)。
具體觸發(fā)時,如果節(jié)點(diǎn)之間有數(shù)據(jù)通訊,發(fā)送數(shù)據(jù)節(jié)點(diǎn)則能夠發(fā)現(xiàn)接收數(shù)據(jù)節(jié)點(diǎn)的丟失,從而引發(fā)vold ZDOSynclndicationCB(byte type,uint16 shortAddr)函數(shù)的調(diào)用。
在同一條數(shù)據(jù)通路上的節(jié)點(diǎn)進(jìn)行數(shù)據(jù)轉(zhuǎn)發(fā)時,數(shù)據(jù)傳遞路徑上的各個節(jié)點(diǎn)都會發(fā)現(xiàn)其父節(jié)點(diǎn)(數(shù)據(jù)由下而上)或者子節(jié)點(diǎn)(數(shù)據(jù)由上而下)的丟失,進(jìn)而調(diào)用void ZDOSynclndicationCB(byte type,uint16 shortAddr)函數(shù)。如圖4所示,如果網(wǎng)關(guān)發(fā)送數(shù)據(jù)到終端節(jié)點(diǎn)1,則在網(wǎng)關(guān)到終端節(jié)點(diǎn)1數(shù)據(jù)路徑上的所有節(jié)點(diǎn)(網(wǎng)關(guān)、路由1、路由2、終端1)都能夠發(fā)現(xiàn)其了節(jié)點(diǎn)的丟失;終端節(jié)點(diǎn)1發(fā)送數(shù)據(jù)到網(wǎng)關(guān),則路徑1上的所有節(jié)點(diǎn)都能發(fā)現(xiàn)其父節(jié)點(diǎn)的丟失。
該方法通過建立數(shù)據(jù)通路上起始節(jié)點(diǎn)和末端節(jié)點(diǎn)的數(shù)據(jù)通訊來實(shí)現(xiàn)整條路徑上節(jié)點(diǎn)丟失情況的獲取。其具體操作過程分為兩個部分:其一是父節(jié)點(diǎn)丟失情況的獲取。由前面提到的實(shí)施條件可知,終端節(jié)點(diǎn)無需任何人為操作就能夠發(fā)現(xiàn)其父節(jié)點(diǎn)的丟失,而無需對此部分做特殊處理,因而只需對路由節(jié)點(diǎn)做出處理。而由路由葉子節(jié)點(diǎn)(如圖4中路由節(jié)點(diǎn)2、4)向網(wǎng)關(guān)發(fā)送數(shù)據(jù)時,則可實(shí)現(xiàn)整條路徑上所有節(jié)點(diǎn)丟失情況的獲取。其二是了節(jié)點(diǎn)丟失情況的獲取。子節(jié)點(diǎn)丟失的獲取可以通過網(wǎng)關(guān)向葉子節(jié)點(diǎn)(圖4中所有終端節(jié)點(diǎn)和路由4)發(fā)送數(shù)據(jù)的方法來覆蓋整個網(wǎng)絡(luò)中的所有節(jié)點(diǎn),從而使全部節(jié)點(diǎn)都能夠發(fā)現(xiàn)其了節(jié)點(diǎn)的丟失情況。
人為加入上述兩部分?jǐn)?shù)據(jù)通訊后,只要整個網(wǎng)絡(luò)中有節(jié)點(diǎn)丟失,該丟失節(jié)點(diǎn)的父節(jié)點(diǎn)和子節(jié)點(diǎn)都會產(chǎn)生失步函數(shù)voidZDO_SyncIndicat ionCB(byte type,uint16 shortAddr)的調(diào)用,這樣就可以簡單地在該函數(shù)中添加向上層應(yīng)用報(bào)告的功能,實(shí)現(xiàn)網(wǎng)絡(luò)中節(jié)點(diǎn)丟失信息獲取。并且數(shù)據(jù)通訊量由原來的28條減少到6條,從而大大減少了數(shù)據(jù)消耗和由此帶來的系統(tǒng)資源占用。
3 網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)與維護(hù)
Z-stack協(xié)議棧在全功能節(jié)點(diǎn)中只維護(hù)與本節(jié)點(diǎn)直接關(guān)聯(lián)的節(jié)點(diǎn)信息的關(guān)聯(lián)表,沒有整體網(wǎng)絡(luò)信息的存儲功能。為了解決Z-stack關(guān)于網(wǎng)絡(luò)全貌信息缺失的缺陷,結(jié)合本文提出的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)監(jiān)控方法,設(shè)計(jì)一種拓?fù)浣Y(jié)構(gòu)維護(hù)的方法,在占用少量資源的情況下獲取整個網(wǎng)絡(luò)的拓?fù)湫畔ⅲ⑿畔⒄系骄W(wǎng)關(guān)節(jié)點(diǎn)中統(tǒng)一維護(hù)和管理,從而建立網(wǎng)絡(luò)拓?fù)涞墓芾磙k法,實(shí)現(xiàn)具有自組織、自適應(yīng)能力的智能網(wǎng)絡(luò)管理機(jī)制。
3.1 管理模式
網(wǎng)絡(luò)信息管理可采用搜集模式和監(jiān)控模式相結(jié)合的方式。搜集模式通過發(fā)送指令搜集網(wǎng)絡(luò)拓?fù)湫畔?,賦予用戶即時獲取當(dāng)前網(wǎng)絡(luò)結(jié)構(gòu)的能力;監(jiān)控模式通過監(jiān)控從網(wǎng)絡(luò)組建起歷史網(wǎng)絡(luò)的結(jié)構(gòu)變化,實(shí)現(xiàn)網(wǎng)絡(luò)拓?fù)湫畔⒏?,從而整合為?dāng)前網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)。
搜集模式在實(shí)現(xiàn)時,首先由網(wǎng)關(guān)設(shè)備廣播一個命令來搜集設(shè)備信息;然后,收到廣播信息的路由節(jié)點(diǎn)再按照一定的數(shù)據(jù)格式,由網(wǎng)關(guān)返回子節(jié)點(diǎn)關(guān)聯(lián)信息;當(dāng)網(wǎng)關(guān)收到各個路由節(jié)點(diǎn)的返回信息后,再將其組合為整個網(wǎng)絡(luò)中的設(shè)備信息。
監(jiān)控模式則是從網(wǎng)絡(luò)形成起,網(wǎng)關(guān)節(jié)點(diǎn)就開始監(jiān)控所有節(jié)點(diǎn)的狀態(tài);當(dāng)路由節(jié)點(diǎn)檢測到其子節(jié)點(diǎn)加入或者退出的時候,向網(wǎng)關(guān)上報(bào)該子節(jié)點(diǎn)的狀態(tài)變化信息,而網(wǎng)關(guān)節(jié)點(diǎn)檢測到子節(jié)點(diǎn)加入或者退出則不用上報(bào),直接在網(wǎng)關(guān)內(nèi)部處理;當(dāng)網(wǎng)關(guān)接收到路由節(jié)點(diǎn)上報(bào)的狀態(tài)信息后,就會刪除或者增加該路由子節(jié)點(diǎn)的關(guān)聯(lián)信息,同時更新整體網(wǎng)絡(luò)結(jié)構(gòu)。
3.2 網(wǎng)絡(luò)拓?fù)浯鎯Y(jié)構(gòu)
網(wǎng)關(guān)節(jié)點(diǎn)作為整個網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)管理的中心,負(fù)責(zé)拓?fù)浣Y(jié)構(gòu)的添加、刪除和更新,因此,必須在網(wǎng)關(guān)節(jié)點(diǎn)存儲整體的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)信息。受網(wǎng)關(guān)資源的限制,本文采用分級動態(tài)鏈表的形式保存網(wǎng)絡(luò)拓?fù)湫畔?,以便以較少的資源占用實(shí)現(xiàn)拓?fù)湫畔⒌膭討B(tài)存儲。本設(shè)計(jì)的網(wǎng)絡(luò)拓?fù)浯鎯Y(jié)構(gòu)如圖5所示。
圖5中,AssocLisHead是裝載路由節(jié)點(diǎn)頭信息的數(shù)組,包含有該路由節(jié)點(diǎn)的長地址、短地址、父節(jié)點(diǎn)短地址和擁有的子節(jié)點(diǎn)數(shù)以及指向其子節(jié)點(diǎn)鏈表assoc list的頭指針;assoclist鏈表中記載著這一路由下的了節(jié)點(diǎn)信息,包括子節(jié)點(diǎn)的短地址、長地址、類型、連接狀態(tài)等。在該路由下每增加一個子節(jié)點(diǎn),就會在assoc list鏈表中添加一個節(jié)點(diǎn)信息,當(dāng)節(jié)點(diǎn)離開時,又會將相對應(yīng)的鏈表刪除。這樣,網(wǎng)關(guān)就可以方便地對當(dāng)前網(wǎng)絡(luò)中的昕有節(jié)點(diǎn)的拓?fù)浜拖嚓P(guān)信息進(jìn)行查找、更新、維護(hù)。
3.3 網(wǎng)絡(luò)維護(hù)方案
網(wǎng)絡(luò)維護(hù)的實(shí)施要建立網(wǎng)絡(luò)中所有類型節(jié)點(diǎn)間的區(qū)分與協(xié)作機(jī)制。區(qū)分是根據(jù)節(jié)點(diǎn)類型的不同、事件類型的不同做出區(qū)別處理;協(xié)作是在所有節(jié)點(diǎn)間建立連動響應(yīng)機(jī)制,相互配合,并實(shí)現(xiàn)信息的匯聚和統(tǒng)一管理。具體的網(wǎng)絡(luò)維護(hù)分為事件響應(yīng)和信息維護(hù)兩部分。
3. 3. 1 拓?fù)渥兓录捻憫?yīng)
拓?fù)渥兓饕侵腹?jié)點(diǎn)加入事件和節(jié)點(diǎn)退出事件。當(dāng)節(jié)點(diǎn)加入事件是指節(jié)點(diǎn)加入網(wǎng)絡(luò)時,其父節(jié)點(diǎn)負(fù)責(zé)將該子節(jié)點(diǎn)加入信息上報(bào)網(wǎng)關(guān);節(jié)點(diǎn)退出事件則是指獲取到的網(wǎng)絡(luò)節(jié)點(diǎn)丟失信息的處理。處理可分為兩種情況:一種是當(dāng)傳遞來的type=1時,即丟失節(jié)點(diǎn)為本節(jié)點(diǎn)的父節(jié)點(diǎn)時,開啟網(wǎng)絡(luò)加入流程,使節(jié)點(diǎn)可以重新加入網(wǎng)絡(luò),并恢復(fù)網(wǎng)絡(luò)的正常運(yùn)行;第二種情況是type=0時,即本節(jié)點(diǎn)發(fā)現(xiàn)其中一子節(jié)點(diǎn)丟失。本方法對于長時間無法連接的子節(jié)點(diǎn),將啟動移除(LEAVE)流程,將該子節(jié)點(diǎn)從網(wǎng)絡(luò)中刪除,同時向網(wǎng)關(guān)節(jié)點(diǎn)報(bào)告子節(jié)點(diǎn)退出的消息。
需要注意的是:當(dāng)子節(jié)點(diǎn)丟失時,有的時候是真正丟失了(長時間或永久無法連接),但更多的時候只是暫時地失去聯(lián)系,隨著子節(jié)點(diǎn)的重新加入申請,又可以加入網(wǎng)絡(luò),恢復(fù)正常的運(yùn)行狀態(tài)。因此,設(shè)計(jì)時需要將暫時失步和真正丟失這兩種情況區(qū)分開,再分別做出合理的處理。
本文采用延時判斷的方式,即當(dāng)檢測到失步現(xiàn)象發(fā)生后,先定時一段時間,冉做判斷:如果定時一段時間后,節(jié)點(diǎn)仍舊失去聯(lián)系,則判定是真的丟失了節(jié)點(diǎn),此時可通過NLMELeaveReq移除子節(jié)點(diǎn),同時上報(bào)網(wǎng)關(guān)節(jié)點(diǎn)丟失的消息;否則認(rèn)為只是暫時的節(jié)點(diǎn)失步。節(jié)點(diǎn)退出情況的處理流程如圖6所示。
3.3.2 拓?fù)湫畔⒌木S護(hù)
由網(wǎng)絡(luò)各個路由上報(bào)的節(jié)點(diǎn)加入或退出的信息最終將存網(wǎng)關(guān)匯集,網(wǎng)關(guān)按照上報(bào)的節(jié)電加入、退出信息對網(wǎng)絡(luò)拓?fù)浯鎯﹃P(guān)聯(lián)表進(jìn)行添加、刪除、更新,以維護(hù)當(dāng)前網(wǎng)絡(luò)拓?fù)錉顟B(tài)。其具體方法是先判斷接收信息的種類,然后對節(jié)點(diǎn)加入信息和節(jié)點(diǎn)退出信息分別處理。對于加入信息,可核查是否是已經(jīng)存在于網(wǎng)絡(luò)中的點(diǎn),如果是已經(jīng)存在的,則更新存儲的節(jié)點(diǎn)信息;如果是一個全新的點(diǎn),則為該節(jié)點(diǎn)分配存儲空間,并在對應(yīng)的父節(jié)點(diǎn)下增添子節(jié)點(diǎn)分支。對于退出信息,同樣核查是否是存在于網(wǎng)絡(luò)中的點(diǎn),如果該節(jié)點(diǎn)已經(jīng)不存在了,則報(bào)錯處理;
如果是存在的點(diǎn),則將該節(jié)點(diǎn)信息刪除,并解除與其父節(jié)點(diǎn)的父子聯(lián)系。
網(wǎng)關(guān)在接收到由父節(jié)點(diǎn)上報(bào)的節(jié)點(diǎn)加入消息時,還需要對加入子節(jié)點(diǎn)類型進(jìn)行判斷;如果是終端節(jié)點(diǎn),則在其父節(jié)點(diǎn)的鏈表中更新或加入該子節(jié)點(diǎn)的相關(guān)信息;如果加入節(jié)點(diǎn)是路由節(jié)點(diǎn),除了在該路由節(jié)點(diǎn)父節(jié)點(diǎn)的鏈表中加入該子節(jié)點(diǎn)信息外,還要添加該子路由關(guān)聯(lián)頭信息。圖7所示是實(shí)現(xiàn)網(wǎng)絡(luò)拓?fù)渚S護(hù)管理的示意圖。
4 實(shí)驗(yàn)驗(yàn)證
本文的實(shí)驗(yàn)驗(yàn)證可在基于CC2430搭建的WSN開發(fā)平臺上進(jìn)行,該平臺共使用5個終端節(jié)點(diǎn)、5個路由節(jié)點(diǎn)、1個網(wǎng)關(guān)和PC調(diào)試機(jī)。所有傳感器節(jié)點(diǎn)自組織成無線網(wǎng)絡(luò),并將感知信息和拓?fù)湫畔R報(bào)給網(wǎng)關(guān)節(jié)點(diǎn),網(wǎng)關(guān)節(jié)點(diǎn)與PC機(jī)通過串口相連,操作人員可以通過上位機(jī)的調(diào)試軟件對網(wǎng)絡(luò)狀態(tài)進(jìn)行實(shí)時監(jiān)控。圖8所示是其上位機(jī)監(jiān)控程序界面。該試驗(yàn)網(wǎng)絡(luò)的節(jié)點(diǎn)布局示意圖如圖9所示。
實(shí)驗(yàn)時隨機(jī)選取監(jiān)控過程中兩個時間點(diǎn)的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)監(jiān)控過程示意圖如圖10所示。其中兩個時間點(diǎn)在實(shí)驗(yàn)過程中上報(bào)的拓?fù)渥兓畔⑷绫?所列。
從實(shí)驗(yàn)結(jié)果可以看出,一方面,父節(jié)點(diǎn)能夠?qū)崟r上報(bào)其子節(jié)點(diǎn)加入和丟失的網(wǎng)絡(luò)變化情況;另一方面,子節(jié)點(diǎn)也能夠及時檢測出其父節(jié)點(diǎn)的丟失,并選擇其他父節(jié)點(diǎn)重新申請加入網(wǎng)絡(luò)??梢?,本系統(tǒng)具有網(wǎng)絡(luò)的自組織、自適應(yīng)的動態(tài)網(wǎng)絡(luò)監(jiān)控與維護(hù)功能。
5 結(jié)語
本文提出了一種通過終端與父節(jié)點(diǎn)間的失步信號來捕捉與基于葉子節(jié)點(diǎn)人為觸發(fā)失步函數(shù)調(diào)用的方法,可以實(shí)現(xiàn)整個網(wǎng)絡(luò)節(jié)點(diǎn)丟失情況的獲取。其中,通過終端與父節(jié)點(diǎn)間失步信號來捕捉節(jié)點(diǎn)丟失信息的方法無需人為干預(yù),能夠通過協(xié)議自動實(shí)現(xiàn),從而減少了查詢的數(shù)據(jù)量和對其操作帶來的系統(tǒng)資源占用;基于葉子節(jié)點(diǎn)的失步函數(shù)觸發(fā)機(jī)制,只通過葉子節(jié)點(diǎn)與網(wǎng)關(guān)的數(shù)據(jù)傳輸,就能夠完成整個線路上節(jié)點(diǎn)丟失情況的獲取,在實(shí)際應(yīng)用中,經(jīng)常由終端上報(bào)數(shù)據(jù),相當(dāng)于終端自動完成數(shù)據(jù)線路上父節(jié)點(diǎn)丟失情況的發(fā)現(xiàn),使該方法的實(shí)施更加簡單。這兩種方法的結(jié)合,能夠以較小的數(shù)據(jù)通訊量、簡單的操作和較小的系統(tǒng)資源占用來實(shí)現(xiàn)網(wǎng)絡(luò)發(fā)現(xiàn)的功能,因而具有較高的實(shí)際應(yīng)用價值。
本文提出的網(wǎng)絡(luò)拓?fù)渚S護(hù)方法具備網(wǎng)絡(luò)拓?fù)?/strong>的自組織、自適應(yīng)功能,可滿足無線傳感器網(wǎng)絡(luò)系統(tǒng)對于網(wǎng)絡(luò)組織結(jié)構(gòu)的動態(tài)性能要求。同時具備拓?fù)浣Y(jié)構(gòu)的存儲功能,能以較少的系統(tǒng)資源保存整個網(wǎng)絡(luò)的動態(tài)拓?fù)浣Y(jié)構(gòu),十分方便網(wǎng)絡(luò)的管理和控制。