1. 程式人生 > >ZIgbee裝置加入網路過程(方式一 關聯加入)

ZIgbee裝置加入網路過程(方式一 關聯加入)

在一個zigbee協調器裝置建立網路後,路由器裝置或者終端裝置(end device),可以加入協調器建立的網路,具體加入網路有兩種方式,一種是通過關聯(association)方式,就是待加入的裝置發起加入網路,具體實現方式後面討論,另一中是直接(direct)方式,就是待加入的裝置具體加入到那個裝置下,作為該裝置的子節點,由以前網路中的裝置,想待加入的裝置作為其子裝置決定。

   下面重點討論第一種方式,也是實際中用的最多的方式

   通過關聯方式加入一個網路:

  加入一個裝置,是兩個裝置的事,即子裝置和待定父裝置

  對於子裝置,首先子裝置呼叫NLME-NETWORK-DISCOVERY.request 原語,設定待掃描的通道,以及每個通道掃描的時間,網路層收到這個原語,將要求MAC層執行被動或主動掃描。

  具體傳送到裝置外的是一個becon request 幀,當在這個通道中的裝置收到該幀,將會發送becon幀,這是子裝置通過BEACON-NOTIFY.indication 原語,告知該裝置的MAC層,該becon幀包含了傳送該幀的地址資訊,以及是否允許其他裝置以其子節點的方式加入。待加入的裝置,在網路層,將檢查該becon幀 協議 ID是否是zigbee ID 。如果不是,將 忽略;如果是,該裝置將複製收到每個becon幀的相關資訊到其關聯表中(neighbor table)。

  一旦MAC層完成了掃描,將傳送 MLME-SCAN.confirm 原語,告知網路層,網路層將傳送NLME-NETWORK-DISCOVERY.confirm 原語,告知應用層。

  應用層收到該原語,應用層將根據情況,要麼重新要求掃描,或者從關聯表中選擇所發現的網路加入。呼叫NLME-JOIN.request 原語,原語中各個引數的設定參看協議(可以在本站下載欄找到)非常容易。如果在關聯表中找不到合適的準父節點,將呼叫原語告知應用層,如果由多個裝置可以滿足要求,將選擇到協調器節點深度最低的裝置,如果有幾個裝置的深度相同,且都是最小深度,將從中隨機選擇一個。

 一旦潛在的父節點確定,網路層將呼叫MLME-ASSOCIATE.request 原語到MAC層。具體設定參看協議相關部分(213頁),連線狀態將通過MLME-ASSOCIATE.confirm 原語反饋。

  如果試圖加入不成功,網路層將收到MAC層通過MLME-ASSOCIATE.confirm告知的加入失敗,如果收到的是潛在父節點拒絕該裝置加入,這時候,網路層將會在關聯表中,把該潛在父節點的相應部分,潛在父節點位(potential parent bit)置為零,確保網路層,不再給這個裝置二次傳送加入請求。

  如果一次加入沒成功,將選擇另一個潛在的父節點加入,指導找到一個合適的裝置加入或者所有的裝置都不適合。

 如果加入成功,網路層收到的MLME-ASSOCIATE.confirm 原語,將含有該裝置可用的16 唯一的邏輯地址,

網路層將在關聯表中設定與其父節點的關係,同時,這個父節點也會在其關聯表中加入這個新裝置。

  如果是以路由器(router)形式成功加入網路,該裝置的應用層將傳送NLME-STAT_ROUTER. request 原語,網路層將傳送MLME-STAT.request 原語到MAC層。收到了MLME-START.confirm 原語,網路層 將傳送 NLME-START-ROUTER.confirm 原語,含有同樣的狀態值。

   對於父節點裝置:

  只有協調器或路由器,可以加入裝置,進行該操作,首先從MAC層開始,MAC接收到一幀(ASSOCIATE)資料 ,通過MLME_ASSOCIATE.indication原語傳到網羅層,潛在的父節點收到這幀資料,首先判斷該裝置是否已經存在其關聯表中,如果找到,NLME將獲取相應的16位網路地址,併發送 association  response 到MAC層,如果沒有找到,將分配一個在這個網路中唯一的地址給待加入的裝置,如果潛在父節點已經用完了地址分配,NLME將中止,通過MLME-ASSOCIATE.reponse 原語,告知該裝置,不能接收子裝置了,在多跳網路中,其他的裝置還可以接收。

  如果裝置加入得到許可,這時候,將在關聯表中建立一個表項,作為其子節點,並通過MLME-ASSOCIATE.reponse 原語,告知該裝置,已經成功加入網路。

zigbee裝置加入網路(方式二  直接加入)

直接方式加入網路(directly)

下面講述如何一個子裝置,在其潛在父節點預先指派的情況下加入網路.

以這種方式加入網路的過程中,首先由父節點發起,下面根據建網的過程來講述

父節點:

首先呼叫NLME-DIRECT-JOIN.requese 原語,在目的地址部分設定成要求加入網路裝置的IEEE地址,當這個過程初始化後,在父節點的網路層要判斷該子裝置是否已經加入網路,如果在其關聯表中找到了這個裝置,將終止操作,並通過NLME-DIRECT-JOIN.confirm原語告訴應用層,裝置已經加入網路,如果沒有找到匹配的,在網路層,如果可能 ,將分配一個在這個 網路中唯一的16位網路地址,將在其關聯表中為這個子節點建立一個表項,如果不可以,NLME-DIRECT-JOIN.confirm原語告訴應用層表已滿,如果可以,NLME-DIRECT-JOIN.confirm原語告訴應用層建立成功.注意,這個過程父節點裝置是沒有向空中發射資訊,只是在自己裝置內處理.但是,在子裝置要求加入時,以孤節點方式實現,因為該過程和孤節點方式重新加入實現方式一樣.

子節點:

子節點通過孤節點方式加入

首先子裝置呼叫NLME-JOIN.request原語,並在RejoinNetwork項設定為真,然後網路層要求MAC執行孤節點掃描,對設定的通道,該步由MLME-SCAN.request初始化,通過MLME-SCAN.comfirm原語返回結果.

 如果掃描成功,網路層將通過呼叫NLME-JOIN.confirm 原語告之應用層,加入成功.

 如果掃描沒有成功,網路層將終止操作,並告之應用層,沒有找到網路,該步通過呼叫NLME-JOIN.confirm 原語實現.

子節點要求加入後,父節點將做如下處理

在MAC層收到MLME-ORPHAN.indication原語,只有協調器或路由器將做進一步處理.

當這一過程完成後,網路層將首先查詢看其子裝置是否為孤節點,如果有,將比較IEEE地址,如果匹配,將獲取相應的16位網路地址,通過MAC層MLME-ORPHAN.reponse原語告之子裝置.