彭連滔,馮錫煒,馮瑤
(遼寧石油化工大學(xué)計(jì)算機(jī)與通信工程學(xué)院,遼寧撫順113001)
隨著我國(guó)經(jīng)濟(jì)的高速發(fā)展,水質(zhì)的污染和破壞問(wèn)題日趨嚴(yán)重,著眼于社會(huì)所需,我們研究了基于ZigBee的水質(zhì)監(jiān)測(cè)系統(tǒng),為水質(zhì)保駕護(hù)航。
水質(zhì)污染問(wèn)題刻不容緩,城市飲水主要是通過(guò)自來(lái)水,其中的安全隱患不容忽視,所以需要一種能隨時(shí)監(jiān)測(cè)水質(zhì)變化的設(shè)備系統(tǒng)。論文探討構(gòu)建基于ZigBee技術(shù)的自來(lái)水監(jiān)測(cè)網(wǎng)絡(luò)物理結(jié)構(gòu),重點(diǎn)是ZigBee網(wǎng)關(guān)轉(zhuǎn)wifi和轉(zhuǎn)USB的協(xié)議轉(zhuǎn)換。上位機(jī)監(jiān)控功能中,實(shí)現(xiàn)了數(shù)據(jù)實(shí)時(shí)接收、顯示以及歷史數(shù)據(jù)查詢,對(duì)超閾值數(shù)據(jù),報(bào)警提示。
ZigBee技術(shù)具有自組網(wǎng),低功耗,延時(shí)小,多跳的特點(diǎn),適用于長(zhǎng)時(shí)間組網(wǎng)監(jiān)測(cè)。在ZigBee網(wǎng)絡(luò)中有3種設(shè)備,協(xié)調(diào)器(Co_ordinator)為全功能節(jié)點(diǎn)(FFD),負(fù)責(zé)建立網(wǎng)絡(luò),一個(gè)ZigBee網(wǎng)絡(luò)只能有一個(gè)協(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é)點(diǎn)設(shè)備。終端節(jié)點(diǎn)(End device)負(fù)責(zé)數(shù)據(jù)的采集與發(fā)送。以上3種設(shè)備可以分為全功能節(jié)點(diǎn)(FFD)和半功能節(jié)點(diǎn)(RFD)[1]。
每個(gè)節(jié)點(diǎn)具有兩個(gè)地址:
1)IEEE MAC地址
這是一種64位的地址,這個(gè)地址由IEEE組織進(jìn)行分配,用于唯一的標(biāo)識(shí)設(shè)備,全球沒(méi)有任何兩個(gè)設(shè)備具有相同的MAC地址。在ZigBee網(wǎng)絡(luò)中,有時(shí)也叫MAC地址為擴(kuò)展地址。
2)16位短地址
16位短地址用于在本地網(wǎng)絡(luò)中標(biāo)識(shí)設(shè)備,和在網(wǎng)絡(luò)中發(fā)送數(shù)據(jù),所以如果是處于不同的網(wǎng)絡(luò)中有可能具有相同的短地址。當(dāng)一個(gè)節(jié)點(diǎn)加入網(wǎng)絡(luò)的時(shí)候?qū)⒂伤母腹?jié)點(diǎn)給它分配短地址,協(xié)調(diào)器的短地址是0。
ZigBee網(wǎng)路的拓?fù)浣Y(jié)構(gòu)主要為星狀(star),樹(shù)狀(Cluster_tree),網(wǎng)格(mesh),其中星狀網(wǎng)絡(luò)不支持ZigBee路由器。不同的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)適用用于不同的使用環(huán)境。
基于ZigBee的水質(zhì)監(jiān)測(cè)系統(tǒng)可以對(duì)水質(zhì)進(jìn)行實(shí)時(shí)的監(jiān)控,整個(gè)系統(tǒng)由下位機(jī)監(jiān)測(cè)網(wǎng)和上位機(jī)軟件組成,下位機(jī)監(jiān)測(cè)網(wǎng)負(fù)責(zé)數(shù)據(jù)的采集,和數(shù)據(jù)在ZigBee網(wǎng)絡(luò)上的傳輸。上位機(jī)軟件負(fù)責(zé)對(duì)來(lái)自監(jiān)測(cè)網(wǎng)數(shù)據(jù)的存儲(chǔ),數(shù)理統(tǒng)計(jì),水質(zhì)參數(shù)超標(biāo)實(shí)時(shí)報(bào)警,和設(shè)備運(yùn)行狀況的檢查。系統(tǒng)結(jié)構(gòu)如圖1所示。
下位機(jī)部分由一個(gè)ZigBee轉(zhuǎn)WiFi網(wǎng)關(guān)或一個(gè)ZigBee轉(zhuǎn)USB基站,2個(gè)PH采集節(jié)點(diǎn),一個(gè)溫度采集節(jié)點(diǎn)組成。
圖1 系統(tǒng)體系結(jié)構(gòu)Fig.1 The architecture of the system
所有節(jié)點(diǎn)內(nèi)嵌ZigBee通訊模塊,在節(jié)點(diǎn)的通訊模塊中,燒寫(xiě)了ZigBee協(xié)議棧的移植版,所有節(jié)點(diǎn)上電即進(jìn)行自組網(wǎng),進(jìn)行數(shù)據(jù)的采集和傳輸。通過(guò)AT命令來(lái)指定協(xié)調(diào)器,路由器,和終端節(jié)點(diǎn),以及節(jié)點(diǎn)的相關(guān)參數(shù)。當(dāng)?shù)綦姇r(shí),能進(jìn)行參數(shù)的保存。其下位采集器采用STM32,該款CPU采用的是ARM的cortex-M3內(nèi)核。其具有出色的實(shí)時(shí)性能、優(yōu)越的功效、高級(jí)的創(chuàng)新型的外設(shè)、最大的集成性。CPU工作頻率最高達(dá)到72 MHz。AD采集精度為12位,充分保證了采集傳感器的精度。
ZigBee通信具有通信穩(wěn)定的優(yōu)點(diǎn)[2]。增加的無(wú)線功率放大器PA可以一定意義上克服ZigBee通信距離短的問(wèn)題,使得節(jié)點(diǎn)通信距離可以達(dá)到幾千米,最大限度的保證了通信的穩(wěn)定可靠和通信距離。圖2和圖3分別描述了ZigBee節(jié)點(diǎn)接收和發(fā)送數(shù)據(jù)的流程圖。
圖3 ZigBee節(jié)點(diǎn)發(fā)送數(shù)據(jù)Fig.3 ZigBee nodes send data
在下位機(jī)與PC機(jī)的銜接部分,筆記本可以用WiFi網(wǎng)關(guān)或ZigBee轉(zhuǎn)USB基站來(lái)接收數(shù)據(jù),對(duì)于臺(tái)式機(jī)可以直接用ZigBee轉(zhuǎn)USB基站來(lái)接收。
上位機(jī)界面采用C#編程,開(kāi)發(fā)工具為vs2012,數(shù)據(jù)庫(kù)為SQL Server。
當(dāng)啟用WIFI網(wǎng)關(guān)[3-4]接受模式時(shí),網(wǎng)絡(luò)協(xié)議采用TCP,相比UDP穩(wěn)定[5],用socket套接字來(lái)連接PC機(jī)與WIFI網(wǎng)關(guān)。
當(dāng)上位機(jī)軟件啟動(dòng)時(shí),上位機(jī)首先創(chuàng)線thwatchport=new Thread(listening);用來(lái)監(jiān)視,WiFi網(wǎng)關(guān)是否與PC機(jī)相連,若沒(méi)有,則繼續(xù)監(jiān)聽(tīng)。當(dāng)連接完成時(shí),軟件創(chuàng)建另一線程threcive=new Thread(autorecive),用于接收WiFi網(wǎng)關(guān)發(fā)來(lái)的數(shù)據(jù),并隨時(shí)將數(shù)據(jù)存入數(shù)據(jù)庫(kù)中。
由于第一個(gè)線程不斷循環(huán)查詢,當(dāng)WiFi網(wǎng)關(guān)斷開(kāi),能保證WiFi網(wǎng)關(guān)重連時(shí)的成功,而不必重啟軟件。保證了系統(tǒng)的容錯(cuò)率和健壯性。
偽代碼描敘如下:
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)聽(tīng)線程
thwatchport.Start();
listening()//監(jiān)聽(tīng)函數(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),如有異常,立即報(bào)警//數(shù)據(jù)存入數(shù)據(jù)庫(kù)
}
}
}catch(ex)//捕獲異常
{ncounterror++;
if ncounterror==5
print("請(qǐng)檢查網(wǎng)絡(luò)連接,網(wǎng)絡(luò)已斷開(kāi)");threcive.Abort();
endif
}
}endwhile
}
End
運(yùn)行結(jié)果圖:
對(duì)于臺(tái)式PC機(jī),用WiFi網(wǎng)關(guān)接收模式固然可行,對(duì)于ZigBee網(wǎng)關(guān)與上位機(jī)物理距離較短時(shí),還有另一種接收模式——ZigBee轉(zhuǎn)USB模模式。只要將USB一端插入臺(tái)式機(jī)的USB口,當(dāng)上位機(jī)軟開(kāi)啟時(shí)便可以接收數(shù)據(jù)。
USB接受方式的編程實(shí)現(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ú)線網(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),如有異常,立即報(bào)警
//數(shù)據(jù)存入數(shù)據(jù)庫(kù)
}
}
catch(Exception ex)print(ex.ToString());
}
End
運(yùn)行結(jié)果圖:
圖5 串口接收方式監(jiān)控界面Fig.5 Serialport receiving modemonitoring interface
線程和事件觸發(fā)方式,和定時(shí)器定時(shí)接收方式相比,能保證數(shù)據(jù)的隨到隨收,無(wú)數(shù)據(jù)包遺漏現(xiàn)象。
對(duì)于數(shù)據(jù)的處理,可以按時(shí)間查詢,并將查詢到的數(shù)據(jù)進(jìn)行普通的數(shù)理統(tǒng)計(jì),如計(jì)算平均數(shù),超標(biāo)次數(shù),并且能將數(shù)據(jù)查詢統(tǒng)計(jì)結(jié)果導(dǎo)出生成Excel文件,方便用戶進(jìn)一步分析調(diào)研。
此外,上位機(jī)軟件具有良好的用戶界面,與異常處理,方便用戶操作與使用,接收界面使用動(dòng)態(tài)GIF圖片制作,如圖2,第一個(gè)蘋(píng)果表示等待連接,第二個(gè)蘋(píng)果表示已連接成功,正在接收數(shù)據(jù),當(dāng)WIFI網(wǎng)關(guān)掉線時(shí),第二個(gè)蘋(píng)果停止動(dòng)態(tài)顯示,方便用戶動(dòng)態(tài)感覺(jué)數(shù)據(jù)接收正在進(jìn)行,當(dāng)數(shù)值超標(biāo)時(shí),或設(shè)備電壓不足時(shí),軟件亦能及時(shí)彈出報(bào)警窗口。
5結(jié)論
基于ZigBee的自來(lái)水監(jiān)測(cè)網(wǎng)能有效對(duì)自來(lái)水水質(zhì)進(jìn)行實(shí)時(shí)監(jiān)測(cè),設(shè)計(jì)實(shí)現(xiàn)了系統(tǒng)的網(wǎng)絡(luò)結(jié)構(gòu),完成了傳感器數(shù)據(jù)采集、傳輸、查詢顯示以及報(bào)警等系統(tǒng)功能。通過(guò)網(wǎng)絡(luò)傳輸傳感器的數(shù)據(jù)采用兩種方式:WiFi網(wǎng)關(guān)的socket方式和ZigBee轉(zhuǎn)USB的serialPort方式。兩種方式都能實(shí)現(xiàn)數(shù)據(jù)的實(shí)時(shí)傳輸?shù)膶?shí)時(shí)接收,基于線程的socket,使用了線程輪轉(zhuǎn)循環(huán)的方式,能有效防止WiFi網(wǎng)關(guān)掉線,并提醒用戶。此時(shí)接收線程threcieve終止,監(jiān)聽(tīng)線程thwatchport依舊循環(huán),等待WiFi網(wǎng)關(guān)重新連接。
下一階段工作的重點(diǎn),圍繞完善系統(tǒng)功能和擴(kuò)展系統(tǒng)應(yīng)用展開(kāi):
對(duì)于下位機(jī)網(wǎng)絡(luò),采集節(jié)點(diǎn)數(shù)目不夠多,參數(shù)種類(lèi)也不夠豐富。在PANID,信道,和數(shù)據(jù)包一致的情況下,可以不斷加入新的節(jié)點(diǎn),增加下位機(jī)網(wǎng)絡(luò)的功能。
對(duì)于數(shù)據(jù)傳輸,利用GPRS網(wǎng)[7],通過(guò)GPRS短信直接通知水質(zhì)超標(biāo)等情況,亦可以將ZigBee網(wǎng)絡(luò)轉(zhuǎn)為3G或4G網(wǎng)絡(luò)[8],使數(shù)據(jù)傳輸?shù)姆绞阶兊渺`活多樣。
在上位機(jī)功能部分,豐富數(shù)據(jù)查詢統(tǒng)計(jì)方式,添加系統(tǒng)日志管理,改進(jìn)異常情況的友好提示等。豐富客戶端的操作平臺(tái),延伸至Web方式,以及基于移動(dòng)終端的App應(yīng)用。對(duì)于已經(jīng)采集的數(shù)據(jù),可以進(jìn)行數(shù)據(jù)挖掘,和大數(shù)據(jù)運(yùn)算,研究當(dāng)?shù)亟?jīng)濟(jì),生活的狀態(tài)。
[1] 姜仲,劉但.ZigBee技術(shù)與實(shí)訓(xùn)教程——基于CC2530的無(wú)線傳感網(wǎng)技術(shù)[M].北京:清華大學(xué)出版社,2014.
[2] 張海濤,廖經(jīng)文,紀(jì)春龍,等.ZigBee無(wú)線通訊聊天室的設(shè)計(jì)與實(shí)現(xiàn)[J].東莞理工學(xué)院學(xué)報(bào),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ì)[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].計(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] 明日科技,王小科,趙會(huì)東,等.典型模塊與項(xiàng)目實(shí)戰(zhàn)大全[M].北京:電子工業(yè)出版社,2014.
[6] 李江全,鄧紅濤,劉巧,等.Visual C#.NET串口通信及測(cè)控應(yīng)用典型實(shí)例[M].北京:電子工業(yè)出版社,2012.
[7] 孫學(xué)宏,車(chē)進(jìn),張成.基于GPRS的水利數(shù)據(jù)采集及遠(yuǎn)程監(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無(wú)線傳輸?shù)臏y(cè)震臺(tái)站監(jiān)控設(shè)備的研制[J].地震工程學(xué)報(bào),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.