唐 振 (安徽水利水電職業技術學院機電工程系,安徽 合肥 231603)
基于VB串口通信的實時水位數據采集軟件設計
唐 振 (安徽水利水電職業技術學院機電工程系,安徽 合肥 231603)
根據水位數據監測的需求,介紹了Visuanl Basic串口通信和Access 2003數據庫,詳細闡述了基于Visual Basic程序設計的實時水位數據采集軟件界面和基于Access 2003的數據存儲實現過程。功能測試表明,利用該軟件可以準確地存儲每個水位監測點的數據并實時顯示采集數據,同時能對超出警戒水位的數據進行警報,適用于Windows平臺下的水位數據采集與監控。
Visual Basic;串口通信;數據采集;實時顯示;Access 2003
中國水資源豐富,分布廣泛,但同時中國又是個缺水的國家,每年中國的旱澇災害均造成大量的財產損失[1]。因此,將水位信息實時準確地采集到監控中心具有重要意義[2]。水位信息的采集主要依靠各監測點的水位傳感器通過通信網絡傳遞給監控中心上位機,上位機負責將接收到的數據進行存儲和顯示[3]。下面,筆者基于VB串口通信設計實時水位數據采集軟件,通過該軟件實現如下功能:①對各監測點數據要能進行實時準確的存儲,并顯示其水位狀態;②對各監測點的數據進行實時顯示及圖形曲線繪制,便于查看其趨勢;③當水位信息超過警戒水位(高于上限或低于下限)時要能發出警報,提醒工作人員注意。并存儲所有超警戒水位的具體信息以便分析和查看;④對串口信息、監測點信息、警戒水位等相關信息進行設置和修改。
Visual Basic(簡稱VB)是一款優秀的程序設計語言,適于設計程序界面,利用MSComm控件可以非常方便地開發出串口通信應用程序。由于MSComm控件并不是VB的標準控件,因而在使用時需要先將其添加到控件箱中,具體步驟如下:選擇“工程”|“部件”命令,在出現的對話框中選擇“Microsoft Comm Controls 6.0”選項并單擊確定按鈕,這就將Mscomm控件添加到控件工具箱中了。
利用MSComm控件設計串口通信程序的基本步驟包括設置MSComm控件名稱、通信端口、設置緩沖區大小、設置字符模式、設置每次讀取的字符長度、傳送緩沖區的數據、取得緩沖區數據等。MSComm控件有很多基本屬性[4],其主要屬性如表1所示。

表1 MSComm控件的主要屬性
在設計程序前,通常要對主要屬性參數進行設置,其中InputMode參數為讀取數據的類型,InputMode=0表示數據為文本型(Unicode碼),InputMode=1表示數據為二進制類型(ASCII碼或GBK碼)[5]。InputLen表示要每次讀取緩沖區中的字符數,InputLen=0表示一次接收完緩沖區中的所有數據,其他參數可根據其含義進行相應設置。設置參數后,即可編寫OnComm響應事件。
實時水位信息采集軟件界面主要包含2個部分(見圖1),一部分為系統功能設置區,主要進行串口參數、監測點、數據庫、警戒水位和報警信息的設置;另一部分為實時數據采集區,主要功能為顯示某個監測點的實時數據采集情況。實時采集的數據主要通過以下3方面顯示:①當前數據值,即最近一次接收到的數據;②實時圖形繪制,即顯示整個水位變化的趨勢;③近期水位列表,通過該表可以直觀地看出最近的200個水位數據。
在該軟件中,實時圖形繪制主要通過VB提供的PictureBox控件來完成。在用PictureBox控件繪制曲線時,首先應設置繪圖框的區域,可通過scale屬性來完成,并設置背景顏色,繪圖曲線的寬度等基本屬性。然后,將采集點數值(預先存儲在datatemp()數組中)通過Line屬性來完成繪圖[6]。繪圖部分的參考程序如下所示:
Private Sub draw()
Dim X1 As Integer
Dim X2 As Integer
Dim Y1 As Integer
Dim Y2 As Integer
Picture1.Cls‘清除界面
Picture1.DrawWidth = 2 ‘設置線寬
Picture1.BackColor = QBColor(15) ‘背景色
Picture1.Scale (1, 100)-(200, 0) ‘繪圖尺寸
For j = 2 To num ‘繪制圖形
X1 = j - 2: Y1 = datatemp(j - 1)
X2 = j - 1: Y2 = datatemp(j)
Picture1.Line (X1, Y1)-(X2, Y2), QBColor(0)
Next j
End Sub
通過圖形曲線只能觀察水位信息的變化過程及趨勢,并不能直接讀出水位數據,所以在圖形曲線邊上再設計一個數據表格,用以顯示最近采集的200個數據,以便獲取準確信息。數據表格可通過MSFlexGrid控件來實現,使用前和添加MSComm控件方法相同,在“部件”中將“Microsoft FlexGrid Control 6.0”添加到工具箱中,然后添加到窗體上。在控件中,首先將列表框設計為2列,一列為序號(1~200),表示可以記錄200個水位數據;另一列為水位值,用以存儲獲取的具體水位信息。如果要觀察更多的歷史數據,可點擊“數據庫查看”按鈕打開數據庫來查看歷史數據,其實現代碼如下:
Private Sub tabinit()
Grid.Cols = 2 ‘共2列
Grid.Rows = 201 ‘連標題共201行
Grid.ColWidth(0) = 700: Grid.ColWidth(1) = 950
Grid.Col = 0
Grid.TextMatrix(0, 0) = “序號” ‘第1列標題
Grid.TextMatrix(0, 1) = “水位值” ‘第2列標題
For j = 1 To 200
Grid.Row = j: Grid.Text =“” + Str$(j)
Next j
Grid.TopRow = 1
Grid.LeftCol = 1
End Sub
考慮到水位數據信息量并不是很大,該軟件采用微軟的Access 2003作為數據庫,為此需要建立2個數據表,即監測點信息表和數據采集表。監測點信息表主要用來存儲監測點的信息,主要字段有監測點名、監測點地址、警戒水位上限和警戒水位下限等。數據采集表主要按照時間順序將采集到的數據進行存儲,其主要字段包括監測點名稱、監測點地址、水位數據、接收時間和數據狀態等。另外,還可單獨建立一個報警信息表,按照時間順序將超過警戒水位信息的數據進行存儲,其主要字段有監測點名稱、當前數據、警戒水位上限、警戒水位下限、報警類型和接收時間等,這樣以便集中查看報警信息。
在接收水位數據前,先要設計好監測點信息表。在整個數據接收過程中,該軟件按照時間順序接收每個水位監測點的數據,并根據發來的地址信息來區分具體監測點,然后根據數據采集表存儲相應的數據并記錄數據狀態(如果數據正常則不記錄,如果超過警戒水位則記錄其類型),如果該數據超過警戒水位則將數據存入報警信息表。

