現有的機房監控主要采用人工監控和有線監控兩種方法。傳統的人工檢測和控制方法費時費力;有線傳輸面臨著布線復雜、維護和更新升級困難,而無線傳感網絡技術的誕生給它帶來了一場全新的革命。
文中提出了一種基于ZigBee無線網絡技術的智能機房環境監控系統設計方案,通過對機房的濕度、溫度、光照、火警和水浸等幾個重要因素進行實時的智能化監測和控制,同時還可以通過手機短信通知管理者。文中重點介紹了基于ZStack的應用程序開發,實現了對機房內多種信息的遠程監測、處理和控制。
1 ZigBee無線網絡技術
ZigBee是一種新興的短距離、低速率無線網絡技術。它是一種介于無線標記和藍牙之間的技術方案。ZigBee是建立在IEEE 802.15.4標準之上的,IEEE規定了ZigBee的物理層和媒體接入控制層,網絡層、應用支持子層和高層應用規范由ZigBee聯盟制定。ZigBee協議規定了3個可用頻段868 MHz、915 MHz和2.4GHz,分別提供:1個、10個和16個共計27個信道。其中2.4GHz為全球通用頻段,傳輸速率達250Kb/S。 ZigBee技術采用CSMA—CA的信道接入方式,可有效避免通信的沖突。
ZigBee網絡支持星狀、網狀和樹狀三種自組織無線網絡類型,其連接地址分為16位短地址和64位長地址,最多一個主節點可管理254個子節點;同時主節點還可由上一層網絡節點管理,可組成多達65 000個節點的大網,一個區域可以有100個ZigBee網絡同時存在。
基于ZigBee技術的無線傳感器網絡是集信息采集、信息傳輸、信息處理于一體的綜合智能信息系統,具有低成本、低功耗、低速率、高可靠性等特點。
2 系統總體設計
2.1 系統結構
以自動控制原理為理論基礎,應用傳感器與執行器件構成閉環控制系統。傳感器節點配有傳感器感知機房環境,控制節點配有執行器件改善機房環境。傳感器節點與控制節點相互配合,共同為機房內機器運行提供適宜的環境。

本系統由無線傳感器網絡、網關和主控中心組成。無線傳感器網絡是物聯網的神經末梢,負責感知環境的變化,并將數據通過網關傳輸到互聯網。系統結構如圖1所示。
2.2 網關系統結構
網關是互聯網與無線傳感器網絡之間的數據通訊橋梁。本方案提供了3種網關接入方式:本地訪問、手機訪問和互聯網訪問。網關系統結構如圖2所示。

2.3 傳感器網絡結構
ZigBee網絡存在3種邏輯設備類型,即協調器、路由器、終端設備,并且在一個ZigBee網絡中有且只有一個協調器。當協調器被激活后,它就會建立一個自己的網絡。本方案采用的是星型網絡,在星型網絡結構中只有一個唯一的PAN主協調器,通過選擇一個PAN標識符確保網絡的唯一性。路由或終端都可以加入到這個網絡中來。
3 硬件設計
本系統硬件主要包括3部分,其中無線傳感器網絡核心是基于TI公司的CC2430開發的無線模塊;網關是基于ARM微處理器的嵌入式平臺;主控中心是PC機。
CC2430是挪威Chipcon公司的一款真正符合IEEE802.15.4標準的片上ZigBee產品。這種解決方案能夠提高性能并滿足以ZigBee為基礎的2.4 GHz ISM波段應用,及對低成本、低功耗的要求。CC2430無線單片機在待機時的電流消耗僅0.2μA,在32 kHz晶振下運行時的電流消耗小于1μA。因此,使用小型電池壽命可以長達10年
3.1 ZigBee協調器節點硬件設計
ZigBee協調器節點主要由無線收發器CC2430、射頻天線RF、電源模塊、晶振模塊、串口模塊和LED指示燈組成,功能模塊如圖3所示。RF的輸入/輸出是高阻和差動的,用于RF口最合適的差動負載是(115+180 Ω)。當使用不平衡天線時為了優化性能,應當使用不平衡變壓器。由于CC2430的工作電壓為3.3 V,所以要用電壓轉換模塊把5 V降到3.3 V。CC2430可以同時接32 MHz和32.768 kHz的兩種頻率的晶振電路,以滿足不同的要求。串口模塊用于ZigBee協調器將無線接收的數據信息傳送給網關,同時接收網關傳送過來的控制命令。LED指示燈用于顯示網絡連接狀態。

