1. 程式人生 > >zigbee路由轉發,短地址是否不變?

zigbee路由轉發,短地址是否不變?

        zigbee的最大特點在於自組網,而這個自組網的功能實現主要依靠路由的轉發功能,路由轉發的其中一個條件是當裝置離協調器太遠的時候,這個裝置會通過一箇中間路由進行轉發,網路中有多個路由的情況下,會選擇一個離協調器最短的路徑。

        最近在做一個專案,裝置執行環境容易受到障礙物遮蔽訊號,為了解決這個問題,我採取了兩個措施:1.給zigbee加PA晶片,增強zigbee的傳送和接收的訊號。2.利用zigbee路由轉發資料,達到繞開障礙物的目的。第一種措施沒問題,第二種措施我有點困惑,通過路由轉發是沒問題,問題在於這樣做的話,協調器能否知道最初的源地址是哪個嗎?我程式裡面一律通過裝置的短地址來區分哪個裝置的,如果短地址經過路由轉發了會更改的話,協調器不是不知道誰是"資料發起人"了。

        帶著上面的疑問,我決定做一個實驗去驗證路由器是否會改變短地址。實驗採用一個路由器,一個終端,和一個協調器,協調器和stm32微控制器連線。我用Packet Sniffer工具抓取zigbee的通訊資料幀,如下圖所示:

        由圖可知網路中有兩個裝置短地址分別為0x9758和0x41BD,0x9758是終端(資料發起人),0x41BD是路由中繼器,資料的流向是:0x9758  -->  0x41BD   -->   0x0000, 從抓獲的資料幀來看和協調器0x0000最近的裝置是0x41BD,最終是路由0x41BD傳送資料給協調器0x0000的,那麼協調器會不會認為路由0x41BD是資料發起人呢?答案是不會的,我把資料通過協調器傳送給stm32,資料裡面的裝置地址有0x9758和0x41BD,說明協調器是收到兩個裝置的短地址,路由轉發沒有替換裝置的短地址的,只是起一個“透傳”的作用。最後一個疑問,協調器是怎麼知道資料是哪個裝置是“資料發起人”?再深入分析上面的資料幀,發現有個“NWK Src. Address”這個短地址並沒有隨著路由的轉發而改變,由此可以追蹤到最初發資料的那個裝置是0x9758。至此,問題解決了。我們是可以通過裝置的短地址作為裝置的標識,而不用管路由轉發的問題。