無線傳感網(wǎng)技術(shù)及應(yīng)用 課件 項目17 Z-Stack協(xié)議棧廣播通信_第1頁
無線傳感網(wǎng)技術(shù)及應(yīng)用 課件 項目17 Z-Stack協(xié)議棧廣播通信_第2頁
無線傳感網(wǎng)技術(shù)及應(yīng)用 課件 項目17 Z-Stack協(xié)議棧廣播通信_第3頁
無線傳感網(wǎng)技術(shù)及應(yīng)用 課件 項目17 Z-Stack協(xié)議棧廣播通信_第4頁
無線傳感網(wǎng)技術(shù)及應(yīng)用 課件 項目17 Z-Stack協(xié)議棧廣播通信_第5頁
已閱讀5頁,還剩38頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

項目十七Z-Stack協(xié)議棧廣播通信一、項目導(dǎo)入

物聯(lián)網(wǎng)基本的定義就是物與物的連接,即物體通過信息傳播媒介進行信息交換和通信。前面的項目采用的都是單個CC2530模塊,無法實現(xiàn)物與物的連接功能。本項目通過2個CC2530模塊的組網(wǎng)及廣播通信,讓大家能夠了解CC2530模塊是如何組網(wǎng)以及進行信息交換的,從而真正理解物與物連接的原理和整個過程。二、項目分析

本項目需要使用2個以上的CC2530模塊。首先二者需要組成一個小型的個域網(wǎng)(PersonalAreaNetworks,簡稱PAN),當組網(wǎng)成功后二者可以進行簡單的通信。在本項目中CC2530模塊組網(wǎng)成功后模塊A發(fā)送廣播數(shù)據(jù),模塊B接收到數(shù)據(jù)后讓LED閃爍,從而提示二者已組網(wǎng)并通信成功?!卷椖恳蟆?個CC2530模塊組成PAN。2個CC2530模塊間實現(xiàn)廣播通信。三、項目目標掌握ZigBee網(wǎng)絡(luò)設(shè)備的特點。掌握ZigBee網(wǎng)絡(luò)拓撲結(jié)構(gòu)。了解ZigBee協(xié)議棧的體系結(jié)構(gòu)。掌握Z-Stack協(xié)議棧組網(wǎng)的工作原理。學會使用Z-Stack協(xié)議棧進行廣播通信。四、項目知識

CC2530模塊間的通信采用的是ZigBee協(xié)議,要實現(xiàn)模塊間的組網(wǎng)及通信,我們首先要了解ZigBee網(wǎng)絡(luò)設(shè)備類型、拓撲結(jié)構(gòu)及ZigBee協(xié)議棧的體系結(jié)構(gòu),其次要掌握基于ZigBee的Z-Stack協(xié)議棧組網(wǎng)通信的工作原理、代碼編寫及應(yīng)用開發(fā)知識。4.1ZigBee網(wǎng)絡(luò)的設(shè)備類型

在ZigBee網(wǎng)絡(luò)中,有三種不同類型的設(shè)備,分別為:協(xié)調(diào)器(Coordinator)、路由器(Router)和終端節(jié)點(EndDevice)。在一個PAN中,協(xié)調(diào)器只有一個,而路由器和終端節(jié)點可以有多個。ZigBee網(wǎng)絡(luò)的設(shè)備類型協(xié)調(diào)器的功能特點選擇一個頻道和

PANID,組建網(wǎng)絡(luò)。允許路由和終端節(jié)點加入這個網(wǎng)絡(luò)。對網(wǎng)絡(luò)中的數(shù)據(jù)進行路由管理。必須常電供電,不能進入睡眠模式。可以為睡眠的終端節(jié)點保留數(shù)據(jù),至其喚醒后獲取。

每個PAN都有一個獨立的ID號,稱為PANID。整個個域網(wǎng)中的所有設(shè)備共享同一個PANID,不同PANID的網(wǎng)絡(luò)間無法通信。ZigBee設(shè)備的PANID可以通過程序預(yù)先指定,也可以在設(shè)備運行期間,自動加入到一個附近的PAN中。當PANID為0xFFFF時,表示該設(shè)備可加入環(huán)境中存在的任意ZigBee網(wǎng)絡(luò)中;而當PANID為其它值時,該設(shè)備只能加入PANID相同的

