成人AV在线无码|婷婷五月激情色,|伊人加勒比二三四区|国产一区激情都市|亚洲AV无码电影|日av韩av无码|天堂在线亚洲Av|无码一区二区影院|成人无码毛片AV|超碰在线看中文字幕

Z-Stack_開發(fā)指南

2. ZigBee2.1 設(shè)備類型(Device Types)在ZigBee 網(wǎng)絡(luò)中存在三種邏輯設(shè)備類型:Coordinator(協(xié)調(diào)器) ,Router(路由器) 和End-Device(終端設(shè)備

2. ZigBee

2.1 設(shè)備類型(Device Types)

在ZigBee 網(wǎng)絡(luò)中存在三種邏輯設(shè)備類型:Coordinator(協(xié)調(diào)器) ,Router(路由器) 和End-Device(終端設(shè)備) 。ZigBee 網(wǎng)絡(luò)由一個Coordinator 以及多個Router 和多個End_Device組成。

上圖是一個簡單的ZigBee 網(wǎng)絡(luò)示意圖。其中黑色節(jié)點(diǎn)為Coordinator ,紅色

節(jié)點(diǎn)為Router ,白色節(jié)點(diǎn)為End-Device 。

2.1.1 Coordinator (協(xié)調(diào)器)

協(xié)調(diào)器負(fù)責(zé)啟動整個網(wǎng)絡(luò)。它也是網(wǎng)絡(luò)的第一個設(shè)備。協(xié)調(diào)器選擇一個信道和一個網(wǎng)絡(luò)ID(也稱之為PAN ID ,即Personal Area Network ID) ,隨后啟動整個網(wǎng)絡(luò)。

協(xié)調(diào)器也可以用來協(xié)助建立網(wǎng)絡(luò)中安全層和應(yīng)用層的綁定(bindings)。 注意,協(xié)調(diào)器的角色主要涉及網(wǎng)絡(luò)的啟動和配置。一旦這些都完成后,協(xié)調(diào)器的工作就像一個路由器(或者消失go away) 。由于ZigBee 網(wǎng)絡(luò)本身的分布特性,因此接下來整個網(wǎng)絡(luò)的操作就不在依賴協(xié)調(diào)器是否存在。

2.1.2 Router (路由器)

路由器的功能主要是:允許其他設(shè)備加入網(wǎng)絡(luò),多跳路由和協(xié)助它自己

,

的由電池供電的兒子終端設(shè)備的通訊。

通常,路由器希望是一直處于活動狀態(tài),因此它必須使用主電源供電。但是當(dāng)使用樹群這種網(wǎng)絡(luò)模式時,允許路由間隔一定的周期操作一次,這樣就可以使用電池給其供電。

2.1.3 End-Device (終端設(shè)備)

終端設(shè)備沒有特定的維持網(wǎng)絡(luò)結(jié)構(gòu)的責(zé)任,它可以睡眠或者喚醒,因此它可以可以是一個電池供電設(shè)備。

通常,終端設(shè)備對存儲空間(特別是RAM 的需要) 比較小。

注意:在Z-Stack 1.4.1中一個設(shè)備的類型通常在編譯的時候通過編譯選項(xiàng)(ZDO_COORDINATOR 和RTR_NWK)確定。所有的應(yīng)用例子都提供獨(dú)立的項(xiàng)目文件來編譯每一種設(shè)備類型。

2.2 棧配置(Stack Profile)

棧參數(shù)的集合需要被配置為一定的值,連同這些值在一起被稱之為棧配置。ZigBee 聯(lián)盟定義了這些由棧配置組成的棧參數(shù)。

網(wǎng)絡(luò)中的所有設(shè)備必須遵循同樣的棧配置。

為了促進(jìn)互用性這個目標(biāo),ZigBee 聯(lián)盟為ZigBee2006規(guī)范定義了棧配置。所有遵循此棧配置的設(shè)備可以在其他開發(fā)商開發(fā)的遵循同樣棧配置的網(wǎng)絡(luò)中。

3. 尋址(Addressing)

3.1 地址類型(Address types)

ZigBee 設(shè)備有兩種類型的地址。一種是64位IEEE 地址,即MAC 地址,另一種是16位網(wǎng)絡(luò)地址。

64位IEEE 地址是一個全球唯一的地址,并且一經(jīng)分配就將跟隨設(shè)備一生。它通常由制造商或者被安裝時設(shè)置。這些地址由IEEE 組織來維護(hù)和分配。

16位網(wǎng)絡(luò)地址是當(dāng)設(shè)備加入網(wǎng)絡(luò)后分配的。它在網(wǎng)絡(luò)中是唯一的,用來在網(wǎng)絡(luò)中鑒別設(shè)備和發(fā)送數(shù)據(jù)。

3.2 網(wǎng)絡(luò)地址分配(Network address assignment)

ZigBee 使用分布式尋址方案來分配網(wǎng)絡(luò)地址。這個方案保證在整個網(wǎng)絡(luò)中所有分配出去的網(wǎng)絡(luò)地址是唯一的。這一點(diǎn)是必須的,因?yàn)檫@樣才能保證一個具體的數(shù)據(jù)包能夠發(fā)送到它指定的設(shè)備,而不出現(xiàn)混亂。同時,這個尋址算法本身的