3.2 傳感器節點硬件設計
無線傳感器節點由各種數據采集模塊、CC2430數據傳輸模塊、電源模塊和外部數據存儲等功能模塊組成,功能模塊如圖4所示。數據采集模塊負責采集監測區域的溫度、濕度、光照強度、火警和水浸等信息并完成數據轉換;CC2430數據傳輸模塊負責與路由節點進行無線數據交換、傳輸采集數據、接收控制命令。外部數據存儲模塊用來保存傳感器節點采集的數據。電源管理模塊采用兩節5號干電池。LED指示燈顯示加入或退出網絡的狀態。

路由器節點的主要任務是將不同區域的數據從傳感器節點路由到協調器節點,因此電路比較簡單,不再贅述。
4 軟件設計
本系統采用的開發環境是IAR7,系統軟件是基于TI公司的Z-Stack 2006協議棧開發。從系統結構中可以看出本系統軟件設計包括3大部分:無線傳感器網絡基于Z-Stack的應用程序開發;網關基于Qt的應用程序開發;主控中心Web應用程序開發,本文著重實現基于Z-Stack的應用程序開發。
4.1 ZigBee協議棧
ZigBee協議棧由一組子層構成,每一層向它的上層提供數據和管理服務,分別為物理層(PHY)、媒體訪問控制層(MAC)、網絡層(NWK)和應用層(ADL),應用層又分為:應用支持子層(APS)、ZigBee設備對象(ZDO)和由制造商制定的應用對象。其中PHY和MAC位于最低層,且與硬件相關;除此之外的其他層建立在PHY和MAC層之上,并且完全與硬件無關。分層的結構脈絡清晰、一目了然,給設計和調試帶來極大的方便。

實際開發中根據需要將協議棧的層次又做了細化,Z-Stack軟件的總體架構如圖5所示。Z-Stack中的硬件抽象層HAL提供各種硬件模塊的驅動,基于HAL之上是操作系統抽象層OSAL,OSAL實現了一個易用的操作系統平臺,以實現多任務為核心的系統資源管理機制。Z-Stack采用操作系統的思想來構建,采用事件輪循機制,當各個層初始化完成后,系統將會進入低功耗模式,當有事件發生時,系統立刻被喚醒,并轉而進入中斷處理事件,處理完成后再次進入低功耗模式,減少功耗。OSAL把優先級放在了最重要的地位。當在處理的任務中有兩個以上事件待處理,處理完一件后,也要去查詢優先級更高的任務。賦予優先級高的任務最大的權利,盡可能保證高優先級任務的每一個事件都能得到最及時的處理。操作系統任務調度流程如圖6所示。

開發所用協議棧目錄結構如圖7所示。主要用到的文件有:ZMain/ZMian.c、Tools/f8wConfig.cfg、App/OSAL_SampleApp.c和App /SampleApp.c。其中ZigBee協議棧的main函數在ZMain.c中,總體上來說它一共做了兩件事,一個是系統初始化,即由啟動代碼來初始化硬件系統和軟件架構需要的各個模塊;一個是執行操作系統實體。fSwConfig.cfg為網絡配置文件。App/OSAL_SampleApp.c為操作系統任務初始化和添加文件。App/SampleApp.c為應用程序核心文件。整個Z-stack的主要工作流程大致分為:系統啟動,驅動初始化,OSAL初始化和啟動,進入任務輪循幾個階段。