ZigBee網(wǎng)絡(luò)。路由器的功能特點首先通過協(xié)調(diào)器加入一個ZigBee網(wǎng)絡(luò),之后就可以允許其他節(jié)點加入這個網(wǎng)絡(luò)。多路由轉(zhuǎn)發(fā)數(shù)據(jù)。接收子節(jié)點發(fā)來的數(shù)據(jù)再轉(zhuǎn)發(fā)給父節(jié)點??梢詾樗叩慕K端節(jié)點保留數(shù)據(jù),至其喚醒后獲取。一般情況下保持供電,不進入睡眠模式。終端節(jié)點的功能特點在進行數(shù)據(jù)收發(fā)之前,必須首先加入一個ZigBee網(wǎng)絡(luò)。不能允許其他設(shè)備加入。必須通過其父節(jié)點收發(fā)數(shù)據(jù),不能轉(zhuǎn)發(fā)其他節(jié)點發(fā)來的數(shù)據(jù)??捎呻姵毓╇?,進入睡眠模式。4.2ZigBee的地址

在ZigBee無線傳感器網(wǎng)絡(luò)中,ZigBee設(shè)備有兩種類型的地址,一個是64位的IEEE地址(也稱MAC地址或擴展地址)地址,另一種是16位的網(wǎng)絡(luò)地址(也稱本地地址或短地址)地址。64位的IEEE地址是在產(chǎn)品出廠時初始化的,在全球范圍內(nèi)是唯一標識地址。而16位的短地址是設(shè)備加入網(wǎng)絡(luò)時由協(xié)調(diào)器隨機分配的。在一個PAN中短地址也必須是唯一的,因為在網(wǎng)絡(luò)中識別節(jié)點和傳輸數(shù)據(jù)都要用到這個地址。其中協(xié)調(diào)器的網(wǎng)絡(luò)地址在PAN中固定為0x0000。在Z-Stack協(xié)議棧中其定義的代碼為:#defineNWK_PAN_COORD_ADDR0x0000。4.3ZigBee網(wǎng)絡(luò)拓撲結(jié)構(gòu)

ZigBee網(wǎng)絡(luò)拓撲結(jié)構(gòu)星型、樹型和網(wǎng)狀網(wǎng)三種,可以根據(jù)實際項目需要來選擇合適的ZigBee網(wǎng)絡(luò)結(jié)構(gòu),三種ZigBee網(wǎng)絡(luò)結(jié)構(gòu)各有優(yōu)勢。星型拓撲

星型是最簡單的一種拓撲形式,其包含一個Coordinator(協(xié)調(diào)器)節(jié)點、多個Router(路由)節(jié)點和多個EndDevice(終端)節(jié)點。每一個EndDevice節(jié)點只能和Coordinator節(jié)點進行通訊。如果需要在兩個EndDevice節(jié)點之間進行通訊必須通過Coordinator節(jié)點進行信息的轉(zhuǎn)發(fā)。這種拓撲形式的缺點是節(jié)點之間的數(shù)據(jù)路由只有唯一的一個路徑。Coordinator有可能成為整個網(wǎng)絡(luò)的瓶頸。實現(xiàn)星形網(wǎng)絡(luò)拓撲不需要使用ZigBee的網(wǎng)絡(luò)層協(xié)議,因為本身IEEE802.15.4的協(xié)議層就已經(jīng)實現(xiàn)了星形拓撲形式,這就需要開發(fā)人員在應(yīng)用層做更多的工作,自己處理信息的轉(zhuǎn)發(fā)。樹形拓撲