,

分布特性保證設(shè)備只能與他的父輩設(shè)備通訊來接收一個唯一的網(wǎng)絡(luò)地址。不需要整個網(wǎng)絡(luò)范圍內(nèi)通訊的地址分配,這有助于網(wǎng)絡(luò)的可測量性。

在每個路由加入網(wǎng)絡(luò)之前,尋址方案需要知道和配置一些參數(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)絡(luò)的最大深度。協(xié)調(diào)器(Coordinator)位于深度0,它的兒子位于深度1,他的兒子的的兒子位于深度2,以此類推。MAX_DEPTH參數(shù)限制了網(wǎng)絡(luò)在物理上的長度。

MAX_CHILDREN決定了一個路由(Router)或者一個協(xié)調(diào)器節(jié)點(diǎn)可以處理的兒子節(jié)點(diǎn)的最大個數(shù)。

MAX_ROUTER決定了一個路由(Router)或者一個協(xié)調(diào)器(Coordinator)節(jié)點(diǎn)可以處理的具有路由功能的兒子節(jié)點(diǎn)的最大個數(shù)。這個參數(shù)是MAX_CHILDREN的一個子集,終端節(jié)點(diǎn)使用(MAX_CHILDREN – MAX_ROUTER)剩下的地址空間。 如果開發(fā)人員想改變這些值,則需要完成以下幾個步驟:

首先,你要保證賦給這些參數(shù)的新值要合法。即整個地址空間不能超過,這就限制了參數(shù)能夠設(shè)置的最大值。可以使用projectsZStacktools文件夾下的CSkip.xls 文件來確認(rèn)這些值是否合法。當(dāng)在表格中輸入了要修改的數(shù)據(jù)后,如果數(shù)據(jù)不合法的話就會出現(xiàn)錯誤信息。

當(dāng)選擇了合法的數(shù)據(jù)后,開發(fā)人員還要保證不再使用標(biāo)準(zhǔn)的棧配置,取而代之的是使用網(wǎng)絡(luò)自定義棧配置(例如:在nwk_globals.h文件中將

STACK_PROFILE_ID改為NETWORK_SPECIFIC),然后設(shè)置nwk_globals.h文件中的MAX_DEPTH參數(shù)為一個適當(dāng)?shù)闹怠?/p>

此外,還必須設(shè)置nwk_globals.c文件中的Cskipchldrn 數(shù)組和CskipRtrs 數(shù)組。這些數(shù)組的值由MAX_CHILDREN和MAX_ROUTER構(gòu)成。

3.3 Z-Stack 尋址(Addressing in z-stack)

應(yīng)用程序通常使用AF_DataRequest()函數(shù)向一個ZigBee 網(wǎng)絡(luò)中的設(shè)備發(fā)送數(shù)據(jù)。數(shù)據(jù)包要發(fā)送給一個zAddrType_t(在ZComDef.h 中定義) 類型的目標(biāo)設(shè)備。

