




已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
Z-Stack開發(fā)指南2. ZigBee2.1 設(shè)備類型(Device Types)在ZigBee網(wǎng)絡中存在三種邏輯設(shè)備類型:Coordinator(協(xié)調(diào)器),Router(路由器)和End-Device(終端設(shè)備)。ZigBee網(wǎng)絡由一個Coordinator以及多個Router和多個End_Device組成。上圖是一個簡單的ZigBee網(wǎng)絡示意圖。其中黑色節(jié)點為Coordinator,紅色節(jié)點為Router,白色節(jié)點為End-Device。2.1.1 Coordinator(協(xié)調(diào)器)協(xié)調(diào)器負責啟動整個網(wǎng)絡。它也是網(wǎng)絡的第一個設(shè)備。協(xié)調(diào)器選擇一個信道和一個網(wǎng)絡ID(也稱之為PAN ID,即Personal Area Network ID),隨后啟動整個網(wǎng)絡。協(xié)調(diào)器也可以用來協(xié)助建立網(wǎng)絡中安全層和應用層的綁定(bindings)。注意,協(xié)調(diào)器的角色主要涉及網(wǎng)絡的啟動和配置。一旦這些都完成后,協(xié)調(diào)器的工作就像一個路由器(或者消失go away)。由于ZigBee網(wǎng)絡本身的分布特性,因此接下來整個網(wǎng)絡的操作就不在依賴協(xié)調(diào)器是否存在。2.1.2 Router(路由器)路由器的功能主要是:允許其他設(shè)備加入網(wǎng)絡,多跳路由和協(xié)助它自己的由電池供電的兒子終端設(shè)備的通訊。通常,路由器希望是一直處于活動狀態(tài),因此它必須使用主電源供電。但是當使用樹群這種網(wǎng)絡模式時,允許路由間隔一定的周期操作一次,這樣就可以使用電池給其供電。2.1.3 End-Device(終端設(shè)備)終端設(shè)備沒有特定的維持網(wǎng)絡結(jié)構(gòu)的責任,它可以睡眠或者喚醒,因此它可以可以是一個電池供電設(shè)備。通常,終端設(shè)備對存儲空間(特別是RAM的需要)比較小。 注意:在Z-Stack 1.4.1中一個設(shè)備的類型通常在編譯的時候通過編譯選項(ZDO_COORDINATOR 和RTR_NWK)確定。所有的應用例子都提供獨立的項目文件來編譯每一種設(shè)備類型。2.2 棧配置(Stack Profile)棧參數(shù)的集合需要被配置為一定的值,連同這些值在一起被稱之為棧配置。ZigBee聯(lián)盟定義了這些由棧配置組成的棧參數(shù)。網(wǎng)絡中的所有設(shè)備必須遵循同樣的棧配置。為了促進互用性這個目標,ZigBee聯(lián)盟為ZigBee2006規(guī)范定義了棧配置。所有遵循此棧配置的設(shè)備可以在其他開發(fā)商開發(fā)的遵循同樣棧配置的網(wǎng)絡中。3. 尋址(Addressing)3.1 地址類型(Address types)ZigBee設(shè)備有兩種類型的地址。一種是64位IEEE地址,即MAC地址,另一種是16位網(wǎng)絡地址。64位地址使全球唯一的地址,設(shè)備將在它的生命周期中一直擁有它。它通常由制造商或者被安裝時設(shè)置。這些地址由IEEE來維護和分配。16為網(wǎng)絡地址是當設(shè)備加入網(wǎng)絡后分配的。它在網(wǎng)絡中是唯一的,用來在網(wǎng)絡中鑒別設(shè)備和發(fā)送數(shù)據(jù)。3.2 網(wǎng)絡地址分配(Network address assignment)ZigBee使用分布式尋址方案來分配網(wǎng)絡地址。這個方案保證在整個網(wǎng)絡中所有分配的地址是唯一的。這一點是必須的,因為這樣才能保證一個特定的數(shù)據(jù)包能夠發(fā)給它指定的設(shè)備,而不出現(xiàn)混亂。同時,這個尋址算法本身的分布特性保證設(shè)備只能與他的父輩設(shè)備通訊來接受一個網(wǎng)絡地址。不需要整個網(wǎng)絡范圍內(nèi)通訊的地址分配,這有助于網(wǎng)絡的可測量性。 在每個路由加入網(wǎng)絡之前,尋址方案需要知道和配置一些參數(shù)。這些參數(shù)是MAX_DEPTH,MAX_ROUTERS和MAX_CHILDREN。這些參數(shù)是棧配置的一部分,ZigBee2006協(xié)議棧已經(jīng)規(guī)定了這些參數(shù)的值:MAX_DEPTH = 5,MAX_ROUTERS = 6和MAX_CHILDREN = 20。 MAX_DEPTH決定了網(wǎng)絡的最大深度。協(xié)調(diào)器(Coordinator)位于深度0,它的兒子位于深度1,他的兒子的的兒子位于深度2,以此類推。MAX_DEPTH參數(shù)限制了網(wǎng)絡在物理上的長度。 MAX_CHILDREN決定了一個路由(Router)或者一個協(xié)調(diào)器節(jié)點可以處理的兒子節(jié)點的最大個數(shù)。 MAX_ROUTER決定了一個路由(Router)或者一個協(xié)調(diào)器(Coordinator)節(jié)點可以處理的具有路由功能的兒子節(jié)點的最大個數(shù)。這個參數(shù)是MAX_CHILDREN的一個子集,終端節(jié)點使用(MAX_CHILDREN MAX_ROUTER)剩下的地址空間。 如果開發(fā)人員想改變這些值,則需要完成以下幾個步驟: 首先,你要保證這些參數(shù)新的賦值要合法。即,整個地址空間不能超過216,這就限制了參數(shù)能夠設(shè)置的最大值。可以使用projectsZStacktools文件夾下的CSkip.xls文件來確認這些值是否合法。當在表格中輸入了這些數(shù)據(jù)后,如果你的數(shù)據(jù)不合法的話就會出現(xiàn)錯誤信息。 當選擇了合法的數(shù)據(jù)后,開發(fā)人員還要保證不再使用標準的棧配置,取而代之的是網(wǎng)絡自定義棧配置(例如:在nwk_globals.h文件中將STACK_PROFILE_ID改為NETWORK_SPECIFIC)。然后nwk_globals.h文件中的MAX_DEPTH參數(shù)將被設(shè)置為合適的值。 此外,還必須設(shè)置nwk_globals.c文件中的Cskipchldrn數(shù)組和CskipRtrs數(shù)組。這些數(shù)組的值由MAX_CHILDREN和MAX_ROUTER構(gòu)成。3.3 Z-Stack尋址(Addressing in z-stack)為了向一個在ZigBee網(wǎng)絡中的設(shè)備發(fā)送數(shù)據(jù),應用程序通常使用AF_DataRequest()函數(shù)。數(shù)據(jù)包將要發(fā)送給一個afAddrType_t(在ZComDef.h中定義)類型的目標設(shè)備。typedef structunionuint16 shortAddr; addr;afAddrMode_t addrMode;byte endPoint; afAddrType_t;注意,除了網(wǎng)路地址之外,還要指定地址模式參數(shù)。目的地址模式可以設(shè)置為以下幾個值:typedef enumafAddrNotPresent = AddrNotPresent,afAddr16Bit = Addr16Bit,afAddrGroup = AddrGroup,afAddrBroadcast = AddrBroadcast afAddrMode_t;因為在Zigbee中,數(shù)據(jù)包可以單點傳送(unicast),多點傳送(multicast)或者廣播傳送,所以必須有地址模式參數(shù)。一個單點傳送數(shù)據(jù)包只發(fā)送給一個設(shè)備,多點傳送數(shù)據(jù)包則要傳送給一組設(shè)備,而廣播數(shù)據(jù)包則要發(fā)送給整個網(wǎng)絡的所有節(jié)點。這個將在下面詳細解釋。3.3.1 單點傳送(Unicast)Uicast是標準尋址模式,它將數(shù)據(jù)包發(fā)送給一個已經(jīng)知道網(wǎng)絡地址的網(wǎng)絡設(shè)備。將afAddrMode設(shè)置為Addr16Bit并且在數(shù)據(jù)包中攜帶目標設(shè)備地址。3.3.2 間接傳送(Indirect)當應用程序不知道數(shù)據(jù)包的目標設(shè)備在哪里的時候使用的模式。將模式設(shè)置為AddrNotPresent并且目標地址沒有指定。取代它的是從發(fā)送設(shè)備的棧的綁定表中查找目標設(shè)備。這種特點稱之為源綁定。當數(shù)據(jù)向下發(fā)送到達棧中,從綁定表中查找并且使用該目標地址。這樣,數(shù)據(jù)包將被處理成為一個標準的單點傳送數(shù)據(jù)包。如果在綁定表中找到多個設(shè)備,則向每個設(shè)備都發(fā)送一個數(shù)據(jù)包的拷貝。上一個版本的ZigBee(ZigBee04),有一個選項可以講綁定表保存在協(xié)調(diào)器(Coordinator)當中。發(fā)送設(shè)備將數(shù)據(jù)包發(fā)送給協(xié)調(diào)器,協(xié)調(diào)器查找它棧中的綁定表,然后將數(shù)據(jù)發(fā)送給最終的目標設(shè)備。這個附加的特性叫做協(xié)調(diào)器綁定(Coordinator Binding)。3.3.3 廣播傳送(broadcast)當應用程序需要將數(shù)據(jù)包發(fā)送給網(wǎng)絡的每一個設(shè)備時,使用這種模式。地址模式設(shè)置為AddrBroadcast。目標地址可以設(shè)置為下面廣播地址的一種:NWK_BROADCAST_SHORTADDR_DEVALL(0xFFFF)數(shù)據(jù)包將被傳送到網(wǎng)絡上的所有設(shè)備,包括睡眠中的設(shè)備。對于睡眠中的設(shè)備,數(shù)據(jù)包將被保留在其父親節(jié)點直到查詢到它,或者消息超時(NWK_INDIRECT_MSG_TIMEOUT在f8wConifg.cfg中)。NWK_BROADCAST_SHORTADDR_DEVRXON(0xFFFD)數(shù)據(jù)包將被傳送到網(wǎng)絡上的所有在空閑時打開接收的設(shè)備(RXONWHENIDLE),也就是說,除了睡眠中的所有設(shè)備。NWK_BROADCAST_SHORTADDR_DEVZCZR(0xFFFC)數(shù)據(jù)包發(fā)送給所有的路由器,包括協(xié)調(diào)器。3.3.4 組尋址(Group Addressing)當應用程序需要將數(shù)據(jù)包發(fā)送給網(wǎng)絡上的一組設(shè)備時,使用該模式。地址模式設(shè)置為afAddrGroup并且addr.shortAddr設(shè)置為組ID。在使用這個功能呢之前,必須在網(wǎng)絡中定義組。(參見Z-stack API文檔中的aps_AddGroup()函數(shù))。注意組可以用來關(guān)聯(lián)間接尋址。再綁定表中找到的目標地址可能是是單點傳送或者是一個組地址。另外,廣播發(fā)送可以看做是一個組尋址的特例。下面的代碼是一個設(shè)備怎樣加入到一個ID為1的組當中:aps_Group_t group;/ Assign yourself to group 1group.ID = 0x0001;0 = 0; / This could be a human readable stringaps_AddGroup( SAMPLEAPP_ENDPOINT, &group );3.4 重要設(shè)備地址(Important Device Adresses)應用程序可能需要知道它的設(shè)備地址和父親地址。使用下面的函數(shù)獲取設(shè)備地址(在ZStack API中定義):l NLME_GetShortAddr()返回本設(shè)備的16位網(wǎng)絡地址l NLME_GetExtAddr() 返回本設(shè)備的64位擴展地址使用下面的函數(shù)獲取該設(shè)備的父親設(shè)備的地址:l NLME_GetCoordShortAddr()返回本設(shè)備的父親設(shè)備的16位網(wǎng)絡地址l NLME_GetCoordExtAddr() 返回本設(shè)備的父親設(shè)備的64位擴展地址4. 綁定(Binding)綁定是一種兩個(或者多個)應用設(shè)備之間信息流的控制機制。在ZigBee2006發(fā)布版本中,它被稱為資源綁定,所有的設(shè)備都必須執(zhí)行綁定機制。綁定允許應用程序發(fā)送一個數(shù)據(jù)包而不需要知道目標地址。APS層從它的綁定表中確定目標地址,然后將數(shù)據(jù)繼續(xù)向目標應用或者目標組發(fā)送。注意:在ZigBee的1.0版本中,綁定表是保存在協(xié)調(diào)器(Coordinator當中)?,F(xiàn)在所有的綁定記錄都保存在發(fā)送信息的設(shè)備當中。4.1 建立綁定表(Building a Binding Table)有三種方法可以建立一個綁定表:l Zigbee Device Object Bind Request一個啟動工具可以告訴設(shè)備創(chuàng)建一個綁定記錄l Zigbee Device Object End Device Bind Request兩個設(shè)備可以告訴協(xié)調(diào)器它們想要建立一個綁定表記錄。協(xié)調(diào)器來協(xié)調(diào)并在兩個設(shè)備中創(chuàng)建綁定表記錄。l Device Application一個設(shè)備上的應用程序建立或者管理一個綁定表4.1.1 ZigBee Device Object Binding Request任何一個設(shè)備都可以發(fā)送一個ZDO信息給網(wǎng)絡中的另一個設(shè)備,用來建立綁定表。稱之為援助綁定,它可以為一個發(fā)送設(shè)備創(chuàng)建一個綁定記錄。 啟動申請(The Commissioning Application)一個應用程序可以通過ZDP_BindReq()函數(shù)(在ZDProfile.h),并在綁定表中包含兩個請求(地址和終點)以及想要的群ID。第一個參數(shù)(目標dstAddr)是綁定源的短地址即,16位網(wǎng)絡地址。確定你已經(jīng)在ZDConfig.h允許了這個功能(ZDO_BIND_UNBIND_REQUEST)。你也可以使用ZDP_UnbindReq()用同樣的參數(shù)取消綁定記錄。目標設(shè)備發(fā)回ZigBee Device Object Bind 或者Unbind Response信息,該信息是ZDO代碼根據(jù)動作的狀態(tài),通過調(diào)用ZDApp_BindRsq()或者ZDApp_UnbindRsq()函數(shù)來分析和通知ZDApp.c的。對于綁定響應,從協(xié)調(diào)器返回的狀態(tài)將是ZDP_SUCCESS,ZDP_TABLE_FULL或者ZDP_NOT_SUPPORTED。對于解除綁定響應,從協(xié)調(diào)器返回的狀態(tài)將是ZDP_SUCCESS,ZDP_NO_ENTRY或者ZDP_NOT_SUPPORTED。 ZigBee Device Object End Device Bind Request這個機制是在指定的時間周期(timeout period)內(nèi),通過按下選定設(shè)備上的按鈕或者類似的動作來綁定。協(xié)調(diào)器在指定的時間周期內(nèi),搜集終端設(shè)備的綁定請求信息,然后以配置ID(Profile ID)和群ID(Cluster ID)協(xié)議為基礎(chǔ),創(chuàng)建一個綁定表記錄作為結(jié)果。默認的設(shè)備綁定時間周期(APS_DEFAULT_MAXBINDING_TIME)是16秒鐘(在nwk_globals.h中定義)。但是將它添加到f8wConfig.cfg中,則可以更改。在“用戶指南”中的應用程序就是一個終端設(shè)備綁定的例子(在每個設(shè)備上按下SW2按鍵)。你應該注意到,所有的例程都有處理關(guān)鍵事件的函數(shù)(例如:在TransmitApp.c中的TransmitApp_HandleKeys()函數(shù))。這個函數(shù)調(diào)用ZDApp_SendEndDeviceBindReq()(在ZDApp.c中)。這個函數(shù)搜集所有終端節(jié)點的請求信息,然后調(diào)用ZDP_EndDeviceBindReq()函數(shù)將這些信息發(fā)送給協(xié)調(diào)器。協(xié)調(diào)器調(diào)用函數(shù)ZDP_IncomingData()【ZDProfile.c中】函數(shù)接收這些信息,然后再調(diào)用ZDApp_ProcessEndDeviceBindReq ()【ZDObject.c中】函數(shù)分析這些信息,最后調(diào)用ZDApp_EndDeviceBindReqCB【ZDApp.c中】函數(shù),這個函數(shù)再調(diào)用ZDO_MatchEndDeviceBind()【ZDObject.c中】函數(shù)來處理這個請求。當收到兩個匹配的終端設(shè)備綁定請求,協(xié)調(diào)器在請求設(shè)備中啟動創(chuàng)建源綁定記錄的進程。假設(shè)在ZDO終端設(shè)備中發(fā)現(xiàn)了匹配的請求,協(xié)調(diào)器將執(zhí)行下面的步驟:l 發(fā)送一個解除綁定請求給第一個設(shè)備。這個終端設(shè)備鎖定進程,這樣解除綁定被首先發(fā)送來去掉一個已經(jīng)存在的綁定記錄。l 等待ZDO解除綁定的響應,如果響應的狀態(tài)是ZDP_NO_ENTRY,則發(fā)送一個ZDO綁定請求在源設(shè)備中創(chuàng)建一個綁定記錄。如果狀態(tài)是ZDP_SUCCESS,則繼續(xù)前進到第一個設(shè)備的群ID。l 等待ZDO綁定響應,如果收到了,則繼續(xù)前進到第一個設(shè)備的下一個群ID。l 當?shù)匾粋€設(shè)備完成后,用同樣的方法處理第二個設(shè)備。l 當?shù)诙€設(shè)備也完成之后,發(fā)送ZDO 終端設(shè)備綁定請求消息給兩個設(shè)備。 Device Application Binding Manager另一種進入設(shè)備綁定記錄的方式是應用自己管理綁定表。這就意味著應用程序需要通過調(diào)用下面的綁定管理函數(shù)在本地進入并且刪除綁定記錄:l bindAddEntry()在綁定表中增加一個記錄l bindRemoveEntry()從綁定表中刪除一個記錄l bindRomoveClusterIdFromList()從一個存在的綁定表記錄中刪除一個群IDl bindAddClusterIdToList()向一個已經(jīng)存在的綁定記錄中增加一個群IDl bindRemoveDev()刪除所有地址引用的記錄l bindRemoveSrcDev()刪除所有源地址引用的記錄l bindUpdateAddr()將記錄更新為另一個地址l bindFindExisting()查找一個綁定表記錄l bindIsClusterIdInList()在表記錄中檢查一個已經(jīng)存在的群IDl bindNumBoundTo()擁有相同地址(源或者目的)的記錄的個數(shù)l bindNumEntries()表中記錄的個數(shù)l bindCapacity()最多允許的記錄個數(shù)l bindWriteNV()在NV中更新表4.1.2 配置源綁定(Configuring Source Binding)為了在你的設(shè)備中使能源綁定在f8wConfig.cfg文件中包含REFLECTOR編譯標志。同時在f8wConfig.cfg文件中查看配置項目NWK_MAX_BINDING_ENTRIES和MAX_BINDING_CLUSTER_IDS。NWK_MAX_BINDING_ENTRIES是限制綁定表中的記錄的最大個數(shù),MAX_BINDING_CLUSTER_IDS是每個綁定記錄的群ID的最大個數(shù)。 綁定表在靜態(tài)RAM中(未分配),因此綁定表中記錄的個數(shù),每條記錄中群ID的個數(shù)都實際影響著使用RAM的數(shù)量。每一條綁定記錄是8字節(jié)多(MAX_BINDING_CLUSTER_IDS * 2字節(jié))。除了綁定表使用的靜態(tài)RAM的數(shù)量,綁定配置項目也影響地址管理器中的記錄的個數(shù)。5. 路由(Routing)5.1 概述(Overview)A mesh network is described as a network in which the routing of messages is performed as a decentralized,cooperative process involving many peer devices routing on each others behalf. 路由對與應用層來說是完全透明的。應用程序只需簡單的向下發(fā)送去往任何設(shè)備的數(shù)據(jù)到棧中,棧會負責尋找路徑。這種方法,應用程序不知道操作是在一個多跳的網(wǎng)絡當中的。 路由還能夠自愈ZigBee網(wǎng)絡,如果某個無線連接斷開了,路由功能又能自動尋找一條新的路徑避開那個斷開的網(wǎng)絡連接。這就極大的提高了網(wǎng)絡的可靠性,同時也是ZigBee網(wǎng)絡的一個關(guān)鍵特性。5.2 路由協(xié)議(Routing Protocol)ZigBee執(zhí)行基于用于AODV專用網(wǎng)絡的路由協(xié)議。簡化后用于傳感器網(wǎng)絡。ZigBee路由協(xié)議有助于網(wǎng)絡環(huán)境有能力支持移動節(jié)點,連接失敗和數(shù)據(jù)包丟失。當路由器從他自身的應用程序或者別的設(shè)備那里收到一個單點發(fā)送的數(shù)據(jù)包,則網(wǎng)絡層(NWK Layer)根據(jù)一下程序?qū)⑺^續(xù)傳遞下去。如果目標節(jié)點是它相鄰路由器中的一個,則數(shù)據(jù)包直接被傳送給目標設(shè)備。否則,路由器將要檢索它的路由表中與所要傳送的數(shù)據(jù)包的目標地址相符合的記錄。如果存在與目標地址相符合的活動路由記錄,則數(shù)據(jù)包將被發(fā)送到存儲在記錄中的下一級地址中去。如果沒有發(fā)現(xiàn)任何相關(guān)的路由記錄,則路由器發(fā)起路徑尋找,數(shù)據(jù)包存儲在緩沖區(qū)中知道路徑尋找結(jié)束。ZigBee終端節(jié)點不執(zhí)行任何路由功能。終端節(jié)點要向任何一個設(shè)備傳送數(shù)據(jù)包,它只需簡單的將數(shù)據(jù)向上發(fā)送給它的父親設(shè)備,由它的父親設(shè)備以它自己的名義執(zhí)行路由。同樣的,任何一個設(shè)備要給終端節(jié)點發(fā)送數(shù)據(jù),發(fā)起路由尋找,終端節(jié)的的父親節(jié)點都已它的名義來回應。注意ZigBee地址分配方案使得對于任何一個目標設(shè)備,根據(jù)它的地址都可以得到一條路徑。在Z-Stack中,如果萬一正常的路徑尋找過程不能啟動的話(通常由于缺少路由表空間),那么Z-Stack擁有自動回退機制。此外,在Z-Stack中,執(zhí)行的路由已經(jīng)優(yōu)化了路由表記錄。通常,每一個目標設(shè)備都需要一條路由表記錄。但是,通過把一定父親節(jié)點記錄與其子所有子結(jié)點的記錄合并,這樣既可以優(yōu)化路徑也可以不喪失任何功能。ZigBee路由器,包括協(xié)調(diào)器執(zhí)行下面的路由函數(shù):(i)路徑發(fā)現(xiàn)和選擇;(ii)路徑保持維護;(iii)路徑期滿。5.2.1 路徑的發(fā)現(xiàn)和選擇(Route Discovery and Selection)路徑發(fā)現(xiàn)是網(wǎng)絡設(shè)備憑借網(wǎng)絡相互協(xié)作發(fā)現(xiàn)和建立路徑的一個過程。路由發(fā)現(xiàn)可以由任意一個路由設(shè)備發(fā)起,并且對于某個特定的目標設(shè)備一直執(zhí)行。路徑發(fā)現(xiàn)機制尋找源地址和目標地址之間的所有路徑,并且試圖選擇可能的最好的路徑。路徑選擇就是選擇出可能的最小成本的路徑。每一個結(jié)點通常持有跟它所有鄰接點的“連接成本(link costs)”。通常,連接成本的典型函數(shù)是接收到的信號的強度。沿著路徑,求出所有連接的連接成本總和,便可以得到整個路徑的“路徑成本”。路由算法試圖尋找到擁有最小路徑成本的路徑。路徑通過一系列的請求和回復數(shù)據(jù)包被發(fā)現(xiàn)。源設(shè)備通過向它的所有鄰接節(jié)點廣播一個路由請求數(shù)據(jù)包,來請求一個目標地址的路徑。當一個節(jié)點接收到RREQ數(shù)據(jù)包,它依次轉(zhuǎn)發(fā)RREQ數(shù)據(jù)包。但是在轉(zhuǎn)發(fā)之前,它要加上最新的連接成本,然后更新RREQ數(shù)據(jù)包中的成本值。這樣,沿著所有它通過的連接,RREQ數(shù)據(jù)包攜帶著連接成本的總和。這個過程一直持續(xù)到RREQ數(shù)據(jù)包到達目標設(shè)備。通過不同的路由器,許多RREQ副本都將到達目標設(shè)備。目標設(shè)備選擇最好的RREQ數(shù)據(jù)包,然后發(fā)回一個路徑答復數(shù)據(jù)包(a Route Reply)RREP給源設(shè)備。RREP數(shù)據(jù)包是一個單點發(fā)送數(shù)據(jù)包,它沿著中間節(jié)點的相反路徑傳送直到它到達原來發(fā)送請求的節(jié)點為止。一旦一條路徑被創(chuàng)建,數(shù)據(jù)包就可以發(fā)送了。當一個結(jié)點與它的下一級相鄰節(jié)點失去了連接(當它發(fā)送數(shù)據(jù)時,沒有收到MAC ACK),該節(jié)點向所有等待接收它的RREQ數(shù)據(jù)包的節(jié)點發(fā)送一個RERR數(shù)據(jù)包,將它的路徑設(shè)為無效。各個結(jié)點根據(jù)收到的數(shù)據(jù)包RREQ、RREP或者RERR來更新它的路由表。5.2.2 路徑保持維護(Route maintenance)網(wǎng)狀網(wǎng)提供路徑維護和網(wǎng)絡自愈功能。中間節(jié)點沿著連接跟蹤傳送失敗,如果一個連接被認定是壞鏈,那么上游節(jié)點將針對所有使用這條連接的路徑啟動路徑修復。節(jié)點發(fā)起重新發(fā)現(xiàn)直到下一次數(shù)據(jù)包到達該節(jié)點,標志路徑修復完成。如果不能夠啟動路徑發(fā)現(xiàn)或者由于某種原因失敗了,節(jié)點則向數(shù)據(jù)包的源節(jié)點發(fā)送一個路徑錯誤包(RERR),它將負責啟動新路徑的發(fā)現(xiàn)。這兩種方法,路徑都自動重建。5.2.3 路徑期滿(Route expiry)路由表為已經(jīng)建立連接路徑的節(jié)點維護路徑記錄。如果在一定的時間周期內(nèi),沒有數(shù)據(jù)通過沿著這條路徑發(fā)送,這條路徑將被表示為期滿。期滿的路徑一直保留到它所占用的空間要被使用為止。這樣,路徑在絕對不使用之前不會被刪除掉的。在配置文件f8wConfig.cfg文件中配置自動路徑期滿時間。設(shè)置ROUTE_EXPIRY_TIME為期滿時間,單位為秒。如果設(shè)置為0,則表示關(guān)閉自動期滿功能。5.3 表存儲(Table storage)路由功能需要路由器保持維護一些表格。 5.3.1 路由表(Routing table)每一個路由器包括協(xié)調(diào)器都包含一個路由表。設(shè)備在路由表中保存數(shù)據(jù)包參與路由所需的信息。每一條路由表記錄都包含有目的地址,下一級節(jié)點和連接狀態(tài)。所有的數(shù)據(jù)包都通過相鄰的一級節(jié)點發(fā)送到目的地址。同樣,為了回收路由表空間,可以終止路由表中的那些已經(jīng)無用的路徑記錄。路由表的容量表明一個設(shè)備路由表擁有一個自由路由表記錄或者說它已經(jīng)有一個與目標地址相關(guān)的路由表記錄。在文件“f8wConfig.cfg”文件中配置路由表的大小。將MAX_RTG_ENTRIES設(shè)置為表的大小(不能小于4)。5.3.2 路徑發(fā)現(xiàn)表(Route discovery table)路由器設(shè)備致力于路徑發(fā)現(xiàn),保持維護路徑發(fā)現(xiàn)表。這個表用來保存路徑發(fā)現(xiàn)過程中的臨時信息。這些記錄只在路徑發(fā)現(xiàn)操作期間存在。一旦某個記錄到期,則它可以被另一個路徑發(fā)現(xiàn)使用。這個值決定了在一個網(wǎng)絡中,可以同時并發(fā)執(zhí)行的路徑發(fā)現(xiàn)的最大個數(shù)。這個可以在f8wConfig.cfg文件中配置MAX_ RREQ_ENTRIES。5.4 路徑設(shè)置快速參考(Routing Settings Quick reference)設(shè)置路由表大小MAX_RTG_ENTRIES,這個值不能小于4 (f8wConfig.cfg文件)設(shè)置路徑期滿時間ROUTE_EXPIRY_TIME,單位秒。設(shè)置為零則關(guān)閉路徑期滿(f8wConfig.cfg文件)設(shè)置路徑發(fā)現(xiàn)表大小MAX_RREQ_ENTRIES,網(wǎng)絡中可以同時執(zhí)行的路徑發(fā)現(xiàn)操作的個數(shù)6. ZDO消息請求(ZDO Message requests)ZDO模塊提供功能用來發(fā)送ZDO服務發(fā)現(xiàn)請求消息,接收ZDO服務發(fā)現(xiàn)回復消息。下圖描述了應用程序發(fā)送IEEE 地址請求和接收IEEE地址回復的函數(shù)調(diào)用。ZDO IEEE地址請求及應答下面這個例子,一個應用程序想知道什么時候一個新的設(shè)備加入網(wǎng)絡。一個應用想要接收所有ZDO設(shè)備的通知信息。ZDO Device Announce delivered to an application7. 便攜式設(shè)備(Portable Devices)在ZigBee2006中終端節(jié)點就是便攜式的設(shè)備。這就意味著當一個終端節(jié)點沒有偵聽到它的父節(jié)點回應(超出范圍或者無法勝任),它將試著重新加入網(wǎng)絡(加入到另一個新的父親節(jié)點)。沒有設(shè)置或者編譯標志位來設(shè)置這個選項。終端節(jié)點通過巡檢(MAC 數(shù)據(jù)請求)失敗或者通過數(shù)據(jù)消息失敗偵聽它的父親節(jié)點都沒有回應。MAX_POLL_FAILURE_RETRIES用來控制失敗的敏感度。這個值可以在f8wConfig.cfg文件中修改。并且,這個值越大敏感度就越低,重新加入網(wǎng)絡需要的時間就更長。當網(wǎng)絡層偵測到它的父親節(jié)點沒有回應,它將調(diào)用ZDO_SynIndicationCB()函數(shù),這個函數(shù)將啟動重新加入。重新加入過程首先對已有的父親節(jié)點進行孤兒掃描(orphan-scan),然后掃描潛在的父親節(jié)點并且跟它的潛在父節(jié)點加入網(wǎng)絡。在一個安全網(wǎng)絡中,假設(shè)設(shè)備都擁有一個鑰匙,新的鑰匙不用在分發(fā)給設(shè)備。8. 端到端確認(End-to-end acknowledgements)對于非廣播消息,有兩種基本的消息重試類型:端到端的確認(APS ACK)和單級確認(single hop acknowledgement)(MAC ACK)。MAC ACK默認情況下是一直打開的,通常能夠充分保證網(wǎng)絡的高可靠性。為了提供附加的可靠性,同時使發(fā)送設(shè)備能夠得到數(shù)據(jù)包已經(jīng)被發(fā)送到目的地的確認,可以使用APS ACK。APS acknowledgement在APS層完成,是從目標設(shè)備到源設(shè)備的一個消息確認系統(tǒng)。源設(shè)備將保留這個消息知道目標設(shè)備發(fā)送一個APS ACK消息表明它已經(jīng)收到了消息。對于每個發(fā)出的消息可以通過調(diào)用函數(shù)AF_DataRequest()的選項來使能/禁止來禁止這個功能。這個選項區(qū)域是一個位映射選項,對于將要發(fā)送的消息的選項區(qū)域或上(OR)AF_ACK_REQUEST就可以使能APS ACK。消息重試(如果APS ACK消息沒有收到)的次數(shù)和重試之間的時間間隔的配置項在f8wConfig.cfg文件中。APSC_MAX_FRAME_RETRIES是APS層在放棄發(fā)送數(shù)據(jù)之前,沒有收到APS ACK確認重新發(fā)送消息的次數(shù)。APSC_ACK_WAIT_DURATION_POLLED是重新發(fā)送之間的時間間隔。9. 其他(Miscellaneous)9.1 配置信道(Configuring channel)每一個設(shè)備都必須有一個DEFAULT_CHANLIST來控制信道集合。對于一個ZigBee協(xié)調(diào)起來說,這個表格用來掃描噪音最小的信道。對于終端節(jié)點和路由器幾點來說,這個列表用來掃描并加入一個存在的網(wǎng)絡。9.2 配置PAN ID和要加入的網(wǎng)絡(Configuring PAN ID and network to join)這個可選配置項用來控制ZigBee路由器和終端節(jié)點要加入那個網(wǎng)絡。文件f8wConfg.cfg中的ZDO_CONFIG_PAN_ID參數(shù)可以設(shè)置為一個00x3FFF之間的一個值。協(xié)調(diào)器使用這個值,作為它要啟動的網(wǎng)絡的PAN ID。而對于路由器節(jié)點和終端節(jié)點來說只要加入一個已經(jīng)用這個參數(shù)配置了PAN ID的網(wǎng)絡。如果要關(guān)閉這個功能,只要將這個參數(shù)設(shè)置為0xFFFF。要更進一步控制加入過程,需要修改ZDApp.c文件中的ZDO_NetworkDiscoveryConfirmCB函數(shù)。9.3 最大有效載荷大小(Maximum payload size)對于一個應用程序最大有效載荷的大小基于幾個因素。MAC層提供了一個有效載荷長度常數(shù)102。NWK層需要一個固定頭大小,一個有安全的大小和一個沒有安全的大小。APS層必須有一個可變的基于變量設(shè)置的頭大小,包括ZigBee協(xié)議版本,KVP的使用和APS幀控制設(shè)置等等。最后,用戶不必根據(jù)前面的要素來計算最大有效載荷大小。AF模塊提供一個API,允許用戶查詢棧的最大有效載荷或者最大傳送單元(MTU)。用戶調(diào)用函數(shù)afDataReqMTU(見af.h文件),該函數(shù)將返回MTU或者最大有效載荷大小。typedef structuint8 kvp;APSDE_DataReqMTU_t aps;afDataReqMTU_t; uint8 afDataReqMTU( afDataReqMTU_t* fields ) 通常afDataReqMTU_t結(jié)構(gòu)只需要設(shè)置kvp的值,這個值表明KVP是否被使用。而aps保留。9.4 離開網(wǎng)絡(Leave Network)ZDO管理器執(zhí)行函數(shù)“ZDO_ProcessMgmtLeaveReq”,這個函數(shù)提供對“NLME-LEAVE.request”原語的訪問?!癗LME-LEAVE.request”原語設(shè)備移除它自身或者它的一個兒子設(shè)備。ZDO_ProcessMgmtLeaveReq根據(jù)提供給它的IEEE地址移除設(shè)備。如果設(shè)備要移除它自己,它需等待大約5秒鐘然后復位。一旦設(shè)備復位它將重新回來,并處于空閑模式。它將不在試圖連接或者加入網(wǎng)絡。如果設(shè)備要移除它的兒子設(shè)備,它將從本地的群從表(accociation table)中刪除該設(shè)備。只有在它的兒子設(shè)備是個終端節(jié)點的情況下,NWK地址才會被重新使用。如果兒子節(jié)點是個路由器設(shè)備,NWK地址將不再使用。如果一個兒子節(jié)點的父親節(jié)點離開了網(wǎng)絡,兒子節(jié)點依然存在于網(wǎng)絡。盡管“NLME-LEAVE.request”原語提供了一些可選參數(shù),但是ZigBee2006(TI當前的應用也一樣)卻限制了這些參數(shù)的使用?,F(xiàn)在,在ZDO_ProcessMgmtLeaveReq函數(shù)中使用的可選參數(shù)(“RemoveChildren”、“Rejion”and “Silent”)都應該使用默認值。如果改變這些值,將會發(fā)生不可預料的結(jié)果。9.5 描述符(Descriptors)ZigBee網(wǎng)絡中的所有設(shè)備都有一個描述符,用來描述設(shè)備類型和它的應用。這個信息可以被網(wǎng)絡中的其他設(shè)備獲取。配置項在文件ZDOConfig.h和ZDOConfig.c中定義和創(chuàng)建。這兩個文件還包含節(jié)點,電源描述符和默認用戶描述符。確認改變這些描述符來定義你的網(wǎng)絡。9.6 非易失性存儲項(Non-volatile Memory Items)9.6.1 網(wǎng)絡層非易失性存儲器(Network Layer Non-Volatile Memory)ZigBee設(shè)備有許多狀態(tài)信息需要被存儲到非易失性存儲空間中,這樣能夠讓設(shè)備在意外復位或者斷電的情況下復原。否則它將無法重新加入網(wǎng)絡或者起到有效作用。為了啟用這個功能,需要包含NV_RESTORE編譯選項。注意,在一個真正的ZigBee網(wǎng)絡中,這個選項必須始終啟用。關(guān)閉這個選項的功能也僅僅是在開發(fā)階段使用。ZDO層負責保存和恢復網(wǎng)絡層最重要的信息,包括最基本的網(wǎng)絡信息(Network Information Base NIB,管理網(wǎng)絡所需要的最基本屬性);兒子節(jié)點和父親節(jié)點的列表;包含應用程序綁定表。此外,如果使用了安全功能,還要保存類似于幀個數(shù)這樣信息。當一個設(shè)備復位后重新啟動,這類信息恢復到設(shè)備當中。如果設(shè)備重新啟動,這些信息可以使設(shè)備重新恢復到網(wǎng)絡當中。在ZDAPP_Init中, 函數(shù)NLME_RestoreFromNV()的調(diào)用指示網(wǎng)絡層通過保存在NV中的數(shù)據(jù)重新恢復網(wǎng)絡。如果網(wǎng)絡所需的NV空間沒有建立,這個函數(shù)的調(diào)用將同時初始化這部分NV空間。9.6.2 應用的非易失性存儲器(Application Non-Volatile Memory)NV同樣可以用來保存應用程序的特定信息,用戶描述符就是一個很好的例子。NV中用戶描述符ID項是ZDO_NV_USERDESC(在ZComDef.h中定義)。在ZDApp_Init()函數(shù)中,調(diào)用函數(shù)osal_nv_item_init()來初始化用戶描述符所需要的NV空間。如果這個針對這個NV項,這個函數(shù)是第一次調(diào)用,這個初始化函數(shù)將為用戶描述符保留空間,并且將它設(shè)置為默認值ZDO_DefaultUserDescriptor。當需要使用保存在NV中的用戶描述符時,就像ZDO_ProcessUserDescReq()(在ZDObject.c中)函數(shù)一樣,調(diào)用osal_nv_read()函數(shù)從NV中獲取用戶描述符。如果要更新NV中的用戶描述符,就像ZDO_ProcessUserDescSet()(在ZDObject.c中)函數(shù)一樣,調(diào)用osal_nv_write()函數(shù)更新NV中的用戶描述符。記住:NV中的項都是獨一無二的。如果用戶應用程序要創(chuàng)建自己的NV項,那么必須從應用值范圍0x02010x0FFF中選擇ID。10. 安全(Security)10.1 概述(Overview)ZigBee security is built with the AES block cipher and the CCM mode of operation as the underlying security primitive。AES/CCM安全算法是ZigBee聯(lián)盟以外的研究人員發(fā)明的,并且廣泛應用于其他通訊協(xié)議之中。ZigBee提供如下的安全特性:l 構(gòu)造安全 (Infrastructure security)l 網(wǎng)絡訪問控制(Network access control)l 應用數(shù)據(jù)安全10.2 配置(Configuration)為了擁有
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 影視音樂版權(quán)改編與版權(quán)保護及收益分配協(xié)議
- 知名景區(qū)戶外廣告位使用權(quán)協(xié)議
- 高考數(shù)學自我評估試題與答案
- 2025年市場環(huán)境變化風險試題及答案
- 明晰法學概論考試的試題及答案
- 針對2025年軟件設(shè)計師核心試題及答案解析
- 忠誠協(xié)議效力層級及補充約定書(競業(yè)禁止)
- 消防安全隱患排查與整改工程承包合同
- 小紅書美妝達人美妝教程種草推廣合作協(xié)議
- 法學概論的法規(guī)解讀與試題及答案
- 生命科學簡史知到智慧樹章節(jié)測試課后答案2024年秋中國科學技術(shù)大學
- 農(nóng)村電網(wǎng)改造項目實施方案
- 醫(yī)療糾紛防范及法律責任課件
- 公司招標書范本大全(三篇)
- 正念減壓療法詳解課件
- 知識產(chǎn)權(quán)管理體系講解課件
- 彩鋼板除銹噴漆施工方案
- 國家開放大學(山東)《地域文化(本)》形考任務1-3+終結(jié)性考核參考答案
- 2022年高考數(shù)學試卷(上海)(秋考)(解析卷)
- 國家開放大學《數(shù)據(jù)庫應用技術(shù)》形考任務1-4參考答案
- 2024年陜西省西安市中考道德與法治真題(含答案逐題解析)
評論
0/150
提交評論