劉 波,張 祥,李貴柯,丁時棟,趙柏秦,吳南健
(1.中國科學院大學,北京100049;2.中國科學院 半導體研究所,北京100083;3.無錫中科智聯(lián)科技研發(fā)中心有限公司,江蘇 無錫214135)
無線傳感器網(wǎng)絡(WSNs)[1]是物聯(lián)網(wǎng)實現(xiàn)數(shù)據(jù)采集的末端,具有應用環(huán)境復雜和維護困難的特點,為實現(xiàn)WSNs的長期免維護運行,采用全網(wǎng)定期喚醒的方法降低功耗。但是,在實際應用過程中,由于網(wǎng)絡節(jié)點嵌入式處理能力有限,收發(fā)能力受到限制[2],無線通信較差的穩(wěn)定性和時間同步策略執(zhí)行中末端節(jié)點與目標節(jié)點的累積的時鐘偏差[3]等都會導致傳感節(jié)點的信息丟失,同步失效。
目前,對于WSNs 節(jié)點丟失問題主要有兩種研究方案:第一,通過理論研究優(yōu)化通信機制、路由算法[4]、休眠及時間同步策略[5,6]提高WSNs 系統(tǒng)的穩(wěn)定性,減少系統(tǒng)出現(xiàn)節(jié)點丟失情況。但是,低功耗設計的限制使得一些復雜的算法和實際應用過程中難以實現(xiàn)。第二,在網(wǎng)絡中出現(xiàn)節(jié)點丟失的情況下采用網(wǎng)絡自愈方法[7],通過啟用備用路由的方式給丟失節(jié)點提供新的路由,實現(xiàn)丟失節(jié)點召回。但這種方法要求WSNs 中的路由節(jié)點持續(xù)工作,并不適用于節(jié)點全部休眠的低功耗網(wǎng)絡。本文提出了一種基于IEEE 802.15.4 的動態(tài)路由協(xié)議的WSNs 系統(tǒng)的網(wǎng)絡自治愈方法。通過上位機—網(wǎng)關—節(jié)點的信息交互控制WSNs 節(jié)點的休眠周期和工作時間占空比,使節(jié)點丟失后再入網(wǎng),再同步,實現(xiàn)丟失節(jié)點的WSNs 的自治愈,使WSNs 能夠低功耗、長期、穩(wěn)定地運行。
本文提出的方法主要應用于基于TinyOS 操作系統(tǒng)[8]的WSNs 系統(tǒng)。系統(tǒng)主要由傳感器節(jié)點、收發(fā)基站(網(wǎng)關)和上位機軟件三部分組成。網(wǎng)絡整體采用無線Mesh 構架[9],節(jié)點兼具數(shù)據(jù)采集和路由功能,全網(wǎng)采用同步休眠的策略[10,11],所有節(jié)點維持與網(wǎng)關同步的時鐘。系統(tǒng)示意圖如圖1 所示。
圖1 WSNs 應用系統(tǒng)示意圖Fig 1 Schematic diagram of WSNs application system
監(jiān)測區(qū)域的節(jié)點周期性地采集數(shù)據(jù)上傳給網(wǎng)關。網(wǎng)關通過有線或WiFi/GPRS 無線方式上傳至本地及遠程數(shù)據(jù)中心。上位機進行實時數(shù)據(jù)顯示并根據(jù)需求下發(fā)命令信息,實現(xiàn)對網(wǎng)絡休眠周期和占空比的控制。
傳感器節(jié)點作為感知末端,是實現(xiàn)自治愈方法的主要對象。網(wǎng)絡中所有節(jié)點周期性喚醒/休眠,周期由TOTAL與WAKEUP 參數(shù)決定,節(jié)點總周期Tt=TOTAL/10000,喚醒工作時間Tw=WAKEUP/1000。若節(jié)點當前對應時間為Tn,則節(jié)點下次進入休眠狀態(tài)需要的時間T1=Tw-Tn%Tt,下次喚醒所需時間T2=Tt-Tn%Tt。節(jié)點的同步是通過工作期間網(wǎng)關周期性地廣播的同步信號實現(xiàn)的。
全網(wǎng)同時休眠的方法大大降低了網(wǎng)絡功耗,但對時間同步精度要求提高了。在網(wǎng)絡的大規(guī)模應用過程中,末端節(jié)點通過其他節(jié)點傳遞信息,形成路由多跳的結構,一旦外界信息干擾、數(shù)據(jù)包錯誤、網(wǎng)絡負荷過大等原因都會造成節(jié)點的丟失。本文的自治愈方法就是針對復雜的大規(guī)模網(wǎng)絡應用過程中出現(xiàn)的同步失效的丟失情況做出的恢復網(wǎng)絡的方法。
本文提出的方法設計如圖2,節(jié)點同步失效情況下,加快該失效節(jié)點的周期轉換頻率,增加該節(jié)點的喚醒工作時間占空比,當該節(jié)點在某次喚醒工作期間與網(wǎng)絡中其他醒來節(jié)點交互,接收到這些節(jié)點轉發(fā)的網(wǎng)絡中網(wǎng)關周期性廣播的時間同步信號,該節(jié)點根據(jù)同步信號修改自身的系統(tǒng)時鐘,從而實現(xiàn)節(jié)點的再次同步而回歸網(wǎng)絡。
圖2 自治愈方法示意圖Fig 2 Schematic diagram of self-healing method
上述方法通過修改節(jié)點休眠周期與占空比來實現(xiàn)網(wǎng)絡治愈。當同步失效節(jié)點的工作狀態(tài)占空比Tw/Tt大于0.5時,正常節(jié)點與丟失節(jié)點會有重合的工作時間,可實現(xiàn)信息交互從而使失效節(jié)點回歸網(wǎng)絡;當占空比為1 時,節(jié)點一直處于工作狀態(tài)。然而,節(jié)點一直保持工作狀態(tài)時CC2530的29 mA 工作電流與傳感器功耗相加,不符合低功耗設計的目標。
傳統(tǒng)的WSNs 應用系統(tǒng)的節(jié)點休眠周期在節(jié)點程序燒寫之前已經(jīng)在程序中定義了,但不變的周期不夠靈活,不能滿足WSNs 的動態(tài)監(jiān)測。本文的方法中,通過節(jié)點對同步狀態(tài)的判斷與對上位機下發(fā)命令對的解析動態(tài)地改變WAKEUP 和TOTAL 參數(shù)的值,當節(jié)點處于工作狀態(tài)時,由這些參數(shù)計算下次進入工作/休眠狀態(tài)的時間并通過Timer接口定時,實現(xiàn)休眠/工作狀態(tài)的轉換,從而實現(xiàn)上層對WSNs 監(jiān)測的有效控制和丟失節(jié)點的再入網(wǎng)、再同步。
在現(xiàn)有的協(xié)議?;A上,提出了自治愈方法。此方法主要通過傳感節(jié)點軟件實現(xiàn),軟件設計流程圖如圖3。
圖3 自治愈方法流程圖Fig 3 Flow chart of self-healing method
在節(jié)點從工作狀態(tài)進入休眠狀態(tài)前,通過調(diào)用同步查詢接口SyncCheck 查看時鐘同步組件的同步標志參數(shù)syncflag。syncflag 由節(jié)點周期內(nèi)是否接收到同步信號決定,節(jié)點醒來時,初值為零,節(jié)點周期內(nèi)收到同步信號會觸發(fā)事件event Receive.receive(),此時對syncflag 賦值1。若syncflag 為0,判斷此周期內(nèi)該節(jié)點未曾收到過新的同步信號;否則,判斷此周期內(nèi)該節(jié)點收到過同步信號。一旦節(jié)點連續(xù)2 次未接收到同步信號,就判斷該節(jié)點同步失效,此時將啟動自治愈程序:修改休眠組件中的TOTAL 等于60000,WAKEUP 等于30000(工作時間占空比為0.5,也可適當增大),使該節(jié)點自身的總休眠周期變?yōu)? min,喚醒工作時間30 s。在這種工作狀態(tài)下,當節(jié)點再次收到其他節(jié)點轉發(fā)的同步信號時,將修改參數(shù)到原始值來恢復到原有的周期,與網(wǎng)絡同步。若節(jié)點連續(xù)15 次沒有收到同步信號(次數(shù)由網(wǎng)絡原有周期決定,可修改),節(jié)點將退出自治愈過程并恢復原有工作周期與占空比,等待下一次尋求同步的執(zhí)行。
本方法設計要點:通過節(jié)點喚醒(工作)期間對周期性同步信號的接收判斷節(jié)點是否丟失,而不是通過每個活動周期內(nèi)僅僅一次的ACK 來判斷,避免了數(shù)據(jù)包偶然丟包造成的誤判;丟失節(jié)點執(zhí)行自治愈過程中的所有操作都是針對節(jié)點自身的,無須路由其他正常節(jié)點的任何其他操作,不會造成其他正常節(jié)點能量的額外消耗;節(jié)點執(zhí)行治愈操作過程中,當預設的15 次達到時,若沒有實現(xiàn)自治愈,則終止此次操作,等待下次執(zhí)行,不會因程序無休止的運行造成節(jié)點電量的快速耗盡。
本文提出的方法通過TinyOS 的nesC 編程實現(xiàn),主要有以下組件和接口:
ClockSyncP 組件實現(xiàn)節(jié)點同步的判定,并創(chuàng)建和提供SyncCheck 接口以傳遞同步標志參數(shù);
核心AppC 組件調(diào)用ClockSyncP 組件中的SyncCheck接口判斷節(jié)點同步狀態(tài);通過TaskSyncP 組件提供的TaskSync 接口控制休眠參數(shù)實現(xiàn)休眠周期的修改;
TaskSyncP 組件創(chuàng)建TaskSync 接口用以修改休眠參數(shù)。
1)測試條件:15 個傳感節(jié)點2#~16#與一個網(wǎng)關(1#)組成的休眠周期10 min(計數(shù)器誤差導致非標準的10 min),工作時間30 s 的WSNs,網(wǎng)關與裝有上位機軟件的PC 通信。
2)測試內(nèi)容:網(wǎng)絡節(jié)點分布實驗區(qū)域,其中2#~15#節(jié)點正常,16#節(jié)點在工作4 個周期后內(nèi)部時鐘延時5 min,使其時間不同步。組網(wǎng)成功后觀測16#節(jié)點及其父節(jié)點的上傳數(shù)據(jù)的時間、周期信息,并用TI 的SmartRF Packet Sniffer抓包工具監(jiān)測16#節(jié)點的活動狀態(tài),檢驗其在內(nèi)部時鐘產(chǎn)生時延后的狀態(tài)變化,判斷自治愈方法的實現(xiàn)。
3)測試結果與分析:組網(wǎng)成功后通過上位機解析節(jié)點數(shù)據(jù)得到網(wǎng)絡的拓撲結構如圖4。
圖4 網(wǎng)絡的拓撲結構Fig 4 Topological structure of WSNs
該WSNs 形成5 跳的網(wǎng)絡,其中16#節(jié)點通過8#節(jié)點上傳節(jié)點數(shù)據(jù),上位機軟件接收數(shù)據(jù),觀察16#節(jié)點數(shù)據(jù)曲線截圖如圖5,16#節(jié)點的父節(jié)點8#節(jié)點數(shù)據(jù)曲線如圖6。
圖5 16#節(jié)點的數(shù)據(jù)變化曲線Fig 5 Curve of data change of node 16#
圖6 8#節(jié)點的數(shù)據(jù)變化曲線Fig 6 Curve of data change of node 8#
8#節(jié)點與其他節(jié)點正常工作,周期為10 min,16#節(jié)點17:00 組網(wǎng)成功后4 次上傳數(shù)據(jù)后,內(nèi)部時鐘延時5 min,在17:45 與17:55 左右喚醒時其他節(jié)點為休眠狀態(tài),數(shù)據(jù)信息無法上傳,上位機沒有該節(jié)點數(shù)據(jù)而無法顯示。在此期利用Packet Sniffer 觀測該節(jié)點4 次及以后的活動狀態(tài)如圖7。
圖7 16#節(jié)點活動狀態(tài)Fig 7 Active state of node 16#
前兩組數(shù)據(jù)時間差約900 s,即16#節(jié)點因延時在17:44進入工作狀態(tài),其他節(jié)點處于休眠狀態(tài);600 s 后(17:54)該節(jié)點再次進入工作狀態(tài),其他節(jié)點依然為休眠狀態(tài);由于連續(xù)2 個周期未收到同步信號,節(jié)點進入自治愈過程:接下來每隔60 s 左右節(jié)點都活動一次,持續(xù)5 次后,在17:59,由于全網(wǎng)節(jié)點進入工作狀態(tài),此時16#節(jié)點收到同步信號,恢復10 min 的休眠周期。從上位機接收到的數(shù)據(jù)與Packet Sniffer的節(jié)點信號分析可知,16#節(jié)點實現(xiàn)了節(jié)點信息丟失后再入網(wǎng)、再同步,與設計思路達成一致。
本文設計了一種休眠機制下WSNs 的自治愈方法,成功地應用在基于TinyOS 的CC2530 的硬件平臺上。該方法實現(xiàn)了傳感節(jié)點根據(jù)工作期間監(jiān)測自身的時間同步狀態(tài)調(diào)整休眠周期,通過加快自身工作頻率主動尋找網(wǎng)絡其他節(jié)點以實現(xiàn)再入網(wǎng)、再同步,達到了同步失效節(jié)點的網(wǎng)絡自治愈的目的,提高了系統(tǒng)的穩(wěn)定性和可靠性。此方法可廣泛的應用于基于TinyOS 平臺的WSNs,以實現(xiàn)WSNs 的長期穩(wěn)定運行和免維護的目的。
[1] Akyildiz I F,Su W,Sankarasubramaniam Y,et al.A survey on sensor networks[J].IEEE Communication Magazine,2002,40(8):102-114.
[2] 姜連祥,汪小燕.無線傳感器網(wǎng)絡硬件設計綜述[J].單片機與嵌入式系統(tǒng)應用,2006(11):13-16.
[3] Hu A.Cooperative time synchronization using spatial averaging[D].Cornell:Cornell University,2007.
[4] 劉邵華,黃廷磊,夏 鋒.一種基于AODV 路由協(xié)議改進的無線Mesh 路由協(xié)議[J].微型機與應用,2013,32(4):54-57.
[5] 徐朝農(nóng),徐勇軍,李曉維.無線傳感器網(wǎng)絡時間同步新技術[J].計算機研究與發(fā)展,2008,45(1):138-145.
[6] 牟金平,周武能,王天波,等.無線傳感器網(wǎng)絡在休眠—喚醒機制下的目標同步[J].計算機仿真,2012,29(3):21-24.
[7] 劉林峰,吳家皋,鄒志強,等.面向節(jié)點失效問題的無線傳感器網(wǎng)絡拓撲自愈算法[J].東南大學學報:自然科學版,2009,39(4):695-699.
[8] 潘 浩.無線傳感器網(wǎng)絡操作系統(tǒng)TinyOS[M].北京:清華大學出版社出版,2011:3-17.
[9] 張 學,陸桑璐,陳貴海,等.無線傳感器網(wǎng)絡的拓撲控制[J].軟件學報,2007,18(4):943-954.
[10]Sundararaman B,Buy U,Kshemkalyani A D.Clock synchronization for wireless sensor networks:A survey[J].Ad Hoc Networks,2005,3(3):281-323.
[11]楊白薇,于宏毅,李 宏.基于協(xié)作的無線傳感器網(wǎng)絡休眠調(diào)度算法[J].計算機應用研究,2008,25(3):677-680.