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