《基于VB的实时数据趋势曲线的实现.pdf》由会员分享,可在线阅读,更多相关《基于VB的实时数据趋势曲线的实现.pdf(3页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、基于VB的实时数据趋势曲线的实现张国忠3聂文霞 陈 正摘 要 介绍了如何利用VB采集数据,以及如何绘制实时数据趋势曲线的设计原理及程序。关键词 VBDDL控件RealizingDrawing Real2time TrendCurveon VBZhang GuozhongNie WenxiaChen ZhengAbstract:This article introduces howto acquire data,the thought,the principle and the programme of drawing thereal2time trend curve with VB.Key w
2、ords:VBDDLcontrol unitVB(Visual Bisic)是面向对象的可视化设计工具,具有丰富的图形指令,可方便地绘制各种图形。数据控件可访问多种数据库系统,并且VB支持动态数据交换(DDE)以及动态链接库(DDL)。VB使用的P-CODE代码在处理图形方面优势很大,而且利用VB编写的程序易于维护。我们为一电厂的改造,设计开发了一套计算机测控系统,在工业计算机测控系统中,计算机监测是非常重要的一部分,趋势曲线显示是监测功能中的主要内容之一。1设 计 原 理计算机测控系统的数据采集及显示简图如图1所示:图1计算机测控系统数据采集及显示简图计算机监控系统的计算机监测系统主要分为两
3、部分:数据采集和数据显示。(1)数据采集:绘制曲线首先应进行数据采样,下位机采用智能测控前端将由现场采集来的信号送至上位机。上位机再将接受到的数据进行分析与显示。下位机的采样程序利用汇编语言编写而成,安装于上位机的WindowNT的系统中,利用VB的Win API函数,调用下位机的采样程序,在VB的类模块中声明该过程:Declare Sub IdcbNumLibhostnt.dll(ByVal p As Long,ByVal s AsLong,ByVal ch AsLong,ByVal n AsLong,a As S ingle,b AsLong,ByValt As S tring,e AsL
4、ong)将采集到的数据存放于一数组变量a(i),在Timer控件的Timer事件中调用IdcbNum函数:PrivateSub Timer1-Timer()IdcbNum6,0,1,12,a(1),b(1),t(1),e#6前端(#6机),12个通道,Data1.Recordset.MoveFirstFor I=1 to thinput-1Data1.Recordset.MoveNextIf Data1.Recordset.E OF Then Data1.Recordset.MovePreviousNext iEnd Selecttmnum=Data1.Recordset.AbsolutePo
5、sition+1Label3.Caption=第<rim(S tr(tmnum)&题:End SubPrivateSubLab15 Click()Label5.F ontS ize=18Label5.F ontBold=TrueEnd Sub 结束时进行评分并保存结果PrivateSub Command2-Click()Dim linestr As S tringDim rightTm,errTm As IntegerData1.Recordset.MoveFirstOn Error G oTo erron:jz=MsgBox(确实要结束考试吗?,vbOK2Cance1,结束对话框)If
6、jz=vbOK ThenDoIf Labe15.Caption=Text3.Text Then rightTm=rightTm+1 Else errTm=errTm+1Data1.Recordset.MoveNextLoop Until Data1.Recordset.E OFprom pt=你答对了+Str(rightTm)+道题;答错了+S tr(errTm)+题:共得prom pt1=Str(Int(rightTm/(rightTm+errTm)3100)+分MsgBoxprom pt+Prom pt1,vbOKOnly,考号为+kh+姓名为:+xm+的成绩报告如下:Opentest.F
7、 or Input As 1Opentesttm p.For Output As 2Do Until EOF(1)Line Input#1,linestringIf Mid(linestring,1,6)kh Then Print#2,linestringLoopClose#2:Close#1FileSystemFileCopytesttmp.,test.Killtesttm p.Opentest.F or AppendAs 1Print#1,kh,xm,promptClose#1EndEnd IfExit Suberron:Opentest.F or Output As 1Print#1,k
8、h,xm,promptClose#1End Sub3 张国忠 武汉水利电力大学动力系副教授(430072)收稿日期:2000-03-24?42?2000 年 10 月 电 脑 学 习 第 5 期?1994-2010 China Academic Journal Electronic Publishing House.All rights reserved.http:/For i1=1 To 12If e=0 Thene=0表示下位机到上位机的回路无错误J162(i1)=a(i1)Next i1Elselaberr=#6 6号回路有错误End If(2)数据显示:用Picturebox控件作为绘
9、制曲线的容器,当前点在容器的最右边,即在曲线的最后边,而时间是不断变化的,时间坐标点须不断地向前移动,以产生新的时间坐标点,用move方法进行时间坐标点的移动,用Line方法绘制曲线。2程 序 设 计设定曲线显示时间区间为30分钟,数据采样周期定为2秒,时间坐标每隔1分钟向前移动一个单位。时间坐标值为整刻点的时刻。下面给出其基本程序。创建一个form1窗体,在此窗体上创建一个绘制曲线的picturebox容器,其name属性为pic1,在图形框内创建三个标签label控件,其name属性分别为label1,label2,label3。label1的caption属性为程序刚刚运行时的系统时间,
10、label2的cap2tion属性为label1的caption前一整刻点的时刻,label3的cap2tion为label2的caption前一整刻点的时刻,例如程序刚刚运行时的系统时间为10:10:13,则label.caption=10:10:13,la2bel2.caption=10:00:00,label3.caption=9:45:00。将lable1的visible属性设为false,label1、label2、label3的autosize属性为true。在pic1的左边创建一个显示数值坐标的坐标点的pic2turebox图形框,其name属性为pic2。pic2的border
11、sytyle属性设为none。pic1和pic2的autoredraw属性为true。在窗体上创建两个标签控件,两个标签控件的caption属性分别为“主蒸汽温度”及“”在这两个标签控件的中间创建一个在运行状态下显示实时数据值的标签控件,其name属性为j6605。这样,在同一画面内既可以看到参数的变化趋势,也可以看到参数的具体值。创建两个timer控件,timer1的interval属性设定为2000 ms,数据的采样周期为2 s;timer2的interval属性设定为60000ms,即每隔1分钟时间坐标点向前移动一个单位。2.1窗体级变量声明Dim hv%,mv%,sv%定义程序刚刚运行
12、时的时刻Dim thv%,tmv%,tsv%定义当一个时间坐标值移动到图形框的最左边时的系统时刻Dim wc As IntegerDim sclxxAs S ingle 定义时间坐标每分钟移动的单位距离Dim ht As IntegerDim xmax%,ymax%,hxmax%Dim sclyAs Single,sclxAs S ingleDim pl As S ingleDim x As IntegerDim p(901)As S ingle 存放数据的数组Dim ii As Integer2.2窗体初始化程序PrivateSub F orm-Load()ht=TextHeight(0)P
13、ic1.ScaleW idth=3600 设置pic2的位置Pic2.Top=Pic1.Top-50Pic2.Width=TextWidth(600)Pic2.Left=Pic1.Left-Pic2.Widthymax=Pic1.ScaleHeightxmax=Pic1.ScaleW idth 定义三个 时间 坐标 值的height,top值和width值Label1.Height=htLabel1.Top=ymax-htLabel2.Top=ymax-htLabel3.Top=ymax-htLabel1.Width=TextWidth(12:00:00)Label2.Width=TextWi
14、dth(12:00:00)Label3.Width=TextWidth(12:00:00)程序刚刚运行时的系统时间坐标值位于图形框的最右边Label1.Left=xmax-0.53Label1.Widthsclxx=xmax/30pl=ymax-23hthv=Hour(Time)mv=Minute(Time)sv=Second(Time)Label1.Caption=Time 程序刚刚运行时的系统时间值 根据程序刚刚运行时的系统时间值来决定label2和label3显示的时刻值,wc为label2与label1之间的距离,label2与label1时间差值为wc3sclxxIf mv =0 A
15、nd mv =15 And mv =30 And mv=45 ThenLabel2.Caption=hv&:45:00Label3.Caption=hv&:30:00wc=(mv-45)+sv/60)3sclxxEnd IfLabel2.Left=Label1.Left-wclabel3与label2的时刻差值为15分钟Label3.Left=Label2.Left-(153sclxx)每相邻两个采样点之间的横向距离sclx=23xmax/(30360)End Sub2.3绘制坐标网格及数值坐标点的程序PrivateSub F orm-Activate()纵横各五条四等分线为浅蓝色For i=
16、0 To 4Pci1.Line(0,pl-j3pl/4)-(xmax,pl-j3pl/4),QBC olor(9)Pic1.Line(xmax-j3xmax/4,0)-(xmax-j3xmax/4,pl),QBColor(9)Next 纵横各四条八等分线为浅青色?52?1994-2010 China Academic Journal Electronic Publishing House.All rights reserved.http:/For j=i To 7 S tep 2Pic1.Line(0,pl-j3pl/8)-(xmax,pl-j3pl/8),QBColor(11)Pic1.Li
17、ne(xmax-j3xmax/8,0)-(xmax-j3xmax/8,pl),QBColor(11)Next 设置数值坐标点0,150,300,450,600For ii=0 To 4Pic2.CurrentX=0Pic2.CurrentY=pl-ii3p1/4Pic2.Print Right(S tr(ii3600/4),3)Next iiEnd Sub2.4时间坐标的坐标点的移动程序PrivateSub Timer2-Timer()Label2.Move(Label2.Left-sclxx)Label3.Move(Label3.Left-sclxx)当label3移动到在图形框中看不见la
18、bel3的位置时,label3再处于与label2距离153sclxx个单位的位置,此时label3.cap2tion为系统时间的前一个整刻点。If Label3.Left =0 And tmv =15 And tmv =30 and tmv =45 Thenlabel3.Caption=thv&:45:00End IfEnd IfIf Label2.Left =0 And tmv =15 And tmv =30 And tmv =45 ThenLabel2.Caption=thv&:45:00End IfEnd IfEnd Sub2.5曲线绘制程序PrivateSub Timer1-Time
19、r()清除前一个采样周期图形框内的图形Pic1.Cls 重新绘制坐标网格For i=0 To 4Pic1.Line(0,pl-i3pl/4)-(xmax,pl-i3pl/4),QBColor(9)Pic1.Line(xmax-i3xmax/4,0)-(xmax-i3xmax/4,pl),QBC olor(9)NextFor j=1 To 7 S tep 2Pic1.Line(0,pl-i3pl/8)-(xmax,pl-i3pl/8),QBColor(11)Pic1.Line(xmax-i3xmax/8,0)-(xmax-i3xmax/8,pl),QBC olor(11)NextIdcbNum6
20、,0,1,1,a(1),b(1),t(1),e#6前端(#6机),1个通道,If e=0 Thene=0表示下位机到上位机的回路无错误p(x)=a(I)Next iIElselaberr=#6 6号回路有错误End Ifj6605.caption=p(x)If x=0 Thenp(0)=a(1)x=x+1Exit SubEnd If 曲线已横跨整个时间坐标时,即曲线已显示了30分钟后,将p(jj)的值赋予p(jj-1)If x =90 I ThenFor jj=1 To 90Ip(jj-1)=p(jj)x=900NextEnd If 绘制曲线For y=1 To xPic1.Line(xmax
21、-y3sclx,pl-p(x-y)3pl/600)-(xmax-(y-1)3sclx,pl-p(x-(y-1)3pl/600),QBC olor(12)Nextx=x+1End Sub3结 束 语改变timer1的interval值就可改变数据的采样周期,改变form的load事件中sclx的值就可改变两个采样值之间的横向单位距离。实时趋势曲线绘制程序是我们为一火电厂改造设计的汽轮发电机组计算机测控系统的一部分。经一年多运行,表明该系统稳定可靠,抗干扰性强,用户界面良好,深受运行人员好评。本程序具有一定的通用性。参 考 文 献1于海生等编著.微型计算机控制技术.北京:清华大学出版社,1999.3.2美史蒂夫?波茨等编著.周又玲,邱意弘,夏春明译.Visual Basic 4专家方案.上海:远东出版社、西蒙与舒斯特国际出版公司合作出版,1997.12.?62?1994-2010 China Academic Journal Electronic Publishing House.All rights reserved.http:/
限制150内