樹形拓撲包括一個Coordinator(協(xié)調(diào)器)、多個Router(路由器)和多個EndDevice(終端)節(jié)點。Coordinator連接一系列的Router和EndDevice,他的子節(jié)點的Router也可以連接一系列的Router和EndDevice.這樣可以重復(fù)多個層級。樹型拓撲結(jié)構(gòu)的特點主要為以下幾個方面:Coordinator和Router節(jié)點可以包含自己的子節(jié)點。EndDevice不能有自己的子節(jié)點。同一個父節(jié)點的節(jié)點之間稱為兄弟節(jié)點。樹形拓撲中的通訊規(guī)則:每一個節(jié)點都只能和它的父節(jié)點和子節(jié)點之間通訊。如果需要從一個節(jié)點向另一個節(jié)點發(fā)送數(shù)據(jù),那么信息將沿著樹的路徑向上傳遞到最近的祖先節(jié)點然后再向下傳遞到目標節(jié)點。這種拓撲方式的缺點就是信息只有唯一的路由通道。網(wǎng)狀拓撲

網(wǎng)狀拓撲(Mesh拓撲)包含一個Coordinator、一系列的Router和EndDevice。這種網(wǎng)絡(luò)拓撲形式和樹形拓撲相同,類似上面所提到的樹形網(wǎng)絡(luò)拓撲。但是網(wǎng)狀網(wǎng)絡(luò)拓撲具有更加靈活的信息路由規(guī)則,在可能的情況下,路由節(jié)點之間可以直接進行通訊。這種路由機制使得信息的通訊變得更有效率,而且意味這一旦一個路由路徑出現(xiàn)了問題,信息可以自動的沿著其他的路由路徑進行傳輸。

通常在支持網(wǎng)狀網(wǎng)絡(luò)的實現(xiàn)上,網(wǎng)絡(luò)層會提供相應(yīng)的路由探索功能,這一特性使得網(wǎng)絡(luò)層可以找到信息傳輸?shù)淖顑?yōu)化的路徑。需要注意的是,以上所提到的特性都是由網(wǎng)絡(luò)層來實現(xiàn),應(yīng)用層不需要進行任何的參與。網(wǎng)狀拓撲結(jié)構(gòu)的網(wǎng)絡(luò)具有強大的功能,網(wǎng)絡(luò)可以通過“多跳”的方式來通信。該拓撲結(jié)構(gòu)還可以組成極為復(fù)雜的網(wǎng)絡(luò),具備自組織、自愈功能。4.4ZigBee網(wǎng)絡(luò)的工作模式

ZigBee網(wǎng)絡(luò)的工作模式可以分為信標(Beaeon)和非信標(Non-beaeon)兩種模式。

信標模式實現(xiàn)了網(wǎng)絡(luò)中所有設(shè)備的同步工作和同步休眠,以達到最大限度的功耗節(jié)省,而非信標模式則只允許終端設(shè)備進行周期性休眠,協(xié)調(diào)器和所有路由器設(shè)備必須長期處于工作狀態(tài)。

信標模式下,協(xié)調(diào)器負責以一定的間隔時間(一般在15ms-4mins之間)向網(wǎng)絡(luò)廣播信標幀,兩個信標幀發(fā)送間隔之間有16個相同的時槽,這些時槽分為網(wǎng)絡(luò)休眠區(qū)和網(wǎng)絡(luò)活動區(qū)兩個部分,消息只能在網(wǎng)絡(luò)活動區(qū)的各時槽內(nèi)發(fā)送。

非信標模式下,ZigBee標準采用父節(jié)點為終端設(shè)備子節(jié)點緩存數(shù)據(jù),終端設(shè)備主動向其父節(jié)點提取數(shù)據(jù)的機制,實現(xiàn)終端設(shè)備的周期性休眠。網(wǎng)絡(luò)中所有父節(jié)點需為自己的終端設(shè)備子節(jié)點緩存數(shù)據(jù)幀,所有終端設(shè)備子節(jié)點的大多數(shù)時間都處于休眠模式,周期性的醒來與父節(jié)點握手以確認自己仍處于網(wǎng)絡(luò)中,其從休眠模式轉(zhuǎn)入數(shù)據(jù)傳輸模式一般只需要15ms。4.5ZigBee協(xié)議棧體系結(jié)構(gòu)

ZigBee協(xié)議棧由一組子層構(gòu)成。每層為其上層提供一組特定的服務(wù),數(shù)據(jù)實體提供數(shù)據(jù)傳輸服務(wù),管理實體提供全部其他服務(wù)。每個服務(wù)實體通過一個服務(wù)接入點(SAP)為其上層提供服務(wù)接口,并且每個SAP提供了一系列的基本服務(wù)指令來完成相應(yīng)的功能。

ZigBee協(xié)議棧的體系結(jié)構(gòu)如圖所示。它雖然是基于標準的七層開放式系統(tǒng)互聯(lián)(OSI)模型,但僅對那些涉及ZigBee的層予以定義。IEEE802.15.4-2003標準定義了最下面的兩層:物理層(PHY)和介質(zhì)接入控制子層(MAC)。ZigBee聯(lián)盟提供了網(wǎng)絡(luò)層和應(yīng)用層(APL)框架的設(shè)計。其中應(yīng)用層的框架包括了應(yīng)用支持子層(APS)、ZigBee設(shè)備對象(ZDO)和由制造商制訂的應(yīng)用對象。ZigBee協(xié)議棧體系結(jié)構(gòu)

物理層(PHY)物理層定義了物理無線信道和MAC子層之間的接口,提供物理層數(shù)據(jù)服務(wù)和物理層管理服務(wù)。其主要功能如下:ZigBee的激活。當前信道的能量檢測。接收鏈路服務(wù)質(zhì)量信息。ZigBee信道接入方式。信道頻率選擇。數(shù)據(jù)傳輸和接收。ZigBee協(xié)議棧體系結(jié)構(gòu)

介質(zhì)接入控制子層(MAC)負責處理所有的物理無線信道訪問,并產(chǎn)生網(wǎng)絡(luò)信號、同步信號;支持PAN連接和分離,提供兩個對等MAC實體之間可靠的鏈路。其主要功能如下:網(wǎng)絡(luò)協(xié)調(diào)器產(chǎn)生信標。與信標同步。支持PAN(個域網(wǎng))鏈路的建立和斷開。為設(shè)備的安全性提供支持。信道接入方式采用免沖突載波檢測多址接入(CSMA-CA)機制。處理和維護保護時隙(GTS)機制。在兩個對等的MAC實體之間提供一個可靠的通信鏈路。ZigBee協(xié)議棧體系結(jié)構(gòu)

網(wǎng)絡(luò)層(NWK):ZigBee協(xié)議棧的核心部分是網(wǎng)絡(luò)層,網(wǎng)絡(luò)層主要實現(xiàn)節(jié)點加入或離開網(wǎng)絡(luò)、接收或拋棄其他節(jié)點、路由查找及傳送數(shù)據(jù)等功能。其主要功能如下:網(wǎng)絡(luò)發(fā)現(xiàn)。網(wǎng)絡(luò)形成。允許設(shè)備連接。路由器初始化。設(shè)備同網(wǎng)絡(luò)連接。直接將設(shè)備同網(wǎng)絡(luò)連接。斷開網(wǎng)絡(luò)連接。重新復(fù)位設(shè)備。接收機同步。信息庫維護。ZigBee協(xié)議棧體系結(jié)構(gòu)

應(yīng)用層(APL):ZigBee應(yīng)用層框架包括應(yīng)用支持層(APS)、ZigBee設(shè)備對象(ZDO)和制造商所定義的應(yīng)用對象。

應(yīng)用支持層的功能包括:維持綁定表、在綁定的設(shè)備之間傳送消息。

ZigBee設(shè)備對象的功能包括:定義設(shè)備在網(wǎng)絡(luò)中的角色(如ZigBee協(xié)調(diào)器和終端設(shè)備),發(fā)起和響應(yīng)綁定請求,在網(wǎng)絡(luò)設(shè)備之間建立安全機制。ZigBee設(shè)備對象還負責發(fā)現(xiàn)網(wǎng)絡(luò)中的設(shè)備,并且決定向他們提供何種應(yīng)用服務(wù)。

ZigBee應(yīng)用層除了提供一些必要函數(shù)以及為網(wǎng)絡(luò)層提供合適的服務(wù)接口外,一個重要的功能是應(yīng)用者可在這層定義自己的應(yīng)用對象。

