VB环境中绘制数据曲线图
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
VB环境中绘制数据曲线图
摘要:为了更好地为汛期气象服务提供有力的资料补充和保障,截至2010年底,通辽市气象局已建成区域自动气象站35个。为使区域自动站在决策服务、预报预警调查等方面所提供的资料更加直观,本文介绍了利用Visual Basic软件编写程序,实现数据曲线绘制的方法和过程,VB6.0 提供了PictureBox 控件,利用该控件的属性和方法,可以把实时数据用曲线图的形式表达出来。
关键词:VB6.0实时数据曲线区域自动气象站
在区域自动气象站中,当数据采集存储完成后,往往需要更直观的界面显示。利用VB6.0 编程实现实时数据曲线的绘制与显示,可动态地监视某些关键气象要素值的变化情况与走向趋势,以便直观、便捷的进行分析来更好地做好气象服务工作。基于以上的需求分析,将系统划分为4大功能模块。
1、数据库的连接。该项需要实现与数据库的连接,在设置中,用户可以直接选择自己所在地的市局服务器。以后进行的操作中将从所选服务器中进行气象要素数据的读取。VB6.0实现SQLServer2000数据库的连接与断开的代码格式为:
连接代码:
Set conn=New ADODB.Connection
Set rs = New ADODB.Recordset
conn.Open “Driver={SQL Server};Server=服务器IP或服务器名称;Database=数据库名称;Uid=用户名;Pwd=密码”
断开代码:
rs.Close
Set rs = Nothing
conn.Close
Set conn = Nothing
2、数据库内容的读取。要把本辖区所有区域站数据逐一统计,在VB6.0的编程中要用到循环语句,例如要查询温度数据,我市现在数据库中存放的温度数据是小时数据,例如要查询单一站点某时间段内的温度数据,本文中是通过select 语句来实现的,主要语句描述为:select * from 表名where station=‘“ & 区站号&”‘and observetime between’” & 开始时间& “‘and’” & 结束时间&”‘“。可以根
据查询的需要来编写不同的select语句实现各种查询功能。统计出站点温度数据后,将数据库中读出的数据存入数组,画数据曲线时直接读取数组中内容即可。
3、实时数据曲线的绘制过程。选择PictureBox 作为绘制实时曲线的容器,实时数据曲线是数据轴和时间轴的关系曲线,反映实时数据的大小,并随时间变化实时更新。采用Line 方法将各数据点绘制成首尾相接的直线,就可实现数据曲线的绘制。一屏数据显示完后,使用PictureBox 的CLS 方法,自动清屏,重新绘制曲线,即可实现数据曲线的连续显示问题。通常当前点在曲线的最右端显示,当数据曲线到达图片框的右边缘时,整个曲线动态地向左移动。对于显示较长的数据曲线可添加水平滚动条控件,通过滚动条来查看数据曲线的其它部分。要实现实时数据曲线的绘制,首先应进行数据读取,借助Timer 控件,定期读取数据库中的数据,定时器定时时间到,触发定时器事件,进行数据读取,具体实现过程如下:
(1)设置界面并重新建立坐标系。在VB6.0中新建一个工程,在窗体中添加PictureBox 控件。修改PictureBox 的一些属性参数,其中必须将PictureBox 的autoredraw 属性设置成True,才可以在图片框内绘制曲线。然后添加Timer 控件及其它所需控件,界面就基本设置好了。图片框的默认坐标系,是以其左上角为坐标原点的,不符合我们的画线要求。修改坐标系,让曲线从图像框的左边正中间开始画线。这里采用Scale 方法在PictureBox 中建立合适的坐标系,其语法如下:Picture1.scale(x1,y1)-(x2,y2)
其中(x1,y1)为PictureBox 的左上角坐标,(x2,y2)为右下角坐标。根据实际需要的数据范围确定左上角和右下角的坐标值,得到合适的坐标系。用一个过程PicScale ()来实现:
Private Sub PicScale (mypicX As PictureBox)
mypicX.Scale(0, mypicX.ScaleHeight)-( mypicX.ScaleWidth, -mypicX.ScaleHeight)
End Sub
一般可在曲线图的中间设置一条基准线,这里用一个过程PicMidLine()来实现:
Private Sub PicMidLine (mypicX As PictureBox)
mypicX.Line(0,0)-(mypicX.ScaleWidth,0) ‘ 画基准线
End Sub
根据读取数据及采样时间绘制实时数据曲线。为了降低绘图的复杂性,并能控制图片背景,可利用shape 控件,选取该控件的矩形作为绘图范围,以矩形的
左边线为纵坐标,下边线为横坐标。用line 方法绘制坐标系中的网格线,并标记好刻度,界面将更为美观且读数方便。
(2)采用line 方法绘制曲线。用VB6.0 提供的line 方法,在PictureBox 中画出连续的实时曲线。使用line 方法的语法格式如下:Picture1.line(x1,y1)-(x2,y2)
其中(x1,y1)为所画曲线的起点坐标,(x2,y2)为终点坐标。定义好变量,在PictureBox 中将此次读取的数据点与上次读取的数据点用Line 方法连起来。程序主要代码如下:
For j=1 To num-1
X1=(j-1):Y1=data (j-1)
X2=j
Y2=data (j)
Picture1.Line(X1,Y1)-(X2,Y2)
Next j
4、图片保存模块。此模块也是不可缺少的, 因为结果的分析、交流、显示都离不开这些图片。利用CommonDialog控件完成此功能, 主要代码如下: CommonDialog1. Filter = “ BMP Files(*.BMP)|*.BMP|All Files(* . * )|* . * “
CommonDialog1.ShowSave
If CommonDialog1.FileName ““ Then
SavePicture Picture1.Image, FileNames
End If
图片的保存格式可以根据实际情况进行增加、修改。这里只给了位图格式示意。
3.结束语
通过实践表明, Visual Basic中用PictureBox 结合Timer 定时器控件可以实现实时数据的图形显示,改变Timer 控件的interval 值就可改变数据的采样周