怎样用VB制作变幻曲线
- 格式:pdf
- 大小:116.37 KB
- 文档页数:2
vba 蝴蝶曲线蝴蝶曲线(Butterfly Curve)是一个具有对称性的数学曲线,由雅可比椭圆函数定义。
以下是一个使用VBA绘制蝴蝶曲线的示例代码:```vbaSub DrawButterflyCurve()Dim t As DoubleDim x As Double, y As DoubleDim scale As Double' 设置绘图缩放比例scale = 50' 清除绘图区域ActiveSheet.DrawingObjects.Delete' 初始化起始点t = 0x = scale * Sin(t) * (Exp(Cos(t)) - 2 * Cos(4 * t) - Sin(t / 12) ^ 5) y = scale * Cos(t) * (Exp(Cos(t)) - 2 * Cos(4 * t) - Sin(t / 12) ^ 5)' 绘制曲线With ActiveSheet.Shapes.AddShape(msoShapeCurve, x, y, 1, 1) .SelectDo' 计算下一个点的坐标t = t + 0.01x = scale * Sin(t) * (Exp(Cos(t)) - 2 * Cos(4 * t) - Sin(t / 12)^ 5)y = scale * Cos(t) * (Exp(Cos(t)) - 2 * Cos(4 * t) - Sin(t / 12) ^ 5)' 添加线段.Nodes.Add(x, y)Loop While t < 12 * 3.14159265End With' 调整曲线的样式With Selection.ShapeRange.Line.ForeColor.RGB = RGB(255, 0, 0) ' 设置线条颜色为红色.Weight = 2 ' 设置线条粗细为2End WithEnd Sub```要执行此代码,请打开Excel并按下ALT + F11打开VBA编辑器。
计算机实习二需求分析:函数曲线动态绘制使用面向对象设计环境,编程实现函数曲线的自动绘制。
程序功能是:根据选择的演示函数,允许用户输入参数,然后动态用不同颜色绘制出相应函数曲线。
在用户没有做出其他选择之前,一直重复动态演示曲线绘制过程。
程序设计:1,对面向对象设计环境的认识:第一次接触面向对象设计环境,觉得和C语言和汇编语言有很大差别,不是给你一个界面一条条代码往下写,而是给出很多的控件备选,在这些控件的代码添写处写该孔件所要执行的功能,很多控件是相互联系的,一个控件会启用其他一个或几个控件的功能。
还要设计一个合理的外观,通过设置相应的属性选项设计界面。
但是编程的思想和以前学习的语言是完全一样的,数据类型,定义,顺序,循环,选择结构的设计都和其他语言没太大分别,所以学习起来并不困难。
2,程序构思;把要绘制的函数放在一个列表框中,用时钟的启用和停止控制图像的都态绘制。
选择列表框中的一个函数,对应的一个时钟启用,其他的时钟禁用,在时钟控件的代码填写处写图像绘制的代码,用RGB 函数产生随机颜色。
直线用两点法绘图,其他的用描点法绘图,用FOR循环产生X值,再根据函数公式计算出Y值。
使用全局变量,因为每次只绘一个函数的图,所以全部函数可以用同样的变量,每次绘图给变量付值即可。
该学生毕业设计中经过老师的指导能及时纠正自己的行为,端正学习态度。
通过指导和自学,对所承担的任务进行了实施,结果较好。
报告中因为没有按指导要求使用画图软件,导致流程图不规范。
语言不规范。
结果得分:中 批改老师:章小莉 2006.9.29程序代码和注释Dim a, b, c, d As Single ‘定义单精度的通用变量Private Sub cancel_Click()Unload Me 退出程序End SubPrivate Sub Form_Load() ‘在列表狂中显示函数信息List1.AddItem "y=ax+b" ‘在列表狂中显示函数信息List1.AddItem "y=ax^2+bx+c" ‘在列表狂中显示函数信息List1.AddItem "y=asin(bx+c)+d" ‘在列表狂中显示函数信息List1.AddItem "y=acos(bx+c)+d" ‘在列表狂中显示函数信息List1.AddItem "y=x^a" ‘在列表狂中显示函数信息List1.AddItem "y=a^x" ‘在列表狂中显示函数信息List1.AddItem "y=loga^x" ‘在列表狂中显示函数信息List1.AddItem "y=tan(ax+b)" ‘在列表狂中显示函数信息List1.AddItem "y=cot(ax+b)" ‘在列表狂中显示函数信息End SubPrivate Sub lt1_Click() ‘使所有时钟停止,即停止绘图Timer1.Interval = 0Timer2.Interval = 0Timer3.Interval = 0Timer4.Interval = 0Timer5.Interval = 0Timer6.Interval = 0Timer7.Interval = 0Timer8.Interval = 0Timer9.Interval = 0End SubPrivate Sub lt2_Click()If List1.ListIndex = 0 Thena = InputBox("直线参数输入", "请输入系数a", 0)b = InputBox("直线参数输入", "请输入系数b", 0)Timer1.Interval = 1000 ‘当选择第一个函数时开启时钟一End IfIf List1.ListIndex = 1 Thena = InputBox("抛物线参数输入", "请输入系数a", 0)b = InputBox("抛物线参数输入", "请输入系数b", 0)c = InputBox("抛物线参数输入", "请输入系数c", 0)Timer2.Interval = 1000 ‘当选择第二个函数时开启时钟二End IfIf List1.ListIndex = 2 Thena = InputBox("正弦线参数输入", "请输入系数a", 0)b = InputBox("正弦线参数输入", "请输入系数b", 0)c = InputBox("正弦线参数输入", "请输入系数c", 0)d = InputBox("正弦线参数输入", "请输入系数d", 0)Timer3.Interval = 1000 ‘当选择第三个函数时开启时钟三End IfIf List1.ListIndex = 3 Thena = InputBox("余弦线参数输入", "请输入系数a", 0)b = InputBox("余弦线参数输入", "请输入系数b", 0)c = InputBox("余弦线参数输入", "请输入系数c", 0)d = InputBox("余弦线参数输入", "请输入系数d", 0)Timer4.Interval = 1000 ‘当选择第四个函数时开启时钟四End IfIf List1.ListIndex = 4 Thena = InputBox("幂函数参数输入", "请输入系数a", 0)Timer5.Interval = 1000 ‘当选择第五个函数时开启时钟五End IfIf List1.ListIndex = 5 Thena = InputBox("指数函数参数输入", "请输入系数a", 0)Timer6.Interval = 1000 ‘当选择第六个函数时开启时钟六End IfIf List1.ListIndex = 6 Thena = InputBox("对数函数参数输入", "请输入系数a", 0)Timer7.Interval = 1000 ‘当选择第七个函数时开启时钟七End IfIf List1.ListIndex = 7 Thena = InputBox("正切函数参数输入", "请输入系数a", 0)b = InputBox("正切函数参数输入", "请输入系数b", 0)Timer8.Interval = 1000 ‘当选择第八个函数时开启时钟八End IfIf List1.ListIndex = 8 Thena = InputBox("余切函数参数输入", "请输入系数a", 0)b = InputBox("余切函数参数输入", "请输入系数b", 0)Timer9.Interval = 1000 ‘当选择第九个函数时开启时钟九End IfEnd SubPrivate Sub lt3_Click()Picture1.Cls ‘清屏End SubPrivate Sub Text1_Change()End SubPrivate Sub Timer1_Timer()Picture1.ClsPicture1.Scale (-10, 10)-(10, -10) ‘定义坐标red = Rnd * 255green = Rnd * 255blue = Rnd * 255Intcolor = RGB(red, green, blue) ‘产生随机颜色X1 = -10X2 = 10Y1 = a * X1 + b ‘用已知的X值计算Y值Y2 = a * X2 + bPicture1.Line (-10, 0)-(10, 0)Picture1.Line (0, 10)-(0, -10) ‘画坐标Picture1.Line (X1, Y1)-(X2, Y2), Intcolor ‘用随机颜色画图End SubPrivate Sub Timer2_Timer()Picture1.Cls ‘清屏Picture1.Scale (-10, 10)-(10, -10) ‘定义坐标red = Rnd * 255green = Rnd * 255blue = Rnd * 255Intcolor = RGB(red, green, blue) ‘产生随机颜色For i = 0 To 20 Step 0.01 ‘循环产生等步长的很多X值X1 = -10 + iY1 = a * X1 ^ 2 + b * X1 + c ‘用已知的X值计算Y值Picture1.Line (-10, 0)-(10, 0)Picture1.Line (0, 10)-(0, -10) ‘画坐标Picture1.PSet (X1, Y1), Intcolor ‘用随机颜色画点Next iEnd SubPrivate Sub Timer3_Timer()Picture1.Cls ‘清屏Picture1.Scale (-10, 10)-(10, -10) ‘定义坐标red = Rnd * 255green = Rnd * 255blue = Rnd * 255Intcolor = RGB(red, green, blue) ‘产生随机颜色For i = 0 To 20 Step 0.01 ‘循环产生等步长的很多X值X1 = -10 + iY1 = a * Sin(b * X1 + c) + d ‘用已知的X值计算Y值Picture1.Line (-10, 0)-(10, 0)Picture1.Line (0, 10)-(0, -10) ‘画坐标Picture1.PSet (X1, Y1), Intcolor ‘用随机颜色画点Next iEnd SubPrivate Sub Timer4_Timer()Picture1.Cls ‘清屏Picture1.Scale (-10, 10)-(10, -10) ‘定义坐标red = Rnd * 255green = Rnd * 255blue = Rnd * 255Intcolor = RGB(red, green, blue) ‘产生随机颜色For i = 0 To 20 Step 0.01 ‘循环产生等步长的很多X值X1 = -10 + iY1 = a * Cos(b * X1 + c) + d ‘用已知的X值计算Y值Picture1.Line (-10, 0)-(10, 0)Picture1.Line (0, 10)-(0, -10) ‘画坐标Picture1.PSet (X1, Y1), Intcolor ‘用随机颜色画点Next iEnd SubPrivate Sub Timer5_Timer()Picture1.Cls ‘清屏Picture1.Scale (-10, 10)-(10, -10) ‘定义坐标red = Rnd * 255green = Rnd * 255blue = Rnd * 255Intcolor = RGB(red, green, blue) ‘产生随机颜色For i = 0 To 20 Step 0.01 ‘循环产生等步长的很多X值X1 = -10 + iY1 = X1 ^ a ‘用已知的X值计算Y值Picture1.Line (-10, 0)-(10, 0)Picture1.Line (0, 10)-(0, -10) ‘画坐标Picture1.PSet (X1, Y1), Intcolor ‘用随机颜色画点Next iEnd SubPrivate Sub Timer6_Timer()Picture1.Cls ‘清屏Picture1.Scale (-10, 10)-(10, -10) ‘定义坐标red = Rnd * 255green = Rnd * 255blue = Rnd * 255Intcolor = RGB(red, green, blue) ‘产生随机颜色For i = 0 To 20 Step 0.01 ‘循环产生等步长的很多X值X1 = -10 + iY1 = a ^ X1 ‘用已知的X值计算Y值Picture1.Line (-10, 0)-(10, 0)Picture1.Line (0, 10)-(0, -10) ‘画坐标Picture1.PSet (X1, Y1), Intcolor ‘用随机颜色画点Next iEnd SubPrivate Sub Timer7_Timer()Picture1.Cls ‘清屏Picture1.Scale (-10, 10)-(10, -10) ‘定义坐标red = Rnd * 255green = Rnd * 255blue = Rnd * 255Intcolor = RGB(red, green, blue) ‘产生随机颜色For i = 0.01 To 20 Step 0.01 ‘循环产生等步长的很多X值X1 = 0 + iY1 = Log(X1) / Log(a) ‘用已知的X值计算Y值Picture1.Line (-10, 0)-(10, 0)Picture1.Line (0, 10)-(0, -10) ‘画坐标Picture1.PSet (X1, Y1), Intcolor ‘用随机颜色画点Next iEnd SubPrivate Sub Timer8_Timer()Picture1.Cls ‘清屏Picture1.Scale (-10, 10)-(10, -10) ‘定义坐标red = Rnd * 255green = Rnd * 255blue = Rnd * 255Intcolor = RGB(red, green, blue) ‘产生随机颜色For i = 0 To 20 Step 0.001 ‘循环产生等步长的很多X值X1 = -10 + iY1 = Tan(a * X1 + b) ‘用已知的X值计算Y值Picture1.Line (-10, 0)-(10, 0)Picture1.Line (0, 10)-(0, -10) ‘画坐标Picture1.PSet (X1, Y1), Intcolor ‘用随机颜色画点Next iEnd SubPrivate Sub Timer9_Timer()Picture1.Cls ‘清屏Picture1.Scale (-10, 10)-(10, -10) ‘定义坐标red = Rnd * 255green = Rnd * 255blue = Rnd * 255Intcolor = RGB(red, green, blue) ‘产生随机颜色For i = 0 To 20 Step 0.001 ‘循环产生等步长的很多X值X1 = -9.9995 + iY1 = 1 / Tan(a * X1 + b) ‘用已知的X值计算Y值Picture1.Line (-10, 0)-(10, 0)Picture1.Line (0, 10)-(0, -10) ‘画坐标Picture1.PSet (X1, Y1), Intcolor ‘用随机颜色画点Next iEnd Sub使用说明:双击启动程序,在列表中选一个函数,点击开始绘图按钮,根据提示输入参数,就会自动用随机颜色画图,每秒画一次,单击一下“停止绘图”,即可使画图停止,保留最后一次的图型,单击一下“清屏”,就可以把屏幕清理干净。
使⽤CHART控件做实时曲线使⽤CHART 控件做实时曲线编程,因⼀⼯程需要将现场数据采集过来,并以实时曲线的⽅式,显⽰出来,顾写了个例⼦程序,供⼤家参考,不对的地⽅请⼤家指正,谢谢!废话不多说,下⾯是整个代码,希望能够帮到⼤家。
Imports System.Windows.Forms.DataVisualization.ChartingPublic Class Form1'//定义曲线1X轴变量为时间Private X1(19) As String'//定义曲线1Y轴变量为瞬时流量Private Y1(19) As Double'//定义曲线2X轴变量为时间Private X2(19) As String'//定义曲线2Y轴变量为瞬时流量Private Y2(19) As Double'//定义画图区域变量Private fluxArea As ChartArea'//定义Serial对象Private fluxLine1 As SeriesPrivate fluxLine2 As Series'//定义Legends对象Private fluxLegend As LegendPrivate Sub InitChartSet()'//初始化Chart对象设置'//设置控件背景⾊Chart1.BackColor = Color.Black'//定义标题对象变量Dim ChartTitle As New Title'//设置Title信息With ChartTitle.Text = "⽪带秤流量实时曲线".Text = "⽪带秤流量实时曲线".ForeColor = Color.Yellow.Font = New System.Drawing.Font("微软雅⿊", 16.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))End With'//清除所有标题对象Chart1.Titles.Clear()Chart1.Titles.Add(ChartTitle)'//清空画图区域Chart1.ChartAreas.Clear()'//创建chartarea对象实例fluxArea = New ChartArea("fluxArea")'//将定义的画图区域添加到chartChart1.ChartAreas.Add(fluxArea)'//设置显⽰区域With fluxArea'//设置背景颜⾊为⿊⾊.BackColor = Color.Black'//设置X轴最⼩值.AxisX.Minimum = 1'//设置X轴最⼤值.AxisX.Maximum = 20'//设置X轴.AxisX.Interval = 1'//设置X轴标题.AxisX.Title = "时间"'//设置X轴标题字体.AxisX.TitleFont = New System.Drawing.Font("微软雅⿊", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byt e))'//设置X轴线宽.AxisX.LineWidth = 3'//设置X轴颜⾊.AxisX.LineColor = Color.Green'//设置X轴线型.AxisX.LineDashStyle = ChartDashStyle.Solid'//设置X轴标题对齐.AxisX.TitleAlignment = StringAlignment.Center'//设置X轴标题颜⾊.AxisX.TitleForeColor = Color.Yellow'//设置X轴⽹格刻度线.AxisX.MajorGrid.LineColor = Color.Green'//设置X轴⽹格刻度线宽度.AxisX.MajorGrid.LineWidth = 1'//设置X轴⽹格刻度线样式.AxisX.MajorGrid.LineDashStyle = ChartDashStyle.Dash'//设置X轴刻度线颜⾊.AxisX.MajorTickMark.LineColor = Color.Green'//设置X轴刻度线长度.AxisX.MajorTickMark.Size = 2'//设置X轴刻度线宽度.AxisX.MajorTickMark.LineWidth = 2'//设置X轴刻度线样式.AxisX.MajorTickMark.LineDashStyle = ChartDashStyle.Solid'//设置X轴刻度线位置.AxisX.MajorTickMark.TickMarkStyle = TickMarkStyle.OutsideArea'//设置X轴标签颜⾊belStyle.ForeColor = wnGreen'//设置Y轴最⼩值.AxisY.Minimum = 0D'//设置Y轴最⼤值.AxisY.Maximum = 150D.AxisY.Maximum = 150D'//设置Y轴标题.AxisY.Title = "⽪带秤瞬时流量"'//设置Y轴标题字体.AxisY.TitleFont = New System.Drawing.Font("微软雅⿊", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byt e))'//设置X轴线宽.AxisY.LineWidth = 3'//设置X轴颜⾊.AxisY.LineColor = Color.Green'//设置X轴线型.AxisY.LineDashStyle = ChartDashStyle.Solid'//设置Y轴标题对齐.AxisY.TitleAlignment = StringAlignment.Center'//设置Y轴标题颜⾊.AxisY.TitleForeColor = Color.Yellow'//设置Y轴⽹格刻度线.AxisY.MajorGrid.LineColor = Color.Green'//设置Y轴⽹格刻度线宽度.AxisY.MajorGrid.LineWidth = 1'//设置Y轴⽹格刻度线样式.AxisY.MajorGrid.LineDashStyle = ChartDashStyle.Dash'//设置X轴刻度线颜⾊.AxisY.MajorTickMark.LineColor = Color.Green'//设置X轴刻度线长度.AxisY.MajorTickMark.Size = 2'//设置X轴刻度线宽度.AxisY.MajorTickMark.LineWidth = 2'//设置X轴刻度线样式.AxisY.MajorTickMark.LineDashStyle = ChartDashStyle.Solid'//设置X轴刻度线位置.AxisY.MajorTickMark.TickMarkStyle = TickMarkStyle.OutsideArea'//设置Y轴标签颜⾊belStyle.ForeColor = wnGreenEnd With'//创建Legends对象实例fluxLegend = New Legend("fluxLegend")'//设置Legends对象With fluxLegend'//设置图例停靠位置为⾃动.Position.Auto = True'//设置图例对齐⽅式为居中.Alignment = StringAlignment.Center'//设置图例停靠位置为底部.Docking = Docking.Bottom'//设置图例的背景⾊为透明.BackColor = Color.Transparent'//设置图例的字体颜⾊为⽩⾊.ForeColor = Color.White'//设置图例字体.Font = New System.Drawing.Font("微软雅⿊", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))End With'//清除默认LegendsChart1.Legends.Clear()Chart1.Legends.Add(fluxLegend)'//创建series对象实例fluxLine1 = New Series("fluxLine1")fluxLine2 = New Series("fluxLine2")'//设置Serial对象1With fluxLine1With fluxLine1'//设置线型.ChartType = SeriesChartType.Spline'//设置画线区域.ChartArea = "fluxArea"'//设置画线的宽度.BorderWidth = 3'//设置画线颜⾊.Color = wnGreen'//设置画线阴影.ShadowOffset = 1'//设置图⽰⽂字.LegendText = "4A路⽪带秤"'//设置图例属性.Legend = "fluxLegend"End With'//设置Serial对象2With fluxLine2'//设置线型.ChartType = SeriesChartType.Spline'//设置画线区域.ChartArea = "fluxArea"'//设置画线的宽度.BorderWidth = 3'//设置画线颜⾊.Color = Color.Red'//设置画线阴影.ShadowOffset = 1'//设置图⽰⽂字.LegendText = "4B路⽪带秤"'//设置图例属性.Legend = "fluxLegend"End With'//清除默认seriesChart1.Series.Clear()'//将定义好的曲线对象添加到chartChart1.Series.Add(fluxLine1)Chart1.Series.Add(fluxLine2)End SubPrivate Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load'//InitChartSet()End SubPrivate Sub InitChartData()'// 设置初始数据Dim i As Integer = 0For i = 0 To 19X1(i) = Format(Now(), "HH:mm:ss")X2(i) = Format(Now(), "HH:mm:ss")Y1(i) = 0Y2(i) = 0Next'//显⽰数据Chart1.Series("fluxLine1").Points.DataBindXY(X1, Y1)Chart1.Series("fluxLine2").Points.DataBindXY(X2, Y2)End SubPrivate Sub RefreshChartData()'// 更新曲线数据Dim i As IntegerFor i = 0 To 18X1(i) = X1(i + 1)X2(i) = X2(i + 1)Y1(i) = Y1(i + 1)Y2(i) = Y2(i + 1)NextY1(19) = Math.Round(100 * Rnd(100) * 1.0264, 2)X1(19) = Format(Now(), "HH:mm:ss")Y2(19) = Math.Round(100 * Rnd(100) * 1.0264, 2)X2(19) = Format(Now(), "HH:mm:ss")Chart1.Series("fluxLine1").Points.DataBindXY(X1, Y1)Chart1.Series("fluxLine2").Points.DataBindXY(X2, Y2)End SubPrivate Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click InitChartData()Timer1.Enabled = TrueEnd SubPrivate Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick RefreshChartData()End SubEnd Class。
VB绘制实时曲线2010-09-14 09:28:30 作者:佚名来源:浏览次数:56在工控制软件中,实时曲线的绘制用途非常的广泛,它可以很直观的显示出监控数据的变化值和变化趋势。
在VB中实现曲线的绘制有很多种方法,本文介绍一种非常简单的方法来实现实时曲线的绘制。
在VB中实现实时曲线的绘在工控制软件中,实时曲线的绘制用途非常的广泛,它可以很直观的显示出监控数据的变化值和变化趋势。
在VB中实现曲线的绘制有很多种方法,本文介绍一种非常简单的方法来实现实时曲线的绘制。
在VB中实现实时曲线的绘制,要利用VB的PictureBox(图像)控件,和画线函数line(x1,y1)-(x2,y2)。
PictureBox控件,可以作为一个“容器”,在它的里面可以包含很多的对象。
也可以执行很多VB的内部函数。
要实现实时曲线的绘制,肯定要有外部实时数据的输入,这里假设是有一个数据从计算机的串口输入定义该数据变量为DataFromCom。
实时曲线反映的就是该数据。
“Width”打开VB6.0中文版,新建一个项目和窗体,修改窗体的属性,将“Heigh”修改为:8000,修改为在窗体中放如一个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轴设定为数据轴。
信息技术 2005年第10期 中图分类号:TP311 文献标识码:B 文章编号:1009-2552(2005)10-0076-03利用VB编程实现实时数据曲线绘制关维娟,陈清华(安徽理工大学,淮南232001)摘 要:实时动态数据曲线的绘制与显示,是各种工业测控系统的重要功能。
而实现方法也不尽相同。
提出了一种基于VB编程,简单易懂的实时数据曲线绘制方法,实际使用证明完全能够满足实时监控要求。
文中通过一个实例介绍了其实现的具体方法。
关键词:测控系统;实时数据曲线;Visual BasicR ealization o f real-tim e d ata curve dra w ing using VB programmingG UAN Wei2juan,CHE N Qing2hua(Anhui U niversity of Science and T echnology,H u ainan232001,China) Abstract:Drawing and showing the real-time and dynamic data curve is an im portant function of the indus2 trial testing and controlling system,and various realizing methods are different.A sim ple method of real-time and dynamic data curve drawing based on VB programming is introduced in this paper,and it proved that the program could satis fy the real-time control requirements.It is illustrated by a coucrete exam ple.K ey w ords:testing and controlling system;real-time data curve;Visual Basic(VB)0 引言各种工业测控系统中,通常利用动态实时数据曲线,实时监测某点在现场工况变化下的控制稳定性。
用VB编写函数曲线
白雪
【期刊名称】《电脑编程技巧与维护》
【年(卷),期】2009(000)022
【摘要】讨论了Visual Basic中绘图控件的基本概念和使用方法,结合某三角函数,给出了设计编写函数曲线程序的思路和方法.
【总页数】2页(P34-35)
【作者】白雪
【作者单位】空军航空大学基础基地学员旅,长春,130022
【正文语种】中文
【中图分类】TP3
【相关文献】
1.AutoCAD VBA编程实现样条曲线拟合函数曲线 [J], 仇建飞
2.用VB实现画三角函数曲线 [J], 杨忠;
3.用VB实现画三角函数曲线 [J], 杨忠
4.基于VBA的都江堰灌区蓄水量查询程序编写 [J], 徐兴文; 方可; 李鹏中; 陈小琳
5.VB编写自动处理程序在网刊建设中的应用 [J], 李金丽;杨海亮
因版权原因,仅展示原文概要,查看原文内容请购买。
VB环境中绘制数据曲线图摘要:为了更好地为汛期气象服务提供有力的资料补充和保障,截至2010年底,通辽市气象局已建成区域自动气象站35个。
为使区域自动站在决策服务、预报预警调查等方面所提供的资料更加直观,本文介绍了利用Visual Basic软件编写程序,实现数据曲线绘制的方法和过程,VB6.0 提供了PictureBox 控件,利用该控件的属性和方法,可以把实时数据用曲线图的形式表达出来。
关键词:VB6.0实时数据曲线区域自动气象站在区域自动气象站中,当数据采集存储完成后,往往需要更直观的界面显示。
利用VB6.0 编程实现实时数据曲线的绘制与显示,可动态地监视某些关键气象要素值的变化情况与走向趋势,以便直观、便捷的进行分析来更好地做好气象服务工作。
基于以上的需求分析,将系统划分为4大功能模块。
1、数据库的连接。
该项需要实现与数据库的连接,在设置中,用户可以直接选择自己所在地的市局服务器。
以后进行的操作中将从所选服务器中进行气象要素数据的读取。
VB6.0实现SQLServer2000数据库的连接与断开的代码格式为:连接代码:Set conn=New ADODB.ConnectionSet rs = New ADODB.Recordsetconn.Open “Driver={SQL Server};Server=服务器IP或服务器名称;Database=数据库名称;Uid=用户名;Pwd=密码”断开代码:rs.CloseSet rs = Nothingconn.CloseSet conn = Nothing2、数据库内容的读取。
要把本辖区所有区域站数据逐一统计,在VB6.0的编程中要用到循环语句,例如要查询温度数据,我市现在数据库中存放的温度数据是小时数据,例如要查询单一站点某时间段内的温度数据,本文中是通过select 语句来实现的,主要语句描述为:select * from 表名where station=‘“ & 区站号&”‘and observetime between’” & 开始时间& “‘and’” & 结束时间&”‘“。
'添加个picture1和command1Option ExplicitDim lngCenter As LongDim lngMax As LongDim lngPad&Dim PCurrent As POINT, PLast As POINTPrivate Type POINTx As Longy As LongEnd TypePrivate Sub Form_Load()lngCenter = (Picture1.Top + Picture1.Height) / 2lngMax = Picture1.HeightPLast.x = 0PLast.y = lngCenterDim i&For i = 0 To Picture1.Width Step 100Picture1.Line (i, 0)-(i, Picture1.Height), &HFFC0C0NextFor i = 0 To Picture1.Height Step 100Picture1.Line (0, i)-(Picture1.Width, i), &HFFC0C0NextPicture1.DrawWidth = 1.5Picture1.Line (0, lngCenter)-(Picture1.Width, lngCenter), vbBlue Picture1.DrawWidth = 1End SubPrivate Sub Timer1_Timer()PCurrent.x = PCurrent.x + 50RandomizePCurrent.y = Rnd * lngMaxPicture1.Line (PCurrent.x, PCurrent.y)-(PLast.x, PLast.y), vbRed PLast.x = PCurrent.xPLast.y = PCurrent.yEnd SubPrivate Sub Command1_Click()Timer1.Enabled = Not Timer1.EnabledEnd Sub效果图:如果需要带有点规律性可以将获得y的坐标稍加处理下:Private Function getRndY() As IntegerDim lngTmp%If intRnd = 0 ThenRandomizeintRnd = Rnd * 3 + 1End IfRandomizelngTmp = Rnd * lngCenterIf PLast.y > lngCenter ThengetRndY = lngCenter + lngTmpElsegetRndY = lngTmpEnd IfintCurRnd = intCurRnd + 1If intCurRnd > intRnd ThenRandomizeintRnd = Rnd * 3 + 1&nb ......Public Sub Draw_Sin _( _pic1 As PictureBox, _sngXFrom As Single, _sngXTo As Single, _)Dim x1 As Single, y1 As SingleDim x2 As Single, y2 As Singlex1 = sngXFromy1 = Sin(x1)For x2 = (sngXFrom + sngStep) To sngXTo Step 0.1y2 = Sin(x2)pic1.Line (ScaleX_MathToScreen(x1),ScaleY_MathToScreen(y1)) _-(ScaleX_MathToScreen(x2),ScaleY_MathToScreen(y2))x1 = x2y1 = y2NextEnd SubPrivate Function ScaleX_MathToScreen(sngX As Single) ScaleX_MathToScreen = 500+ sngX * 500End FunctionPrivate Function ScaleY_MathToScreen(sngY As Single)ScaleY_MathToScreen = 500- sngY * 500End FunctionOption ExplicitPrivate Sub Form_click()ClsDim i, j As SingleMe.Scale (-1, 10)-(25, -1) '定义坐标系,原点靠近左下角Line (-1, 0)-(25, 0) '画x轴Line (0, -1)-(0, 10) '画Y轴For i = -1 To 25 Step 1 '画X轴刻度If i <> 0 ThenLine (i, 0)-(i, 0.2)CurrentX = i - 0.3: CurrentY = -0.2Print iEnd IfNextFor j = -1 To 10 '画Y轴刻度If j <> 0 ThenLine (0, j)-(0.3, j)CurrentX = -0.7: CurrentY = j + 0.1Print jEnd IfNextCurrentX = -0.4: CurrentY = -0.2Print "0" '画原点CurrentX = 0.5: CurrentY = 9.5Print "Y"CurrentX = 24: CurrentY = 0.5Print "X"RandomizeCurrentX = 1: CurrentY = Format(Rnd * 10, "0.00")For i = 2 To 24Line -(i, Format(Rnd * 10, "0.00")) '这里是随机生成的数据!NextEnd Sub在Form1中加Picture1控件Option ExplicitPrivate Sub Form1.Picture1_click()ClsDim i, j As SingleMe.Scale (-1, 10)-(25, -1) '定义坐标系,原点靠近左下角with Form1.Picture1Line (-1, 0)-(25, 0) '画x轴Line (0, -1)-(0, 10) '画Y轴For i = -1 To 25 Step 1 '画X轴刻度If i <> 0 ThenLine (i, 0)-(i, 0.2)CurrentX = i - 0.3: CurrentY = -0.2Print iEnd IfNextFor j = -1 To 10 '画Y轴刻度If j <> 0 ThenLine (0, j)-(0.3, j)CurrentX = -0.7: CurrentY = j + 0.1Print jEnd IfNextCurrentX = -0.4: CurrentY = -0.2Print "0" '画原点CurrentX = 0.5: CurrentY = 9.5Print "Y"CurrentX = 24: CurrentY = 0.5Print "X"RandomizeCurrentX = 1: CurrentY = Format(Rnd * 10, "0.00")For i = 2 To 24Line -(i, Format(Rnd * 10, "0.00")) '这里是随机生成的数据!Nextend withEnd Sub还可以更完善.。