圖1 水位信息的實時顯示界面
在實際使用該軟件使用之前,應利用設計好的數據進行實時水位數據模擬采集,以驗證軟件功能。通過單片機發送不同的地址及數據來模擬3個監測點的采集數據。第1個監測點命名為“合肥董鋪水庫”,地址為“05 51 01 02 00 00”,發送的數據為從10逐漸遞增1至31,然后不斷循環,發送時間間隔為1s,警戒水位上限和下限分別為28m和12m。第2個監測點命名為“蚌埠閘管理處”,地址為“05 53 12 05 01 01”,發送的數據為從48逐漸遞增2至80,然后不斷循環,發送時間間隔為2s,警戒水位上限和下限分別為75m和50m。第3個監測點命名為“舒城萬佛湖水庫”,地址為“05 56 03 15 09 12”,發送的數據為從10逐漸遞增1至41,再逐漸遞減1至10,然后不斷循環,發送時間間隔為10s,警戒水位上限和下限分別為20m和2m。
圖1顯示第1個監測點的實時水位數據接收情況。在接收的過程中已有水位超過警戒水位,所以“警示燈”的顏色改變并發出警報。此外,從圖1中可以直觀地看出當前所采集到數據的準確值,通過實時圖形繪制中的曲線形態還可以看出整個水位信息的變化趨勢。圖2所示為3個監測點按照時間順序接收到的水位信息數據,上述數據與標準測試數據相對應,由此可以看出該軟件數據庫可以準確無誤地存儲各水位監測點發出的信息并顯示其數據狀態。

圖2 水位信息實時存儲界面
為了實時顯示和存儲各水位監測點數據,基于Visuanl Basic串口通信和Access 2003數據庫,設計了水位數據采集軟件并進行功能測試。研究表明,該軟件能夠準確地存儲每個水位監測點的數據并實時顯示采集數據,同時能對超出警戒水位的數據進行警報,具有很好的實用性。
[1]李達,邢智慧.水資源監測網絡研究[J].水資源研究,2009,21(3):9-10.
[2] 張忠遠.智能水位監測儀的研究[D].南京:南京理工大學,2008.
[3] 童旺.GPRS數據終端的設計與實現[D].北京:北方工業大學,2007.
[4] 楊本輪.Visual Basic 開發技術大全[M].北京:清華大學出版社,2010.
[5] 劉炳文. Visual Basic 程序設計教程[M].北京:清華大學出版社,2009.
[6] 李江全.Visual Basic數據采集與串口通信測控應用實戰[M].北京:人民郵電出版社,2010.
[編輯] 李啟棟
TP391
A
1673-1409(2013)22-0051-03
2013-05-16
唐振(1982-),男,講師,碩士生,現主要從事數據采集、嵌入式系統、信號處理等領域方面的教學與研究工作。