應(yīng)用程序框架(AF):運行在ZigBee協(xié)議棧上的應(yīng)用程序?qū)嶋H上就是廠商自定義的應(yīng)用對象,并且遵循規(guī)范(profile)運行在端點上。4.6ZigBee的信道

IEEE802.15.4標準定義了兩個工作頻段,即2.4GHz頻段和868/915MHz頻段,這兩個頻段都屬于免執(zhí)照的工業(yè)科學醫(yī)療(ISM)頻段。在IEEE802.15.4中,總共分配了27個具有3種速率的信道:在2.4GHz頻段有16個速率為250kb/s的信道,信道間隔為5MHz;在915MHz頻段有10個40kb/s的信道,,信道間隔為2MHz;在868MHz頻段有1個20kb/s的信道。這些信道的中心頻率按如下定義(k為信道編號):Fc=868.3MHz,(k=0)Fc=906MHz+2(k-1)MHz,(k=1,2……10)Fc=2405MHz+5(k-11)MHz,(k=11,12……26)ZigBee的信道

眾所周知,Wifi、ZigBee和Bluetooth都使用2.4G頻段。當這三種類型的設(shè)備在同一空間中進行通信時,會受到相同頻率的干擾。為了減少Wifi頻道和ZigBee頻道之間的同頻干擾問題,ZigBee聯(lián)盟建議使用11、14、15、19、20、24、25這些信道。Wifi和ZigBee信道對比如右圖所示。ZigBee的信道

由于Wifi通常為1、6和11信道,每個信道的頻譜帶寬為22MHz,因此,與ZigBee頻道的分布結(jié)合使用時,可以發(fā)現(xiàn)ZigBee信道14和15恰好在Wifi的1和6信道之間,ZigBee信道19和20在Wifi的6和11信道之間,因此對ZigBee信道14、15、19、20的干擾較小。而ZigBee11、24、25信道處于Wifi的1和11信道之外,因此ZigBee頻道11、24和25幾乎不受Wifi干擾。因此要避免ZigBee受到Wifi的影響,最合理的信道要配置在11、15、20、26。根據(jù)頻段越低傳輸距離越遠的道理,所以建議還是分配在11信道。4.7ZigBee地址分配

在ZigBee無線傳感器網(wǎng)絡(luò)中,每個節(jié)點有2個地址,一個是物理地址(也稱IEEE或擴展地址),物理地址是在產(chǎn)品出廠時初始化的,在全球范圍內(nèi)是唯一標識地址。另一種是16位的網(wǎng)絡(luò)地址(也稱本地地址或短地址)地址。而16位的短地址有兩種地址分配方式:分布式分配機制和隨機分配機制。

協(xié)調(diào)器在建立網(wǎng)絡(luò)以后使用0x0000作為自己的短地址。而路由器和終端節(jié)點的短地址隨機選擇。當這個地址與另一個設(shè)備沖突時,設(shè)備自我指派另外的隨機地址。分布式分配機制

在路由器和終端節(jié)點加入網(wǎng)絡(luò)以后,使用父設(shè)備給它分配16位的短地址來通訊。16位的地址意味著可以分配給65536個節(jié)點之多,地址的分配取決于整個網(wǎng)絡(luò)的架構(gòu),整個網(wǎng)絡(luò)的架構(gòu)由網(wǎng)絡(luò)的最大深度(Lm)、每個父親設(shè)備擁有的子設(shè)備數(shù)(Cm)、子設(shè)備當中有幾個是路由器(Rm)三個參數(shù)決定。有了這3個值就可以用公式計算出某父設(shè)備的路由器子設(shè)備之間的地址間隔。

在ZigBee網(wǎng)絡(luò)中,協(xié)調(diào)器(Coordinator)的網(wǎng)絡(luò)深度為0。五、

Z-Stack協(xié)議棧

為了使ZigBee的開發(fā)更加簡單高效,TI公司推出了基于CC2530芯片的Z-Stack協(xié)議棧,實際上就是能實現(xiàn)各個功能的實例框架代碼,我們想要實現(xiàn)自己的功能程序,只需要在協(xié)議棧的基礎(chǔ)上修改或添加即可。