typedef struct

{

union

{

uint16 shortAddr;

} addr;

afAddrMode_t addrMode;

byte endPoint;

} afAddrType_t;

注意,除了網(wǎng)路地址之外,還要指定地址模式參數(shù)。目的地址模式可以設(shè)置為以下幾個值:

,

typedef enum

{

afAddrNotPresent = AddrNotPresent,

afAddr16Bit = Addr16Bit,

afAddrGroup = AddrGroup,

afAddrBroadcast = AddrBroadcast

} afAddrMode_t;

因?yàn)樵赯igbee 中,數(shù)據(jù)包可以單點(diǎn)傳送(unicast),多點(diǎn)傳送(multicast)或者廣播傳送,所以必須有地址模式參數(shù)。一個單點(diǎn)傳送數(shù)據(jù)包只發(fā)送給一個設(shè)備,多點(diǎn)傳送數(shù)據(jù)包則要傳送給一組設(shè)備,而廣播數(shù)據(jù)包則要發(fā)送給整個網(wǎng)絡(luò)的所有節(jié)點(diǎn)。這個將在下面詳細(xì)解釋。

3.3.1 單點(diǎn)傳送(Unicast)

Uicast 是標(biāo)準(zhǔn)尋址模式,它將數(shù)據(jù)包發(fā)送給一個已經(jīng)知道網(wǎng)絡(luò)地址的網(wǎng)絡(luò)設(shè)備。將afAddrMode 設(shè)置為Addr16Bit 并且在數(shù)據(jù)包中攜帶目標(biāo)設(shè)備地址。

3.3.2 間接傳送(Indirect)

當(dāng)應(yīng)用程序不清楚數(shù)據(jù)包的最終目標(biāo)的時候使用間接傳送。將模式設(shè)置為AddrNotPresent 并且不指定目標(biāo)地址。取而代之的是,從發(fā)送設(shè)備的棧的綁定表中查找到的目標(biāo)。這種特點(diǎn)稱之為源綁定(在后面的綁定一節(jié)詳細(xì)介紹) 。

當(dāng)數(shù)據(jù)向下發(fā)送到棧中,從綁定表中查找并且使用該目標(biāo)地址。這樣,數(shù)據(jù)包將被處理成為一個標(biāo)準(zhǔn)的單點(diǎn)傳送數(shù)據(jù)包。如果在綁定表中找到多個設(shè)備,則向每個設(shè)備都發(fā)送一個數(shù)據(jù)包的拷貝。

上一個版本的ZigBee(ZigBee04),有一個選項(xiàng)可以講綁定表保存在協(xié)調(diào)器(Coordinator)當(dāng)中。發(fā)送設(shè)備將數(shù)據(jù)包發(fā)送給協(xié)調(diào)器,協(xié)調(diào)器查找它棧中的綁定表,然后將數(shù)據(jù)發(fā)送給最終的目標(biāo)設(shè)備。這個附加的特性叫做協(xié)調(diào)器綁定(Coordinator Binding)。

3.3.3 廣播傳送(broadcast)

當(dāng)應(yīng)用程序需要將數(shù)據(jù)包發(fā)送給網(wǎng)絡(luò)的每一個設(shè)備時,使用這種模式。地址模式設(shè)置為AddrBroadcast 。目標(biāo)地址可以設(shè)置為下面廣播地址的一種:

NWK_BROADCAST_SHORTADDR_DEVALL(0xFFFF)——數(shù)據(jù)包將被傳送到網(wǎng)絡(luò)上的所有設(shè)備,包括睡眠中的設(shè)備。對于睡眠中的設(shè)備,數(shù)據(jù)包將被保留在其父親節(jié)點(diǎn)直到查詢到它,或者消息超時(NWK_INDIRECT_MSG_TIMEOUT在f8wConifg.cfg 中) 。

NWK_BROADCAST_SHORTADDR_DEVRXON(0xFFFD)——數(shù)據(jù)包將被傳送到網(wǎng)絡(luò)上的所有的打開接收的空閑設(shè)備(RXONWHENIDLE),也就是說,除了睡眠中的所有設(shè)備。

