标题:vb.net chart 动态曲线
只看楼主
gowine
Rank: 2
等 级:论坛游民
帖 子:39
专家分:95
注 册:2016-4-10
结帖率:71.43%
已结贴  问题点数:20 回复次数:8 
vb.net chart 动态曲线

如图,X轴为时间,Y轴为幅度,幅度值是从串口返回的值,每次接收到串口返回的幅度值就在chart上面绘制数据点。现在问题有两个:
1. 程序运行时X轴上的时间标签全部不要显示,当有幅度值返回时在chart上打上数据点,同时X轴对应地显示当前时间的标签。
2. 当数据曲线绘制到chart右边边界的时候,能实现不压缩网格大小的动态显示,也就是最左边一格的左移出显示界面以给右边空间绘制曲线。

恳求各位大神拔刀相助,在线等源码。。。。。。。。。万分感谢!!!!!编辑环境VB2010
搜索更多相关主题的帖子: 在线 动态 标签 空间 
2016-04-10 09:29
不说也罢
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:39
帖 子:1481
专家分:4989
注 册:2007-10-7
得分:20 
这里给你一个例子,模拟下。你可以稍加修改取数函数变为从串口获得的返回值
程序代码:
'新建项目时,在默认窗体Form1上添加一个按钮,一个chart
Public Class Form1
    Dim x(10) As String, y(10) As Double '示例中显示11条数据
    Dim yy() As Double

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        '按钮单击事件模拟取数
        yy = GetValue()
        Dim i As Integer
        For i = 0 To yy.Length - 1
            y(i) = yy(i)
        Next

        Chart1.Series(0).ChartType = DataVisualization.Charting.SeriesChartType.Line
        Chart1.Series(0).Points.DataBindXY(x, y)

        Chart1.Series(0).IsValueShownAsLabel = True
        Chart1.Series(0).LabelForeColor = Color.Red
        Chart1.ChartAreas(0).AxisX.Minimum = 0
        Chart1.ChartAreas(0).AxisX.Maximum = yy.Length
        Chart1.ChartAreas(0).AxisX.Interval = 1
    End Sub
    Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
        Chart1.Dock = DockStyle.Fill
        Button1.BringToFront()
        Chart1.ChartAreas(0).AxisX.MajorGrid.Enabled = False
        Chart1.ChartAreas(0).AxisY.MajorGrid.Enabled = False
    End Sub
    Function GetValue() As Array '这是一个模拟取数的函数
        Dim a As Integer = 0
        If yy Is Nothing Then
            a = 0
        Else
            a = yy.Length
        End If
        If a = 11 Then
            For i As Integer = 0 To 9
                yy(i) = yy(i + 1)
                x(i) = x(i + 1)
            Next
            yy(10) = Math.Round(a * Rnd(100) * 1.0264, 2)
            x(10) = Format(Now, "hh:mm:ss")
        Else
            ReDim Preserve yy(a)
            yy(a) = Math.Round(a * Rnd(100) * 1.0264, 2)
            x(a) = Format(Now, "hh:mm:ss")
        End If
        Return yy
    End Function
End Class


其他的你再琢磨琢磨,下面是运行测试程序的截图


===================================================
讨厌C#的行尾的小尾巴;和一对大括号{ }
===================================================
2016-04-10 17:21
精卫岛
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2006-11-13
得分:0 
2016-04-11 10:53
gowine
Rank: 2
等 级:论坛游民
帖 子:39
专家分:95
注 册:2016-4-10
得分:0 
2楼的前辈,真的非常感谢你,整合到我的工程里面完美的用得上,真的非常感谢!
现在再请教个问题,在这个前提下再增加一条不同颜色的曲线,因为串口那边有两组数据返回;顺便问一下,向下位机发送读取指令后,其返回两组数据,返回第一组数据后间隔两秒再返回第二组数据,问题是怎么才可以把这两组数据全部接收下来?不胜感激!
2016-04-11 17:28
gowine
Rank: 2
等 级:论坛游民
帖 子:39
专家分:95
注 册:2016-4-10
得分:0 
以下是引用gowine在2016-4-11 17:28:27的发言:

2楼的前辈,真的非常感谢你,整合到我的工程里面完美的用得上,真的非常感谢!
现在再请教个问题,在这个前提下再增加一条不同颜色的曲线,因为串口那边有两组数据返回;顺便问一下,向下位机发送读取指令后,其返回两组数据,返回第一组数据后间隔两秒再返回第二组数据,问题是怎么才可以把这两组数据全部接收下来?不胜感激!

二楼的前辈,添加曲线的问题在你原有的例程中添加一个数据就解决了,现在是串口的那两组数据怎么接收到问题了。在线等。。。。。。。。。。。。。。。。
2016-04-12 06:57
不说也罢
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:39
帖 子:1481
专家分:4989
注 册:2007-10-7
得分:0 
不是很明白你的意思。总之,在数据接收完后DataBindXY就可以了。

===================================================
讨厌C#的行尾的小尾巴;和一对大括号{ }
===================================================
2016-04-12 11:38
gowine
Rank: 2
等 级:论坛游民
帖 子:39
专家分:95
注 册:2016-4-10
得分:0 
以下是引用不说也罢在2016-4-12 11:38:12的发言:

不是很明白你的意思。总之,在数据接收完后DataBindXY就可以了。

谢谢你的指点,问题已经解决。
2016-04-12 18:03
newxin
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2019-7-17
得分:0 
谢谢!
2019-07-17 14:29
z375323424
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2020-3-2
得分:0 
谢谢!
2020-03-04 17:56



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-463468-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.101501 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved