【正文】
節(jié)點的地址(被定義在ZStack API文檔中)。注意該函數(shù)在協(xié)調(diào)器中不被涉及到,但是被設備父節(jié)點代替(MAC協(xié)調(diào)器):NLME_GetCoordShortAddr() – returns this device’s parent’s 16 bit short address. NLME_GetCoordExtAddr() – returns this device’s parent’s 64 bit extended address.先介紹這兩個概念:節(jié)點和地址。其余的就改天繼續(xù)!從零開始學習ZStack之7(20090323 20:38:44)標簽:it 分類:WSN學習ZStack指導2 上節(jié)介紹了很大一部分ZStack的基礎知識,這里接著忽悠。雖然說的不是很專業(yè)也不是很通俗,但是我盡力了,希望有人能看明白!本人英文水平有限,翻譯的不好請諒解!綁定?綁定是控制信息從一個應用層到另一個應用層流動的一種機制。在ZB06版本中,綁定機制在所有的設備中被執(zhí)行。?綁定允許應用層發(fā)送信息不需要帶目的地址,APS層確定目的地址從他的綁定表格中,然后在信息前端加上這個目的地址或組。?注意:,所有綁定條目存儲在協(xié)調(diào)器中?,F(xiàn)在所有綁定條目存儲在發(fā)送數(shù)據(jù)的設備中。?有三種方式建立一個綁定表格:?ZDO 綁定請求 – 一個試運轉工具能告訴這個設備制作一個綁定報告。?ZDO 終端設備綁定請求 – 2設備能告訴協(xié)調(diào)器他們想建立綁定表格報告。該協(xié)調(diào)器將使協(xié)調(diào)并在這兩個設備上創(chuàng)建綁定表格條目?設備應用 – 在設備上的應用能建立或管理一個綁定表格 。?任何一個設備或應用能在網(wǎng)絡中發(fā)送一個ZDO信息到另一個設備()建立一個綁定報告。這是調(diào)用綁定幫助并且它將建立一個綁定條目為發(fā)送設備。 ZDO 綁定請求?通過調(diào)用函數(shù)ZDP_BindReq()發(fā)送一個綁定請求。第一個參數(shù)(dstAddr)?是綁定的源地址的短地址。?這之前應該確定允許綁定, 文件中有參數(shù)[ZDO_BIND_UNBIND_REQUEST]允許綁定。?能用同樣的參數(shù)調(diào)用函數(shù)ZDP_UnbindReq()移除綁定。?目標設備將調(diào)用函數(shù)ZDApp_BindRsp()或 ZDApp_UnbindRsp(),反饋綁定或移除綁定的響應,返回其操作狀態(tài)為ZDP_SUCCESS, ZDP_TABLE_FULL或ZDP_NOT_SUPPORTED. ZDO 終端設備綁定請求該機制是用一個按鈕按下或其他類似的動作來選擇設備在指定時間內(nèi)被綁定。在規(guī)定時間內(nèi),該終端設備綁定請求信息被收集到協(xié)調(diào)器,并創(chuàng)建一個基于模式(profile) ID 和串(cluster) ID的規(guī)定的綁定表格條目。默認的終端設備綁定超時時間(APS_DEFAULT_MAXBINDING_TIME)為16S(定義在 ),但是能被改變發(fā)送綁定請求在所有的應用例子中有一個處理鍵盤事件的函數(shù)[()函數(shù)]。在該函數(shù)中,調(diào)用了函數(shù) ZDApp_SendEndDeviceBindReq()[],它將收集應用的終端設備的所有信息并調(diào)用函數(shù) ZDP_EndDeviceBindReq() [],發(fā)送一個綁定信息到協(xié)調(diào)器?;蛘?,在SampleLight 和 SampleSwitch例子中,直接調(diào)用ZDP_EndDeviceBindReq()函數(shù)就實現(xiàn)點亮/關閉燈的功能。接收綁定請求?協(xié)調(diào)器將接收[ZDP_IningData() 在 ]這些信息并分析處理[ZDO_ProcessEndDeviceBindReq() 在 ]這些信息并調(diào)用函數(shù)ZDApp_EndDeviceBindReqCB() [in ],它將調(diào)用ZDO_MatchEndDeviceBind() []處理這個請求?當協(xié)調(diào)器接收到2個匹配終端色后備的綁定請求時,它將啟動在綁定設備上創(chuàng)建源綁定條目的處理過程。該協(xié)調(diào)器有如下處理過程:解除綁定?1. 發(fā)送一個ZDO解除綁定請求到第一個設備。終端設備綁定切換處理,所以解除綁定首先被發(fā)送到移除一個存在的綁定條目。?2. 等待ZDO解除綁定響應,如果響應狀態(tài)為ZDP_NO_ENTRY, 發(fā)送一個ZDO綁定請求,在源設備上制作一個綁定條目。如果該響應為ZDP_SUCCESS, 為第一個設備繼續(xù)到move on to the cluster ID for the first device (the unbind removed the entry – toggle).?3. 等待ZDO綁定響應. When received, move on to the next cluster ID for the first device.?4. 當?shù)谝粋€設備完成時,對第二個設備做同樣的處理。?5. 當?shù)诙€設備完成時,發(fā)送ZDO 終端設備綁定響應信息到第一個和第二個設備?在設備上其他進入綁定條目的方式是應用層管理綁定表格。?意思是說,應用層將調(diào)用下列函數(shù)進入和移除綁定表格條目:?bindAddEntry() –增加綁定表格條目?bindRemoveEntry() – 從綁定表格中移除條目?bindRemoveClusterIdFromList() – 從一個存在的綁定表格項目中移除一個串 ID 。?bindAddClusterIdToList()——向一個已經(jīng)存在的綁定記錄中增加一個群ID?bindRemoveDev()——刪除所有地址引用的記錄?bindRemoveSrcDev()——刪除所有源地址引用的記錄?bindUpdateAddr()——將記錄更新為另一個地址?bindFindExisting()——查找一個綁定表記錄?bindIsClusterIdInList()——在表記錄中檢查一個已經(jīng)存在的群ID?bindNumBoundTo()——擁有相同地址(源或者目的)的記錄的個數(shù)?bindNumEntries()——表中記錄的個數(shù)?bindCapacity()——最多允許的記錄個數(shù)?bindWriteNV()——在NV中更新表 配置源綁定?,中查看這兩個綁定配置參數(shù)(NWK_MAX_BINDING_ENTRIES amp。 MAX_BINDING_CLUSTER_IDS)。NWK_MAX_BINDING_ENTRIES綁定表格中最大的綁定實體數(shù)量參數(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ù)。路由 預覽?在MESH網(wǎng)絡中,為了使分布的節(jié)點間能夠很好的通信,路由是非常重要的一個環(huán)節(jié)。?在應用層上路由是完全透明的。一個簡單的應用數(shù)據(jù)發(fā)送到任意設備,下至協(xié)議棧,協(xié)議棧將負責發(fā)現(xiàn)一個路由路線。這個方式,應用層是不知道該操作在多跳網(wǎng)絡中完成的事實。?路由使ZB網(wǎng)絡具有“自動復原”的特性。如果一個無線連接斷了,路由功能將自動的發(fā)現(xiàn)一個新的路由路線,該路線是避開(繞過)壞了的那個連接節(jié)點。這就提高了無線網(wǎng)絡的可靠性,這也是ZB關鍵特點之一。 路由協(xié)議?ZB執(zhí)行的路由協(xié)議是基于AODV(Ad hoc On demand Distance Vector)的路由協(xié)議。作為一個簡單的應用傳感器網(wǎng)絡,ZB路由協(xié)議支持環(huán)境中的移動節(jié)點,連接失敗和丟包功能。?當一個路由器接收到一個點對點信息包時,從他的應用或者從其他設備,NWK層將繼續(xù)向前依照下面的進程。如果目的是路由器鄰節(jié)點(包括它的子設備)之一,該信息包將直接傳輸?shù)侥康脑O備。另外的就是,路由器將檢查它的路由表格,檢查相應的信息包目的條目。如果在路由表格中有一個活躍的路由路線到該目的設備,那么該信息包將被轉播到下一跳節(jié)點地址存儲依照路由條目。如果沒有活躍的條目發(fā)現(xiàn),那么一個路由發(fā)現(xiàn)被啟動并且該信息被緩存直到該過程完成。ZB終端設備路由?ZB終端設備不能執(zhí)行任何路由功能。一個終端設備想發(fā)送一個信息包到任何設備都要向前到它的父設備,然后在由其父設備進行路由操作。類似的,任何設備想發(fā)送信息包到終端設備,都將發(fā)起一個路由發(fā)現(xiàn)操作,當然該操作都由終端設備的父設備響應。?注意:ZB地址分配方案使基于它的地址發(fā)起一個路由到任何目的成為可能。在ZSstack,這個機制被用于萬一正規(guī)的路由程序不能被啟動,作為一個自動退卻(一般情況是由于路由表格空間不夠)。zstack路由?在zstack,執(zhí)行的路由是已經(jīng)被優(yōu)化的路由存儲表格。一般情況,對于每一個目的設備路由表格條目是需要的。但是通過綜合攜帶父節(jié)點所有條目的特定父節(jié)點的終端設備的所有條目,沒有任何功能丟失的存儲已經(jīng)被優(yōu)化。?ZB路由器,包括協(xié)調(diào)器,執(zhí)行如下路由功能 (i)路由發(fā)現(xiàn)和選擇 (ii) 路由維護(iii)?路由發(fā)現(xiàn)是網(wǎng)絡設備協(xié)作發(fā)現(xiàn)和建立路由的一個過程。一個路由操作總是針對某個目的,通過任何一個路由器啟動。該路由發(fā)現(xiàn)機制在源設備和目的設備間搜尋所有可能的路由并試圖選擇最好的路由路線。?路由選擇通過選擇最小消耗的路由路線。每個設備在連接到鄰節(jié)點幾乎保持不變的“連接消耗”。該連接消耗是接收信號的強度的一個典型功能。沿著路由路線加起所有的連接消耗,就是整個路由的“連接消耗”。路由算法試圖選擇這個路由最小的“路由消耗”。路由請求路由通過請求/響應信息包被發(fā)現(xiàn)。一個源設備為了一個目的地址,通過發(fā)送一個廣播路由請求(RREQ)信息到它的鄰設備請求一個路由。當一個節(jié)點接收到一個 RREQ信息時,它將依次轉播這個RREQ信息。但是在做這個之前,它更新RREQ信息的消耗域,通過增加連接消耗為了最后的連接。這樣,RREQ信息將攜帶向前傳輸?shù)乃械倪B接消耗。這個重復過程直到RREQ到達這個目的設備。RREQ的一些復制可能經(jīng)過不同的路徑重復到達目的設備。該目的設備選擇最好的RREQ信息并發(fā)送一個路由答復(RREP)返回到源設備。路由響應?RREP是沿著唯一的相反的路徑返回到最初的請求節(jié)點。?作為RREP信息傳播回源節(jié)點,中間的節(jié)點更新他們的路由表格,指出路由路線到目的設備。?一旦一個路由被創(chuàng)建,數(shù)據(jù)包能被發(fā)送。當一個節(jié)點丟失到它下一個節(jié)點的連通性時(發(fā)送數(shù)據(jù)包時,它不能接收一個MAC應答ACK),這個節(jié)點通過發(fā)送一個 RERR到所有潛在的接收它RREP的節(jié)點,使該路由無效。在接收一個RREQ,RREP或RERR之上,這些節(jié)點都將更新他們的路由表格MESH 網(wǎng)絡提供路由維護和自動修復。中間節(jié)點保持沿著連接傳輸失效的路徑。如故一個連接被確定壞了,逆流的節(jié)點將啟動路由修復那些連接的所有路由路線。這些工作通過啟動路由重新發(fā)送被做,為了路由下一次數(shù)據(jù)包接收。如果路由重新發(fā)現(xiàn)不能啟動,或者由于某些原因失敗了,一個路由錯誤(RERR)信息被發(fā)送到這個數(shù)據(jù)包的源設備,然后重新啟動新的路由發(fā)現(xiàn)。任意方式都使得該路由得到重新自動建立。為了建立路由,路由表格條目要被維護。如果一段時間沒有數(shù)據(jù)包沿著路由路線發(fā)送,該路由將被做終結記號。終止路由不是刪除直到空間需要時。因此沒有被刪除直到它完全需要時。自動路由終結時間能被配置“文件中”。設置ROUTE_EXPIRY_TIME參數(shù)為終結時間(秒)。設置0為了關閉路由終結。 表格存儲?路由功能需要路由器維護一些表格:?路由表格?路由發(fā)現(xiàn)表格每一個路由器包括協(xié)調(diào)器都包含一個路由表。設備在路由表中保存數(shù)據(jù)包參與路由所需的信息。每一條路由表記錄都包含有目的地址,下一級節(jié)點和連接狀態(tài)。所有的數(shù)據(jù)包都通過相鄰的一級節(jié)點發(fā)送到目的地址。同樣,為了回收路由表空間,可以終止路由表中的那些已經(jīng)無用的路徑記錄。路由表的容量表明一個設備路由表擁有一個自由路由表記錄或者說它已經(jīng)有一個與目標地址相關的路由表記錄。在文件“”文件中配置路由表的大小。將MAX_RTG_ENTRIES設置為表的大小(不能小于4)。路由器設備致力于路徑發(fā)現(xiàn),保持維護路徑發(fā)現(xiàn)表。這個表用來保存路徑發(fā)現(xiàn)過程中的臨時信息。這些記錄只在路徑發(fā)現(xiàn)操作期間存在。一旦某個記錄到期,則它可以被另一個路徑發(fā)現(xiàn)使用。這個值決定了在一個網(wǎng)絡中,可以同時并發(fā)執(zhí)行的路徑發(fā)現(xiàn)的最大個數(shù)。 RREQ_ENTRIES。、路徑設置快速參考設置路由表大小MAX_RTG_ENTRIES,這個值不能小于4 ()設置路徑期滿時間ROUTE_EXPIRY_TIME,單位秒。設置為零則關閉路徑期滿()設置路徑發(fā)現(xiàn)表大小MAX_RREQ_ENTRIES,網(wǎng)絡中可以同時執(zhí)行的路徑發(fā)現(xiàn)操作的個數(shù)從零開始學習ZStack之8(20090323 20:40:03)標簽:it 分類:WSN學習近段時間比較忙,幾乎都快荒廢了ZStack的學習了,把以前學的都快忘記了,這就是非專業(yè)技術的痛苦啊??!學習剛好有點眉目,突然意外中斷停下,當再一次學習的時候突然發(fā)現(xiàn):以前學的都忘了8成了!郁悶啊!今天真不知道從什么地方下手學習了,所以就針對最近客戶比較關心的問題做點介紹,這樣有針對性、有目的性的學習可能最適合現(xiàn)在的我了,不然從頭把以前那些所謂的筆記看一遍,可能今天晚上又沒了,指不定明晚以及后晚以及后后晚…都沒時間,不然老是看以前的筆記沒有進展就麻煩了!呵呵!今天只解決1個問題:TI提供的例子程序的表演及功能介紹。因為最近問這些的客戶比較多,特別又是剛入手的朋友,對ZStack非常迷糊的時期,如果能夠跑通幾個例子、看幾個演示,那么可以大大提高學習興趣;另外如果知道某個例子的大致功能及實現(xiàn),那么在去看具體實現(xiàn)過程目的性就非常明確。首先來看看TI究竟有哪些例子:可以看出其例子是非常豐富的。