当前位置:首页 > 代码 > 正文

vb画实时曲线源代码(vb曲线图)

admin 发布:2022-12-19 06:53 142


今天给各位分享vb画实时曲线源代码的知识,其中也会对vb曲线图进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

如何在VB下生成实时的数据采集曲线

简单说下思路吧,具体的代码可以查资料

首先要会画曲线图,有三种方法:

1、用mschar控件(vb6的);2、用水晶报表;3、用word图表

x轴为时间,y轴为数据

要实现实时数据刷新,只要用 定时器 定时刷新曲线图的数据就可以了(x、y的数据重写)

用VB如何画曲线,并求代码.

Option Explicit

Private Const X_Axe = 0.5 'X轴原点位于窗口的水平位置比例

Private Const Y_Axe = 0.6 'Y轴原点位于窗口的垂直位置比例

Private Const ScaleRate = 30 '多少像素代表一个单位长度

Private Const DrawColor = vbRed '曲线颜色

Private ErrExp As Boolean '当表达式发生错误时,会置True(比如函数在此点无有效值)

Private Sub Form_Load()

Me.Show

Me.Cls

Call DrawAxe

Call DrawCoordinate

End Sub

Private Function Expression(ByVal X As Double) As Double '公式函数可以是任意内容

ErrExp = False '进入时,必须重置此标志为False

If X 0 Then '这里代码任意,也可以是Expression = 2 * X ^ 2 + 2 * X + 1之类的

Expression = Log(X)

Else

Expression = 0

ErrExp = True

End If

End Function

Private Sub DrawCoordinate() '绘制曲线过程

Dim i As Long

Dim Last(1 To 2) As Long, This(1 To 2) As Long

Dim X_offset As Long

Dim Y_offset As Long

Me.ScaleMode = vbPixels

X_offset = Me.ScaleWidth * X_Axe

Y_offset = Me.ScaleHeight * Y_Axe

'设置一个初始值

Last(1) = 0

Last(2) = -Expression((0 - X_offset) / ScaleRate) * ScaleRate

i = 0

While i = Me.ScaleWidth

'取下一点的值

This(1) = i

This(2) = -Expression((i - X_offset) / ScaleRate) * ScaleRate

'判断表达式是否出错

If ErrExp = True Then

'出错的情况下,循环直到没有错误或者超出范围为止

While ErrExp = True And i = Me.ScaleWidth

i = i + 1

This(1) = i

This(2) = -Expression((i - X_offset) / ScaleRate) * ScaleRate

Wend

'重置起点

Last(1) = This(1)

Last(2) = This(2)

End If

'画线

Me.Line (Last(1), Last(2) + Y_offset)-(This(1), This(2) + Y_offset), DrawColor

Last(1) = This(1)

Last(2) = This(2)

i = i + 1

Wend

End Sub

Private Sub DrawAxe() '绘制坐标的过程

Dim X_offset As Long

Dim Y_offset As Long

Dim i As Long

Me.ScaleMode = vbPixels '取单位长度为像素

X_offset = Me.ScaleWidth * X_Axe '计算坐标轴轴位置

Y_offset = Me.ScaleHeight * Y_Axe

'绘制坐标轴

Me.Line (X_offset, 0)-(X_offset, Me.ScaleHeight)

Me.Line (0, Y_offset)-(Me.ScaleWidth, Y_offset)

'绘制坐标线

For i = X_offset + ScaleRate To Me.ScaleWidth Step ScaleRate

Me.Line (i, 0)-(i, Me.ScaleHeight), vbWhite

Next i

For i = X_offset - ScaleRate To 0 Step -ScaleRate

Me.Line (i, 0)-(i, Me.ScaleHeight), vbWhite

Next i

For i = Y_offset + ScaleRate To Me.ScaleHeight Step ScaleRate

Me.Line (0, i)-(Me.ScaleWidth, i), vbWhite

Next i

For i = Y_offset - ScaleRate To 0 Step -ScaleRate

Me.Line (0, i)-(Me.ScaleWidth, i), vbWhite

Next i

End Sub

Private Sub Form_Resize()

Me.Cls

Call DrawAxe

Call DrawCoordinate

End Sub

如何在VB中作实时曲线?

最方便的方法是在vb中引用mschart部件 选择vb中的菜单:工程--部件---浏览将mschart20.ocx选中(必须是企业版才有该控件)

mschart控件最重要的属性就是data属性,给你一段代码参考就明白了:

ms是该控件的名字 datax 为一维数组 你可以修改datax的值然后再次运行代码

ms.ColumnCount = 1

ms.RowLabelCount = 0

ms.RowCount = UBound(datax) - LBound(datax) + 1

ms.Column = 1

