周自強,李亞娟,裴祥喜
(1.大連大學,大連經(jīng)濟技術(shù)開發(fā)區(qū)學府大街10號 116622;2.河北水利電力學院 計算機科學與信息工程學院,河北省滄州市重慶路1號 061001)
在環(huán)境監(jiān)測和核工業(yè)生產(chǎn)領(lǐng)域,應(yīng)用了大量的核輻射監(jiān)測傳感器[1],隨著物聯(lián)網(wǎng)技術(shù)的發(fā)展,基于物聯(lián)網(wǎng)的無線核輻射傳感器網(wǎng)絡(luò)也應(yīng)運而生。各種無線傳感器網(wǎng)絡(luò)采集的數(shù)據(jù)必須傳輸給監(jiān)測軟件,經(jīng)監(jiān)測軟件解碼和進一步的數(shù)據(jù)處理后才能方便工作人員了解監(jiān)測區(qū)域的信息,因此無線傳感器網(wǎng)絡(luò)的上位機監(jiān)測軟件在整個無線傳感器網(wǎng)絡(luò)監(jiān)測系統(tǒng)中有著重要的地位。基于IEEE 802.15.4標準的ZigBee技術(shù)是一種短距離、低功耗的新型無線通信技術(shù),是當下流行的無線傳感器網(wǎng)絡(luò)技術(shù)之一。目前大多數(shù)ZigBee設(shè)備開發(fā)使用中都使用串口調(diào)試工具或者超級終端作為監(jiān)測手段,難以滿足無線傳感器網(wǎng)絡(luò)高效的數(shù)據(jù)處理需求。文中設(shè)計了一種基于ZigBee的γ輻射監(jiān)測系統(tǒng)上位機軟件,該軟件能夠?qū)o線網(wǎng)絡(luò)狀態(tài)進行監(jiān)控、對終端節(jié)點進行自動識別、對終端節(jié)點數(shù)據(jù)進行處理和存儲并為用戶提供了實時數(shù)據(jù)及趨勢顯示、歷史數(shù)據(jù)查詢等功能。
基于ZigBee的γ輻射監(jiān)測系統(tǒng)是一個星型網(wǎng)絡(luò),如圖1所示,其中協(xié)調(diào)器和終端設(shè)備均采用TI公司的CC2430或其升級版芯片作為核心,由多個終端完成γ輻射檢測任務(wù),通過作為中心節(jié)點的協(xié)調(diào)器將信息統(tǒng)一發(fā)送給上位機進行處理[2]。所設(shè)計的上位機監(jiān)測軟件主要是針對采用RS232、RS485等串口通訊的下位機或信息采集模塊。整個監(jiān)測軟件包括數(shù)據(jù)采集和數(shù)據(jù)處理兩大功能,其中數(shù)據(jù)采集通過VB的Mscomm通訊控件實現(xiàn),對數(shù)據(jù)進行處理后將其存入ACCESS數(shù)據(jù)庫。無線傳感器網(wǎng)絡(luò)在設(shè)計時一般都要求實現(xiàn)低功耗、長時間運行,為了實現(xiàn)該目標,采集節(jié)點的功能軟硬件應(yīng)該盡量簡單,采集節(jié)點僅將采集的原始數(shù)據(jù)發(fā)送給中心節(jié)點,由監(jiān)測軟件對原始數(shù)據(jù)進行解碼和公式運算。
圖1 γ輻射監(jiān)測系統(tǒng)Fig.1 Gamma radiation monitoring system
無線網(wǎng)絡(luò)監(jiān)測軟件是在Windows環(huán)境下利用VB6.0編寫的,該軟件功能豐富,界面良好,使用簡單,可以完成ZigBee無線網(wǎng)絡(luò)狀態(tài)監(jiān)測、監(jiān)測區(qū)域顯示、實時測量數(shù)據(jù)顯示等功能。在軟件設(shè)計中,采用模塊化的設(shè)計思想進行設(shè)計。監(jiān)測程序主要由4個模塊組成,如圖2所示,即串口配置模塊、網(wǎng)絡(luò)狀態(tài)及信息顯示模塊、實時趨勢顯示模塊及歷史數(shù)據(jù)查詢模塊。
圖2 監(jiān)控軟件功能組成Fig.2 Functions of monitoring software
為了便于上位監(jiān)測軟件的使用,在程序主頁面上劃分了3個功能區(qū)域,如圖3所示,它們分別是上位機與協(xié)調(diào)器串口設(shè)置區(qū)域、ZigBee網(wǎng)絡(luò)情況顯示區(qū)域、實時趨勢及歷史數(shù)據(jù)查詢區(qū)域。其中上位機與協(xié)調(diào)器串口設(shè)置區(qū)域可以根據(jù)實際情況完成對硬件串口端口號、波特率、數(shù)據(jù)位、停止位、校驗位的配置,配置完成后通過按鈕開始執(zhí)行監(jiān)控任務(wù);ZigBee網(wǎng)絡(luò)情況區(qū)域主要用于無線網(wǎng)絡(luò)狀態(tài)和實時數(shù)據(jù)進行顯示,包括無線網(wǎng)絡(luò)中節(jié)點數(shù)量及節(jié)點代碼顯示和各節(jié)點實時信息的顯示;實時趨勢及歷史數(shù)據(jù)查詢區(qū)域,通過按鈕調(diào)用對應(yīng)的功能,在對應(yīng)頁面上通過選擇監(jiān)測區(qū)域等信息實現(xiàn)對應(yīng)區(qū)域信息的實時趨勢顯示和歷史數(shù)據(jù)查詢的功能。
圖3 主監(jiān)控頁面Fig.3 Main monitoring page
上位機監(jiān)測軟件利用VB6.0的Mscomm控件采集從ZigBee網(wǎng)絡(luò)協(xié)調(diào)器傳送來的測量數(shù)據(jù),從緩存中提取信息后直接在主頁面進行顯示,同時將原始數(shù)據(jù)進行處理并按區(qū)域節(jié)點編號存入數(shù)據(jù)庫中。監(jiān)控軟件可以在收到信息后將區(qū)域節(jié)點信息、測量信息(計數(shù)率)進行實時顯示;用戶也可以查詢各個監(jiān)測區(qū)域的歷史信息。為了直觀的查看某個監(jiān)測區(qū)域的實時測量信息,可以在實時趨勢界面選擇要查看的區(qū)域,通過實時趨勢曲線進行觀測。
1.2.1 軟件與協(xié)調(diào)器通訊
監(jiān)控軟件設(shè)計的第一步就是要完成與ZigBee網(wǎng)絡(luò)協(xié)調(diào)器的通訊。監(jiān)測系統(tǒng)的協(xié)調(diào)器是通過串口與上位機進行連接的,由于傳統(tǒng)的RS232通訊使用單端驅(qū)動非差分接受電路,其傳輸距離收到了很大限制,為了增加通訊距離可以采用適當?shù)耐ㄓ嵽D(zhuǎn)換器將其進行轉(zhuǎn)換,以便于上位機放置于適于人員居留的區(qū)域。上位機對串口數(shù)據(jù)的采集通過調(diào)用VB編程實現(xiàn)的[3],通過調(diào)用通訊控件Microsoft Communications Control。MSComm通信控件可以提供一系列的標準通信命令的接口,可以與串口及其他多種通信設(shè)備建立連接,可以發(fā)送指令、交換信息以及監(jiān)視通訊中的錯誤并完成事件響應(yīng),是一種全雙工、事件驅(qū)動、高效實用的通信程序接口。MSComm控件通過串行端口傳輸和接收數(shù)據(jù),該控件提供了事件驅(qū)動方式和定時查詢方式兩種通訊處理方式[4],編程時采用的是事件驅(qū)動。
在工程中添加完成MSComm控件和完成控件的控制變量設(shè)置之后,要根據(jù)協(xié)調(diào)器串口的情況對控件進行初始化設(shè)置,主要是端口選擇、波特率設(shè)置、奇偶校驗、起始位設(shè)置等信息。為了實現(xiàn)事件驅(qū)動,還需通過RThreshold要設(shè)置事件觸發(fā)方式,就是通過設(shè)置接收緩存收到一定字節(jié)的信息后觸發(fā)相應(yīng)標志位,從而產(chǎn)生OnComm事件[5],涉及到的控件屬性主要有:CommPort屬性:對通訊的端口號進行配置或讀取。在設(shè)計時,value可以設(shè)置成從1到16的任何數(shù)(缺省值為1);RThreshold屬性:該屬性用來設(shè)置MSComm控件OnComm事件的產(chǎn)生,當接收緩存中收到指定數(shù)量的字符時產(chǎn)生OnComm事件,從而進入事件處理程序;Settings屬性:用來對串口通訊的速率、校驗位、數(shù)據(jù)位、停止位進行配置或讀取當前串口配置信息。本設(shè)計中串口的配置程序如下:
Private Sub InitialPort(SerialPort As String, BaudRate As String, ParityBit As String, DataBit As String, StopBit As String) ′串口配置程序
MSComm1.CommPort=Val(Mid(SerialPort,4, Len(SerialPort)-3)) ′ 配置端口端口號
MSComm1.Settings=BaudRate&“,”& Left(ParityBit,1) & “,” &DataBit& “,” &StopBit ′ 對串口通訊速率等進行設(shè)置
MSComm1.InBufferSize=512 ′ 對接收緩沖區(qū)大小進行設(shè)置
MSComm1.InBufferCount=0 ′ 清空接收緩存
MSComm1.RThreshold=1 ′ 設(shè)置OnComm事件觸發(fā)方式
MSComm1.InputMode=comInputModeText
End Sub
通過串口配置程序中MSComm1.RThreshold=1語句可知,Mscomm控件在每收到一個字符后就會產(chǎn)生OnComm事件,OnComm事件的處理程序中取出串口緩沖區(qū)收到的數(shù)據(jù)。由于在ZigBee網(wǎng)絡(luò)中定義的用戶數(shù)據(jù)長度為37個字符,因此在發(fā)生37次事件后才能取出一條完成的信息,通過在程序聲明部分定義全局變量來對事件次數(shù)進行統(tǒng)計,滿足條件后通過調(diào)用子過程完成對網(wǎng)絡(luò)狀態(tài)判斷、數(shù)據(jù)存儲及網(wǎng)絡(luò)節(jié)點顯示刷新的功能。串口事件的響應(yīng)程序如下:
Private Sub MSComm1_OnComm()
Dim BytReceived() As Byte ′定義字節(jié)數(shù)組
Dim strBuff, dataBuff As String ′定義字符串變量
Dim sj As String ′定義字符串變量
j=j + 1 ′通過全局變量j統(tǒng)計串口OnComm事件次數(shù),由于字符串長度為37,因此設(shè)置第37次收到字符時將其存入database并通過對數(shù)據(jù)分析確認是否有新節(jié)點加入網(wǎng)絡(luò)
Select Case MSComm1.CommEvent
Case comEvReceive ′發(fā)生接收事件時
strBuff=MSComm1.Input ′從輸入緩沖區(qū)讀入字符
BytReceived()=strBuff ′將字符串賦值給字節(jié)數(shù)組,低字節(jié)在前,高字節(jié)在后
Dim I As Integer
For I=0 To UBound(BytReceived) ′對每個字節(jié)檢查
If Len(Hex(BytReceived(I)))=1 Then ′如果長度為一位,前面加0變?yōu)閮晌?/p>
strData=strData& “0” & Hex(BytReceived(I))
Else
strData=strData& Hex(BytReceived(I))
End If
Next
sj=Right(strData, 2) & Left(strData, 2) ′將高字節(jié)與低字節(jié)順序調(diào)整
Text2=strData ′ 顯示字符進入緩沖區(qū)時字節(jié)順序,低字節(jié)在前,高字節(jié)在后
Text1=Text1 &ChrW(Val(“&H” &sj)) ′將Unicode碼對應(yīng)的高、低字節(jié)順序?qū)φ{(diào)后以Unicode形式顯示
Text4=Text1 & Time() ′添加時間
dataBuff=Text4
Text5=dataBuff
strData=“”
If j=37 Then
j=0
Call save_to_database ′調(diào)用子過程將串口數(shù)據(jù)存入數(shù)據(jù)庫同時判斷是否有新節(jié)點加入網(wǎng)絡(luò)并將其添加到Combox中
End If
End Select
End Sub
1.2.2 連接數(shù)據(jù)庫
Access數(shù)據(jù)庫是美國微軟公司早期開發(fā)的一種關(guān)系數(shù)據(jù)庫,它一般包含在Microsoft Office辦公套件中。VB具有面向?qū)ο蟮臄?shù)據(jù)訪問對象接口DAO,該功能的基礎(chǔ)是數(shù)據(jù)庫引擎Microsoft Jet。Jet引擎是用戶界面和數(shù)據(jù)庫之間的橋梁,如圖4所示,能夠完成存儲、搜索、更新數(shù)據(jù)的結(jié)構(gòu)等功能。VB用過Data控件(Data Control)和數(shù)據(jù)訪問對象(DAO)實現(xiàn)和Jet數(shù)據(jù)庫引擎的接口。Data控件是VB訪問數(shù)據(jù)庫時非常常用的工具,它對數(shù)據(jù)庫中數(shù)據(jù)的訪問是通過3種Recordset對象實現(xiàn),數(shù)據(jù)控件方便編程者對數(shù)據(jù)庫的訪問而不需特別的編程,可以把Visual Basic的窗體和數(shù)據(jù)庫進行連接。使用數(shù)據(jù)控件獲取數(shù)據(jù)庫中記錄時,首先需要在窗體上調(diào)出控件,之后通過Data控件的Connect、DatabaseName和RecordSource3個基本屬性訪問所需的數(shù)據(jù)記錄。VB中的數(shù)據(jù)庫編程是通過創(chuàng)建與被訪問對象相對應(yīng)的數(shù)據(jù)訪問對象,通過操作對象的屬性和方法來完成對數(shù)據(jù)庫的操作。
上位機從協(xié)調(diào)器采集的終端節(jié)點輻射信息,上位機采集的信息是由設(shè)備節(jié)點號和計數(shù)率組成的信息,信息長度為37個字符(信息長度可以根據(jù)通過自定義ZigBee網(wǎng)絡(luò)進行調(diào)整,但必須包含設(shè)備節(jié)點號和測量數(shù)據(jù)),在收到數(shù)據(jù)后給數(shù)據(jù)添加時間信息后,從中提取節(jié)點號和計數(shù)率與收到的時間一同保存到Access數(shù)據(jù)庫中,供后續(xù)的查詢和處理使用。本系統(tǒng)創(chuàng)建的數(shù)據(jù)庫文件名為radation.mdb,并在該數(shù)據(jù)庫中創(chuàng)建以區(qū)域代碼、輻射強度和采集時間為字段的數(shù)據(jù)匯總表,各個字段根據(jù)實際數(shù)據(jù)的大小和格式進行設(shè)計。在程序中添加Data控件,并且將其屬性Visible屬性設(shè)置成false,通過編程語言將數(shù)據(jù)庫與程序完成連接,實現(xiàn)存儲及查詢等功能。Data控件與radation.mdb數(shù)據(jù)庫的連接相關(guān)語句如下:
Private Sub Form_Load()
Form1.AutoRedraw=True ′自動刷新窗體
mpath=App.Path ′獲取路徑
If Right(mpath, 1) <> “/” Then mpath=mpath+“/”
Data1.DatabaseName=mpath+“history.mdb” ′連接數(shù)據(jù)庫
Data1.RecordSource=“數(shù)據(jù)匯總” ′連接對應(yīng)數(shù)據(jù)表
Data1.Refresh ′Data控件激活
End Sub
監(jiān)測軟件將各個區(qū)域的歷史信息存入數(shù)據(jù)庫,這樣可以方便的功能使用人員進行數(shù)據(jù)查詢,對數(shù)據(jù)的查詢可以按監(jiān)測區(qū)域進行。可以利用SQL語言根據(jù)需求設(shè)計各種查詢組合。在實際使用中點擊查詢按鈕后會彈出相應(yīng)的窗體,提醒使用者填寫要查詢的區(qū)域,當點擊主頁面歷史查詢按鈕后,會進入歷史信息查詢頁面,使用者輸入要查詢的區(qū)域代碼,點擊確定就會在頁面中顯示查詢結(jié)果。實時趨勢曲線對于反映監(jiān)測數(shù)據(jù)的變化比單純的數(shù)據(jù)或表格要形象的多,因此監(jiān)測軟件必須具備該功能。通過將串口數(shù)據(jù)經(jīng)過分析后放入指定區(qū)域的表格內(nèi)實現(xiàn)趨勢圖的實時顯示功能,實時趨勢如圖4。通過將終端檢測到的脈沖計數(shù)進行轉(zhuǎn)換,可以得到本地環(huán)境的吸收劑量率。通過查詢相關(guān)資料可以得到采用的計數(shù)管的計數(shù)率與吸收劑量的轉(zhuǎn)換因數(shù),經(jīng)過經(jīng)計算可以得到大連地區(qū)的環(huán)境吸收劑量約為90到110nGy/h,在環(huán)保部公布的檢測范圍內(nèi),處于正常水平。
圖4 實時趨勢Fig.4 Real-time trend graph
基于ZigBee的γ輻射監(jiān)測系統(tǒng)上位機軟件充分利用了VB相關(guān)的API函數(shù),將通訊技術(shù)、數(shù)據(jù)庫、圖形處理等技術(shù)充分應(yīng)用,使對無線傳感器網(wǎng)絡(luò)數(shù)據(jù)的采集變得更加方便,當其作為無線傳感器網(wǎng)絡(luò)的上位機處理軟件時,可以代替終端設(shè)備完成數(shù)據(jù)處理功能,減輕終端資源消耗,提高系統(tǒng)可靠性。