彭連滔,馮錫煒,馮瑤
(遼寧石油化工大學(xué)計算機與通信工程學(xué)院,遼寧撫順113001)
隨著我國經(jīng)濟的高速發(fā)展,水質(zhì)的污染和破壞問題日趨嚴(yán)重,著眼于社會所需,我們研究了基于ZigBee的水質(zhì)監(jiān)測系統(tǒng),為水質(zhì)保駕護航。
水質(zhì)污染問題刻不容緩,城市飲水主要是通過自來水,其中的安全隱患不容忽視,所以需要一種能隨時監(jiān)測水質(zhì)變化的設(shè)備系統(tǒng)。論文探討構(gòu)建基于ZigBee技術(shù)的自來水監(jiān)測網(wǎng)絡(luò)物理結(jié)構(gòu),重點是ZigBee網(wǎng)關(guān)轉(zhuǎn)wifi和轉(zhuǎn)USB的協(xié)議轉(zhuǎn)換。上位機監(jiān)控功能中,實現(xiàn)了數(shù)據(jù)實時接收、顯示以及歷史數(shù)據(jù)查詢,對超閾值數(shù)據(jù),報警提示。
ZigBee技術(shù)具有自組網(wǎng),低功耗,延時小,多跳的特點,適用于長時間組網(wǎng)監(jiān)測。在ZigBee網(wǎng)絡(luò)中有3種設(shè)備,協(xié)調(diào)器(Co_ordinator)為全功能節(jié)點(FFD),負(fù)責(zé)建立網(wǎng)絡(luò),一個ZigBee網(wǎng)絡(luò)只能有一個協(xié)調(diào)器,相當(dāng)于蜂群結(jié)構(gòu)中的蜂后,當(dāng)網(wǎng)路建立完成后,協(xié)調(diào)器的功能相當(dāng)于普通路由器(Router)。路由器負(fù)責(zé)數(shù)據(jù)的路由跳轉(zhuǎn),能夠?qū)⑾l(fā)給其他j節(jié)點設(shè)備。終端節(jié)點(End device)負(fù)責(zé)數(shù)據(jù)的采集與發(fā)送。以上3種設(shè)備可以分為全功能節(jié)點(FFD)和半功能節(jié)點(RFD)[1]。
每個節(jié)點具有兩個地址:
1)IEEE MAC地址
這是一種64位的地址,這個地址由IEEE組織進行分配,用于唯一的標(biāo)識設(shè)備,全球沒有任何兩個設(shè)備具有相同的MAC地址。在ZigBee網(wǎng)絡(luò)中,有時也叫MAC地址為擴展地址。
2)16位短地址
16位短地址用于在本地網(wǎng)絡(luò)中標(biāo)識設(shè)備,和在網(wǎng)絡(luò)中發(fā)送數(shù)據(jù),所以如果是處于不同的網(wǎng)絡(luò)中有可能具有相同的短地址。當(dāng)一個節(jié)點加入網(wǎng)絡(luò)的時候?qū)⒂伤母腹?jié)點給它分配短地址,協(xié)調(diào)器的短地址是0。
ZigBee網(wǎng)路的拓?fù)浣Y(jié)構(gòu)主要為星狀(star),樹狀(Cluster_tree),網(wǎng)格(mesh),其中星狀網(wǎng)絡(luò)不支持ZigBee路由器。不同的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)適用用于不同的使用環(huán)境。
基于ZigBee的水質(zhì)監(jiān)測系統(tǒng)可以對水質(zhì)進行實時的監(jiān)控,整個系統(tǒng)由下位機監(jiān)測網(wǎng)和上位機軟件組成,下位機監(jiān)測網(wǎng)負(fù)責(zé)數(shù)據(jù)的采集,和數(shù)據(jù)在ZigBee網(wǎng)絡(luò)上的傳輸。上位機軟件負(fù)責(zé)對來自監(jiān)測網(wǎng)數(shù)據(jù)的存儲,數(shù)理統(tǒng)計,水質(zhì)參數(shù)超標(biāo)實時報警,和設(shè)備運行狀況的檢查。系統(tǒng)結(jié)構(gòu)如圖1所示。
下位機部分由一個ZigBee轉(zhuǎn)WiFi網(wǎng)關(guān)或一個ZigBee轉(zhuǎn)USB基站,2個PH采集節(jié)點,一個溫度采集節(jié)點組成。
圖1 系統(tǒng)體系結(jié)構(gòu)Fig.1 The architecture of the system
所有節(jié)點內(nèi)嵌ZigBee通訊模塊,在節(jié)點的通訊模塊中,燒寫了ZigBee協(xié)議棧的移植版,所有節(jié)點上電即進行自組網(wǎng),進行數(shù)據(jù)的采集和傳輸。通過AT命令來指定協(xié)調(diào)器,路由器,和終端節(jié)點,以及節(jié)點的相關(guān)參數(shù)。當(dāng)?shù)綦姇r,能進行參數(shù)的保存。其下位采集器采用STM32,該款CPU采用的是ARM的cortex-M3內(nèi)核。其具有出色的實時性能、優(yōu)越的功效、高級的創(chuàng)新型的外設(shè)、最大的集成性。CPU工作頻率最高達到72 MHz。AD采集精度為12位,充分保證了采集傳感器的精度。
ZigBee通信具有通信穩(wěn)定的優(yōu)點[2]。增加的無線功率放大器PA可以一定意義上克服ZigBee通信距離短的問題,使得節(jié)點通信距離可以達到幾千米,最大限度的保證了通信的穩(wěn)定可靠和通信距離。圖2和圖3分別描述了ZigBee節(jié)點接收和發(fā)送數(shù)據(jù)的流程圖。
圖3 ZigBee節(jié)點發(fā)送數(shù)據(jù)Fig.3 ZigBee nodes send data
在下位機與PC機的銜接部分,筆記本可以用WiFi網(wǎng)關(guān)或ZigBee轉(zhuǎn)USB基站來接收數(shù)據(jù),對于臺式機可以直接用ZigBee轉(zhuǎn)USB基站來接收。
上位機界面采用C#編程,開發(fā)工具為vs2012,數(shù)據(jù)庫為SQL Server。
當(dāng)啟用WIFI網(wǎng)關(guān)[3-4]接受模式時,網(wǎng)絡(luò)協(xié)議采用TCP,相比UDP穩(wěn)定[5],用socket套接字來連接PC機與WIFI網(wǎng)關(guān)。
當(dāng)上位機軟件啟動時,上位機首先創(chuàng)線thwatchport=new Thread(listening);用來監(jiān)視,WiFi網(wǎng)關(guān)是否與PC機相連,若沒有,則繼續(xù)監(jiān)聽。當(dāng)連接完成時,軟件創(chuàng)建另一線程threcive=new Thread(autorecive),用于接收WiFi網(wǎng)關(guān)發(fā)來的數(shù)據(jù),并隨時將數(shù)據(jù)存入數(shù)據(jù)庫中。
由于第一個線程不斷循環(huán)查詢,當(dāng)WiFi網(wǎng)關(guān)斷開,能保證WiFi網(wǎng)關(guān)重連時的成功,而不必重啟軟件。保證了系統(tǒng)的容錯率和健壯性。
偽代碼描敘如下:
Begin:IPEndPoint ipendpoint=new IPEndPoint(ip,port);
welcomesocket=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
welcomesocket.Bind(ipendpoint);//綁定IP
welcomesocket.Listen(16);
thwatchport=new Thread(listening);//創(chuàng)建監(jiān)聽線程
thwatchport.Start();
listening()//監(jiān)聽函數(shù)
{try
{Do while(true)
reciveSocket=welcomesocket.Accept();//連接
threcive=new Thread(autorecive);//創(chuàng)建接收線程
threcive.Start();
endwhile
}
catch(ex){print(ex.toString();}
}
void autorecive()//接收函數(shù)
{StringBuilder strRecive=new StringBuilder();
String strtemp="";
Byte[]byterecieve=new Byte[1024*1024];ncount=0;
sqloperate=new ServerSQL();
do while(true)
{try{
if(reciveSocket==null)break;
ncount=reciveSocket.Receive(byterecieve);//接收數(shù)據(jù)到緩存
strtemp=Encoding.Default.GetString(byterecieve,0,ncount);
strRecive.Append(strtemp);
{//解析接收到的數(shù)據(jù)包
//判斷設(shè)備狀態(tài),以及水質(zhì)參數(shù)是否超標(biāo),如有異常,立即報警//數(shù)據(jù)存入數(shù)據(jù)庫
}
}
}catch(ex)//捕獲異常
{ncounterror++;
if ncounterror==5
print("請檢查網(wǎng)絡(luò)連接,網(wǎng)絡(luò)已斷開");threcive.Abort();
endif
}
}endwhile
}
End
運行結(jié)果圖:
對于臺式PC機,用WiFi網(wǎng)關(guān)接收模式固然可行,對于ZigBee網(wǎng)關(guān)與上位機物理距離較短時,還有另一種接收模式——ZigBee轉(zhuǎn)USB模模式。只要將USB一端插入臺式機的USB口,當(dāng)上位機軟開啟時便可以接收數(shù)據(jù)。
USB接受方式的編程實現(xiàn),采用的是serialPort控件[6],直接采用事件觸發(fā)的方式。
偽代碼描敘如下:
Begin:
serialPortAccess.DataReceived+=new System.IO.Ports.SerialDataReceivedEventHandler(autorecive);//將事件委托函數(shù)處理
autorecive(object sender,System.IO.Ports.SerialDataReceivedEventArgs e)
{
sqloperate=new ServerSQL();
String readdata="";
StringBuilder strRecive=new StringBuilder();
try
{
圖4 無線網(wǎng)絡(luò)接收方式監(jiān)控界面Fig.4 Wireless network receiving modemonitoring interface
readdata=serialPortAccess.ReadExisting();//接收數(shù)據(jù)
strRecive.Append(readdata);
{
//解析接收到的數(shù)據(jù)包
//判斷設(shè)備狀態(tài),以及水質(zhì)參數(shù)是否超標(biāo),如有異常,立即報警
//數(shù)據(jù)存入數(shù)據(jù)庫
}
}
catch(Exception ex)print(ex.ToString());
}
End
運行結(jié)果圖:
圖5 串口接收方式監(jiān)控界面Fig.5 Serialport receiving modemonitoring interface
線程和事件觸發(fā)方式,和定時器定時接收方式相比,能保證數(shù)據(jù)的隨到隨收,無數(shù)據(jù)包遺漏現(xiàn)象。
對于數(shù)據(jù)的處理,可以按時間查詢,并將查詢到的數(shù)據(jù)進行普通的數(shù)理統(tǒng)計,如計算平均數(shù),超標(biāo)次數(shù),并且能將數(shù)據(jù)查詢統(tǒng)計結(jié)果導(dǎo)出生成Excel文件,方便用戶進一步分析調(diào)研。
此外,上位機軟件具有良好的用戶界面,與異常處理,方便用戶操作與使用,接收界面使用動態(tài)GIF圖片制作,如圖2,第一個蘋果表示等待連接,第二個蘋果表示已連接成功,正在接收數(shù)據(jù),當(dāng)WIFI網(wǎng)關(guān)掉線時,第二個蘋果停止動態(tài)顯示,方便用戶動態(tài)感覺數(shù)據(jù)接收正在進行,當(dāng)數(shù)值超標(biāo)時,或設(shè)備電壓不足時,軟件亦能及時彈出報警窗口。
5結(jié)論
基于ZigBee的自來水監(jiān)測網(wǎng)能有效對自來水水質(zhì)進行實時監(jiān)測,設(shè)計實現(xiàn)了系統(tǒng)的網(wǎng)絡(luò)結(jié)構(gòu),完成了傳感器數(shù)據(jù)采集、傳輸、查詢顯示以及報警等系統(tǒng)功能。通過網(wǎng)絡(luò)傳輸傳感器的數(shù)據(jù)采用兩種方式:WiFi網(wǎng)關(guān)的socket方式和ZigBee轉(zhuǎn)USB的serialPort方式。兩種方式都能實現(xiàn)數(shù)據(jù)的實時傳輸?shù)膶崟r接收,基于線程的socket,使用了線程輪轉(zhuǎn)循環(huán)的方式,能有效防止WiFi網(wǎng)關(guān)掉線,并提醒用戶。此時接收線程threcieve終止,監(jiān)聽線程thwatchport依舊循環(huán),等待WiFi網(wǎng)關(guān)重新連接。
下一階段工作的重點,圍繞完善系統(tǒng)功能和擴展系統(tǒng)應(yīng)用展開:
對于下位機網(wǎng)絡(luò),采集節(jié)點數(shù)目不夠多,參數(shù)種類也不夠豐富。在PANID,信道,和數(shù)據(jù)包一致的情況下,可以不斷加入新的節(jié)點,增加下位機網(wǎng)絡(luò)的功能。
對于數(shù)據(jù)傳輸,利用GPRS網(wǎng)[7],通過GPRS短信直接通知水質(zhì)超標(biāo)等情況,亦可以將ZigBee網(wǎng)絡(luò)轉(zhuǎn)為3G或4G網(wǎng)絡(luò)[8],使數(shù)據(jù)傳輸?shù)姆绞阶兊渺`活多樣。
在上位機功能部分,豐富數(shù)據(jù)查詢統(tǒng)計方式,添加系統(tǒng)日志管理,改進異常情況的友好提示等。豐富客戶端的操作平臺,延伸至Web方式,以及基于移動終端的App應(yīng)用。對于已經(jīng)采集的數(shù)據(jù),可以進行數(shù)據(jù)挖掘,和大數(shù)據(jù)運算,研究當(dāng)?shù)亟?jīng)濟,生活的狀態(tài)。
[1] 姜仲,劉但.ZigBee技術(shù)與實訓(xùn)教程——基于CC2530的無線傳感網(wǎng)技術(shù)[M].北京:清華大學(xué)出版社,2014.
[2] 張海濤,廖經(jīng)文,紀(jì)春龍,等.ZigBee無線通訊聊天室的設(shè)計與實現(xiàn)[J].東莞理工學(xué)院學(xué)報,2014,21(3):12-16.ZHANG Hai-tao,LIAO Jing-wen,JI Chun-long,et al.Design and implementation of ZigBee wireless communication chat room[J].Journal of Dongguan University of Technology,2014,21(3):12-16.
[3] 胥嘉佳,許鳴.基于網(wǎng)關(guān)的ZigBee和WiFi互通設(shè)計[J].電子科技,2014,27(6):22-25.XU Jia-jia,XU Ming.An interconnection design for Zigbee and WiFi based on gateway[J].Electronic Science and Technology,2014,27(6):22-25.
[4] 周坤,傅德勝.基Windows Socket的網(wǎng)絡(luò)數(shù)據(jù)傳輸及其安全[J].計算機工程與設(shè),2007,28(26):5383-5386.ZHOU Kun,F(xiàn)U De-sheng.Data transmission and security on net based on windows socket[J].Compmer Engineering and Design,2007,28(26):5383-5386.
[5] 明日科技,王小科,趙會東,等.典型模塊與項目實戰(zhàn)大全[M].北京:電子工業(yè)出版社,2014.
[6] 李江全,鄧紅濤,劉巧,等.Visual C#.NET串口通信及測控應(yīng)用典型實例[M].北京:電子工業(yè)出版社,2012.
[7] 孫學(xué)宏,車進,張成.基于GPRS的水利數(shù)據(jù)采集及遠程監(jiān)控系統(tǒng)研究[J].安徽農(nóng)業(yè)科學(xué),2009,37(36):18057-18059.SUN Xue-hong,CHE Jin,ZHANG Cheng.Research on the water conservancy data-collecting and remote n onitor system based on GPRS[J].Journal ofAnhui Agri.Sci,2009,37(36):18057-18059.
[8] 孫宏志,王學(xué)成,劉一萌,等.基于3G無線傳輸?shù)臏y震臺站監(jiān)控設(shè)備的研制[J].地震工程學(xué)報,2014,36(2):387-392 SUN Hong-zhi,WANG Xue-cheng,LIU Yi-meng,et al.The design and realization of a type of monitoring equipm ent for seismic stations based on 3G wireless data transmission[J].China Earthquake Engineering Journal,2014,36(2):387-392.