,

NWK_BROADCAST_SHORTADDR_DEVZCZR(0xFFFC)——數(shù)據(jù)包發(fā)送給所有的路由器,包括協(xié)調(diào)器。

3.3.4 組尋址(Group Addressing)

當(dāng)應(yīng)用程序需要將數(shù)據(jù)包發(fā)送給網(wǎng)絡(luò)上的一組設(shè)備時,使用該模式。地址模式設(shè)置為afAddrGroup 并且addr.shortAddr 設(shè)置為組ID 。

在使用這個功能之前,必須在網(wǎng)絡(luò)中定義組。(參見Z-stack API 文檔中的aps_AddGroup()函數(shù)) 。

注意組可以用來關(guān)聯(lián)間接尋址。再綁定表中找到的目標(biāo)地址可能是是單點(diǎn)傳送或者是一個組地址。另外,廣播發(fā)送可以看做是一個組尋址的特例。

下面的代碼是一個設(shè)備怎樣加入到一個ID 為1的組當(dāng)中:

aps_Group_t group;

// Assign yourself to group 1

group.ID = 0x0001;

group.name[0] = 0; // This could be a human readable string aps_AddGroup( SAMPLEAPP_ENDPOINT, &group );

3.4 重要設(shè)備地址(Important Device Adresses)

應(yīng)用程序可能需要知道它的設(shè)備地址和父親地址。使用下面的函數(shù)獲取設(shè)備地址(在ZStack API中定義) :

● NLME_GetShortAddr()——返回本設(shè)備的16位網(wǎng)絡(luò)地址

● NLME_GetExtAddr()—— 返回本設(shè)備的64位擴(kuò)展地址

使用下面的函數(shù)獲取該設(shè)備的父親設(shè)備的地址:

● NLME_GetCoordShortAddr()——返回本設(shè)備的父親設(shè)備的16位網(wǎng)絡(luò)

地址

● NLME_GetCoordExtAddr()—— 返回本設(shè)備的父親設(shè)備的64位擴(kuò)展

地址

4. 綁定(Binding)

綁定是一種兩個(或者多個) 應(yīng)用設(shè)備之間信息流的控制機(jī)制。在ZigBee2006發(fā)布版本中,它被稱為資源綁定,所有的設(shè)備都必須執(zhí)行綁定機(jī)制。

綁定允許應(yīng)用程序發(fā)送一個數(shù)據(jù)包而不需要知道目標(biāo)地址。APS 層從它的綁定表中確定目標(biāo)地址,然后將數(shù)據(jù)繼續(xù)向目標(biāo)應(yīng)用或者目標(biāo)組發(fā)送。

注意:在ZigBee 的1.0版本中,綁定表是保存在協(xié)調(diào)器(Coordinator當(dāng)中) ?,F(xiàn)在所有的綁定記錄都保存在發(fā)送信息的設(shè)備當(dāng)中。

,

4.1 建立綁定表(Building a Binding Table)

有三種方法可以建立一個綁定表:

● Zigbee Device Object Bind Request ——一個啟動工具可以告訴設(shè)備創(chuàng)建一個綁定記錄

● Zigbee Device Object End Device Bind Request——兩個設(shè)備可以告訴協(xié)調(diào)器它們想要建立一個綁定表記錄。協(xié)調(diào)器來協(xié)調(diào)并在兩個設(shè)備中創(chuàng)建綁定表記錄。

● Device Application——一個設(shè)備上的應(yīng)用程序建立或者管理一個綁定表

4.1.1 ZigBee Device Object Binding Request

任何一個設(shè)備都可以發(fā)送一個ZDO 信息給網(wǎng)絡(luò)中的另一個設(shè)備,用來建立綁定表。稱之為援助綁定,它可以為一個發(fā)送設(shè)備創(chuàng)建一個綁定記錄。

4.1.1.1 啟動申請(The Commissioning Application)