雙擊Z-Stack2.5.1a協(xié)議棧安裝文件進行安裝,默認安裝到C:\TexasInstruments\Z-Stack-CC2530-2.5.1a下。實際上安裝協(xié)議棧只是把文件解壓到安裝的目錄下。Z-Stack協(xié)議棧

Z-Stack協(xié)議棧安裝協(xié)議棧目錄下主要包含下列文件夾:Components:Z-Stack的庫文件夾,里面放了一些我們用到的ZDO、HAL、MT、OSAL等庫函數(shù)代碼。Documents:包含TI的開發(fā)文檔。Projects:TI協(xié)議棧的三個案例程序。Tools:TI提供的一些開發(fā)工具軟件。5.1Z-Stack協(xié)議棧SampleApp項目目錄

打開項目文檔看到按照Z-Stack協(xié)議棧體系結(jié)構(gòu)分為十四個文件夾:App:應(yīng)用層目錄,這是用戶創(chuàng)建各種不同工程的區(qū)域,在這個目錄中包含了應(yīng)用層的內(nèi)容和這個項目的主要內(nèi)容。HAL:硬件層目錄,包含有與硬件相關(guān)的配置和驅(qū)動及操作函數(shù)。MAC:MAC層目錄,包含了MAC層的參數(shù)配置文件及其MAC的LIB庫的函數(shù)接口文件。MT:實現(xiàn)通過串口可控制各層,并與各層進行直接交互。NWK:網(wǎng)絡(luò)層目錄,包含網(wǎng)絡(luò)層配置參數(shù)文件網(wǎng)絡(luò)層庫的函數(shù)接口文件及APS層庫的函數(shù)接口。

Z-Stack協(xié)議棧SampleApp項目目錄OSAL:協(xié)議棧的操作系統(tǒng)。Profile:Applicationframework應(yīng)用框架層目錄,包含AF層處理函數(shù)文件。應(yīng)用框架層是應(yīng)用程序和APS層的無線數(shù)據(jù)接口。Security:安全層目錄,包含安全層處理函數(shù),比如加密函數(shù)等。Services:地址處理函數(shù)目錄,包括地址模式的定義及地址處理函數(shù)。Tools:工程配置目錄,包括空間劃分及Z-Stack相關(guān)配置信息。ZDO:ZDO目錄。ZMac:MAC層目錄,包括MAC層參數(shù)配置及MAC層LIB庫函數(shù)回調(diào)處理函數(shù)。ZMain:主函數(shù)目錄,包括入口函數(shù)及硬件配置文件。Output:輸出文件目錄,由IARIDE自動生成。5.2Z-Stack協(xié)議棧工作流程查看Z-Stack協(xié)議棧工作流程

Z-Stack協(xié)議棧可以看成一個小型操作系統(tǒng),其程序流程也是按照流程圖運行的,首先從main()函數(shù)開始依次調(diào)用其他功能函數(shù):main()--->osal_init_system()--->osalInitTasks()--->SampleApp_Init()。例如main()函數(shù)調(diào)用的第一個函數(shù)osal_int_disable(INTS_ALL),函數(shù)名字面意義解讀為操作系統(tǒng)中斷禁止(所有),即關(guān)所有中斷。選定這個函數(shù)右擊鼠標,彈出的菜單中選擇Gotodefinitionofxxx。最終可以看到其代碼為:#defineHAL_DISABLE_INTERRUPTS()st(EA=0;)5.3Z-Stack的main()函數(shù)intmain(void){

osal_int_disable(INTS_ALL);//關(guān)閉所有中斷

HAL_BOARD_INIT();//初始化系統(tǒng)時鐘zmain_vdd_check();//檢查芯片電壓是否正常InitBoard(OB_COLD);//初始化I/O,LED、Timer等HalDriverInit();//初始化芯片各硬件模塊osal_nv_init(NULL);//初始化Flash存儲器ZMacInit();//初始化MAC層zmain_ext_addr();//確定IEEE64位地址osal_init_system();//初始化操作系統(tǒng)osal_int_enable(INTS_ALL);//使能全部中斷InitBoard(OB_READY);//最終板載初始化osal_start_system();//執(zhí)行操作系統(tǒng)}5.4Z-Stack的osal_init_system()函數(shù)uint8osal_init_system(void){