4.2 無線傳感網軟件平臺搭建
操作系統是通過調度各項任務來使整個系統協調的運作起來的。對不同類型設備的處理作為一個任務,把新建的任務添加到系統中,操作系統便會把新任務與協議棧融合到一起,使系統具備新的功能,即完成了無線傳感器網絡軟件平臺的搭建。
1)建立任務:任務初始化函數的建立
任務初始化函數要做兩件事,首先是為任務獲取系統分配的任務ID,最后是初始化運行任務所需的硬件資源及變量。
任務初始化函數的格式為:
XXX_Init(unsigned char task_id)
{
XXX_TaskID=task_id;
初始化任務運行所需的硬件資源及變量。
}
其中“XXX”表示任務的名稱。“XXX_TaskID”是用戶自己定義的變量,用于存儲任務的ID號。
2)建立任務:任務事件處理函數的建立
對模塊的各種外部變化操作系統以事件的方式來處理,不同的宏定義代表不同事件,比如:KEY_CHANGE為按鍵事件;ZD0_STATE_CHANGE為網絡狀態變化事件;AF_INCOMING_MSG CMD表示接收到其他節點發送來的數據,該事件為無線處理的重要事件。
任務事件處理函數原型為:uint16 Sample_ProcessEvent(uint8 task_id,uint16 events);形參task_id為任務ID號,events為事件代號。
3)添加任務
所有的任務添加都是在應用層App/OSAL_SampleApp.c中通過osalTaskAdd()函數添加一個OSAL任務,函數原型為:
void osalTask Add(const pTaskInitFn pfninit,
const pTaskEventHandlerFn pfnEventProcessor,
const byte taskPriority)
參數1:pfnInit(指向任務初始化函數的指針);
參數2:pfnEventProcessor(指向任務事件處理函數的指針);
參數3:taskPrioritv(任務優先級)。
4.3 ZigBee網絡通訊設置與組網
4.3.1 網絡通訊設置
在Tools/f8wConfig.cfg配置文件中定義了工程相關的網絡通訊設置。其中比較重要的是ZigBee通信相關的信道通道的設置和PAN ID的設置。用戶可以通過更改該文件中的相關宏定義,來控制ZigBee網絡的通道和PAN ID,以此來解決多個ZigBee網絡的沖突問題。信道是數據在物理層傳輸時使用的通道:PIN ID為ZigBee網絡的標識符,用來區別不同的網絡。
除此之外在啟動網絡前還需要修改模塊的物理地址。在ZigBee網絡中,無論是協調器還是路由器或終端節點,每個模塊都有自己唯一的64位物理地址。物理地址的修改有兩種方式,一種是通過Zmain/Zmain.c中的zmain_ext_addr()函數設置;另一種是使用Chipeon Flash Programmer軟件。默認地址0xff ff ff ff ff ff ff ff為無效的,除此之外都是有效的,且保證在網絡中的唯一性即可。
4.3.2 網絡組建
1)協調器格式化網絡
協調器將掃描DEFAULT_CHANLIST指定的通道,最后在其中之一上形成網絡。如果ZDAPP_CONFIG_PAN_ID被定義為0xFFFF,那么協調器將根據自身的IEEE地址建立一個隨機的PAN ID。如果ZDAPP_CONFIG_PAN_ID沒有被定義為0xFFFF,那么協調器建立網絡的PAN ID將由ZDAPP_CONFIG _PAN_ID指定,通常這個值介于0~0x3FFF。
2)路由器和終端設備加入網絡
路由器和終端設備啟動后,將掃描DEFAULT_CHANLIST指定的頻道。如果ZDAPP_CONFIG_PAN_ID沒有被定義為0xFFFF,則路由器或終端將強制加入ZDAPP_CONFIG_PAN_ID定義的網絡。反之隨機加入網絡。
4.4 數據傳輸
系統中涉及的數據傳輸方式有兩種:無線收發和串口收發。其中節點向協調器發送采集信息、協調器向控制節點發送控制信息是通過無線收發實現的;協調器將采集信息傳送給網關、網關向協調器發送控制命令是通過串口收發實現的。
4.4.1 無線數據收發
1)無線發送 系統中采用短地址方式發送數據,數據以幀格式傳輸。在發送前按照協議規定的幀形式構建數據幀,然后調用無線發送函數。函數原型為:uint8 SendData(uint8*buf,uint16 addr,uint8 Leng);buf為發送數據指針;addr為目的地址;Leng發送數據長度。
2)無線接收 對于無線接收并沒有像發送一樣單獨的處理函數,而是在任務處理函數中通過處理無線接收數據事件來完成處理的,具體函數如下:

其中AF_INCOMING_MSG_CMD為無線接收事件宏定義,SampleApp_MessageMSGCB()函數則為具體接收事件的處理函數。
4.4.2 串口數據收發
系統中所用的串口為無線芯片CC2430自帶資源,通過自定義串口收發函數來使用該資源,從而實現網關與協調器節點數據傳輸。
串口發送函數原型為:
void UartTX_Send_String(char*Data,int len);
串口接收函數原型為:
char UartRX_Receive_Char(void);
5 結束語
隨著物聯網概念的普及,基于ZigBee的無線傳感器網絡技術得到越來越廣泛的應用。文中將ZigBee網絡技術應用于機房環境監控系統中,介紹了系統總體架構,無線傳感器網絡部分的軟、硬件設計及實現過程,重點介紹了無線網絡的構建與數據傳輸。整個系統能實時、準確地測量并顯示機房內各點的數據信息,使管理者能夠及時了解機器工作環境,從而及時、有效地采取措施。如果更換采集節點的傳感器,該監控系統可以應用于不同的場合,可見無線傳感器網絡技術具有廣闊的應用前景。