一個應(yīng)用程序可以通過ZDP_BindReq()函數(shù)(在ZDProfile.h) ,并在綁定表中包含兩個請求(地址和終點(diǎn)) 以及想要的群ID 。第一個參數(shù)(目標(biāo)dstAddr) 是綁定源的短地址即,16位網(wǎng)絡(luò)地址。

確定你已經(jīng)在ZDConfig.h 允許了這個功能(ZDO_BIND_UNBIND_REQUEST)。 你也可以使用ZDP_UnbindReq()用同樣的參數(shù)取消綁定記錄。

目標(biāo)設(shè)備發(fā)回ZigBee Device Object Bind 或者Unbind Response信息,該信息是ZDO 代碼根據(jù)動作的狀態(tài),通過調(diào)用ZDApp_BindRsq()或者ZDApp_UnbindRsq()函數(shù)來分析和通知ZDApp.c 的。

對于綁定響應(yīng),從協(xié)調(diào)器返回的狀態(tài)將是ZDP_SUCCESS,ZDP_TABLE_FULL或者ZDP_NOT_SUPPORTED。

對于解除綁定響應(yīng),從協(xié)調(diào)器返回的狀態(tài)將是ZDP_SUCCESS,ZDP_NO_ENTRY或者ZDP_NOT_SUPPORTED。

4.1.1.2 ZigBee Device Object End Device Bind Request

這個機(jī)制是在指定的時間周期(timeout period) 內(nèi),通過按下選定設(shè)備上的按鈕或者類似的動作來綁定。協(xié)調(diào)器在指定的時間周期內(nèi),搜集終端設(shè)備的綁定請求信息,然后以配置ID(Profile ID) 和群ID(Cluster ID) 協(xié)議為基礎(chǔ),創(chuàng)建一個綁定表記錄作為結(jié)果。默認(rèn)的設(shè)備綁定時間周期(APS_DEFAULT_MAXBINDING_TIME)是16秒鐘(在nwk_globals.h中定義) 。但是將它添加到f8wConfig.cfg 中,則可以更改。

在“用戶指南”中的應(yīng)用程序就是一個終端設(shè)備綁定的例子(在每個設(shè)備上按

,

下SW2按鍵) 。

你應(yīng)該注意到,所有的例程都有處理關(guān)鍵事件的函數(shù)(例如:在TransmitApp.c 中的TransmitApp_HandleKeys()函數(shù)) 。這個函數(shù)調(diào)用ZDApp_SendEndDeviceBindReq()(在ZDApp.c 中) 。這個函數(shù)搜集所有終端節(jié)點(diǎn)的請求信息,然后調(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ù)來處理這個請求。

當(dāng)收到兩個匹配的終端設(shè)備綁定請求,協(xié)調(diào)器在請求設(shè)備中啟動創(chuàng)建源綁定記錄的進(jìn)程。假設(shè)在ZDO 終端設(shè)備中發(fā)現(xiàn)了匹配的請求,協(xié)調(diào)器將執(zhí)行下面的步驟:

● 發(fā)送一個解除綁定請求給第一個設(shè)備。這個終端設(shè)備鎖定進(jìn)程,這樣解

除綁定被首先發(fā)送來去掉一個已經(jīng)存在的綁定記錄。

● 等待ZDO 解除綁定的響應(yīng),如果響應(yīng)的狀態(tài)是ZDP_NO_ENTRY,則發(fā)送

一個ZDO 綁定請求在源設(shè)備中創(chuàng)建一個綁定記錄。如果狀態(tài)是ZDP_SUCCESS,則繼續(xù)前進(jìn)到第一個設(shè)備的群ID 。

● 等待ZDO 綁定響應(yīng),如果收到了,則繼續(xù)前進(jìn)到第一個設(shè)備的下一個群

ID 。

● 當(dāng)?shù)匾粋€設(shè)備完成后,用同樣的方法處理第二個設(shè)備。

● 當(dāng)?shù)诙€設(shè)備也完成之后,發(fā)送ZDO 終端設(shè)備綁定請求消息給兩個設(shè)

備。

4.1.1.3 Device Application Binding Manager

