文獻標(biāo)識碼: B
文章編號: 0258-7998(2012)10-0122-04
隨著計算機技術(shù)和無線通信技術(shù)的快速發(fā)展,各種智能化產(chǎn)品不斷涌現(xiàn),其中無線傳感器網(wǎng)絡(luò)WSN(Wireless Sensor Networks)[1]具有無線通信、感知、協(xié)作等特點,并很快融入到生活的方方面面。在大型超市、高檔小區(qū)、辦公樓里常常需要適時監(jiān)測區(qū)域環(huán)境內(nèi)的溫度、濕度及有毒氣體的濃度,以保障生命財產(chǎn)安全。傳統(tǒng)的環(huán)境監(jiān)測系統(tǒng)布線煩瑣,消耗人力。ZigBee技術(shù)作為一種新興的短距離無線傳感器網(wǎng)絡(luò)通信標(biāo)準,具有低功耗、低延遲、自組織等優(yōu)點[2],因而廣泛應(yīng)用到生產(chǎn)、生活領(lǐng)域,市場前景非常廣闊。
ZigBee標(biāo)準基于IEEE 802.15.4低速率無線個人局域網(wǎng),支持介質(zhì)訪問控制層和物理層標(biāo)準,并在此之上包含網(wǎng)絡(luò)層、安全層和應(yīng)用層,具備很強的設(shè)備聯(lián)網(wǎng)能力,它支持網(wǎng)狀結(jié)構(gòu)、星狀結(jié)構(gòu)及樹狀結(jié)構(gòu)三種自組織無線網(wǎng)絡(luò)拓撲類型結(jié)構(gòu)[3]。本文基于ARM9控制平臺實現(xiàn)了傳感器網(wǎng)絡(luò)信息的實時顯示和ZigBee節(jié)點設(shè)備的控制。該無線傳感器網(wǎng)絡(luò)室內(nèi)環(huán)境遠程監(jiān)控平臺,以ZigBee芯片CC2530作為傳感器節(jié)點控制和無線通信芯片,實現(xiàn)溫度、濕度和氣壓等環(huán)境信息的感知。
1 系統(tǒng)方案設(shè)計
控制平臺基于WSN技術(shù)和嵌入式技術(shù),借鑒了國內(nèi)外優(yōu)秀環(huán)境監(jiān)測研究經(jīng)驗,設(shè)計了基于CC2530芯片采集傳感器數(shù)據(jù)的ZigBee無線網(wǎng)絡(luò)和基于ARM9的網(wǎng)絡(luò)控制臺。
1.1 系統(tǒng)總體功能介紹
本系統(tǒng)實現(xiàn)圖形化網(wǎng)絡(luò)拓撲結(jié)構(gòu)的動態(tài)構(gòu)建和管理,以及圖形化控制ZigBee節(jié)點設(shè)備;支持多跳網(wǎng)絡(luò);支持外界環(huán)境狀態(tài)信息感知,傳感器數(shù)據(jù)精確采集、無線傳輸和顯示,當(dāng)環(huán)境信息超過臨界值時報警等功能。
1.2 系統(tǒng)框架設(shè)計
系統(tǒng)由ARM控制臺模塊、基于ZigBee的無線傳感器網(wǎng)絡(luò)通信模塊及網(wǎng)關(guān)模塊三個主體部分構(gòu)成,系統(tǒng)框架結(jié)構(gòu)如圖1所示。
控制臺模塊采用ARM9芯片作為處理器,基于Linux操作系統(tǒng),搭配自制底板作為控制臺軟件運行環(huán)境,采用QT-4.5.3作為應(yīng)用程序開發(fā)框架進行控制臺軟件開發(fā)。
無線傳感器網(wǎng)絡(luò)通信模塊采用基于IEEE 802.15.4標(biāo)準的ZStack-CC2530協(xié)議棧開發(fā),完成ZigBee網(wǎng)絡(luò)建立、維護以及傳感器數(shù)據(jù)采集、節(jié)點控制等功能。傳感器節(jié)點由ZigBee節(jié)點融合傳感器構(gòu)成。
(1) ZigBee節(jié)點。包括協(xié)調(diào)器節(jié)點,路由器節(jié)點和終端節(jié)點,采用ZigBee芯片CC2530自主設(shè)計和繪制電路圖以及外圍硬件電路。CC2530是一款SoC芯片,集成了處理器、無線電和串口等外設(shè)。
(2) 傳感器。包括溫濕度傳感器,振動傳感器及壓力傳感器等,用于對環(huán)境狀態(tài)信息的動態(tài)感知。
網(wǎng)關(guān)模塊采用集成于ARM平臺的串行口,通過UART方式連接ZigBee協(xié)調(diào)器與控制臺,根據(jù)預(yù)定的幀進行通信。上行和下行的數(shù)據(jù)都通過網(wǎng)關(guān)在網(wǎng)絡(luò)上傳輸,由其負責(zé)數(shù)據(jù)包的解析和轉(zhuǎn)發(fā)。
1.3 系統(tǒng)通信協(xié)議及數(shù)據(jù)格式設(shè)計
本系統(tǒng)在控制臺與ZigBee協(xié)調(diào)器之間,使用UART傳輸數(shù)據(jù);在ZigBee網(wǎng)絡(luò)節(jié)點之間都按照ZigBee協(xié)議實現(xiàn)通信??刂婆_、網(wǎng)關(guān)、ZigBee網(wǎng)絡(luò)之間按照約定的數(shù)據(jù)幀格式進行數(shù)據(jù)包傳遞,幀結(jié)構(gòu)由幀頭、數(shù)據(jù)負載、幀尾三部分組成,如圖2所示。
(1) 1 B的幀頭0XFB和1 B的幀尾0XFE。
(2) 1 B的幀長度和1 B的幀負載屬性。
(3) 多個字節(jié)的業(yè)務(wù)負載數(shù)據(jù),ZigBee網(wǎng)絡(luò)中的數(shù)據(jù)業(yè)務(wù)主要有節(jié)點設(shè)備描述符、節(jié)點設(shè)備數(shù)據(jù)、狀態(tài)和控制業(yè)務(wù)。
節(jié)點設(shè)備描述符用于描述當(dāng)前ZigBee節(jié)點的短地址、長地址,以及節(jié)點所掛載的傳感器類型和數(shù)目;節(jié)點設(shè)備數(shù)據(jù)為傳感器實時采集的環(huán)境數(shù)據(jù);狀態(tài)和控制業(yè)務(wù)為用戶發(fā)出指令。
2 無線傳感器網(wǎng)絡(luò)程序設(shè)計
無線傳感器網(wǎng)絡(luò)基于ZStack-CC2530-2.2.0-1.3.0開發(fā),實現(xiàn)了ZigBee網(wǎng)絡(luò)的構(gòu)建,內(nèi)部使用小型操作系統(tǒng)OSAL[3],實現(xiàn)任務(wù)和消息的管理。數(shù)據(jù)采集和傳輸由自定義傳感器數(shù)據(jù)采集任務(wù)在應(yīng)用層登記串口消息后,交由OSAL管理完成。
2.1 傳感器數(shù)據(jù)采集與傳輸程序設(shè)計
本文所述的網(wǎng)絡(luò)是由協(xié)調(diào)器、路由器和終端節(jié)點構(gòu)成的樹狀網(wǎng)絡(luò)。協(xié)調(diào)器節(jié)點建立網(wǎng)絡(luò),其他節(jié)點則主動尋找連接協(xié)調(diào)器的最小代價路由[3]。所有節(jié)點上電之初將發(fā)送節(jié)點的設(shè)備描述符,并周期上傳節(jié)點在線狀態(tài)信息。終端節(jié)點采集傳感器數(shù)據(jù)經(jīng)路由器轉(zhuǎn)發(fā)至協(xié)調(diào)器。
2.2 串口數(shù)據(jù)傳輸程序設(shè)計
串口作為命令和數(shù)據(jù)傳輸接口,協(xié)議棧默認登記在MT層[4],本系統(tǒng)將串口消息登記到應(yīng)用層,并在應(yīng)用層完成處理。初始化串口并注冊好回調(diào)函數(shù)后,當(dāng)串口接收緩沖非空時,就會觸發(fā)系統(tǒng)消息事件?;卣{(diào)函數(shù)首先檢測串口命令的起始標(biāo)識,獲得起始標(biāo)識后,按照系統(tǒng)定義的串口命令格式讀取緩沖區(qū),同時填充到預(yù)先分配的結(jié)構(gòu)內(nèi)存區(qū)間。結(jié)束標(biāo)識用于校驗該串口命令是否發(fā)生誤操作、誤傳輸。若傳輸正確,則將串口命令按照定義的消息格式登記到應(yīng)用層處理。
3 控制臺軟件程序設(shè)計
控制臺主要由網(wǎng)關(guān)通信功能塊、網(wǎng)絡(luò)拓撲控制與顯示功能塊,設(shè)備控制與顯示功能塊構(gòu)成,實現(xiàn)人機交互,實現(xiàn)對設(shè)備的控制和對數(shù)據(jù)的處理、顯示。
3.1 控制臺總體結(jié)構(gòu)介紹
控制臺有4個功能界面,分別為網(wǎng)絡(luò)拓撲主界面、設(shè)備列表界面、全局控制界面及設(shè)備控制界面。各界面之間彼此聯(lián)系、共享數(shù)據(jù),總體框架如圖3所示。
3.2 控制臺功能設(shè)計
控制臺實現(xiàn)兩方面的功能:(1)處理來自網(wǎng)關(guān)模塊的數(shù)據(jù),根據(jù)節(jié)點描述符完成ZigBee網(wǎng)絡(luò)拓撲結(jié)構(gòu)動態(tài)構(gòu)建和節(jié)點狀態(tài)信息動態(tài)直觀展示,并根據(jù)傳感器數(shù)據(jù)動態(tài)顯示相應(yīng)信息。(2)接收用戶指令,發(fā)送相應(yīng)的控制數(shù)據(jù)包給網(wǎng)關(guān)模塊,并轉(zhuǎn)發(fā)至ZigBee協(xié)調(diào)器,完成對設(shè)備的精確控制,如打開、關(guān)閉設(shè)備,控制采集頻率等。
圖3中網(wǎng)絡(luò)拓撲主界面用于ZigBee網(wǎng)絡(luò)拓撲結(jié)構(gòu)動態(tài)構(gòu)建和節(jié)點狀態(tài)信息動態(tài)展示;設(shè)備列表界面展示每個ZigBee節(jié)點上傳感器硬件信息;全局控制界面針對特定ZigBee節(jié)點進行整體控制;設(shè)備控制界面區(qū)別于全局控制界面,用來控制ZigBee節(jié)點上指定標(biāo)簽的傳感器設(shè)備。
3.3 通信網(wǎng)關(guān)程序設(shè)計
網(wǎng)絡(luò)通信接口作為網(wǎng)關(guān),負責(zé)ZigBee網(wǎng)絡(luò)協(xié)調(diào)器與控制臺軟件之間數(shù)據(jù)包的解包與封包,并按照數(shù)據(jù)幀結(jié)構(gòu)進行通信。通過串口連接實現(xiàn)數(shù)據(jù)接收和發(fā)送。
通信網(wǎng)關(guān)結(jié)構(gòu)如圖4所示,網(wǎng)關(guān)不僅負責(zé)將上位機接收到的用戶下行命令封包,并遞送到ZigBee協(xié)調(diào)器,并轉(zhuǎn)發(fā)到相應(yīng)無線節(jié)點,而且還負責(zé)ZigBee網(wǎng)絡(luò)上行數(shù)據(jù)包的解包,并遞送到控制臺。
由于ZigBee網(wǎng)絡(luò)數(shù)據(jù)包接收速率和控制臺處理速率之間不匹配,本系統(tǒng)采用循環(huán)隊列對數(shù)據(jù)進行緩沖,以匹配兩端數(shù)據(jù)速率的不平衡。讀、寫循環(huán)隊列函數(shù)采用多線程實現(xiàn),線程一實現(xiàn)讀取串口數(shù)據(jù)并寫入隊列;線程二實現(xiàn)讀取循環(huán)隊列數(shù)據(jù)交由控制臺處理。線程之間利用互斥鎖和條件對臨界區(qū)進行保護,以實現(xiàn)同步。通過信號來喚醒。程序主體部分由一個主進程負責(zé)維護兩個子線程,兩個子線程分別對循環(huán)隊列進行讀寫操作。環(huán)形緩沖區(qū)以互斥鎖實現(xiàn)單生產(chǎn),單消費模式,可有效節(jié)省空間,提高數(shù)據(jù)的處理速度。
在無線傳輸過程中可能發(fā)生丟包或者亂碼。產(chǎn)生丟包則網(wǎng)關(guān)讀取的數(shù)據(jù)不是完整的一幀;而出現(xiàn)亂碼則雖然收到完整的一幀數(shù)據(jù),但是其中部分字節(jié)已經(jīng)出現(xiàn)錯誤。只有當(dāng)收到數(shù)據(jù)為完整的數(shù)據(jù)幀并且無亂碼時,才能調(diào)用解析函數(shù)進行解析。
針對傳輸中的丟包和亂碼,網(wǎng)關(guān)模塊使用了兩種數(shù)據(jù)校驗方法:一種是幀頭、幀尾檢測法,用于驗證完幀的完整性;另一種為增加校驗碼法,用于檢驗數(shù)據(jù)包是否發(fā)生丟包。
網(wǎng)關(guān)程序流程如圖5所示,圖中由主進程產(chǎn)生兩個子線程,主進程運行run_module,負責(zé)初始化,包括打開串口,設(shè)置循環(huán)隊列,產(chǎn)生子線程等。由主進程產(chǎn)生的兩個子線程分別為寫線程write_rs232和讀線程read_rs232。寫線程讀取串口的數(shù)據(jù),并將數(shù)據(jù)存儲到循環(huán)隊列中,讀線程從循環(huán)隊列讀取并解析數(shù)據(jù)。如果寫線程有數(shù)據(jù),將會使讀線程阻塞并等待寫線程完畢,讀線程讀取數(shù)據(jù)后也會發(fā)送信號到阻塞的寫線程,采用互斥鎖和條件變量的同步方式保護了共享數(shù)據(jù)區(qū)不被破壞,實現(xiàn)了數(shù)據(jù)同步。
3.4 網(wǎng)絡(luò)拓撲控制與顯示程序設(shè)計
網(wǎng)絡(luò)拓撲控制與顯示功能部分對來自ZigBee網(wǎng)絡(luò)的數(shù)據(jù),裁決模塊將根據(jù)最近30 s收到的傳感器節(jié)點信息來判定某ZigBee節(jié)點是否掉線,掉線或復(fù)活都將重構(gòu)網(wǎng)絡(luò)拓撲圖,并更新全局存儲區(qū)。
在網(wǎng)絡(luò)拓撲頁設(shè)置周期2 s的定時器QTimer,用于周期更新網(wǎng)絡(luò)拓撲結(jié)構(gòu)。時間到,則提取共享存儲區(qū)中的全局變量,檢測是否存在超出30 s還未向控制臺報告存活狀態(tài)信息的節(jié)點。若存在,則初始化這樣的ZigBee節(jié)點為灰色,并失活此節(jié)點,如果再次檢測到該節(jié)點上線,則恢復(fù)其缺省顏色并激活。采用另一個共享內(nèi)存區(qū)存儲網(wǎng)絡(luò)結(jié)構(gòu),提高網(wǎng)絡(luò)拓撲顯示速度,若網(wǎng)絡(luò)拓撲有變動,則更新此共享區(qū)。
本平臺采用的設(shè)備描述符包含64 bit長地址,避免了因個別節(jié)點死掉后重新上線,而協(xié)調(diào)器將重新分配短地址避免導(dǎo)致網(wǎng)絡(luò)拓撲結(jié)構(gòu)中出現(xiàn)一個實際節(jié)點對應(yīng)多個顯示節(jié)點的錯誤。在構(gòu)建拓撲圖的過程中,線性掃描每個終端節(jié)點,遞歸建立網(wǎng)絡(luò)拓撲。
3.5 傳感器數(shù)據(jù)顯示與設(shè)備控制程序設(shè)計
控制臺接收用戶指令,根據(jù)指令裁決器決定設(shè)備列表顯示或傳感器數(shù)據(jù)顯示。對設(shè)備控制結(jié)果由控制回饋模塊顯示,成功則表明指令已經(jīng)傳至網(wǎng)關(guān),但不能確定遠程ZigBee節(jié)點是否收到該指令。
控制臺讀取用戶給定的指令,交由裁決器判斷用戶指令類型,若為傳感器數(shù)據(jù)顯示指令,則進入傳感器指令顯示界面,并提取傳感器數(shù)據(jù)全局變量,以1 s為周期動態(tài)顯示傳感器數(shù)據(jù);若為設(shè)備控制指令,則進入設(shè)備控制界面,根據(jù)用戶指定的設(shè)備地址和編號,發(fā)送控制命令至遠程節(jié)點。
4 平臺測試與數(shù)據(jù)指標(biāo)
無線網(wǎng)絡(luò)由 1個協(xié)調(diào)器節(jié)點、1個路由器節(jié)點及7個終端節(jié)點構(gòu)成。終端節(jié)點都掛有溫/濕度傳感器,振動傳感器及壓力傳感器。節(jié)點距離在10 m~20 m之間,多個終端節(jié)點和協(xié)調(diào)器之間有墻體阻擋, 通過路由器接入網(wǎng)絡(luò)進行測試。
測試1:每個ZigBee節(jié)點加入網(wǎng)絡(luò),網(wǎng)絡(luò)拓撲結(jié)構(gòu)都能正確顯示,且路由器斷電后,其子節(jié)點尋找最近的父節(jié)點并加入網(wǎng)絡(luò),重構(gòu)網(wǎng)絡(luò)拓撲。
測試2:控制臺正確顯示遠程ZigBee節(jié)點上的傳感器設(shè)備。
測試3:傳感器關(guān)閉、打開、周期采集等控制功能測試正常。
測試4:分別測試各個ZigBee節(jié)點不同時間的傳感器數(shù)據(jù)值,結(jié)果顯示準確。
測試5:在測試1的基礎(chǔ)上,測試網(wǎng)絡(luò)丟包和數(shù)據(jù)速率。實際測試得到ZigBee無線網(wǎng)絡(luò)穩(wěn)定數(shù)據(jù)速率為20.5 kb/s,發(fā)送速率越高,則丟包率越高。
本文設(shè)計的基于CC2530的ZigBee無線傳感器網(wǎng)絡(luò)監(jiān)控平臺具有較強的網(wǎng)絡(luò)穩(wěn)定性,且丟包率和失誤率較小,網(wǎng)絡(luò)拓展能力較強,可搭建不同的網(wǎng)絡(luò)拓撲結(jié)構(gòu)以適應(yīng)復(fù)雜的實際環(huán)境;能實時感知環(huán)境狀態(tài)信息并交互處理,控制遠程傳感器設(shè)備。將此技術(shù)用于環(huán)境監(jiān)控是一種可行的技術(shù)方案,也是未來物聯(lián)網(wǎng)發(fā)展的一個方向。
參考文獻
[1] 李長庚,劉威鵬,胡純意,等.基于ARM和ZigBee的WSN節(jié)點設(shè)計與實現(xiàn)[J].計算機工程,2010,36(17):135-137.
[2] 尹慧琳,王磊,馮占軍. 無線傳感器網(wǎng)絡(luò)節(jié)點分布式信息融合算法研究[J].計算機工程與應(yīng)用,2007,43(17):18-20.
[3] 謝川.ZigBee中改進的Cluster-Tree路由算法[J].計算機工程,2011,37(7):115-117.
[4] 刑偉偉,白瑞林,孟偉.ZigBee無線網(wǎng)關(guān)在MODBUS通信中的應(yīng)用[J].計算機工程與應(yīng)用,2011,47(29):81-84.