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