另一種進(jìn)入設(shè)備綁定記錄的方式是應(yīng)用自己管理綁定表。這就意味著應(yīng)用程序需要通過調(diào)用下面的綁定管理函數(shù)在本地進(jìn)入并且刪除綁定記錄:

● bindAddEntry()——在綁定表中增加一個記錄

● bindRemoveEntry()——從綁定表中刪除一個記錄

● bindRomoveClusterIdFromList()——從一個存在的綁定表記錄中刪除一個

群ID

● bindAddClusterIdToList()——向一個已經(jīng)存在的綁定記錄中增加一個群ID ● bindRemoveDev()——刪除所有地址引用的記錄

● bindRemoveSrcDev()——刪除所有源地址引用的記錄

● bindUpdateAddr()——將記錄更新為另一個地址

● bindFindExisting()——查找一個綁定表記錄

● bindIsClusterIdInList()——在表記錄中檢查一個已經(jīng)存在的群ID

● bindNumBoundTo()——擁有相同地址(源或者目的) 的記錄的個數(shù)

● bindNumEntries()——表中記錄的個數(shù)

● bindCapacity()——最多允許的記錄個數(shù)

● bindWriteNV()——在NV 中更新表

,

4.1.2 配置源綁定(Configuring Source Binding)

為了在你的設(shè)備中使能源綁定在f8wConfig.cfg 文件中包含REFLECTOR 編譯標(biāo)志。同時在f8wConfig.cfg 文件中查看配置項(xiàng)目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ù)都實(shí)際影響著使用RAM 的數(shù)量。每一條綁定記錄是8字節(jié)多(MAX_BINDING_CLUSTER_IDS * 2字節(jié)) 。除了綁定表使用的靜態(tài)RAM 的數(shù)量,綁定配置項(xiàng)目也影響地址管理器中的記錄的個數(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.

路由對與應(yīng)用層來說是完全透明的。應(yīng)用程序只需簡單的向下發(fā)送去往任何設(shè)備的數(shù)據(jù)到棧中,棧會負(fù)責(zé)尋找路徑。這種方法,應(yīng)用程序不知道操作是在一個多跳的網(wǎng)絡(luò)當(dāng)中的。

路由還能夠自愈ZigBee 網(wǎng)絡(luò),如果某個無線連接斷開了,路由功能又能自動尋找一條新的路徑避開那個斷開的網(wǎng)絡(luò)連接。這就極大的提高了網(wǎng)絡(luò)的可靠性,同時也是ZigBee 網(wǎng)絡(luò)的一個關(guān)鍵特性。

5.2 路由協(xié)議(Routing Protocol)

ZigBee 執(zhí)行基于用于AODV 專用網(wǎng)絡(luò)的路由協(xié)議。簡化后用于傳感器網(wǎng)絡(luò)。ZigBee 路由協(xié)議有助于網(wǎng)絡(luò)環(huán)境有能力支持移動節(jié)點(diǎn),連接失敗和數(shù)據(jù)包丟失。 當(dāng)路由器從他自身的應(yīng)用程序或者別的設(shè)備那里收到一個單點(diǎn)發(fā)送的數(shù)據(jù)包,則網(wǎng)絡(luò)層(NWK Layer)根據(jù)一下程序?qū)⑺^續(xù)傳遞下去。如果目標(biāo)節(jié)點(diǎn)是它相鄰路由器中的一個,則數(shù)據(jù)包直接被傳送給目標(biāo)設(shè)備。否則,路由器將要檢索它的路由表中與所要傳送的數(shù)據(jù)包的目標(biāo)地址相符合的記錄。如果存在與目標(biāo)地址相符合的活動路由記錄,則數(shù)據(jù)包將被發(fā)送到存儲在記錄中的下一級地址中去。如果沒有發(fā)現(xiàn)任何相關(guān)的路由記錄,則路由器發(fā)起路徑尋找,數(shù)據(jù)包存儲在緩沖區(qū)中知道路徑尋找結(jié)束。