osal_mem_init();//系統(tǒng)內(nèi)存配置osal_qHead=NULL;//初始化消息隊列osalTimerInit();//初始化定時器osal_pwrmgr_init();//初始化電源管理osalInitTasks();//初始化系統(tǒng)任務(wù)osal_mem_kick();return(SUCCESS);}5.5Z-Stack的osalInitTasks()函數(shù)voidosalInitTasks(void){

uint8taskID=0;//任務(wù)號為0tasksEvents=(uint16*)osal_mem_alloc(sizeof(uint16)*tasksCnt);osal_memset(tasksEvents,0,(sizeof(uint16)*tasksCnt));//系統(tǒng)為任務(wù)分配存儲空間macTaskInit(taskID++);//初始化MAC層,mac_taskID=0;nwk_init(taskID++);//初始化網(wǎng)絡(luò)層,nwk_taskID=1;Hal_Init(taskID++);//初始化硬件層,Hal_taskID=2;#ifdefined(MT_TASK)MT_TaskInit(taskID++);//初始化串口任務(wù),MT_taskID=3(如果定義了MT_TASK)#endif

SampleApp_Init(taskID);

//初始化SampleAp任務(wù)(用戶創(chuàng)建的任務(wù))}系統(tǒng)需要用到串口時就會宏定義MT_TASK,用不到串口時則無需定義這個宏。5.6用戶應(yīng)用函數(shù)SampleApp_Init()