For i = LBound(datax) + 1 To UBound(datax) + 1

ms.row = i

ms.Data = Val(datax(i - 1))

'DoEvents

Next

我这里刚好有一个实时曲线绘制的毕业设计,用vb做的不过要收费的,有意思可以打我电话:09918376733 上述代码就是从我的程序中摘录的,该包包是用vb做的,可以动态显示文本数据的曲线.

在程序运行时,你可以修改数组内容,然后在运行上述代码即可

vb实时曲线绘制

这个要用两个图片框。

autoredraw都设置成true。

一个隐藏,一个显示。

一个在背后画好,然后再显示出来。

用一个也可以,不过会闪。

当时间值小于图片宽度时,你应该知道怎么画。

当时间值大于图片框宽度时。

pic1.paintpicture pic1.image,0,0,pic1.scalewidth-1,pic1.scaleheight,1,0,pic1.scalewidth-1,pic1.scaleheight

'这个代码的作用是使图片框整个左移一个像素,右边空一个像素出来。

然后曲线的点就画在最后一个像素的位置上。

外面看,就是不停的左移了,有点像windows那个任务管理器里的。

记住。autoredraw设置成true

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

我一般的做法是,用两个图片框,一个隐藏,一个显示。图片框1的picture属性保存一个网格。

两个框框都一样大小。

隐藏的图片框里面,不停的循环画,这样。

pic1隐藏,pic2显示。

pic1的autoredraw必须ture,pic2可以不用,也可以是。

sub timer1_timer()

  xpos=time_p mod pic1.scalewidth

  time_p= time_p+1

  pic1.paintpicture pic1.picture,xpos,0,pic1.scaleheight,xpos,0,1,pic1.scaleheight

  '上面这句清楚原来的点,显示出网格

  'pic1.line ...........................画你要的点或者线。

  pic2.paintpicture pic1.image,0,0,pic1.scalewidth-xpos,pic1.scaleheight,xpos,0,pic1.scalewidth-xpos,pic1.scaleheight

  '画前半部分

  pic2.paintpicture pic1.image,pic1.scalewidth-xpos,0,xpos,pic1.scaleheight,0,0,xpos,pic1.scaleheight

    '画后半部分

end sub

代码是我随便写的,没有试,有些地方可能有错,自己调试吧

这个是我写的。

就是你要的效果。

如何在VB中画曲线

我先给你写一段如果不明白加我QQ:905906

在工控制软件中,实时曲线的绘制用途非常的广泛,它可以很直观的显示出监控数据的变化值和变化趋势。在VB中实现曲线的绘制有很多种方法,本文介绍一种非常简单的方法来实现实时曲线的绘制。

在VB中实现实时曲线的绘制,要利用VB的PictureBox(图像)控件,和画线函数line(x1,y1)-(x2,y2)。PictureBox控件,可以作为一个“容器”,在它的里面可以包含很多的对象。也可以执行很多VB的内部函数。

要实现实时曲线的绘制,肯定要有外部实时数据的输入,这里假设是有一个数据从计算机的串口输入 定义该数据变量为DataFromCom。实时曲线反映的就是该数据。

打开VB6.0中文版,新建一个项目和窗体,修改窗体的属性,将“Heigh”修改为:8000,“Width”修改为在窗体中放如一个PictureBox控件。然后重新定义PictureBox控件的一些基本属性,在VB中选中PictureBox控件,直接在它的属性框中,修改一些属性参数。“名称”改为Pic。 “AutoRedraw”改为:True。“BackColor”改为:H00004000(墨绿色背景颜色)。”Heigh”改为:5000。“Width”改为:8000。如图1所示:

然后要重新定义PictureBox控件的坐标系。图像框的默认坐标系,是从左上角开始的,不符合我们的画线要求。修改坐标系的目的是让曲线从图像框的左边正中间,开始画线。修改图像框的坐标系,这里定义一个过程PicScale(),代码如下:

Private Sub PicScale(picX As PictureBox)

picX.Scale (0, PicX.ScaleHeight)-(picX.ScaleWidth, -PicX.ScaleHeight)

End Sub

一般的实时曲线显示的时候在屏幕的正中间有一条基准线,这里也要画出这条基准线,用一个过程PicMidleLine()来实现,代码如下:

Private Sub PicMidleLine( picX As PictureBox)

picX.Line (0, 0)-(picX.ScaleWidth, 0), vbGreen '画出中线

End Sub