ZigBee 終端節(jié)點(diǎn)不執(zhí)行任何路由功能。終端節(jié)點(diǎn)要向任何一個設(shè)備傳送數(shù)據(jù)包,它只需簡單的將數(shù)據(jù)向上發(fā)送給它的父親設(shè)備,由它的父親設(shè)備以它自己的名義執(zhí)行路由。同樣的,任何一個設(shè)備要給終端節(jié)點(diǎn)發(fā)送數(shù)據(jù),發(fā)起路由尋找,

,

終端節(jié)的的父親節(jié)點(diǎn)都已它的名義來回應(yīng)。

注意ZigBee 地址分配方案使得對于任何一個目標(biāo)設(shè)備,根據(jù)它的地址都可以得到一條路徑。在Z-Stack 中,如果萬一正常的路徑尋找過程不能啟動的話(通常由于缺少路由表空間) ,那么Z-Stack 擁有自動回退機(jī)制。

此外,在Z-Stack 中,執(zhí)行的路由已經(jīng)優(yōu)化了路由表記錄。通常,每一個目標(biāo)設(shè)備都需要一條路由表記錄。但是,通過把一定父親節(jié)點(diǎn)記錄與其子所有子結(jié)點(diǎn)的記錄合并,這樣既可以優(yōu)化路徑也可以不喪失任何功能。

ZigBee 路由器,包括協(xié)調(diào)器執(zhí)行下面的路由函數(shù):(i)路徑發(fā)現(xiàn)和選擇;(ii)路徑保持維護(hù);(iii)路徑期滿。

5.2.1 路徑的發(fā)現(xiàn)和選擇(Route Discovery and Selection)

路徑發(fā)現(xiàn)是網(wǎng)絡(luò)設(shè)備憑借網(wǎng)絡(luò)相互協(xié)作發(fā)現(xiàn)和建立路徑的一個過程。路由發(fā)現(xiàn)可以由任意一個路由設(shè)備發(fā)起,并且對于某個特定的目標(biāo)設(shè)備一直執(zhí)行。路徑發(fā)現(xiàn)機(jī)制尋找源地址和目標(biāo)地址之間的所有路徑,并且試圖選擇可能的最好的路徑。

路徑選擇就是選擇出可能的最小成本的路徑。每一個結(jié)點(diǎn)通常持有跟它所有鄰接點(diǎn)的“連接成本(link costs)”。通常,連接成本的典型函數(shù)是接收到的信號的強(qiáng)度。沿著路徑,求出所有連接的連接成本總和,便可以得到整個路徑的“路徑成本”。路由算法試圖尋找到擁有最小路徑成本的路徑。

路徑通過一系列的請求和回復(fù)數(shù)據(jù)包被發(fā)現(xiàn)。源設(shè)備通過向它的所有鄰接節(jié)點(diǎn)廣播一個路由請求數(shù)據(jù)包,來請求一個目標(biāo)地址的路徑。當(dāng)一個節(jié)點(diǎn)接收到RREQ 數(shù)據(jù)包,它依次轉(zhuǎn)發(fā)RREQ 數(shù)據(jù)包。但是在轉(zhuǎn)發(fā)之前,它要加上最新的連接成本,然后更新RREQ 數(shù)據(jù)包中的成本值。這樣,沿著所有它通過的連接,RREQ 數(shù)據(jù)包攜帶著連接成本的總和。這個過程一直持續(xù)到RREQ 數(shù)據(jù)包到達(dá)目標(biāo)設(shè)備。通過不同的路由器,許多RREQ 副本都將到達(dá)目標(biāo)設(shè)備。目標(biāo)設(shè)備選擇最好的RREQ 數(shù)據(jù)包,然后發(fā)回一個路徑答復(fù)數(shù)據(jù)包(a Route Reply)RREP給源設(shè)備。

RREP 數(shù)據(jù)包是一個單點(diǎn)發(fā)送數(shù)據(jù)包,它沿著中間節(jié)點(diǎn)的相反路徑傳送直到它到達(dá)原來發(fā)送請求的節(jié)點(diǎn)為止。

