組網方案設計:組建一個完整的zigbee網狀網絡包括兩個步驟:網絡初始化、節點加入網絡,其中節點加入網絡又包括兩個步驟:經過與協調器鏈接入網和經過已有父節點入網。php
網絡初始化:
Zigbee網絡的創建是由網絡協調器發起的,任何一個zigbee節點要組建一個網絡必需要知足如下兩點要求:
1.節點是FFD節點,具有zigbee協調器的能力;
2.節點尚未與其餘網絡鏈接,當節點已經與其餘網絡鏈接時,此節點只能做爲該網絡的子節點,由於一個zigbee網絡中有且只有一個網絡協調器。
網絡初始化的流程以下:
1.肯定網絡協調器,首先判斷節點是不是FFD節點,接着判斷此FFD節點是否在其餘網絡裏或者網絡裏是否已經存在協調器。經過主動掃描,發送一個信標請求命令(Beacon request command),而後設置一個掃描期限(T_scan_duration),若是在掃描期限內都沒有檢測到信標,那麼就認爲FFD在其pos內沒有協調器,那麼此時就能夠創建本身的zigbee網絡,而且做爲這個網絡的協調器不斷地產生信標並廣播出去。
2.進行信道掃描過程。包括能量掃描和主動掃描兩個過程:首先對指定的信道或者默認的信道進行能量檢測,以免可能的干擾。以遞增的方式對所測量的能量值進行信道排序,拋棄那麼些能量值超出了可容許能量水平的信道,選擇可容許能量水平的信道並標註這些信道是可用信道。接着進行主動掃描,搜索節點通訊半徑內的網絡信息。這些信息以信標幀的形式在網絡中廣播,節點經過主動信道掃描方式得到這些信標幀,而後根據這些信息,找到一個最好的、相對安靜的信道,經過記錄的結果,選擇一個信道,該信道應存在最少的zigbee網絡,最好是沒有zigbee設備。在主動掃描期間,mac層將丟棄phy層數據服務接收到的除信標之外的全部幀。
3.設置網絡ID。找到合適的信道後,協調器將爲網絡選定一個網絡標識符(PAN ID,取值<=0x3FFF),這個ID在所使用的信道中必須是惟一的,也不能和其餘zigbee網絡衝突,並且不能爲廣播地址oxFFFF(此地址爲保留地址,不能使用)。PAN ID能夠經過偵聽其餘網絡的ID而後選擇一個不會衝突的ID的方式來獲取,也能夠人爲的指定掃描的信道後來肯定不和其餘網絡衝突的PAN ID。在zigbee網絡中有兩種地址模式:擴展地址(64位)和短地址(16位),其中擴展地址由IEEE組織分配,用於惟一的設備標識;短地址用於本地網絡中設備標識,在一個網絡中,每一個設備的短地址必須惟一,當節點加入網絡時由其父節點分配並經過使用短地址來通訊。對於協調器來講,短地址一般設定爲0x0000;
上面步驟完成後,就成功初始化了zigbee網狀網絡,以後就等待其餘節點的加入。節點入網時將選擇範圍內信號最強的父節點(包括協調器)加入網絡,成功後將獲得一個網絡短地址並經過這個地址進行數據的發送和接收,網絡拓撲關係和地址就會保存在各自的flash中。
節點經過協調器加入網絡:
當節點協調器肯定以後,節點首先須要和協調器創建鏈接加入網絡。考慮到網絡的容量和FFD/RFD的特色,本文只討論FFD節點狀況,FFD節點與協調器鏈接加入網絡的流程圖:
爲了創建鏈接,FFD節點須要向協調器提出請求,協調器接收到節點的鏈接請求後根據狀況決定是否容許其鏈接,而後對請求鏈接的節點作出響應,節點與協調器創建鏈接後,才能實現數據的收發。具體的流程能夠分爲下面的步驟:
1.查找網絡協調器。首先會主動掃描查找周圍網絡的協調器,若是在掃描期限內檢測到信標,那麼將得到了協調器的有關信息,這時就向協調器發出鏈接請求。在選擇合適的網絡以後,上層將請求mac層對物理層和mac層的phyCurrentChannel、macPANID等PIB屬性進行相應的設置。若是沒有檢測到,間隔一段時間後,節點從新發起掃描。
2.發送關聯請求命令(Associate request command)。節點將關聯請求命令發送給協調器,協調器收到後當即回覆一個確認幀(ACK),同時向它的上層發送鏈接指示原語,表示已經收到節點的鏈接請求。可是這並不意味着已經創建鏈接,只表示協調器已經收到節點的鏈接請求。當協調器的mac層的上層接收到鏈接指示原語後,將根據本身的資源狀況(存儲空間和能量)決定是否贊成此節點的加入請求,而後給節點的mac層發送響應。
3.等待協調器處理。當節點收到協調器加入請求命令的ACK後,節點mac將等待一段時間,接受協調器的鏈接響應。在預約的時間內,若是接收到鏈接響應,它將這個響應向它的上層通告。而協調器給節點的mac層發送響應時會設置一個等待響應時間(T_ResponseWaitTime)來等待協調器對其加入請求命令的處理,若協調器的資源足夠,協調器會給節點分配一個16位的短地址,併產生包含新地址和鏈接成功狀態的鏈接響應命令,則此節點將成功的和協調器創建鏈接並能夠開始通訊。若協調器資源不夠,待加入的節點將從新發送請求信息,直接入網成功。
4.發送數據請求命令。若是協調器在響應時間內贊成節點加入,那麼將產生關聯響應命令(Associate response command)並存儲這個命令。當響應時間事後,節點發送數據請求命令(Data request command)給協調器,協調器收到後當即回覆ACK,而後將存儲的關聯響應命令發給節點。若是在響應時間到後,協調器尚未決定是否 贊成節點加入,那麼節點將試圖從協調器的信標幀中提取關聯響應命令,成功的話就能夠入網成功,不然從新發送請求信息直到入網成功。
5.回覆。節點受到關聯響應命令後,當即向協調器回覆一個確認幀(ack),以確認接收到鏈接響應 命令,此時節點將保存協調器的短地址和擴展地址,而且節點的MLME向上層發送鏈接確認原語,通告關聯加入成功的信息。
節點經過已有節點加入網絡
當靠近協調器的FFD節點和協調器關聯成功後,處於這個網絡範圍內的其餘節點就以這些FFD節點做爲父節點加入網絡了,具體加入網絡有兩種方式,一種是經過關聯(associate)方式,就是待加入的節點發起加入網絡;另外一種是直接(direct)方式,就是待加入的節點具體加入到那個節點下,做爲該節點的子節點。其中關聯方式是zigbee網絡中新節點加入網絡的主要途徑,
對於一個節點來講只有沒有加入過網絡的才能進行加入網絡。在這些節點中,有些是曾經加入過網絡中,可是卻與它的父節點失去聯繫(這樣的被稱爲孤兒節點),而有些則是新節點。當是孤兒節點時,在它的相鄰表中存有原父節點的信息,因而它能夠直接給原父節點發送加入網絡的請求信息。若是父節點有能力贊成它加入,因而直接告訴它的之前被 分配的網絡地址,它便入網成功;若是此時它原來的父節點的網絡中,子節點數已達到最大值,也就是說網絡地址已經分配滿,父節點便沒法批准它加入,它只能以新節點身份從新尋找並加入網絡。
而對於新節點來講,他首先會在預先設定的一個或多個信道上經過主動或被動掃描周圍它能夠找到的網絡,尋找有能批准本身加入網絡的父節點,並把能夠找到的父節點的資料存入本身的相鄰表。存入相鄰表的父節點的資料包括zigbee協議的版本、堆棧的規範、PAN ID和能夠加入的信息。在相鄰表中全部的父節點中選擇一個深度最小的,並對其發出請求信息,若是出現相同最小深度的兩個以上的父節點,那麼隨機選取一個發送請求。若是相鄰表中沒有合適的父節點的信息,那麼表示入網失敗,終止過程。若是發出的請求被批准,那麼父節點同時會分配一個16位的網絡地址,此時入網成功,子節點能夠開始通訊。若是請求失敗,那麼從新查找相鄰表,繼續發送請求信息,直到加入網絡或者相鄰表中沒有合適的父節點。網絡
轉載自:http://www.hizigbee.com/forum.php?mod=viewthread&tid=964spa