ZigBee是如何組網的?
在學校老師都是教通過IAR 8.10 向終端添加Z-stack 2.50協議棧去組網,但是並沒有講原理,想知道ZigBee是如何組網的,協議棧在這裡有哪些作用。
備註:FFD:Full FunctionDevice,全功能設備RFD:Reduced Function Device,精簡功能設備FFD可以當作一個網路協調器或者一個普通的感測器節點,它可以和任何其他的設備通訊,傳遞由RFD發來的數據到其他設備,即充當了路由的功能。而RFD只能是感測器節點,它只能和FFD進行通訊,經過FFD可以將自己測得數據傳送出去。組建一個完整的zigbee網狀網路包括兩個步驟:網路初始化、節點(路由器或終端)加入網路,其中節點加入網路又包括兩個步驟:通過與協調器連接入網和通過已有父節點入網。
一、網路初始化
Zigbee網路的建立是由網路協調器發起的,任何一個zigbee節點要組建一個網路必須要滿足以下兩點要求:
1.節點是FFD節點,具備zigbee協調器的能力;
2.節點還沒有與其他網路連接,當節點已經與其他網路連接時,此節點只能作為該網路的子節點,因為一個zigbee網路中有且只有一個網路協調器。任何不滿足這兩個條件的節點發起建立一個新網路的進程都會被網路層管理實體終止,網路層管理實體將通過參數值為INVALID_REQUEST的LME_NETWORK_FORMATION.confirm的原語來通知上層這是一個非法請求。
網路初始化的流程如下:
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節點需要向協調器提出請求,協調器接收到節點的連接請求後根據情況決定是否允許其連接,然後對請求連接的節點做出響應,節點與協調器建立連接後,才能實現數據的收發。具體的流程可以分為下面的步驟: 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位的網路地址,此時入網成功,子節點可以開始通信。如果請求失敗,那麼重新查找相鄰表,繼續發送請求信息,直到加入網路或者相鄰表中沒有合適的父節點。
轉載自:ZigBee組網
===================================================================請題主多多用搜索引擎。另外ZigBee是自組網,使用ZigBee時不需要考慮組網問題,底層會自動組網。首先要區分協議跟協議棧。◇協議是一種規定。是一系列的通信標準,通信雙方按照這一標準進行數據收發。◇協議棧是一系列代碼,是協議的具體實現形式,通俗的理解就是用代碼實現的函數庫,以便開發人員調用。而z_stack就是zigbee的協議棧,所以要用zigbee建網就要用到該協議棧,調用其中的函數。◇zigbee網路設備主要由協調器,路由器,終端節點組成。協調器的作用就是組建網路及維護網路,它上電後可以自己尋找信道及網路地址,建網成功後和路由器功能一致。IAR為集成開發環境,當把協調器,路由器,終端節點的代碼分別down在其晶元時他們便可以自動組網,無線傳輸數據。
zigbee組網還是很複雜的。簡單了解下:
zigbee網路中有三種角色,協調器、終端、路由器,這三種設備硬體上都是一樣的,也就是說任意一個zigbee設備都可以成為協調器、終端或者路由器,完全由協議棧裡邊程序決定。
組網過程
協調器創建網路,終端節點或者路由器請求加入網路,成功後分配地址,組網成功
詳細組網過程可以看看Zstack協議棧
要知道怎麼組網最簡單的方法是抓包,分析源代碼。看多少資料不如親自抓包來的實在一些。
先佔坑--------------------------------------------------------------------畢設的題目是關於ZigBee的
推薦閱讀:
※當物聯網、雲計算和大數據發展到一定高度時,計算機能不能實現真正有效率的計劃經濟?
※什麼是物聯網?其發展前景如何?
※物聯網會給人的生活帶來哪些革命性變化?
※醫療「物聯網」時代為好大夫這樣的醫患平台網站帶來了什麼機會?
※什麼是物聯網,什麼是區塊鏈,什麼是大數據?