基于GPRS的ZigBee協(xié)調(diào)器網(wǎng)關(guān)設(shè)計通信
摘要:介紹了一種可進行遠程監(jiān)測和控制的數(shù)據(jù)采集系統(tǒng)。多個測控節(jié)點組成ZigBee無線傳輸網(wǎng)絡(luò),利用GPRS模塊連接因特網(wǎng)擴展傳輸范圍,與基于LabVIEW的上位機程序進行TCP/IP協(xié)議通信,從而實現(xiàn)遠程監(jiān)控。下位機設(shè)計了數(shù)據(jù)幀和采集控制指令;協(xié)調(diào)器網(wǎng)關(guān)可對數(shù)據(jù)進行選擇性接收和處理,并實現(xiàn)斷線后自動連接;上位機完成對采集數(shù)據(jù)的解析、顯示以及保存,并能發(fā)送控制指令。
關(guān)鍵詞:ZigBee;GPRS;LabVIEW;TCP/IP協(xié)議
0 引言
ZigBee協(xié)議是一種基于IEEE 802.15.4標準的低功耗個域網(wǎng)協(xié)議,其主要特點是低復(fù)雜度、自組織、低功耗、低數(shù)據(jù)速率以及低成本,普遍應(yīng)用于自動控制和測量領(lǐng)域,可以嵌入各種設(shè)備,是一種數(shù)據(jù)傳輸可靠性高的近距離無線組網(wǎng)通信技術(shù)。而GPRS模塊則是通過手機終端連接因特網(wǎng)來實現(xiàn)數(shù)據(jù)的雙向傳輸,它的協(xié)議規(guī)程體現(xiàn)了無線和網(wǎng)絡(luò)相結(jié)合的特征。因此可以通過GPRS技術(shù)來拓展ZigBee測量控制網(wǎng)絡(luò)的作用范圍。目前GPRS的數(shù)據(jù)傳輸主要是基于TCP和UDP兩種通信協(xié)議,其中TCP是面向連接的協(xié)議,提供IP環(huán)境下的數(shù)據(jù)可靠傳輸,適用于可靠性要求比較高的數(shù)據(jù)通信系統(tǒng),而UDP不需要建立連接即可開始傳輸數(shù)據(jù),通信效率較高,但可靠度不高,適用于一次只傳輸少量數(shù)據(jù)的場合LabVIEW作為一種圖形化編程語言開發(fā)環(huán)境,為學(xué)術(shù)界、工業(yè)界和研究實驗室所廣泛接受,運用內(nèi)嵌的TCP/IP網(wǎng)絡(luò)通信協(xié)議組通信,可以直接調(diào)用TCP模塊完成流程圖編寫,而無需過多考慮網(wǎng)絡(luò)底層實現(xiàn),使用該軟件可方便完成上位機測量和控制程序的編制。
1 網(wǎng)絡(luò)組建整體方案
系統(tǒng)網(wǎng)絡(luò)組成如圖1所示,首先由SHT11數(shù)字溫濕度傳感器和CC2530芯片的ADC通道組成傳感器數(shù)據(jù)輸入通道,輸入的信息經(jīng)CC2530芯片采集處理后打包無線發(fā)送到協(xié)調(diào)器節(jié)點,然后協(xié)調(diào)器節(jié)點利用串口2將數(shù)據(jù)發(fā)送給STC12C5A32S單片機,單片機將收到的數(shù)據(jù)進一步處理后,通過另一串口把有效數(shù)據(jù)傳送至華為GTM-900C模塊,最后GPRS模塊利用Internet把最終數(shù)據(jù)發(fā)送至上位機,并同時監(jiān)聽上位機指令,一旦接收到指令將轉(zhuǎn)發(fā)給協(xié)調(diào)器直至各采集控制節(jié)點,從而實現(xiàn)數(shù)據(jù)的雙向傳輸。
2 下位機數(shù)據(jù)分析
協(xié)調(diào)器網(wǎng)關(guān)需要把測控節(jié)點無線傳輸過來的數(shù)據(jù)透明發(fā)送至上位機,有效的數(shù)據(jù)幀通過下位機編程為固定長度是20 B的數(shù)據(jù),有些字節(jié)可變,有些字節(jié)是固定的。比如一個數(shù)據(jù)幀用十六進制表示為:FE 0F 46 87C6 E9 02 00 09 00 1A 21 00 00 48 9E 00 00 00 07。其中FE為每幀開始的字節(jié);0F,02 00,09 00是固定的字節(jié),表示數(shù)據(jù)包和有效數(shù)據(jù)位,46 87為接收標志;最后一個字節(jié)07是前面19個字節(jié)的異或運算值,C6 E9為傳感器節(jié)點16位地址號,隨著數(shù)據(jù)來自不同節(jié)點變化;1A為節(jié)點溫度的整數(shù)部分,換算為十進制值為26 ℃,可變;21為節(jié)點10倍片上電壓值,換算至十進制值為33 V,可變;0000為父節(jié)點地址;48為節(jié)點相對濕度值,轉(zhuǎn)換至十進制值為72%,可變;9E為節(jié)點溫度的小數(shù)部分,換算為十進制值的算法是(9×16+15)/256=0.62℃,可變;00 00 00為預(yù)留下來的3 B,用于其他傳感器節(jié)點數(shù)據(jù)的傳送。
協(xié)調(diào)器網(wǎng)關(guān)同時也接收上位機的命令數(shù)據(jù)并通過ZigBee網(wǎng)絡(luò)發(fā)送至具體節(jié)點。命令數(shù)據(jù)為3 B,前2個字節(jié)為目標地址,第3個字節(jié)為采集控制命令。如設(shè)置80為停止采集指令,40為開始采集命令,01,02,03為采集周期選擇命令。協(xié)調(diào)器地址是固定的十六進制數(shù)0x0000,其他傳感器節(jié)點地址與之不同,因此當發(fā)送的前兩個字節(jié)為0000時,可以此做為向全體傳感器節(jié)點廣播命令的判據(jù)。如果前兩個字節(jié)是具體的單個節(jié)點地址,則只有相應(yīng)節(jié)點接收到控制命令。
3 ZigBee協(xié)調(diào)器GPRS網(wǎng)關(guān)軟件設(shè)計
ZigBee協(xié)調(diào)器GPRS網(wǎng)關(guān)軟件設(shè)計流程如圖2所示。其中等待GPRS注冊成功是查看AT+CGREG?指令是否返回1或5,返回則表示GPRS模塊上網(wǎng)注冊成功;APN設(shè)置為CMNET;PPP撥號用AT%ETCPIP=\”\”,\”\””指令;域名解析指令A(yù)T%DNSR=”xxxx.3322.org”將返回與此域名綁定的IP;再用連接服務(wù)器指令A(yù)T%IPOPEN=“TCP”,xxx.xxx.xxx,1234連接上位機IP及監(jiān)聽端口。
數(shù)據(jù)傳輸程序的設(shè)計是重點,數(shù)據(jù)傳輸包括將采集到的數(shù)據(jù)透明上傳至TCP服務(wù)器以及上位機指令的檢測和通信是否掉線的檢測。串口2接收到FEOF幀頭后再執(zhí)行AT指令將有效測量數(shù)據(jù)透明上傳,收到心跳幀636F 6F6E后也透明上傳,收到其他字符則不處理。當串口1接收緩存中有%IPCLOSE字符串時表示通信斷開,此時則在下位機程序中重新執(zhí)行連接服務(wù)器程序直至再次連接成功,保證數(shù)據(jù)通信可靠。
4 上位機程序設(shè)計
整個上位機軟件設(shè)計流程如圖3所示,即編寫一個TCP服務(wù)器程序。采用LabVIEW通信工具中TCPListen來偵聽客戶端的連接請求,建立連接后,利用TCP Read讀取傳輸?shù)臄?shù)據(jù),工作模式設(shè)置為standard,即等待直至讀取所有“讀取的字節(jié)”中指定的字節(jié)或“超時毫秒”用完,返回目前已讀取的字節(jié),如字節(jié)數(shù)少于請求的字節(jié)數(shù),則返回部分字節(jié)并報告超時錯誤。由于數(shù)據(jù)幀通過下位機編程為固定長度是20 B的數(shù)據(jù),心跳幀為4 B的數(shù)據(jù),因此在配置TCP Read函數(shù)時,要將“讀取的字節(jié)”設(shè)置為20,“超時毫秒”設(shè)置為0。這樣既可以偵聽到心跳幀,又不至于因心跳幀的4 B打亂數(shù)據(jù)幀的20 B而導(dǎo)致數(shù)據(jù)錯誤。程序控制部分可向下位機發(fā)送控制指令,實現(xiàn)對單個或多個節(jié)點數(shù)據(jù)采集周期以及開始結(jié)束的控制,以適應(yīng)不同的工作場合。主要原理是利用TCP Wtite函數(shù)向已建立的連接發(fā)送指令,程序中兩次利用TCP Write函數(shù),第一次寫入指令的長度,第二次寫入指令的內(nèi)容。
數(shù)據(jù)處理程序如圖4所示。在數(shù)據(jù)處理的過程中,只需要處理數(shù)據(jù)幀,心跳幀是不用進行處理的,因此有必要對心跳幀進行剔除。由于下位機編程時以十六進制FE作為每個數(shù)據(jù)幀開始的字節(jié),而心跳幀則為十六進制636F 6F6E,因此在服務(wù)器程序進行數(shù)據(jù)處理前可先檢測數(shù)據(jù)的幀頭,這樣即可將數(shù)據(jù)幀和心跳幀分別開來。具體做法便是利用String Subset函數(shù)截取每幀數(shù)據(jù)的第一個字節(jié),然后與十六進制FE比較,再運用Case Structure的方式組織,如果相等,則進行處理,不相等的情況則不采取任何動作,只需保持之前的數(shù)據(jù)即可。這樣不僅可以避免錯誤接收結(jié)果,還可提高程序的運行效率。
數(shù)據(jù)處理部分首先利用String To Byte Array函數(shù)將接收的字符串保存為字節(jié)數(shù)組,然后利用Search1D Array函數(shù)搜索到第三個十六進制字節(jié)46,進一步增強數(shù)據(jù)讀取的可靠性,使用Index Array函數(shù)將數(shù)組中相應(yīng)的子節(jié)點地址、溫度、相對濕度、電壓值字節(jié)數(shù)據(jù)提取出來,并利用數(shù)值運算函數(shù)及相應(yīng)的字符串處理函數(shù)將需要的參數(shù)以十進制字符串形式送到Chart控件中顯示波形。不同節(jié)點的信息需要顯示在不同的Chart控件中,此時的實現(xiàn)思路就是判斷不同節(jié)點的地址,然后利用Case Structure進入不同的事件結(jié)構(gòu)。在歷史數(shù)據(jù)的存儲方面主要是通過Write To Spreadsheet File子VI把數(shù)據(jù)寫入電子表格,以此來實現(xiàn)歷史數(shù)據(jù)的方便查看。
整個系統(tǒng)經(jīng)過調(diào)試后運行正常,下位機與上位機連接良好,數(shù)據(jù)傳輸通暢,運行效果如圖5所示。
5 結(jié)語
下位機設(shè)計的網(wǎng)關(guān)能夠選擇性透明發(fā)送有效數(shù)據(jù)和心跳幀字節(jié),不僅提高了發(fā)送效率,而且保障了上位機接收數(shù)據(jù)的可靠性,在服務(wù)器與GPRS模塊通信中斷后,會立即重新申請連接直至再次連接成功。上位機程序設(shè)計的TCP服務(wù)器界面友好而簡潔,能夠分辨出有效數(shù)據(jù)和心跳幀,并可靠地解析出數(shù)據(jù)幀的信息,顯示溫度以及濕度的變化趨勢,同時將歷史數(shù)據(jù)寫入電子表格,方便保存和查看。本系統(tǒng)可移植性強,應(yīng)用范圍廣,可用與糧情監(jiān)測以及溫室環(huán)境的監(jiān)測,具有較大的實際參考價值。