ZigBee的遠(yuǎn)程低功耗灌溉控制系統(tǒng)設(shè)計(jì)
(1)ZigBee協(xié)調(diào)器消息處理
ZigBee協(xié)調(diào)器通過UART接口從短信模塊中讀取短信的內(nèi)容后,將其保存在ZigBee協(xié)調(diào)器中,等待ZigBee終端醒來(lái)后發(fā)送詢問消息。如果詢問后ZigBee協(xié)調(diào)器保留了控制消息,那么ZigBee協(xié)調(diào)器將保存的控制指令以廣播的形式發(fā)送出去,如果終端詢問過后ZigBee協(xié)調(diào)器沒有控制指令,那么ZigBee協(xié)調(diào)器將發(fā)送無(wú)控制消息到ZigBee終端。
ZigBee協(xié)調(diào)器發(fā)送數(shù)據(jù)后等待ZigBee終端回復(fù)確認(rèn)信息,其信息格式如下。
其消息類型域取值見表1。協(xié)調(diào)器收到ZigBee終端的回復(fù)消息后,將該節(jié)點(diǎn)號(hào)所對(duì)應(yīng)的字節(jié)的控制消息全部位置0,使下次廣播控制指令后,該終端節(jié)點(diǎn)不會(huì)采取相應(yīng)動(dòng)作。
當(dāng)ZigBee協(xié)調(diào)器發(fā)送完控制消息后,等待接收終端電磁閥的狀態(tài),ZigBee協(xié)調(diào)器收到所有ZigBee終端的電磁閥狀態(tài)信息或者等待時(shí)間超時(shí)后,向上位機(jī)發(fā)送已接收到的電磁閥信息。
ZigBee協(xié)調(diào)器的消息處理流程如圖5所示。
(2)ZigBee終端消息處理
由于ZigBee終端是完全由電池供電,所以ZigBee終端必須定時(shí)睡眠來(lái)節(jié)約能量,使終端工作時(shí)間可以盡可能地長(zhǎng)。因此,ZigBee協(xié)調(diào)器收到控制信息后不可能直接發(fā)送給終端,必須先存儲(chǔ),ZigBee終端為了獲得控制消息,在醒來(lái)后必須向協(xié)調(diào)器發(fā)送詢問消息,使ZigBee協(xié)調(diào)器發(fā)送控制消息。
ZigBee終端收到ZigBee協(xié)調(diào)器發(fā)送來(lái)的控制指令后,向ZigBee協(xié)調(diào)器發(fā)送確認(rèn)消息,使ZigBee協(xié)調(diào)器更改相應(yīng)的節(jié)點(diǎn)狀態(tài),避免重復(fù)發(fā)送控制指令到ZigBee終端,增加ZigBee終端的負(fù)擔(dān)。
ZigBee終端收到控制信息后,獲取本節(jié)點(diǎn)的控制信息,判斷是否有控制信息。如果有控制信息,為了使ZigBee終端的電磁閥中的電機(jī)不出現(xiàn)卡死的現(xiàn)象,ZigBee終端必須判斷當(dāng)前的控制狀態(tài)是否和電磁閥當(dāng)前的狀態(tài)相同。如果相同,則對(duì)電磁閥不采取任何控制動(dòng)作;如果不同,則根據(jù)控制信息對(duì)電磁閥采取相應(yīng)的控制。對(duì)控制信息進(jìn)行判斷后,為了使電磁閥對(duì)控制信息有充分的反應(yīng)時(shí)間,延時(shí)1 s采集電磁閥的控制信息,然后將其傳送到ZigBee協(xié)調(diào)器,其處理流程圖6所示。
回復(fù)到ZigBee協(xié)調(diào)器的電磁閥的狀態(tài)信息的消息格式如下。
其中消息類型域的值見表2。電磁閥狀態(tài)域低4位存放電磁閥的狀態(tài),每一位存放一個(gè)電磁閥的狀態(tài)。
3.2 低功耗與同步設(shè)計(jì)
由于ZigBee終端節(jié)點(diǎn)是采用電池供電,所以ZigBee終端節(jié)點(diǎn)必須定時(shí)地休眠和喚醒以節(jié)約能量,使電池的供電時(shí)間更長(zhǎng)。如果本系統(tǒng)的ZigBee網(wǎng)絡(luò)采用網(wǎng)狀結(jié)構(gòu)和樹狀結(jié)構(gòu),那么路由器節(jié)點(diǎn)必須在非路由器節(jié)點(diǎn)之前醒來(lái),這樣必然會(huì)增加系統(tǒng)的控制難度,最糟糕的情況下可
能會(huì)使整個(gè)系統(tǒng)無(wú)法控制,并且可能使終端節(jié)點(diǎn)不定期的掉線。所以本系統(tǒng)采用星型網(wǎng)絡(luò),終端節(jié)點(diǎn)直接和協(xié)調(diào)器節(jié)點(diǎn)交互信息。
3.2.1 ZigBee節(jié)點(diǎn)同步
ZigBee節(jié)點(diǎn)之間的誤差主要是傳輸延時(shí)和節(jié)點(diǎn)之間的時(shí)鐘誤差。
(1)節(jié)點(diǎn)時(shí)鐘誤差測(cè)量
ZigBee協(xié)調(diào)器節(jié)點(diǎn)先發(fā)送廣播數(shù)據(jù)包,其中帶有協(xié)調(diào)器節(jié)點(diǎn)下一次發(fā)送數(shù)據(jù)包的時(shí)間T1。節(jié)點(diǎn)收到數(shù)據(jù)包后,啟動(dòng)定時(shí)器等待接收Z(yǔ)ig Bee協(xié)調(diào)器下次發(fā)送數(shù)據(jù),當(dāng)ZigBee終端節(jié)點(diǎn)收到下一次同步數(shù)據(jù)后,讀取定時(shí)器的時(shí)間為T2,所以時(shí)鐘偏移誤差為:a=(T2-T1)/T1。
(2)延時(shí)誤差
ZigBee終端節(jié)點(diǎn)向ZigBee協(xié)調(diào)器節(jié)點(diǎn)發(fā)送同步信息,ZigBee協(xié)調(diào)器收到同步信息后回復(fù)一個(gè)同步信息到ZigBee終端,ZigBee終端收到此回復(fù)信息的時(shí)間為T3。假設(shè)傳輸?shù)难訒r(shí)一樣,為T4,則T4=(1+a)×T3/2。
3.2.2 ZigBee終端節(jié)點(diǎn)睡眠
當(dāng)ZigBee協(xié)調(diào)器接收到所有節(jié)點(diǎn)的狀態(tài)回復(fù)后,廣播一個(gè)睡眠消息到ZigBee終端,消息中加入睡眠的時(shí)間T5,ZigBee終端收到此時(shí)間后,開始睡眠,其睡眠時(shí)間為T5-T4-a×(T5-T4)。節(jié)點(diǎn)醒來(lái)后,再延時(shí)1 s發(fā)送詢問消息到協(xié)調(diào)器,獲得控制消息。
結(jié)語(yǔ)
本系統(tǒng)經(jīng)過現(xiàn)場(chǎng)調(diào)試,能夠?qū)ι衔粰C(jī)發(fā)送的控制指令進(jìn)行準(zhǔn)確的控制。節(jié)點(diǎn)定時(shí)地睡眠和蘇醒,能夠有效地節(jié)約電量,兩節(jié)干電池能夠工作6個(gè)月到兩年,為系統(tǒng)在農(nóng)田這種無(wú)電源供電場(chǎng)合提供保障。采用同步算法和一些輔助措施,使系統(tǒng)能夠在同一時(shí)間蘇醒、同一時(shí)間睡眠,ZigBee終端節(jié)點(diǎn)同一時(shí)間接收到ZigBee協(xié)調(diào)器廣播控制指令數(shù)據(jù)包的概率在90%以上,更加節(jié)約能源。
評(píng)論