除了一些系統(tǒng)配置外,用戶自定義的代碼基本上都在這個函數(shù)中。voidSampleApp_Init(uint8task_id){SampleApp_TaskID=task_id;//SampleApp_taskID=6;用戶創(chuàng)建的任務(wù)SampleApp_NwkState=DEV_INIT;//初始化網(wǎng)絡(luò)狀態(tài)......

ZigBee路由和終端節(jié)點在沒加入網(wǎng)絡(luò)前的狀態(tài)為DEV_INIT。由協(xié)調(diào)器為主構(gòu)建一個網(wǎng)絡(luò),分配其他節(jié)點在網(wǎng)絡(luò)中的角色為路由或終端節(jié)點。在ZDApp.h文件中定義了這些網(wǎng)絡(luò)狀態(tài)的枚舉類型。一個ZigBee網(wǎng)絡(luò)只能有一個協(xié)調(diào)器,其他節(jié)點加入這個網(wǎng)絡(luò)后網(wǎng)絡(luò)狀態(tài)就被配置為路由器或終端節(jié)點。typedefenum{DEV_HOLD,//初始化完成,未自動啟動DEV_INIT,//初始化完成,未連接任何節(jié)點DEV_NWK_DISC,//找到一個PANDEV_NWK_JOINING,//加入一個PANDEV_NWK_REJOIN,//重新加入一個PANDEV_END_DEVICE_UNAUTH,//已加入但尚未得到認證DEV_END_DEVICE,//驗證后作為終端節(jié)點DEV_ROUTER,//已加入PAN、任證為路由器DEV_COORD_STARTING,//已啟動為協(xié)調(diào)器DEV_ZB_COORD,//已啟動為協(xié)調(diào)器DEV_NWK_ORPHAN//丟失了上層設(shè)備的信息}devStates_t;5.7SampleApp_Init()函數(shù)中的地址類型

Z-Stack協(xié)議中定義了發(fā)送的數(shù)據(jù)包類型主要有三種:廣播包、組播包和點播包。廣播包發(fā)給本網(wǎng)絡(luò)中的所有節(jié)點,組播包發(fā)給一組節(jié)點,而點播包只發(fā)給某一個節(jié)點。Z-Stack協(xié)議定義為一個PAN中只能有一個協(xié)調(diào)器,其短地址為固定的0x0000,其他節(jié)點的短地址由協(xié)調(diào)器來分配,而網(wǎng)絡(luò)狀態(tài)經(jīng)常改變,其他節(jié)點短地址無法固定,因此點播包按短地址發(fā)送只能發(fā)給協(xié)調(diào)器。發(fā)送廣播包時接收方短地址全為1,即0xFFFF。endPoint為端點號,類似于TCP/IP協(xié)議中的端口號。SampleApp_Periodic_DstAddr.addrMode=(afAddrMode_t)AddrBroadcast;SampleApp_Periodic_DstAddr.endPoint=SAMPLEAPP_ENDPOINT;SampleApp_Periodic_DstAddr.addr.shortAddr=0xFFFF;addrMode地址模式在枚舉類型afAddrMode_t中定義,表示接收方地址模式可以是以下幾種:enum{AddrNotPresent=0,//未知地址AddrGroup=1,//發(fā)給某組Addr16Bit=2,//發(fā)給一個16位短地址節(jié)點Addr64Bit=3,//發(fā)給一個64位長地址節(jié)點AddrBroadcast=15//廣播給所有節(jié)點};5.8系統(tǒng)事件處理函數(shù)SampleApp_ProcessEvent()

操作系統(tǒng)采用的輪詢?nèi)蝿?wù)的機制。當某個任務(wù)發(fā)生時,系統(tǒng)傳輸參數(shù)任務(wù)號task_id和事件類型events給函數(shù)SampleApp_ProcessEvent(),然后從系統(tǒng)得到完整的參數(shù)信息放到結(jié)構(gòu)體MSGpkt中,根據(jù)這些參數(shù)判斷發(fā)生了什么事件,以調(diào)用相應(yīng)函數(shù)。uint16SampleApp_ProcessEvent(uint8task_id,uint16events){afIncomingMSGPacket_t*MSGpkt;//新建一個結(jié)構(gòu)體實例(void)task_id;//Intentionallyunreferencedparameterif(events&SYS_EVENT_MSG)//如果有事件發(fā)生及相關(guān)信息{

//把事件其他相關(guān)信息放入結(jié)構(gòu)體MSGpktMSGpkt=(afIncomingMSGPacket_t*)osal_msg_receive(SampleApp_TaskID);while(MSGpkt){switch(MSGpkt->hdr.event)

//判斷結(jié)構(gòu)體MSGpkt中的二級結(jié)構(gòu)體hdr下事件參數(shù)event

系統(tǒng)事件

switch(MSGpkt->hdr.event){caseKEY_CHANGE://如果發(fā)生了按鍵事件,則執(zhí)行函數(shù)SampleApp_HandleKeysSampleApp_HandleKeys(((keyChange_t*)MSGpkt)->state,((keyChange_t*)MSGpkt)->keys);break;caseAF_INCOMING_MSG_CMD://如果接收到數(shù)據(jù)包則執(zhí)行函數(shù)SampleApp_MessageMSGCB()SampleApp_MessageMSGCB(MSGpkt);break;caseZDO_STATE_CHANGE://如果網(wǎng)絡(luò)狀態(tài)改變SampleApp_NwkState=(devStates_t)(MSGpkt->hdr.status);

if((SampleApp_NwkState==DEV_ZB_COORD)//如果是協(xié)調(diào)器||(SampleApp_NwkState==DEV_ROUTER)//或者是路由器||(SampleApp_NwkState==DEV_END_DEVICE))//或者是終端節(jié)點{

osal_start_timerEx(SampleApp_TaskID,SAMPLEAPP_SEND_PERIODIC_MSG_EVT,

SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT);}//啟動周期發(fā)送信息事件SAMPLEAPP_SEND_PERIODIC_MSG_EVT,默認5s。5.9周期事件處理

周期事件處理是每隔一定周期時間系統(tǒng)所要執(zhí)行的任務(wù)。if(events&SAMPLEAPP_SEND_PERIODIC_MSG_EVT)//如果啟動周期事件{SampleApp_SendPeriodicMessage();//則執(zhí)行此發(fā)送廣播包的函數(shù)osal_start_timerEx(SampleApp_TaskID,SAMPLEAPP_SEND_PERIODIC_MSG_EVT,(SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT+(osal_rand()&0x00F

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論