Zigbee組網(wǎng)原理詳解
1.組網(wǎng)概述
本文引用地址:http://dyxdggzs.com/article/201710/368375.htm組建一個(gè)完整的zigbee網(wǎng)狀網(wǎng)絡(luò )包括兩個(gè)步驟:網(wǎng)絡(luò )初始化、節點(diǎn)加入網(wǎng)絡(luò )。其中節點(diǎn)加入網(wǎng)絡(luò )又包括兩個(gè)步驟:通過(guò)與協(xié)調器連接入網(wǎng)和通過(guò)已有父節點(diǎn)入網(wǎng)。
2. 網(wǎng)絡(luò )初始化預備
Zigbee網(wǎng)絡(luò )的建立是由網(wǎng)絡(luò )協(xié)調器發(fā)起的,任何一個(gè)zigbee節點(diǎn)要組建一個(gè)網(wǎng)絡(luò )必須要滿(mǎn)足以下兩點(diǎn)要求:
?。?)節點(diǎn)是FFD節點(diǎn),具備zigbee協(xié)調器的能力;
?。?)節點(diǎn)還沒(méi)有與其他網(wǎng)絡(luò )連接,當節點(diǎn)已經(jīng)與其他網(wǎng)絡(luò )連接時(shí),此節點(diǎn)只能作為該網(wǎng)絡(luò )的子節點(diǎn),因為一個(gè)zigbee網(wǎng)絡(luò )中有且只有一個(gè)網(wǎng)絡(luò )協(xié)調器。
FFD:Full FuncTIon Device 全功能節點(diǎn)
RFD:Reduced FuncTIonDevice 半功能節點(diǎn)
3.網(wǎng)絡(luò )初始化流程
3.1 確定網(wǎng)絡(luò )協(xié)調器:
首先判斷節點(diǎn)是否是FFD節點(diǎn),接著(zhù)判斷此FFD節點(diǎn)是否在其他網(wǎng)絡(luò )里或者網(wǎng)絡(luò )里是否已經(jīng)存在協(xié)調器。通過(guò)主動(dòng)掃描,發(fā)送一個(gè)信標請求命令(Beaconrequest command),然后設置一個(gè)掃描期限(T_scan_duraTIon),如果在掃描期限內都沒(méi)有檢測到信標,那么就認為FFD在其pos內沒(méi)有協(xié)調器,那么此時(shí)就可以建立自己的zigbee網(wǎng)絡(luò ),并且作為這個(gè)網(wǎng)絡(luò )的協(xié)調器不斷地產(chǎn)生信標并廣播出去。
注意:一個(gè)網(wǎng)絡(luò )里,有且只能有一個(gè)協(xié)調器(coordinator)。
3.2 進(jìn)行信道掃描過(guò)程。
包括能量掃描和主動(dòng)掃描兩個(gè)過(guò)程:首先對指定的信道或者默認的信道進(jìn)行能量檢測,以避免可能的干擾。以遞增的方式對所測量的能量值進(jìn)行信道排序,拋棄那么些能量值超出了可允許能量水平的信道,選擇可允許能量水平的信道并標注這些信道是可用信道。接著(zhù)進(jìn)行主動(dòng)掃描,搜索節點(diǎn)通信半徑內的網(wǎng)絡(luò )信息。這些信息以信標幀的形式在網(wǎng)絡(luò )中廣播,節點(diǎn)通過(guò)主動(dòng)信道掃描方式獲得這些信標幀,然后根據這些信息,找到一個(gè)最好的、相對安靜的信道,通過(guò)記錄的結果,選擇一個(gè)信道,該信道應存在最少的zigbee網(wǎng)絡(luò ),最好是沒(méi)有zigbee設備。在主動(dòng)掃描期間,MAC層將丟棄PHY層數據服務(wù)接收到的除信標以外的所有幀。
3.3 設置網(wǎng)絡(luò )ID。
找到合適的信道后,協(xié)調器將為網(wǎng)絡(luò )選定一個(gè)網(wǎng)絡(luò )標識符(PAN ID,取值《=0x3FFF),這個(gè)ID在所使用的信道中必須是唯一的,也不能和其他zigbee網(wǎng)絡(luò )沖突,而且不能為廣播地址0xFFFF(此地址為保留地址,不能使用)。PAN ID可以通過(guò)偵聽(tīng)其他網(wǎng)絡(luò )的ID然后選擇一個(gè)不會(huì )沖突的ID的方式來(lái)獲取,也可以人為的指定掃描的信道后,來(lái)確定不和其他網(wǎng)絡(luò )沖突的PAN ID。
在zigbee網(wǎng)絡(luò )中有兩種地址模式:擴展地址(64位)和短地址(16位),其中擴展地址由IEEE組織分配,用于唯一的設備標識;短地址用于本地網(wǎng)絡(luò )中設備標識,在一個(gè)網(wǎng)絡(luò )中,每個(gè)設備的短地址必須唯一,當節點(diǎn)加入網(wǎng)絡(luò )時(shí)由其父節點(diǎn)分配并通過(guò)使用短地址來(lái)通信。對于協(xié)調器來(lái)說(shuō),短地址通常設定為0x0000。
上面步驟完成后,就成功初始化了zigbee網(wǎng)狀網(wǎng)絡(luò ),之后就等待其他節點(diǎn)的加入。節點(diǎn)入網(wǎng)時(shí)將選擇范圍內信號最強的父節點(diǎn)(包括協(xié)調器)加入網(wǎng)絡(luò ),成功后將得到一個(gè)網(wǎng)絡(luò )短地址并通過(guò)這個(gè)地址進(jìn)行數據的發(fā)送和接收,網(wǎng)絡(luò )拓撲關(guān)系和地址就會(huì )保存在各自的flash中。
4.節點(diǎn)通過(guò)協(xié)調器加入網(wǎng)絡(luò )
當節點(diǎn)協(xié)調器確定之后,節點(diǎn)首先需要和協(xié)調器建立連接加入網(wǎng)絡(luò )。
為了建立連接,FFD節點(diǎn)需要向協(xié)調器提出請求,協(xié)調器接收到節點(diǎn)的連接請求后根據情況決定是否允許其連接,然后對請求連接的節點(diǎn)做出響應,節點(diǎn)與協(xié)調器建立連接后,才能實(shí)現數據的收發(fā)。節點(diǎn)加入網(wǎng)絡(luò )的具體流程可以分為下面的步驟:
4.1 查找網(wǎng)絡(luò )協(xié)調器。
首先會(huì )主動(dòng)掃描查找周?chē)W(wǎng)絡(luò )的協(xié)調器,如果在掃描期限內檢測到信 標,那么將獲得了協(xié)調器的有關(guān)信息,這時(shí)就向協(xié)調器發(fā)出連接請求。在選擇合適的網(wǎng)絡(luò )之后,上層將請求MAC層對物理層PHY和MAC層的phyCurrentChannel、macPANID等PIB屬性進(jìn)行相應的設置。如果沒(méi)有檢測到,間隔一段時(shí)間后,節點(diǎn)重新發(fā)起掃描。
4.2 發(fā)送關(guān)聯(lián)請求命令(Associaterequest command)。
節點(diǎn)將關(guān)聯(lián)請求命令發(fā)送給協(xié)調器,協(xié)調器收到后立即回復一個(gè)確認幀(ACK),同時(shí)向它的上層發(fā)送連接指示原語(yǔ),表示已經(jīng)收到節點(diǎn)的連接請求。但是這并不意味著(zhù)已經(jīng)建立連接,只表示協(xié)調器已經(jīng)收到節點(diǎn)的連接請求。當協(xié)調器的mac層的上層接收到連接指示原語(yǔ)后,將根據自己的資源情況(存儲空間和能量)決定是否同意此節點(diǎn)的加入請求,然后給節點(diǎn)的mac層發(fā)送響應。
4.3 等待協(xié)調器處理。
當節點(diǎn)收到協(xié)調器加入關(guān)聯(lián)請求命令的ACK后,節點(diǎn)mac將等待一段時(shí)間,接受協(xié)調器的連接響應。在預定的時(shí)間內,如果接收到連接響應,它將這個(gè)響應向它的上層通告。而協(xié)調器給節點(diǎn)的mac層發(fā)送響應時(shí)會(huì )設置一個(gè)等待響應時(shí)間(T_ResponseWaitTIme)來(lái)等待協(xié)調器對其加入請求命令的處理,若協(xié)調器的資源足夠,協(xié)調器會(huì )給節點(diǎn)分配一個(gè)16位的短地址,并產(chǎn)生包含新地址和連接成功狀態(tài)的連接響應命令,則此節點(diǎn)將成功的和協(xié)調器建立連接并可以開(kāi)始通信。若協(xié)調器資源不夠,待加入的節點(diǎn)將重新發(fā)送請求信息,直接入網(wǎng)成功。
4.4 發(fā)送數據請求命令。
如果協(xié)調器在響應時(shí)間內同意節點(diǎn)加入,那么將產(chǎn)生關(guān)聯(lián)響應命令(Associateresponse command)并存儲這個(gè)命令。當響應時(shí)間過(guò)后,節點(diǎn)發(fā)送數據請求命令(Datarequest command)給協(xié)調器,協(xié)調器收到后立即回復ACK,然后將存儲的關(guān)聯(lián)響應命令發(fā)給節點(diǎn)。如果在響應時(shí)間到后,協(xié)調器還沒(méi)有決定是否同意節點(diǎn)加入,那么節點(diǎn)將試圖從協(xié)調器的信標幀中提取關(guān)聯(lián)響應命令,成功的話(huà)就可以入網(wǎng)成功,否則重新發(fā)送請求信息直到入網(wǎng)成功。
4.5 回復。
節點(diǎn)收到關(guān)聯(lián)響應命令后,立即向協(xié)調器回復一個(gè)確認幀(ACK),以確認接收到連接響應命令,此時(shí)節點(diǎn)將保存協(xié)調器的短地址和擴展地址,并且節點(diǎn)的MLME向上層發(fā)送連接確認原語(yǔ),通告關(guān)聯(lián)加入成功的信息。
5.節點(diǎn)通過(guò)已有節點(diǎn)加入網(wǎng)絡(luò )
當靠近協(xié)調器的FFD節點(diǎn)和協(xié)調器關(guān)聯(lián)成功后,處于這個(gè)網(wǎng)絡(luò )范圍內的其他節點(diǎn)就以這些FFD節點(diǎn)作為父節點(diǎn)加入網(wǎng)絡(luò )了,具體加入網(wǎng)絡(luò )有兩種方式,一種是通過(guò)關(guān)聯(lián)(associate)方式,就是待加入的節點(diǎn)發(fā)起加入網(wǎng)絡(luò );另一種是直接(direct)方式,就是待加入的節點(diǎn)具體加入到那個(gè)節點(diǎn)下,作為該節點(diǎn)的子節點(diǎn)。其中關(guān)聯(lián)方式是zigbee網(wǎng)絡(luò )中新節點(diǎn)加入網(wǎng)絡(luò )的主要途徑。
對于一個(gè)節點(diǎn)來(lái)說(shuō)只有沒(méi)有加入過(guò)網(wǎng)絡(luò )的才能進(jìn)行加入網(wǎng)絡(luò )。在這些節點(diǎn)中,有些是曾經(jīng)加入過(guò)網(wǎng)絡(luò )中,但是卻與它的父節點(diǎn)失去聯(lián)系(這樣的被稱(chēng)為孤兒節點(diǎn)),而有些則是新節點(diǎn)。當是孤兒節點(diǎn)時(shí),在它的相鄰表中存有原父節點(diǎn)的信息,于是它可以直接給原父節點(diǎn)發(fā)送加入網(wǎng)絡(luò )的請求信息。如果父節點(diǎn)有能力同意它加入,于是直接告訴它的以前被分配的網(wǎng)絡(luò )地址,它便入網(wǎng)成功;如果此時(shí)它原來(lái)的父節點(diǎn)的網(wǎng)絡(luò )中,子節點(diǎn)數已達到最大值,也就是說(shuō)網(wǎng)絡(luò )地址已經(jīng)分配滿(mǎn),父節點(diǎn)便無(wú)法批準它加入,它只能以新節點(diǎn)身份重新尋找并加入網(wǎng)絡(luò )。
而對于新節點(diǎn)來(lái)說(shuō),他首先會(huì )在預先設定的一個(gè)或多個(gè)信道上通過(guò)主動(dòng)或被動(dòng)掃描周?chē)梢哉业降木W(wǎng)絡(luò ),尋找有能力批準自己加入網(wǎng)絡(luò )的父節點(diǎn),并把可以找到的父節點(diǎn)的資料存入自己的相鄰表。存入相鄰表的父節點(diǎn)的資料包括zigbee協(xié)議的版本、協(xié)議棧的規范、PAN ID和可以加入的信息。在相鄰表中所有的父節點(diǎn)中選擇一個(gè)深度最小的,并對其發(fā)出請求信息,如果出現相同最小深度的兩個(gè)以上的父節點(diǎn),那么隨機選取一個(gè)發(fā)送請求。如果相鄰表中沒(méi)有合適的父節點(diǎn)的信息,那么表示入網(wǎng)失敗,終止過(guò)程。如果發(fā)出的請求被批準,那么父節點(diǎn)同時(shí)會(huì )分配一個(gè)16位的網(wǎng)絡(luò )地址,此時(shí)入網(wǎng)成功,子節點(diǎn)可以開(kāi)始通信。如果請求失敗,那么重新查找相鄰表,繼續發(fā)送請求信息,直到加入網(wǎng)絡(luò )。
評論