范志宏
(上海工業(yè)自動化儀表研究院有限公司)
目前,在施工工地地下空間數(shù)據(jù)采集系統(tǒng)中,數(shù)據(jù)傳輸多采用無線網(wǎng)絡(luò),其中,采用ZigBee無線網(wǎng)絡(luò)比較多,但在某些特別苛刻的應(yīng)用環(huán)境中,尤其是地下施工空間中,ZigBee的表現(xiàn)并不理想,主要體現(xiàn)在數(shù)據(jù)采集同步問題上。本文采用時間同步的方法和全路由方式解決網(wǎng)絡(luò)連通和低功耗問題,使網(wǎng)絡(luò)在發(fā)揮最大連通性的同時保持低功耗性能。
ZigBee基于TI提供的Z-Stack、API接口和OSAL實時操作系統(tǒng),結(jié)合編寫應(yīng)用程序,采用時間同步和全路由的方法克服如功耗高、可靠性低以及網(wǎng)絡(luò)整體性差等缺點。遠程服務(wù)器通過GPRS網(wǎng)絡(luò)訪問網(wǎng)關(guān),網(wǎng)關(guān)負責(zé)將相關(guān)數(shù)據(jù)通過GPRS返送至服務(wù)器,為保證網(wǎng)關(guān)與服務(wù)器間的通訊可靠,其間附加對等層協(xié)議。網(wǎng)關(guān)在解析服務(wù)器發(fā)來的數(shù)據(jù)后,轉(zhuǎn)發(fā)給相應(yīng)節(jié)點。網(wǎng)關(guān)的時間系統(tǒng)為整個傳感器網(wǎng)絡(luò)的時間中心,整個傳感器網(wǎng)絡(luò)的時間從網(wǎng)關(guān)向下擴散。網(wǎng)關(guān)的時間可通過串口UART1更改。路由器節(jié)點收到網(wǎng)關(guān)發(fā)來的消息后,設(shè)置相應(yīng)動作。兩節(jié)點間通過請求回饋機制協(xié)商處理數(shù)據(jù)轉(zhuǎn)發(fā)和時間同步問題,完成所有工作后進入休眠狀態(tài)。同步完成后,網(wǎng)絡(luò)拓撲中下層向上層請求時間同步幀,時間向下傳播至少一層,之后節(jié)點進行采集、打包和存儲,并在時間同步后及時進行發(fā)送。一般同步時間間隔小于任務(wù)時間間隔。
1)Z-Stack協(xié)議棧
Z-Stack協(xié)議棧是TI公司提供的一個強大完整的ZigBee解決方案,在相關(guān)幾個層調(diào)用Z-Stack提供的各種API即可滿足應(yīng)用要求,大大簡化了開發(fā)難度,縮短了開發(fā)周期。ZigBee無線網(wǎng)絡(luò)共分為五層,包括物理層(PHY)、介質(zhì)訪問控制層(MAC)、網(wǎng)絡(luò)層(NWK)、應(yīng)用程序支持子層(APS)和應(yīng)用層(APL)。IEEE 802.15.4僅僅定義了物理層(PHY)和介質(zhì)訪問控制層(MAC)的數(shù)據(jù)傳輸規(guī)范,而ZigBee協(xié)議定義了網(wǎng)絡(luò)層(NWK)、應(yīng)用程序支持子層(APS)及應(yīng)用層(APL)的數(shù)據(jù)傳輸規(guī)范。
2)應(yīng)用程序
①網(wǎng)關(guān)節(jié)點的主要功能是建立和維護網(wǎng)絡(luò),在對采集節(jié)點的數(shù)據(jù)進行處理后發(fā)送給GPRS模塊,將GPRS模塊轉(zhuǎn)發(fā)的數(shù)據(jù)處理后發(fā)送給相應(yīng)節(jié)點,并存儲發(fā)送失敗數(shù)據(jù);②路由器節(jié)點的主要功能是完成數(shù)據(jù)的采集、處理、存儲和發(fā)送,在完成任務(wù)后進入休眠狀態(tài)。路由節(jié)點將以DS1302讀取的時間為粗略時間,以CC2530的內(nèi)部定時器提供的時間為精確時間,由此,兩個時間通過高低地址路由節(jié)點間的同步信號幀得到同步。喚醒時間可在1~65 535s內(nèi)選擇設(shè)定,并根據(jù)具體節(jié)點間DS1302的時間誤差確定,路由節(jié)點的轉(zhuǎn)發(fā)由路由節(jié)點互相協(xié)商,發(fā)送失敗或轉(zhuǎn)發(fā)失敗的數(shù)據(jù)寫入存儲器中等待下一次發(fā)送。
在單總線上要想對單點進行測溫,需要從單總線上有針對性地取出一個點,可使用匹配ROM[55H]命令,但匹配前還需得知每個點的光刻ROM,因此,需要采用搜索二叉樹的算法取出每個溫度傳感器的ROM。由于接在單總線上的傳感器數(shù)目并非固定不變,需要采用Search_Rom()函數(shù)構(gòu)成Confirm_ROM()函數(shù),以確保傳感器搜索正確,得到ROM后發(fā)送匹配ROM[55H],匹配成功后通過暫存器[BEH]讀出寄存器值,其中,前兩字節(jié)即為溫度寄存器值,乘以分辨率便可得到溫度值。
DS1302采用簡潔的三線接口,讀時鐘時,先寫入寄存器地址,再讀出寄存器。寫時鐘時先關(guān)閉寫保護,再暫停時鐘,然后寫入時間打開寫保護。每個節(jié)點都采用DS1302芯片作為實時時鐘芯片,但每一個時鐘芯片的具體硬件條件不同,也沒有兩個節(jié)點處于完全相同溫度的情況,所以任意兩個節(jié)點的時間都不可能完全相同[1]。
為使每個節(jié)點在同一時間被喚醒,且誤差在可接受的范圍內(nèi),通常采用毫秒校準(zhǔn)的方法。因DS1302的時間只提供秒,因此,毫秒由CC2530內(nèi)部定時器提供。在同步時間到前讀DS1302轉(zhuǎn)為1000次每秒以上,直到秒從“59”跳轉(zhuǎn)為“00”,此時該DS1302的毫秒時間為0,由上層提供的時間同步幀校準(zhǔn)毫秒位,其功耗和時間精度成負相關(guān)。
時間同步幀分為秒同步幀和毫秒同步幀,秒同步幀的凈荷包括時、分、秒,由上層路由節(jié)點采樣并適當(dāng)估算代碼時間。毫秒同步幀凈荷只包括毫秒,并考慮到其節(jié)間的延遲。CC2530讀取時鐘模塊獲取粗略時間,在粗略時間上加入毫秒修正便可得到該節(jié)點的精確時間。所有時間均從網(wǎng)關(guān)開始,低地址服從高地址時間校準(zhǔn)信號3。如果存在節(jié)點未得到同步的情況,未得到同步信號的節(jié)點將以2n毫秒(n為同步失敗次數(shù))為遞增時間左右增加工作時間直到時間同步。時間同步流程如圖1所示。

