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