吳清秀
摘 要:隨著物聯(lián)網(wǎng)概念的不斷普及與深入,作為物聯(lián)網(wǎng)核心技術(shù)的無線傳感器網(wǎng)絡(luò)得到了越來越多的應(yīng)用。ZigBee局域網(wǎng)協(xié)議遵循IEEE802.15.4標(biāo)準(zhǔn),而且具有低功耗等特點。其網(wǎng)絡(luò)層主要涉及路由發(fā)現(xiàn)及路由維護(hù),選擇最佳路由,把消息轉(zhuǎn)發(fā)至目的地,對基于ZigBee的網(wǎng)絡(luò)管理進(jìn)行學(xué)習(xí)研究具有重要意義。
關(guān)鍵詞:ZigBee;協(xié)議棧;網(wǎng)絡(luò)管理;路由
中圖分類號:TP393 文獻(xiàn)標(biāo)識碼:A 文章編號:2095-1302(2016)07-00-02
0 引 言
無線傳感器網(wǎng)絡(luò)(Wireless Sensor Network,WSN) 是一種分布式傳感網(wǎng)絡(luò)。末梢由許多被部署在一定區(qū)域且通過無線方式通信的微型傳感器組成,這些網(wǎng)絡(luò)傳感節(jié)點往往是一個多跳、自組織的網(wǎng)絡(luò)系統(tǒng),因此網(wǎng)絡(luò)設(shè)置的位置可以隨時更改,比較靈活。無線傳感器網(wǎng)絡(luò)的主要功能在于收集、感知和初步處理傳感網(wǎng)絡(luò)覆蓋范圍內(nèi)所獲取對象的特定信息。但是傳感網(wǎng)的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)對于網(wǎng)絡(luò)節(jié)點間的數(shù)據(jù)傳輸和網(wǎng)絡(luò)管理有著重要的作用,如何選擇高效、穩(wěn)定的網(wǎng)絡(luò)拓?fù)鋪肀WC需求,常常引起研究者的注意。
1 ZigBee協(xié)議棧網(wǎng)絡(luò)管理服務(wù)
ZigBee協(xié)議棧的核心部分在網(wǎng)絡(luò)層(NWK),其主要職責(zé)是添加或刪除網(wǎng)絡(luò)節(jié)點、路由發(fā)現(xiàn)以及路由維護(hù)及傳送數(shù)據(jù)等功能。路由是在多個節(jié)點之間選擇合適的數(shù)據(jù)傳輸路徑,是一個將消息從節(jié)點到中繼再到其目的設(shè)備的過程。ZigBee端設(shè)備沒有路由發(fā)現(xiàn)功能,負(fù)責(zé)發(fā)現(xiàn)和維護(hù)網(wǎng)絡(luò)中的路由功能由ZigBee協(xié)調(diào)器和路由器提供。一般由ZigBee協(xié)調(diào)器端代表設(shè)備執(zhí)行路由發(fā)現(xiàn),ZigBee協(xié)調(diào)器的網(wǎng)絡(luò)層根據(jù)現(xiàn)有設(shè)備布置情況決定創(chuàng)建一個新的網(wǎng)絡(luò)和選擇網(wǎng)絡(luò)拓?fù)漕愋?,設(shè)備節(jié)點的網(wǎng)絡(luò)地址由ZigBee協(xié)調(diào)器分配。其網(wǎng)絡(luò)管理過程需經(jīng)過如下幾個步驟:
(1) 網(wǎng)絡(luò)發(fā)現(xiàn),網(wǎng)絡(luò)發(fā)現(xiàn)過程用于發(fā)現(xiàn)所有目前在設(shè)備POS內(nèi)運(yùn)行的網(wǎng)絡(luò)。設(shè)備發(fā)現(xiàn)請求由應(yīng)用層(APL)交給網(wǎng)絡(luò)層。NWK層使用介質(zhì)訪問控制MAC層信道掃描來發(fā)現(xiàn)存在的其他網(wǎng)絡(luò)。在所有的掃描辦法中主動掃描是最優(yōu)方式,如果設(shè)備不能進(jìn)行主動掃描,那么設(shè)備將進(jìn)行被動掃描。網(wǎng)絡(luò)發(fā)現(xiàn)會驗證在任何已發(fā)現(xiàn)的網(wǎng)絡(luò)中是否至少存在一個ZigBee路由器當(dāng)前允許加入。
(2) 網(wǎng)絡(luò)形成,NWK層收到從APL層發(fā)來的請求后,可以把設(shè)備設(shè)定為ZigBee協(xié)調(diào)器,該設(shè)備必須是一個FFD。網(wǎng)絡(luò)形成的第一步是進(jìn)行能量檢測掃描,然后對一組選定的信道進(jìn)行掃描,基于MAC管理服務(wù)掃描結(jié)果在網(wǎng)絡(luò)層針對唯一的PAN標(biāo)識符和選定的信道,從而一個新的網(wǎng)絡(luò)將選擇當(dāng)前網(wǎng)絡(luò)層中網(wǎng)絡(luò)最少的信道來建立。0x0000作為它的MAC短地址被ZigBee協(xié)調(diào)器的網(wǎng)絡(luò)層所選擇,即網(wǎng)絡(luò)地址。
(3) 建立一個路由器設(shè)備,ZigBee路由器負(fù)責(zé)路由數(shù)據(jù)幀,路由發(fā)現(xiàn)以及路由修復(fù)。路由器能建立自己的超幀,并接受其他設(shè)備加入網(wǎng)絡(luò)的請求。APL層使用NLME_START_ROUTER.request原語發(fā)送請求給網(wǎng)絡(luò)層來建立一個路由設(shè)備??紤]到路由器能形成自己的超幀,這個原語包含的超幀參數(shù)有信標(biāo)次序,超幀次序以及電池壽命范圍(BLE)。網(wǎng)絡(luò)層請求MAC創(chuàng)建或者更新超幀配置。
(4) 加入和離開網(wǎng)絡(luò),如果MAC的MAC_ASSOCIATION_PERMIT屬性設(shè)置為TRUE,該設(shè)備將接受關(guān)聯(lián)請求。ZigBee協(xié)調(diào)器或路由器的網(wǎng)絡(luò)層可以通過請求MLME設(shè)置MAC_ASSOCIATION_PERMIT在一個固定的時間內(nèi)為TRUE,以允許其他設(shè)備加入此網(wǎng)絡(luò)。這個固定時間被稱為允許周期。
如果關(guān)聯(lián)請求被父節(jié)點檢測到,以一個子節(jié)點是否已經(jīng)在它的網(wǎng)絡(luò)中為判斷依據(jù)而查找它的鄰居表以確定請求加入的節(jié)點是否合法。若鄰居表沒有該節(jié)點地址,子節(jié)點就會收到一個唯一的網(wǎng)絡(luò)地址。每個父節(jié)點供給子節(jié)點的地址是在一定范圍內(nèi)的。如果父節(jié)點更新了它的鄰居表,就表示該子節(jié)點的加入請求被接受,則父節(jié)點就把該設(shè)備當(dāng)作它的子節(jié)點加入到鄰居表中。如果該子節(jié)點有過關(guān)聯(lián)該父節(jié)點的歷史,網(wǎng)絡(luò)層也會使用請求命令重新加入。即使父節(jié)點當(dāng)前不接收任何新的子節(jié)點,該子節(jié)點設(shè)備也可以重新尋找其他父節(jié)點設(shè)備進(jìn)行關(guān)聯(lián)。
在特定的網(wǎng)絡(luò)環(huán)境下也可以直接加入。如果父節(jié)點設(shè)備的地址池中配置了64位的子節(jié)點設(shè)備地址時,子節(jié)點設(shè)備可以直接加入。這種加入網(wǎng)絡(luò)的方式,父節(jié)點設(shè)備已經(jīng)事先選擇關(guān)聯(lián)了子節(jié)點設(shè)備,子節(jié)點設(shè)備在使用過程中就不必再進(jìn)行嘗試或關(guān)聯(lián)父節(jié)點設(shè)備。父節(jié)點在開啟網(wǎng)絡(luò)之初,首先通過鄰居表查詢當(dāng)前子節(jié)點設(shè)備,在鄰居表中如果有子設(shè)備的64位地址,就表示找到匹配的地址,父節(jié)點就會停止搜索。如果鄰居表中沒有找到,且鄰居表未滿,父設(shè)備就會創(chuàng)建一個入口。
如果打算離開網(wǎng)絡(luò)的設(shè)備是ZigBee協(xié)調(diào)器或者路由器,那么設(shè)備可以通過將目的地址設(shè)置為廣播地址(Oxffff)來把網(wǎng)絡(luò)層的離開命令幀廣播到整個網(wǎng)絡(luò)。廣播離開命令的原因是讓所有依賴該路由器或者協(xié)調(diào)器的設(shè)備知道,如果有必要,它們需要更新自己的路由或者尋找新的父設(shè)備。相比較而言,ZigBee端設(shè)備只是單播離開命令給它的父設(shè)備。在這兩種情況下,請求網(wǎng)絡(luò)層開始離開的過程都由APL層使用NLME_LEAVE.request原語來實現(xiàn),當(dāng)父設(shè)備網(wǎng)絡(luò)需要刪除它的子設(shè)備時,子設(shè)備會接收到來自父設(shè)備的單播leave-request命令,如果子設(shè)備被從網(wǎng)絡(luò)中刪除,父設(shè)備的鄰居列表隨即得到更新。也可以重復(fù)使用以前子設(shè)備的地址,只要APL層在給NWK層的NLME_LEAVE.request原語中允許地址復(fù)用。如果被刪除的對象是一個充當(dāng)ZigBee路由器的子設(shè)備,該子設(shè)備會通過設(shè)置目的地址為(Oxffff)來廣播一個離開命令。
(5) 復(fù)位網(wǎng)絡(luò)層,NWK層一旦收到下一個更高層的復(fù)位請求后就會進(jìn)行一個復(fù)位操作,網(wǎng)絡(luò)層首先復(fù)位MAC層。接收到MAC復(fù)位確認(rèn)后,網(wǎng)絡(luò)層把所有的NIB屬性、路由表以及路由發(fā)現(xiàn)表恢復(fù)到它們的默認(rèn)值。APL層以NLME_RESET.request的形式發(fā)送復(fù)位請求給網(wǎng)絡(luò)層。網(wǎng)絡(luò)層通過向APL層發(fā)送NLME_RESET.confirm原語來確認(rèn)復(fù)位操作的結(jié)果。設(shè)備在初始上電后,嘗試加入前以及離開網(wǎng)絡(luò)后都會進(jìn)行網(wǎng)絡(luò)層復(fù)位。
(6) 同步,設(shè)備能使用同步過程來同步或者提取來自ZigBee協(xié)調(diào)器或路由器的待處理數(shù)據(jù)。有兩種同步場景是信標(biāo)使能和非信標(biāo)使能。將MacAutoRequest的值設(shè)置為TRUE可以讓MAC層自動產(chǎn)生并且發(fā)送數(shù)據(jù)請求命令。同步和數(shù)據(jù)請求過程在APL層使用NLME_SYNC.request來請求網(wǎng)絡(luò)層進(jìn)行,NLME_SYNC.confirm傳遞給APL層達(dá)到實現(xiàn)同步的結(jié)果。
2 編程與實現(xiàn)
ZigBee是一個由可多達(dá)65 000個無線數(shù)傳模塊組成的無線數(shù)傳網(wǎng)絡(luò)平臺,其網(wǎng)絡(luò)主要是由協(xié)調(diào)器建立的,其他節(jié)點加入到網(wǎng)絡(luò)中,如果網(wǎng)絡(luò)中只有兩個節(jié)點,一個是協(xié)調(diào)器,另一個是路由器,則對路由器而言,協(xié)調(diào)器就是路由器的父節(jié)點,可以在路由器中調(diào)用獲取父節(jié)點的函數(shù)來完成本次操作。網(wǎng)絡(luò)在協(xié)調(diào)器通電后建立,節(jié)點自動加入網(wǎng)絡(luò)成為路由器,路由器通過調(diào)用一定的函數(shù)獲取本身的網(wǎng)絡(luò)地址、MAC地址、父節(jié)點網(wǎng)絡(luò)地址和父節(jié)點MAC地址,并通過串口將其輸出到PC機(jī)。網(wǎng)絡(luò)管理原理圖如圖1所示。
(1)協(xié)調(diào)器程序設(shè)計
#include "OSAL.h"
#include "AF.h"
#include "ADApp.h"
……
void GenericApp_Init(byte task_id)
{
GenericApp_TaskID = task_id;;
GenericApp_TaskID = 0;
GenericApp_epDesc.endpoint = GENERICAPP_ENDPOINT;
GenericApp_epDesc.task_id = &GenericApp_TaskID;
GenericApp_epDesc.simpleDesc = (SimpleDescriptionFormat_t *)&GenericApp_simpleDesc;
GenericApp_epDesc.latencyReq = noLatencyReqs;
afRegister(&GenericApp_epDesc);
}
以上函數(shù)是任務(wù)初始化函數(shù),實現(xiàn)了端口初始化和端口的注冊。
(2)路由器程序設(shè)計
#include "OSAL.h"
#include "AF.h"
#include "ADApp.h"
……
void ShowInfo(void);
void To_string(uint8 *dest,char * src,uint8 length);
typedef struct RFTXBUF
{
uint8 myNWK[4]; //存儲本節(jié)點的網(wǎng)絡(luò)地址
uint8 myMAC[16]; //存儲本節(jié)點的MAC地址
uint8 PNWK[4]; //存儲父節(jié)點的網(wǎng)絡(luò)地址
uint8 PMAC[16]; //存儲父節(jié)點的MAC地址
}RFTX;
void GenericApp_Init(byte task_id)
{
halUARTCfg_t uartConfig;
……
uartConfig.configured = TRUE;
uartConfig.baudRate = HAL_UART_BR_115200;
uartConfig.flowControl = FALSE;
uartConfig.callBackFun = NULL;
HalUARTOpen(0,&uartConfig);
}
以上是任務(wù)初始化代碼。在路由器代碼中加入了串口的初始化函數(shù),這樣就可以使用串口了。
3 結(jié) 語
ZigBee網(wǎng)絡(luò)是對基于IEEE802.15.4現(xiàn)有網(wǎng)絡(luò)應(yīng)用的一種良好技術(shù)應(yīng)用拓展,具有大量的市場應(yīng)用需求和發(fā)展前景。ZigBee協(xié)議棧還在不斷升級,如何根據(jù)不同的需求設(shè)計高性能的ZigBee網(wǎng)絡(luò),在使用無線傳感器網(wǎng)絡(luò)過程中,本文對基于ZigBee的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)在網(wǎng)絡(luò)管理的數(shù)據(jù)傳輸部分進(jìn)行了初步探討,如何選擇高效、穩(wěn)定的網(wǎng)絡(luò)拓?fù)涫且豁椇苡幸饬x的課題。
參考文獻(xiàn)
[l] 李妤薇.基于ZigBee的無線傳感器網(wǎng)絡(luò)協(xié)議研究與設(shè)計實現(xiàn)[D].南京:南京郵電大學(xué),2014.
[2] 孫冠男.基于ZigBee協(xié)議的物聯(lián)網(wǎng)實驗教學(xué)平臺的設(shè)計與開發(fā)[D].濟(jì)南:山東師范大學(xué),2014 .
[3] 王小強(qiáng),歐陽駿,黃寧淋.ZigBee無線傳感器網(wǎng)絡(luò)設(shè)計與實現(xiàn)[M].北京:化學(xué)工業(yè)出版社,2012.
[4] Ruiz L B,Nogueira J M,Loureiro A A F.MANNA: A Management Architecture for Wireless Sensor Networks [J].Journal of the IEEE Communications,2013,41(2):116-125.