基于VB串口通信的实时水位数据采集软件设计
2013-11-06安徽水利水电职业技术学院机电工程系安徽合肥231603
唐 振 (安徽水利水电职业技术学院机电工程系,安徽 合肥 231603)
基于VB串口通信的实时水位数据采集软件设计
唐 振 (安徽水利水电职业技术学院机电工程系,安徽 合肥 231603)
根据水位数据监测的需求,介绍了Visuanl Basic串口通信和Access 2003数据库,详细阐述了基于Visual Basic程序设计的实时水位数据采集软件界面和基于Access 2003的数据存储实现过程。功能测试表明,利用该软件可以准确地存储每个水位监测点的数据并实时显示采集数据,同时能对超出警戒水位的数据进行警报,适用于Windows平台下的水位数据采集与监控。
Visual Basic;串口通信;数据采集;实时显示;Access 2003
中国水资源丰富,分布广泛,但同时中国又是个缺水的国家,每年中国的旱涝灾害均造成大量的财产损失[1]。因此,将水位信息实时准确地采集到监控中心具有重要意义[2]。水位信息的采集主要依靠各监测点的水位传感器通过通信网络传递给监控中心上位机,上位机负责将接收到的数据进行存储和显示[3]。下面,笔者基于VB串口通信设计实时水位数据采集软件,通过该软件实现如下功能:①对各监测点数据要能进行实时准确的存储,并显示其水位状态;②对各监测点的数据进行实时显示及图形曲线绘制,便于查看其趋势;③当水位信息超过警戒水位(高于上限或低于下限)时要能发出警报,提醒工作人员注意。并存储所有超警戒水位的具体信息以便分析和查看;④对串口信息、监测点信息、警戒水位等相关信息进行设置和修改。
1 Visual Basic串口通信简介
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 实时水位信息采集软件界面设计
实时水位信息采集软件界面主要包含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
3 数据库设计
考虑到水位数据信息量并不是很大,该软件采用微软的Access 2003作为数据库,为此需要建立2个数据表,即监测点信息表和数据采集表。监测点信息表主要用来存储监测点的信息,主要字段有监测点名、监测点地址、警戒水位上限和警戒水位下限等。数据采集表主要按照时间顺序将采集到的数据进行存储,其主要字段包括监测点名称、监测点地址、水位数据、接收时间和数据状态等。另外,还可单独建立一个报警信息表,按照时间顺序将超过警戒水位信息的数据进行存储,其主要字段有监测点名称、当前数据、警戒水位上限、警戒水位下限、报警类型和接收时间等,这样以便集中查看报警信息。
在接收水位数据前,先要设计好监测点信息表。在整个数据接收过程中,该软件按照时间顺序接收每个水位监测点的数据,并根据发来的地址信息来区分具体监测点,然后根据数据采集表存储相应的数据并记录数据状态(如果数据正常则不记录,如果超过警戒水位则记录其类型),如果该数据超过警戒水位则将数据存入报警信息表。
4 功能测试
图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 水位信息实时存储界面
5 结语
为了实时显示和存储各水位监测点数据,基于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-),男,讲师,硕士生,现主要从事数据采集、嵌入式系统、信号处理等领域方面的教学与研究工作。