要画一条实时曲线,坐标轴的设定很重要,在这里把X轴设定为时间轴,Y轴设定为数据轴。对应X轴我们定义一个时间变量TimeCount,TimeCount会随着时间逐渐递增,每次递增,对应着一个从串口读过来的数据DataFromCom,这样图像框中的(x,y)坐标点实际上就对应着(TimeCount,DataFromCom)如果只是当TimeCount发生变化时就在图像框上画一个点,就只需调用VB中的画像素的函数point(x,y),这里x,y为所画的点的坐标。单这样画出来的是一个个不连续的点。我们想要的是实时的连续的曲线,所以要调用VB中的画线的函数line(x1,y1)-(x2,y2),这里(x1,y1)(x2,y2)为所要画的线的起点和终点的坐标。只要把上次串口读过来的数据(这里把它定义为变量DataFromComLast)和现在串口读过来的数据(DataFromCom)和TimeCount相对应,调用line(x1,y1)-(x2,y2)函数就可以在图像框中画出实时的曲线了。把它写成一个过程如下面的代码:

Private Sub DrawRealLine(picX As PictureBox, TimeCountX As Integer, DataFromComX As Integer, DataFromComLastX As Integer)

If TimeCountX - 1 0 Then

picX.Line (TimeCountX - 1, DataFromComLastX)-(TimeCountX, DataFromComX), vbWhite

End If

End Sub

有了三个过程就可以在图像框中画出一条实时的曲线了。

DrawRealLine()过程中的picX.Line (TimeCountX - 1, DataFromComLastX)-(TimeCountX, DataFromComX), vbWhite所画线的起始点和结束点都是以像素为单位的,这样以来如果不改变的话,画出来的线将是一个屏幕上像素相连的很密的曲线,通过调整line(x1,y1)-(x2,y2)

中的x的值,就可以画出分布密度不一样的曲线,这里为了在屏幕上能够看到不是很密的曲线我们把x乘以一个系数10,修改为:

picX.Line ((TimeCountX - 1) * 10, DataFromComLastX)-(TimeCountX * 10, DataFromComX), vbWhite

这比较容易在屏幕上看到稀疏的曲线。

由于是仅仅讲解如何画出实时的曲线,读者的计算机上未必有和串口相连的设备,这里用一个定时器控件来模拟从串口读过来的数据。在窗体上放入一个Timer控件,修改Timer控件的属性为:“Enable”该为True,“Interval”改为300。双击Timer控件在它的过程中,添加代码后如下:

Private Sub Timer1_Timer()

DataFromComLast = DataFromCom

Randomize

DataFromCom = 3000 * Rnd

TimeCount = TimeCount + 1

DrawRealLine Pic, TimeCount, DataFromCom, DataFromComLast

End Sub

这样在运行后就可以看到我们想要的实时曲线了,如下图:

图 2

下面是完整的代码:

Option Explicit

Dim DataFromCom As Integer '从串口读过来的实时值

Dim DataFromComLast As Integer '上次的串口值

Dim TimeCount As Integer

Private Sub Form_Load()

PicScale Pic '调整图像框的坐标系

PicMidleLine Pic '在图像框中画一条中线

End Sub

Private Sub PicScale(picX As PictureBox) '调整图像框的坐标系

picX.Scale (0, picX.ScaleHeight)-(picX.ScaleWidth, -picX.ScaleHeight)

End Sub

Private Sub PicMidleLine(picX As PictureBox) '在图像框中画一条中线

picX.Line (0, 0)-(picX.ScaleWidth, 0), vbGreen '画出中线

End Sub

Private Sub DrawRealLine(picX As PictureBox, TimeCountX As Integer, DataFromComX As Integer, DataFromComLastX As Integer)

If TimeCountX - 1 0 Then

picX.Line ((TimeCountX - 1) * 10, DataFromComLastX)-(TimeCountX * 10, DataFromComX), vbWhite

End If

End Sub

Private Sub Timer1_Timer()

DataFromComLast = DataFromCom

Randomize

DataFromCom = 3000 * Rnd

TimeCount = TimeCount + 1

DrawRealLine Pic, TimeCount, DataFromCom, DataFromComLast '画出实时的曲线

End Sub

VB实时曲线绘制

昨天回答你的上一个问题时,我已经分析过你的这段代码了,想要绘制真正的曲线,关键就是datafromcom这个变量,你把实时得到的数据赋值给它就行,其他不用改。

具体就是把DataFromCom = 3000 * Rnd这句话替换。

但是,因为我不知道你的硬件怎么用,不能给你准确的代码。

如果不会再hi我。

vb画实时曲线源代码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于vb曲线图、vb画实时曲线源代码的信息别忘了在本站进行查找喔。

版权说明:如非注明,本站文章均为 AH站长 原创,转载请注明出处和附带本文链接;

本文地址:http://ahzz.com.cn/post/4126.html


取消回复欢迎 发表评论:

分享到

温馨提示

下载成功了么?或者链接失效了?

联系我们反馈

立即下载