圖1 時間同步流程
W25Q16采用SPI串行數(shù)據(jù)接口,既滿足了引腳少、傳輸速率高的要求,又滿足了可靠性高、功耗低的要求。通過CC2530的IO口模擬SPI時序與之相互交換數(shù)據(jù)。W25Q16由每頁256字節(jié),共8192頁組成。每頁的256字節(jié)用一次頁編程指令即可完成,前10頁用來存儲目錄。每次取數(shù)據(jù)時先從目錄按照類型和時間查詢地址,再從相應(yīng)地址取出數(shù)據(jù)。當(dāng)節(jié)點通訊失敗時將數(shù)據(jù)寫入存儲器,之后進入休眠狀態(tài)[2]。
為實現(xiàn)高可靠性、低成本、高穩(wěn)定性和低功耗的傳感器網(wǎng)絡(luò),采用以CC2530為主體,外圍以低功耗器件輔助的系統(tǒng)。以網(wǎng)關(guān)為時間中心傳遞時間參數(shù)的思想使時間設(shè)置和時間維護極為方便。以CC2530定時器的精確時間作為同步標(biāo)準(zhǔn)既解決了因時鐘精度不高帶來的同步性差等一系列問題,也解決了因安裝高精度時鐘模塊帶來的成本問題和功耗問題。既然傳感器網(wǎng)絡(luò)在某些苛刻的環(huán)境中需要保持位置不變,并且持續(xù)工作很長時間,路由器就沒有持續(xù)供電的必要,因此,產(chǎn)生了路由器休眠的方案。