周艷平,馬維軍
(青島科技大學 信息科學技術學院,山東 青島 266061)
ZigBee技術作為時下新興的近距離無線傳感網絡通信技術,具有距離短、功耗低、成本低和自組網等優(yōu)點,在工農業(yè)、軍事、醫(yī)療和環(huán)境監(jiān)測領域有著普遍的應用[1-3]。近年來溫室大棚因其突破地域、季節(jié)、氣候等因素的限制,在我國得到廣泛的推廣[4]。但傳統(tǒng)的溫室大棚生產效率低,人力成本高,網絡和信息技術的發(fā)展為溫室大棚供了新的方向[5]。
本文設計了一種改進ZigBee路由算法,解決了ZigBee網絡中由于RREQ分組洪泛而導致的能量過度損耗和節(jié)點失效的問題,結合改進的ZigBee路由算法設計了溫室監(jiān)控無線網絡,實現了溫室內農作物生長參數的實時采集、遠程監(jiān)測和控制功能。
ZigBee聯盟將ZigBee網絡中的節(jié)點分為協(xié)調器節(jié)點(coordinator)、路由器節(jié)點(router)和終端節(jié)點(end device)[6]。IEEE802.15.4標準從設備完整性的角度出發(fā),將ZigBee網絡中的設備分成全功能型(FFD)和精簡功能型(RFD)。ZigBee網絡中的協(xié)調器負責發(fā)起和建立網絡且協(xié)調器只能由FFD充任,終端節(jié)點既可以由FFD充任也可以由RFD充任。ZigBee網絡分成星型網(star)、網狀網(Mesh)和簇樹型(cluster-tree)3種網絡拓撲結構。星型網絡的終端節(jié)點以協(xié)調器為中心呈星型分布,終端節(jié)點必須處于協(xié)調器的通信范圍之內,致使星型網絡的通信范圍過小。網狀網絡中各節(jié)點之間可以直接或間接的進行通信,具有高可靠性和高冗余性的特點,但網狀網絡的拓撲結構復雜,路由開銷大。簇樹型網絡是一種分層次的網絡拓撲結構,吸收了星型網絡和網狀型網絡的優(yōu)點,可擴展性強,得到了廣泛應用。
ZigBee網絡中的節(jié)點具有一個16位的網絡地址和一個64位IEEE地址,64位IEEE地址具有唯一性,16位的網絡地址由父節(jié)點予以分配。ZigBee網絡采用DAAM分布式地址分配機制[7]。在DAAM分布式地址分配機制中,定義Cskip(d)函數用于計算父節(jié)點為子節(jié)點分配的地址偏移量,公式如下:
(1)
其中:d表示父節(jié)點深度,Cm代表每個父節(jié)點能擁有的至多子節(jié)點的個數,Lm代表網絡的最大深度,Rm代表父節(jié)點能擁有的至多路由器節(jié)點的數量[8-9]。不同類型的節(jié)點分配地址的方式也不同。ZigBee協(xié)調器節(jié)點地址為0x00,新加入的節(jié)點按照加入順序地址深度依次加1,若新加入的節(jié)點是終端節(jié)點,其父節(jié)點通過式(2)計算節(jié)點的地址;若新加入的節(jié)點是路由器節(jié)點,其父節(jié)點通過式(3)計算節(jié)點的地址。
An=Aparent+Cskip(d)×Rm+n
(2)
An=Aparent+(n-1)×Cskip(d)+1
(3)
在ZigBee網絡中,每一個具有路由能力的節(jié)點都會維護一個在其一跳通信范圍內的鄰居表。在ZigBee協(xié)議中規(guī)定,鄰居表包含了在其一跳范圍內ZigBee節(jié)點的所有信息且其記錄的內容會因為網絡內節(jié)點的變化而保持實時更新。鄰居表的實時更新有利于及時獲取相鄰節(jié)點信息,選擇符合通信要求的節(jié)點。鄰居表中記錄的內容不是固定的,可根據需要在鄰居表中添加一些特定的參數信息。
目前在ZigBee網絡常用的路由算法有Cluster-Tree路由算法和AODVjr路由算法。
Cluster-Tree路由算法基于ZigBee地址分配機制計算下一跳節(jié)點的16位網絡短地址,在傳輸方向上按照樹形結構向上或向下傳輸。在 Cluster- Tree算法中,結合式(4)辨別目的節(jié)點是否為自己的后代,根據式(5)計算出下一跳的地址,并將數據轉發(fā)至下一跳節(jié)點。Cluster-Tree路由算法傳輸效率低,且選擇的傳輸路徑不一定是最優(yōu)路徑,接近協(xié)調器的節(jié)點容易因能量低而脫離網絡,致使網絡癱瘓。
A (4) (5) AODVjr算法是一種按需分配的路由協(xié)議,規(guī)定只有目的節(jié)點能發(fā)送路由應答分組(RREP),刪除了先驅節(jié)點列表以及hello分組。AODVjr算法路由發(fā)現過程如圖1所示。在前向路由建立的過程中,節(jié)點在接收到RREQ后,選擇跳數較少的RREQ并更新節(jié)點路由信息,直至目的節(jié)點接收到RREQ。目的節(jié)點在接收到RREQ分組之后,選擇跳數較少的路徑向源節(jié)點發(fā)送RREP分組來創(chuàng)建反向路由[10]。源節(jié)點收到RREP之后,準備進行數據的傳輸。 AODVjr路由算法在路由發(fā)現過程中對RREQ分組的廣播范圍和廣播方向沒有限制,當網絡規(guī)模較大時容易引起廣播風暴,增加節(jié)點的能耗[11]。 圖1 路由發(fā)現過程示意圖 針對 ZigBeeCluster- Tree算法和 AODVjr算法中存在的問題,提出一種優(yōu)化的 ZigBee路由算法,該算法以 AODVjr算法為基礎,結合 Cluster- Tree算法,對 RREQ分組的廣播過程進行限制,并從節(jié)點的剩余能量值和鏈路質量入手,對ZigBee路由算法進行改進。 在ZigBee網絡中,越靠近協(xié)調器的節(jié)點,數據轉發(fā)量越大,需要對節(jié)點的剩余能量值進行估量,防止網絡分割現象的出現。可運用下式對節(jié)點的剩余能量值進行估量: (6) 其中:Emin表示節(jié)點最小剩余能量值,t表示網絡運行時間,energy表示節(jié)點初始能量,dj表示節(jié)點深度,為特定系數用于減緩Emin衰減的速度。 在ZigBee中規(guī)定的鏈路質量指示(link quality indicator, LQI)用于計量接收到的數據幀的強度與質量,衡量通信過程中數據包的丟失情況。LQI的值可以通過下式計算得到。 (7) 其中:n表示環(huán)境衰減因子,d表示節(jié)點之間的間隔,A表示節(jié)點發(fā)射端和接收端間隔1米時的信號強度。LQI的取值在0x00~0xFF之間,當LQI的值大于0x4B時,表明節(jié)點接收到的數據幀的強度與質量滿足通信要求,當LQI的值低于0x32時,節(jié)點接收到的數據幀的強度和質量較差,數據包的多次重傳導致節(jié)點能量消耗加劇[12-13]。 在Cluster-Tree算法中,網絡最大深度的2倍即2 Lm是可能存在的最大路徑,故在優(yōu)化算法中設置RREQ分組的最大廣播范圍為2 Lm。結合Cluster-Tree路由算法辨別目的節(jié)點是不是自己的子孫節(jié)點來控制RREQ分組的廣播方向。在 RREQ分組中設置標記位 Flag, Flag=0則接收到 RREQ的節(jié)點的子孫節(jié)點不廣播該 RREQ, Flag=1則接收到該 RREQ分組的節(jié)點的父節(jié)點不廣播該 RREQ分組。在路由節(jié)點中添加一個變量Power表示節(jié)點可用的能量值。 改進算法流程如下: 1)源節(jié)點為終端節(jié)點時,由父節(jié)點廣播終端節(jié)點的數據。 2)源節(jié)點為路由節(jié)點且其鄰居表內未記錄目的節(jié)點地址,則啟動路由發(fā)現過程,并根據式5)設置Flag值。 3)在路由發(fā)現階段,中間節(jié)點B在接收到節(jié)點A的RREQ分組之后,檢查RREQ分組的轉發(fā)次數(Hops)以及中間節(jié)點自身的剩余能量值(Power)和鏈路質量(LQI)。 4)如果Hops>2Lm,節(jié)點B丟棄該分組;如果Power 5)中間節(jié)點查詢鄰居表中是否記錄該目的節(jié)點,若有記錄,中間節(jié)點直接將RREQ分組發(fā)送給該鄰居節(jié)點。否則Flag=0時,若節(jié)點B是節(jié)點A的子節(jié)點,節(jié)點B不廣播該RREQ。若節(jié)點B是A的父節(jié)點,且目的節(jié)點是節(jié)點B的子孫節(jié)點,節(jié)點B在設置Flag=1,Hops加1后廣播RREQ分組并替換Power值;如果目的節(jié)點不是節(jié)點B的子孫節(jié)點,則節(jié)點B保持Flag值不變,替換Power值和Hops值之后,轉發(fā)RREQ分組。 Flag=1時,若節(jié)點B是節(jié)點A的父節(jié)點,節(jié)點B不廣播該RREQ分組。若節(jié)點B是節(jié)點A的子節(jié)點,且目的節(jié)點不是節(jié)點B的子孫節(jié)點,則節(jié)點B不廣播該RREQ分組;若目的節(jié)點是節(jié)點B的子節(jié)點,節(jié)點B保持Flag值不變,更新Power值和Hops之后,廣播RREQ分組。 6)目的節(jié)點在接收到RREQ之后,按照RREQ的廣播路徑向源節(jié)點發(fā)送RREP。源節(jié)點收到后,按照該路徑傳輸數據。 為了評估改進后的路由算法的性能,在NS2仿真軟件中從網絡剩余能量、分組投遞率以及網絡節(jié)點死亡數量3個方面設置仿真實驗,對改進算法和傳統(tǒng)算法進行仿真。 在仿真實驗中,設置網絡范圍為100 m*100 m,網絡參數Cm=5,Lm=6,Rm=4,數據包長度為128 bits,節(jié)點的初始能量值為1 500 J,采用 CBR作為數據信息源,在分析網絡剩余能量和分組投遞率時,分別設置節(jié)點數量為10~100個不同的網絡環(huán)境下進行仿真,在分析網絡節(jié)點死亡率時,設置節(jié)點數量為100。仿真實驗結果如圖2~4所示。 圖2 網絡剩余能量百分比對比圖 圖3 分組投遞率對比圖 圖4 網絡節(jié)點死亡率對比圖 根據NS2仿真實驗得出的結果,從網絡剩余能量、分組投遞率以及網絡死亡節(jié)點數量3個方面對仿真結果進行分析。 網絡剩余能量百分比的值越高表明網絡的剩余能量值越高,網絡的能量損耗也就越低,網絡的生命周期也就越長。該值可以通過網絡剩余能量值和網絡初始能量值計算得到。分組投遞率是接收數據分組與投遞數據分組總數的比值,體現了節(jié)點間的LQI,是衡量網絡傳輸性能的關鍵指標。 從圖2可以看出,節(jié)點數量的逐步增多,導致網絡剩余能量百分比逐漸降低。改進的路由算法由于在路由發(fā)現階段對 RREQ分組的廣播范圍進行限制,減少了不必要的能量損耗,同時能量較低的節(jié)點不參與 RREQ分組廣播,有效了節(jié)省了網絡的整體耗能。 從圖3中可以看出,由于改進的路由算法對RREQ分組的廣播范圍進行限制并選擇LQI值符合要求的節(jié)點,使得分組投遞率得到提高。 從圖4可以看出,在網絡運轉的前期,由于節(jié)點能量充裕,節(jié)點死亡率為零,隨著網絡的運轉,部分節(jié)點因頻繁進行數據轉發(fā)和數據接收,導致節(jié)點能量耗盡,節(jié)點死亡率逐漸升高。優(yōu)化的 ZigBee路由算法從節(jié)點的剩余能量值入手,數據不廣播給剩余能量值較低的節(jié)點,死亡節(jié)點出現的時間較晚且節(jié)點死亡率低于傳統(tǒng)的路由算法,顯著的提高了網絡的運行周期。 結合圖2~4的仿真結果及以上分析,可以看出優(yōu)化算法能夠達到預期效果。 結合改進的ZigBee路由算法,設計了一種基于ZigBee技術的溫室監(jiān)控無線網絡,無線網絡采用樹型拓撲結構,在每個溫室內設置一個路由節(jié)點和十至二十個終端節(jié)點。 溫室監(jiān)控無線網絡由監(jiān)控終端、ZigBee網關以及上位機數據監(jiān)控中心三部分構成,網絡架構如圖5所示。監(jiān)控終端包括路由節(jié)點、采集及控制節(jié)點。路由節(jié)點負責存儲和轉發(fā)采集節(jié)點采集的數據,并將控制指令轉發(fā)給控制節(jié)點。采集節(jié)點和控制節(jié)點由ZigBee通信模塊和特定的傳感器組成,負責采集和控制溫室內的環(huán)境參數(包括溫濕度、CO2濃度和光照強度等)。 ZigBee網關是溫室監(jiān)控無線網絡的核心,由 ZigBee協(xié)調器和 STM32微控制器兩部分組成,負責建立和維護無線網絡,接收采集節(jié)點發(fā)送的數據,將數據格式轉換之后發(fā)送至上位機數據監(jiān)控中心,同時將上位機數據監(jiān)控中心發(fā)送的指令轉發(fā)給終端節(jié)點。 圖5 溫室監(jiān)控無線網絡架構 ZigBee網關由ZigBee協(xié)調器和STM32微型控制器組成。 STM32微控制器選用 ALIENTEK戰(zhàn)艦 STM32 F103開發(fā)板,以ARM Cortrex- M3為內核,CPU工作頻率最高可達72 MHz,板載十多種標準接口和豐富的片上資源,板載的 DM9000網絡接口芯片通過1個100 M以太網接口( RJ45)實現連接互聯網和數據的遠程傳輸功能。 ZigBee協(xié)調器選擇 CC2530芯片,它是一種支持 IEEE802.15.4、 ZigBee和 RF4 CE應用的片上系統(tǒng)( SOC)解決方案,具有無線射頻模塊,集成RF收發(fā)器功能,是一種增強型的8051CPU,能夠以極低的功耗和極低的成本建立起強大的無線傳感器網絡[14-15]。ZigBee網關硬件結構如圖6所示。 圖6 ZigBee網關硬件結構 軟件設計部分需要對溫室監(jiān)控無線網絡中的3種ZigBee節(jié)點的通信模塊移植 Z- stack協(xié)議棧,它是 TI公司推出的 ZigBee無線通訊協(xié)議,定義了 OSAL操作系統(tǒng)并管理和調度 ZigBee網絡中各層定義的協(xié)議,并提供 API接口函數,方便用戶調用。根據Z-stack協(xié)議棧分別為協(xié)調器節(jié)點、終端節(jié)點和路由節(jié)點設計程序。 圖7 ZigBee網關軟件流程 ZigBee網關是連接上位機數據監(jiān)控中心和監(jiān)控終端的橋梁。它既要保證節(jié)點正常工作,也要建立起與上位機數據監(jiān)控中心的通信功能。 ZigBee網關在建立網絡并處理完入網請求后,檢查是否接收到指令數據和采集節(jié)點傳回的環(huán)境數據并對指令及時作出響應,ZigBee網關軟件流程如圖7所示。路由節(jié)點在運行過程中只負責進行數據和控制指令的存儲和轉發(fā)。路由器節(jié)點在上電初始化后,檢測是否有新節(jié)點加入網絡,接收終端節(jié)點發(fā)送的數據并將其轉發(fā)至 ZigBee網關,同時將 ZigBee網關發(fā)送的控制指令轉發(fā)至終端節(jié)點。終端節(jié)點包括采集節(jié)點和控制節(jié)點,采集節(jié)點將定時采集到的環(huán)境數據發(fā)往ZigBee網關,控制節(jié)點接收到控制指令后,解析指令并運行相應的控制設備。終端節(jié)點采取休眠-喚醒的機制,喚醒期間節(jié)點接收指令并執(zhí)行相應的采集和控制操作。終端節(jié)點的休眠時間可結合實際情況調節(jié),終端節(jié)點程序流程圖如圖8所示。 圖8 終端節(jié)點軟件流程 本文提出了一種優(yōu)化的ZigBee路由算法并將其應用在溫室監(jiān)控無線網絡中。改進的算法通過控制 RREQ分組的廣播范圍和廣播方向,選擇節(jié)點剩余能量和 LQI值較優(yōu)的節(jié)點廣播,從仿真圖像中可以看出,優(yōu)化的算法有效地降低了 ZigBee網絡的能耗,提高了 ZigBee網絡的運行時間。改進的ZigBee路由算法成功應用于溫室監(jiān)控無線網絡中,該改進算法和監(jiān)控無線網絡也可以在相關領域中應用。
2 改進ZigBee路由算法
2.1 改進算法思路
2.2 改進算法流程
2.3 改進算法仿真



2.4 實驗結果與分析
3 溫室監(jiān)控無線網絡設計
3.1 硬件設計


3.2 軟件設計


4 結束語