唐 振 (安徽水利水電職業(yè)技術(shù)學(xué)院機(jī)電工程系,安徽 合肥 231603)
基于VB串口通信的實(shí)時(shí)水位數(shù)據(jù)采集軟件設(shè)計(jì)
唐 振 (安徽水利水電職業(yè)技術(shù)學(xué)院機(jī)電工程系,安徽 合肥 231603)
根據(jù)水位數(shù)據(jù)監(jiān)測(cè)的需求,介紹了Visuanl Basic串口通信和Access 2003數(shù)據(jù)庫(kù),詳細(xì)闡述了基于Visual Basic程序設(shè)計(jì)的實(shí)時(shí)水位數(shù)據(jù)采集軟件界面和基于Access 2003的數(shù)據(jù)存儲(chǔ)實(shí)現(xiàn)過(guò)程。功能測(cè)試表明,利用該軟件可以準(zhǔn)確地存儲(chǔ)每個(gè)水位監(jiān)測(cè)點(diǎn)的數(shù)據(jù)并實(shí)時(shí)顯示采集數(shù)據(jù),同時(shí)能對(duì)超出警戒水位的數(shù)據(jù)進(jìn)行警報(bào),適用于Windows平臺(tái)下的水位數(shù)據(jù)采集與監(jiān)控。
Visual Basic;串口通信;數(shù)據(jù)采集;實(shí)時(shí)顯示;Access 2003
中國(guó)水資源豐富,分布廣泛,但同時(shí)中國(guó)又是個(gè)缺水的國(guó)家,每年中國(guó)的旱澇災(zāi)害均造成大量的財(cái)產(chǎn)損失[1]。因此,將水位信息實(shí)時(shí)準(zhǔn)確地采集到監(jiān)控中心具有重要意義[2]。水位信息的采集主要依靠各監(jiān)測(cè)點(diǎn)的水位傳感器通過(guò)通信網(wǎng)絡(luò)傳遞給監(jiān)控中心上位機(jī),上位機(jī)負(fù)責(zé)將接收到的數(shù)據(jù)進(jìn)行存儲(chǔ)和顯示[3]。下面,筆者基于VB串口通信設(shè)計(jì)實(shí)時(shí)水位數(shù)據(jù)采集軟件,通過(guò)該軟件實(shí)現(xiàn)如下功能:①對(duì)各監(jiān)測(cè)點(diǎn)數(shù)據(jù)要能進(jìn)行實(shí)時(shí)準(zhǔn)確的存儲(chǔ),并顯示其水位狀態(tài);②對(duì)各監(jiān)測(cè)點(diǎn)的數(shù)據(jù)進(jìn)行實(shí)時(shí)顯示及圖形曲線繪制,便于查看其趨勢(shì);③當(dāng)水位信息超過(guò)警戒水位(高于上限或低于下限)時(shí)要能發(fā)出警報(bào),提醒工作人員注意。并存儲(chǔ)所有超警戒水位的具體信息以便分析和查看;④對(duì)串口信息、監(jiān)測(cè)點(diǎn)信息、警戒水位等相關(guān)信息進(jìn)行設(shè)置和修改。
Visual Basic(簡(jiǎn)稱VB)是一款優(yōu)秀的程序設(shè)計(jì)語(yǔ)言,適于設(shè)計(jì)程序界面,利用MSComm控件可以非常方便地開(kāi)發(fā)出串口通信應(yīng)用程序。由于MSComm控件并不是VB的標(biāo)準(zhǔn)控件,因而在使用時(shí)需要先將其添加到控件箱中,具體步驟如下:選擇“工程”|“部件”命令,在出現(xiàn)的對(duì)話框中選擇“Microsoft Comm Controls 6.0”選項(xiàng)并單擊確定按鈕,這就將Mscomm控件添加到控件工具箱中了。
利用MSComm控件設(shè)計(jì)串口通信程序的基本步驟包括設(shè)置MSComm控件名稱、通信端口、設(shè)置緩沖區(qū)大小、設(shè)置字符模式、設(shè)置每次讀取的字符長(zhǎng)度、傳送緩沖區(qū)的數(shù)據(jù)、取得緩沖區(qū)數(shù)據(jù)等。MSComm控件有很多基本屬性[4],其主要屬性如表1所示。
表1 MSComm控件的主要屬性
在設(shè)計(jì)程序前,通常要對(duì)主要屬性參數(shù)進(jìn)行設(shè)置,其中InputMode參數(shù)為讀取數(shù)據(jù)的類型,InputMode=0表示數(shù)據(jù)為文本型(Unicode碼),InputMode=1表示數(shù)據(jù)為二進(jìn)制類型(ASCII碼或GBK碼)[5]。InputLen表示要每次讀取緩沖區(qū)中的字符數(shù),InputLen=0表示一次接收完緩沖區(qū)中的所有數(shù)據(jù),其他參數(shù)可根據(jù)其含義進(jìn)行相應(yīng)設(shè)置。設(shè)置參數(shù)后,即可編寫(xiě)OnComm響應(yīng)事件。
實(shí)時(shí)水位信息采集軟件界面主要包含2個(gè)部分(見(jiàn)圖1),一部分為系統(tǒng)功能設(shè)置區(qū),主要進(jìn)行串口參數(shù)、監(jiān)測(cè)點(diǎn)、數(shù)據(jù)庫(kù)、警戒水位和報(bào)警信息的設(shè)置;另一部分為實(shí)時(shí)數(shù)據(jù)采集區(qū),主要功能為顯示某個(gè)監(jiān)測(cè)點(diǎn)的實(shí)時(shí)數(shù)據(jù)采集情況。實(shí)時(shí)采集的數(shù)據(jù)主要通過(guò)以下3方面顯示:①當(dāng)前數(shù)據(jù)值,即最近一次接收到的數(shù)據(jù);②實(shí)時(shí)圖形繪制,即顯示整個(gè)水位變化的趨勢(shì);③近期水位列表,通過(guò)該表可以直觀地看出最近的200個(gè)水位數(shù)據(jù)。
在該軟件中,實(shí)時(shí)圖形繪制主要通過(guò)VB提供的PictureBox控件來(lái)完成。在用PictureBox控件繪制曲線時(shí),首先應(yīng)設(shè)置繪圖框的區(qū)域,可通過(guò)scale屬性來(lái)完成,并設(shè)置背景顏色,繪圖曲線的寬度等基本屬性。然后,將采集點(diǎn)數(shù)值(預(yù)先存儲(chǔ)在datatemp()數(shù)組中)通過(guò)Line屬性來(lái)完成繪圖[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 ‘設(shè)置線寬
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
通過(guò)圖形曲線只能觀察水位信息的變化過(guò)程及趨勢(shì),并不能直接讀出水位數(shù)據(jù),所以在圖形曲線邊上再設(shè)計(jì)一個(gè)數(shù)據(jù)表格,用以顯示最近采集的200個(gè)數(shù)據(jù),以便獲取準(zhǔn)確信息。數(shù)據(jù)表格可通過(guò)MSFlexGrid控件來(lái)實(shí)現(xiàn),使用前和添加MSComm控件方法相同,在“部件”中將“Microsoft FlexGrid Control 6.0”添加到工具箱中,然后添加到窗體上。在控件中,首先將列表框設(shè)計(jì)為2列,一列為序號(hào)(1~200),表示可以記錄200個(gè)水位數(shù)據(jù);另一列為水位值,用以存儲(chǔ)獲取的具體水位信息。如果要觀察更多的歷史數(shù)據(jù),可點(diǎn)擊“數(shù)據(jù)庫(kù)查看”按鈕打開(kāi)數(shù)據(jù)庫(kù)來(lái)查看歷史數(shù)據(jù),其實(shí)現(xiàn)代碼如下:
Private Sub tabinit()
Grid.Cols = 2 ‘共2列
Grid.Rows = 201 ‘連標(biāo)題共201行
Grid.ColWidth(0) = 700: Grid.ColWidth(1) = 950
Grid.Col = 0
Grid.TextMatrix(0, 0) = “序號(hào)” ‘第1列標(biāo)題
Grid.TextMatrix(0, 1) = “水位值” ‘第2列標(biāo)題
For j = 1 To 200
Grid.Row = j: Grid.Text =“” + Str$(j)
Next j
Grid.TopRow = 1
Grid.LeftCol = 1
End Sub
考慮到水位數(shù)據(jù)信息量并不是很大,該軟件采用微軟的Access 2003作為數(shù)據(jù)庫(kù),為此需要建立2個(gè)數(shù)據(jù)表,即監(jiān)測(cè)點(diǎn)信息表和數(shù)據(jù)采集表。監(jiān)測(cè)點(diǎn)信息表主要用來(lái)存儲(chǔ)監(jiān)測(cè)點(diǎn)的信息,主要字段有監(jiān)測(cè)點(diǎn)名、監(jiān)測(cè)點(diǎn)地址、警戒水位上限和警戒水位下限等。數(shù)據(jù)采集表主要按照時(shí)間順序?qū)⒉杉降臄?shù)據(jù)進(jìn)行存儲(chǔ),其主要字段包括監(jiān)測(cè)點(diǎn)名稱、監(jiān)測(cè)點(diǎn)地址、水位數(shù)據(jù)、接收時(shí)間和數(shù)據(jù)狀態(tài)等。另外,還可單獨(dú)建立一個(gè)報(bào)警信息表,按照時(shí)間順序?qū)⒊^(guò)警戒水位信息的數(shù)據(jù)進(jìn)行存儲(chǔ),其主要字段有監(jiān)測(cè)點(diǎn)名稱、當(dāng)前數(shù)據(jù)、警戒水位上限、警戒水位下限、報(bào)警類型和接收時(shí)間等,這樣以便集中查看報(bào)警信息。
在接收水位數(shù)據(jù)前,先要設(shè)計(jì)好監(jiān)測(cè)點(diǎn)信息表。在整個(gè)數(shù)據(jù)接收過(guò)程中,該軟件按照時(shí)間順序接收每個(gè)水位監(jiān)測(cè)點(diǎn)的數(shù)據(jù),并根據(jù)發(fā)來(lái)的地址信息來(lái)區(qū)分具體監(jiān)測(cè)點(diǎn),然后根據(jù)數(shù)據(jù)采集表存儲(chǔ)相應(yīng)的數(shù)據(jù)并記錄數(shù)據(jù)狀態(tài)(如果數(shù)據(jù)正常則不記錄,如果超過(guò)警戒水位則記錄其類型),如果該數(shù)據(jù)超過(guò)警戒水位則將數(shù)據(jù)存入報(bào)警信息表。
圖1 水位信息的實(shí)時(shí)顯示界面
在實(shí)際使用該軟件使用之前,應(yīng)利用設(shè)計(jì)好的數(shù)據(jù)進(jìn)行實(shí)時(shí)水位數(shù)據(jù)模擬采集,以驗(yàn)證軟件功能。通過(guò)單片機(jī)發(fā)送不同的地址及數(shù)據(jù)來(lái)模擬3個(gè)監(jiān)測(cè)點(diǎn)的采集數(shù)據(jù)。第1個(gè)監(jiān)測(cè)點(diǎn)命名為“合肥董鋪水庫(kù)”,地址為“05 51 01 02 00 00”,發(fā)送的數(shù)據(jù)為從10逐漸遞增1至31,然后不斷循環(huán),發(fā)送時(shí)間間隔為1s,警戒水位上限和下限分別為28m和12m。第2個(gè)監(jiān)測(cè)點(diǎn)命名為“蚌埠閘管理處”,地址為“05 53 12 05 01 01”,發(fā)送的數(shù)據(jù)為從48逐漸遞增2至80,然后不斷循環(huán),發(fā)送時(shí)間間隔為2s,警戒水位上限和下限分別為75m和50m。第3個(gè)監(jiān)測(cè)點(diǎn)命名為“舒城萬(wàn)佛湖水庫(kù)”,地址為“05 56 03 15 09 12”,發(fā)送的數(shù)據(jù)為從10逐漸遞增1至41,再逐漸遞減1至10,然后不斷循環(huán),發(fā)送時(shí)間間隔為10s,警戒水位上限和下限分別為20m和2m。
圖1顯示第1個(gè)監(jiān)測(cè)點(diǎn)的實(shí)時(shí)水位數(shù)據(jù)接收情況。在接收的過(guò)程中已有水位超過(guò)警戒水位,所以“警示燈”的顏色改變并發(fā)出警報(bào)。此外,從圖1中可以直觀地看出當(dāng)前所采集到數(shù)據(jù)的準(zhǔn)確值,通過(guò)實(shí)時(shí)圖形繪制中的曲線形態(tài)還可以看出整個(gè)水位信息的變化趨勢(shì)。圖2所示為3個(gè)監(jiān)測(cè)點(diǎn)按照時(shí)間順序接收到的水位信息數(shù)據(jù),上述數(shù)據(jù)與標(biāo)準(zhǔn)測(cè)試數(shù)據(jù)相對(duì)應(yīng),由此可以看出該軟件數(shù)據(jù)庫(kù)可以準(zhǔn)確無(wú)誤地存儲(chǔ)各水位監(jiān)測(cè)點(diǎn)發(fā)出的信息并顯示其數(shù)據(jù)狀態(tài)。
圖2 水位信息實(shí)時(shí)存儲(chǔ)界面
為了實(shí)時(shí)顯示和存儲(chǔ)各水位監(jiān)測(cè)點(diǎn)數(shù)據(jù),基于Visuanl Basic串口通信和Access 2003數(shù)據(jù)庫(kù),設(shè)計(jì)了水位數(shù)據(jù)采集軟件并進(jìn)行功能測(cè)試。研究表明,該軟件能夠準(zhǔn)確地存儲(chǔ)每個(gè)水位監(jiān)測(cè)點(diǎn)的數(shù)據(jù)并實(shí)時(shí)顯示采集數(shù)據(jù),同時(shí)能對(duì)超出警戒水位的數(shù)據(jù)進(jìn)行警報(bào),具有很好的實(shí)用性。
[1]李達(dá),邢智慧.水資源監(jiān)測(cè)網(wǎng)絡(luò)研究[J].水資源研究,2009,21(3):9-10.
[2] 張忠遠(yuǎn).智能水位監(jiān)測(cè)儀的研究[D].南京:南京理工大學(xué),2008.
[3] 童旺.GPRS數(shù)據(jù)終端的設(shè)計(jì)與實(shí)現(xiàn)[D].北京:北方工業(yè)大學(xué),2007.
[4] 楊本輪.Visual Basic 開(kāi)發(fā)技術(shù)大全[M].北京:清華大學(xué)出版社,2010.
[5] 劉炳文. Visual Basic 程序設(shè)計(jì)教程[M].北京:清華大學(xué)出版社,2009.
[6] 李江全.Visual Basic數(shù)據(jù)采集與串口通信測(cè)控應(yīng)用實(shí)戰(zhàn)[M].北京:人民郵電出版社,2010.
[編輯] 李啟棟
TP391
A
1673-1409(2013)22-0051-03
2013-05-16
唐振(1982-),男,講師,碩士生,現(xiàn)主要從事數(shù)據(jù)采集、嵌入式系統(tǒng)、信號(hào)處理等領(lǐng)域方面的教學(xué)與研究工作。