一旦一條路徑被創(chuàng)建,數(shù)據(jù)包就可以發(fā)送了。當(dāng)一個結(jié)點(diǎn)與它的下一級相鄰節(jié)點(diǎn)失去了連接(當(dāng)它發(fā)送數(shù)據(jù)時,沒有收到MAC ACK),該節(jié)點(diǎn)向所有等待接收它的RREQ 數(shù)據(jù)包的節(jié)點(diǎn)發(fā)送一個RERR 數(shù)據(jù)包,將它的路徑設(shè)為無效。各個結(jié)點(diǎn)根據(jù)收到的數(shù)據(jù)包RREQ 、RREP 或者RERR 來更新它的路由表。

5.2.2 路徑保持維護(hù)(Route maintenance)

網(wǎng)狀網(wǎng)提供路徑維護(hù)和網(wǎng)絡(luò)自愈功能。中間節(jié)點(diǎn)沿著連接跟蹤傳送失敗,如果一個連接被認(rèn)定是壞鏈,那么上游節(jié)點(diǎn)將針對所有使用這條連接的路徑啟動路徑修復(fù)。節(jié)點(diǎn)發(fā)起重新發(fā)現(xiàn)直到下一次數(shù)據(jù)包到達(dá)該節(jié)點(diǎn),標(biāo)志路徑修復(fù)完成。如果不能夠啟動路徑發(fā)現(xiàn)或者由于某種原因失敗了,節(jié)點(diǎn)則向數(shù)據(jù)包的源節(jié)點(diǎn)發(fā)送一個路徑錯誤包(RERR),它將負(fù)責(zé)啟動新路徑的發(fā)現(xiàn)。這兩種方法,路徑都自

,

動重建。

5.2.3 路徑期滿(Route expiry)

路由表為已經(jīng)建立連接路徑的節(jié)點(diǎn)維護(hù)路徑記錄。如果在一定的時間周期內(nèi),沒有數(shù)據(jù)通過沿著這條路徑發(fā)送,這條路徑將被表示為期滿。期滿的路徑一直保留到它所占用的空間要被使用為止。這樣,路徑在絕對不使用之前不會被刪除掉的。在配置文件f8wConfig.cfg 文件中配置自動路徑期滿時間。設(shè)置ROUTE_EXPIRY_TIME為期滿時間,單位為秒。如果設(shè)置為0,則表示關(guān)閉自動期滿功能。

5.3 表存儲(Table storage)

路由功能需要路由器保持維護(hù)一些表格。

5.3.1 路由表(Routing table)

每一個路由器包括協(xié)調(diào)器都包含一個路由表。設(shè)備在路由表中保存數(shù)據(jù)包參與路由所需的信息。每一條路由表記錄都包含有目的地址,下一級節(jié)點(diǎn)和連接狀態(tài)。所有的數(shù)據(jù)包都通過相鄰的一級節(jié)點(diǎn)發(fā)送到目的地址。同樣,為了回收路由表空間,可以終止路由表中的那些已經(jīng)無用的路徑記錄。

路由表的容量表明一個設(shè)備路由表擁有一個自由路由表記錄或者說它已經(jīng)有一個與目標(biāo)地址相關(guān)的路由表記錄。在文件“f8wConfig.cfg ”文件中配置路由表的大小。將MAX_RTG_ENTRIES設(shè)置為表的大小(不能小于4) 。

5.3.2 路徑發(fā)現(xiàn)表(Route discovery table)

路由器設(shè)備致力于路徑發(fā)現(xiàn),保持維護(hù)路徑發(fā)現(xiàn)表。這個表用來保存路徑發(fā)現(xiàn)過程中的臨時信息。這些記錄只在路徑發(fā)現(xiàn)操作期間存在。一旦某個記錄到期,則它可以被另一個路徑發(fā)現(xiàn)使用。這個值決定了在一個網(wǎng)絡(luò)中,可以同時并發(fā)執(zhí)行的路徑發(fā)現(xiàn)的最大個數(shù)。這個可以在f8wConfig.cfg 文件中配置MAX_ RREQ_ENTRIES。

5.4 路徑設(shè)置快速參考(Routing Settings Quick

reference)

標(biāo)簽: