如何把实时数据在VB中用曲线图显示

 我来答
zdingyun
推荐于2016-04-06 · 知道合伙人软件行家
zdingyun
知道合伙人软件行家
采纳数:15429 获赞数:48169
1982年上海业余工业大学化工系毕业 现退休

向TA提问 私信TA
展开全部

VB可通过Timer控件的Timer事件中使用Line方法或PSet 方法绘制线条、色彩实现实时显示采集数据的曲线。

Line方法,在对象上画直线和矩形。

PSet 方法,将对象上的点设置为指定颜色。

以下是一段工控程序的使用Line方法的代码:

Option Explicit
    Dim quitflag As Boolean
    Dim cmdXianshiFlag As Boolean
    Dim cmdTestFlag As Boolean
    Dim p As Integer
    Dim h As Integer
    Dim miao1 As Integer
    Dim fen1 As Integer
    Dim j As Integer
    Dim ii As Integer
    Private br_br As Double
    Private ab_bm As Double
    Private wy_wy As Double
    Private shijian(360) As String * 10
    Private shijian_zh(360) As String * 10
    Private record_zh(5, 360) As Single
    Private record(5, 360) As Single
    Private c(360) As Variant    
    Const a = 3.141592654 * 2
Public Function xp(colvb As Variant, xx As Variant, yy As Variant, txt As Variant)
    Picture1.ForeColor = colvb 'QBColor(14)
    Picture1.CurrentX = xx
    Picture1.CurrentY = yy
    Picture1.Print txt '
End Function
Private Sub CmdTest_Click()
    If cmdTestFlag Then
    For j = 0 To 359
        record(0, j) = 0
        record(1, j) = 0
        record(2, j) = 0
        record(3, j) = 0
        record(4, j) = 0
        record(5, j) = 0
    Next j
    cmdTest.Caption = "试验"
    Else
        For j = 0 To 359
        c(j) = j * a / 60
        record(0, j) = Sin(c(j)) * -450
        record(1, j) = Sin(c(j)) * -300
        record(2, j) = Sin(c(j) + a / 3) * -450
        record(3, j) = Sin(c(j) + 2 * a / 3) * -450
        record(4, j) = Sin(c(j) + 2 * a / 3) * -300
        record(5, j) = Sin(c(j) + 2 * a / 3) * -150
    Next j
    cmdTest.Caption = "记录"
    End If
    cmdTestFlag = Not cmdTestFlag
End Sub
Private Sub Timer1_Timer()
    If lblTime.Caption <> CStr(Time$) Then
        lblTime.Caption = Time$
        Frmjly.Caption = "记录仪" & Space(90) & Date$ & Space(6) & Time$
        miao1 = Mid(lblTime, 7, 2)
        fen1 = Mid(Time$, 4, 2)
        If fen1 = 0 And miao1 = 0 Then
            shijian(0) = lblTime
        End If
        Label1 = lblTime
        If miao1 = 0 Then
        For k = 0 To 358
            record_zh(0, k + 1) = record(0, k)
            record_zh(1, k + 1) = record(1, k)
            record_zh(2, k + 1) = record(2, k)
            record_zh(3, k + 1) = record(3, k)
            record_zh(4, k + 1) = record(4, k)
            record_zh(5, k + 1) = record(5, k)
        Next k
        For j = 1 To 359 '9
            record(0, j) = record_zh(0, j)
            record(1, j) = record_zh(1, j)
            record(2, j) = record_zh(2, j)
            record(3, j) = record_zh(3, j)
            record(4, j) = record_zh(4, j)
            record(5, j) = record_zh(5, j)
        Next j
        End If
        If fen1 = 0 And miao1 = 1 Then
            For ii = 0 To 5
                shijian_zh(ii + 1) = shijian(ii)
            Next ii
            For h = 1 To 6
                shijian(h) = shijian_zh(h)
            Next h
            Label1.Visible = False
            Label2.Visible = True
        End If
    End If
End Sub
Private Sub Timer2_Timer()
    BitBlt Me.Picture1.hDC, 0, 0, Me.Picture1.ScaleWidth, Me.Picture1.ScaleHeight, 0, 0, 0, vbBlack  'ness
    Text1 = Time$
    miao = Right$(Time$, 2)
    Text2 = fen1
    record(0, 0) = record_jm(3) * -30
    record(1, 0) = record_jm(4) * -30
    record(2, 0) = record_jm(5) * -30
    record(3, 0) = record_jm(0) * -30
    record(4, 0) = record_jm(1) * -30
    record(5, 0) = record_jm(10) * -30 '干箱真空
    mmm = Val(fen1 * 60) + Val(miao)
    j = mmm
    p = (j / 360) - Int(j / 360)
    j = p * 360
    Text2 = Date$
    Label8 = Date$
    Label2 = shijian(1)
    Label2.Left = fen1 * 30 + 140
    Label3 = shijian(2)
    Label3.Left = fen1 * 30 + 1800 * 1 + 140
    Label4 = shijian(3)
    Label4.Left = fen1 * 30 + 1800 * 2 + 140
    Label5 = shijian(4)
    Label5.Left = fen1 * 30 + 1800 * 3 + 140
    Label6 = shijian(5)
    Label6.Left = fen1 * 30 + 1800 * 4 + 140
    Label7 = shijian(6)
    Label7.Left = fen1 * 30 + 1800 * 5 + 140
    '温度坐标
    colvb = vbWhite
    xx = 100
    yy = 150
    txt = "℃"
    wp = xp(colvb, xx, yy, txt)
    yy = 350
    txt = "100"
    wp = xp(colvb, xx, yy, txt)
    xx = 200
    yy = 1850
    txt = "50"
    wp = xp(colvb, xx, yy, txt)
    yy = 3350
    xx = 300
    txt = "0"
    wp = xp(colvb, xx, yy, txt)
    xx = 100
    yy = 4850
    txt = "-50"
    wp = xp(colvb, xx, yy, txt)
    xx = 0
    yy = 6350
    txt = "-100"
    wp = xp(colvb, xx, yy, txt)
    '真空坐标
    colvb = vbRed
    xx = 11500
    yy = 150
    txt = "Pa"
    wp = xp(colvb, xx, yy, txt)
    yy = 350
    txt = "10000"
    wp = xp(colvb, xx, yy, txt)
    xx = 11500
    yy = 1850
    txt = "1000"
    wp = xp(colvb, xx, yy, txt)
    yy = 3350
    xx = 11500
    txt = "100"
    wp = xp(colvb, xx, yy, txt)
    xx = 11500
    yy = 4850
    txt = "10"
    wp = xp(colvb, xx, yy, txt)
    xx = 11500
    yy = 6350
    txt = "1"
    wp = xp(colvb, xx, yy, txt)
    xx = 500
    yy = 150
    txt = "Pa"
    wp = xp(colvb, xx, yy, txt)
    yy = 350
    txt = "10000"
    wp = xp(colvb, xx, yy, txt)
    xx = 500
    yy = 1850
    txt = "1000"
    wp = xp(colvb, xx, yy, txt)
    yy = 3350
    xx = 500
    txt = "100"
    wp = xp(colvb, xx, yy, txt)
    xx = 500
    yy = 4850
    txt = "10"
    wp = xp(colvb, xx, yy, txt)
    xx = 500
    yy = 6350
    txt = "1"
    wp = xp(colvb, xx, yy, txt)
    '画格
    Picture1.ForeColor = vbWhite
    Picture1.Line (450, 400)-(11300, 400)
    Picture1.Line (450, 700)-(500, 700)
    Picture1.Line (450, 1000)-(500, 1000)
    Picture1.Line (450, 1300)-(500, 1300)
    Picture1.Line (450, 1600)-(500, 1600)
    Picture1.ForeColor = vbRed
    
    Picture1.Line (500, 566.7)-(550, 566.7)
    Picture1.Line (500, 733.3)-(550, 733.3)
    Picture1.Line (500, 900)-(550, 900)
    Picture1.Line (500, 1066.7)-(550, 1066.7)
    Picture1.Line (500, 1233.3)-(550, 1233.3)
    Picture1.Line (500, 1400)-(550, 1400)
    Picture1.Line (500, 1566.7)-(550, 1566.7)
    Picture1.Line (500, 1733.3)-(550, 1733.3)
    Picture1.Line (500, 2066.7)-(550, 2066.7)
    Picture1.Line (500, 2233.3)-(550, 2233.3)
    Picture1.Line (500, 2400)-(550, 2400)
    Picture1.Line (500, 2566.7)-(550, 2566.7)
    Picture1.Line (500, 2733.3)-(550, 2733.3)
    Picture1.Line (500, 2900)-(550, 2900)
    Picture1.Line (500, 3066.7)-(550, 3066.7)
    Picture1.Line (500, 3233.3)-(550, 3233.3)
    Picture1.Line (500, 3566.7)-(550, 3566.7)
    Picture1.Line (500, 3733.3)-(550, 3733.3)
    Picture1.Line (500, 3900)-(550, 3900)
    Picture1.Line (500, 4066.7)-(550, 4066.7)
    Picture1.Line (500, 4233.3)-(550, 4233.3)
    Picture1.Line (500, 4400)-(550, 4400)
    Picture1.Line (500, 4566.7)-(550, 4566.7)
    Picture1.Line (500, 4733.3)-(550, 4733.3)
    Picture1.Line (500, 5066.7)-(550, 5066.7)
    Picture1.Line (500, 5233.3)-(550, 5233.3)
    Picture1.Line (500, 5400)-(550, 5400)
    Picture1.Line (500, 5566.7)-(550, 5566.7)
    Picture1.Line (500, 5733.3)-(550, 5733.3)
    Picture1.Line (500, 5900)-(550, 5900)
    Picture1.Line (500, 6066.7)-(550, 6066.7)
    Picture1.Line (500, 6233.3)-(550, 6233.3)
    Picture1.ForeColor = vbWhite
    Picture1.Line (450, 1900)-(11300, 1900)
    Picture1.Line (450, 2200)-(500, 2200)
    Picture1.Line (450, 2500)-(500, 2500)
    Picture1.Line (450, 2800)-(500, 2800)
    Picture1.Line (450, 3100)-(500, 3100)
    Picture1.Line (450, 3400)-(11300, 3400)
    Picture1.Line (450, 3700)-(500, 3700)
    Picture1.Line (450, 4000)-(500, 4000)
    Picture1.Line (450, 4300)-(500, 4300)
    Picture1.Line (450, 4600)-(500, 4600)
    Picture1.Line (450, 4900)-(11300, 4900)
    Picture1.Line (450, 5200)-(500, 5200)
    Picture1.Line (450, 5500)-(500, 5500)
    Picture1.Line (450, 5800)-(500, 5800)
    Picture1.Line (450, 6100)-(500, 6100)
    Picture1.Line (450, 6400)-(11300, 6400)
    Picture1.Line (500, 400)-(500, 6400)
    Picture1.Line (11300, 400)-(11300, 6400)
    '画时间坐标
    'Picture1.ForeColor = vbYellow
    If -700 + fen1 * 30 > 200 Then
        Picture1.Line (-400 + fen1 * 30, 400)-(-400 + fen1 * 30, 6400)
    End If
    Picture1.Line (500 + fen1 * 30, 400)-(500 + fen1 * 30, 6400)
    Picture1.Line (1400 + fen1 * 30, 400)-(1400 + fen1 * 30, 6400)
    Picture1.Line (2300 + fen1 * 30, 400)-(2300 + fen1 * 30, 6400)
    Picture1.Line (3200 + fen1 * 30, 400)-(3200 + fen1 * 30, 6400)
    Picture1.Line (4100 + fen1 * 30, 400)-(4100 + fen1 * 30, 6400)
    Picture1.Line (5000 + fen1 * 30, 400)-(5000 + fen1 * 30, 6400)
    Picture1.Line (5900 + fen1 * 30, 400)-(5900 + fen1 * 30, 6400)
    Picture1.Line (6800 + fen1 * 30, 400)-(6800 + fen1 * 30, 6400)
    Picture1.Line (7700 + fen1 * 30, 400)-(7700 + fen1 * 30, 6400)
    Picture1.Line (8600 + fen1 * 30, 400)-(8600 + fen1 * 30, 6400)
    Picture1.Line (9500 + fen1 * 30, 400)-(9500 + fen1 * 30, 6400)
    If 10400 + fen1 * 30 < 11300 Then
        Picture1.Line (10400 + fen1 * 30, 400)-(10400 + fen1 * 30, 6400)
    End If
    If 11300 + fen1 * 30 < 11300 Then
        Picture1.Line (11300 + fen1 * 30, 400)-(11300 + fen1 * 30, 6400)
    End If
    '显示记录
    Picture1.ForeColor = vbYellow
    For j = 0 To 359
        Picture1.Line (j * 30 + 500, record(0, j) + 3395)-(j * 30 + 502, record(0, j) + 3405), vbRed, BF
        Picture1.Line (j * 30 + 500, record(1, j) + 3395)-(j * 30 + 502, record(1, j) + 3405), QBColor(7), BF
        Picture1.Line (j * 30 + 500, record(2, j) + 3395)-(j * 30 + 502, record(2, j) + 3405), vbWhite, BF
        Picture1.Line (j * 30 + 500, record(3, j) + 3395)-(j * 30 + 502, record(3, j) + 3405), vbYellow, BF
        Picture1.Line (j * 30 + 500, record(4, j) + 3395)-(j * 30 + 502, record(4, j) + 3405), vbGreen, BF
        If record(5, j) / -30 < 10 Then
            wy_wy = -0 + 166.7
            br_br = 5.5556
        ElseIf record(5, j) / -30 >= 10 And record(5, j) / -30 < 100 Then
            wy_wy = -1500 + 166.7
            br_br = 0.5555
        ElseIf record(5, j) / -30 >= 100 And record(5, j) / -30 < 1000 Then
            wy_wy = -3000 + 166.7
            br_br = 0.055555
        ElseIf record(5, j) / -30 >= 1000 And record(5, j) / -30 < 10000 Then
            wy_wy = -4500 + 166.7
            br_br = 0.0055555
        End If
        Picture1.Line (j * 30 + 500, record(5, j) * br_br + wy_wy + 3395 + 3000)-(j * 30 + 502, record(5, j) * br_br + wy_wy + 3405 + 3000), QBColor(11), BF
    Next j
    Picture1.Refresh
End Sub

上述Line曲线方法代码可很方便移植为Pset方法绘制曲线。

匿名用户
2014-03-25
展开全部
使用PictureBox的Line方法 以Scale区间定位 实时数据连续滚动曲线可以使用两个PictureBox轮番交替
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
syx54
推荐于2016-11-02 · TA获得超过7378个赞
知道大有可为答主
回答量:6567
采纳率:83%
帮助的人:2667万
展开全部
在VB6里可以在两种对象上绘制图形,一个是窗体,另一个是PicTureBox ,它们都有Pset 等方法
Pset方法是绘制点,
格式:
对象.Pset (x,y)
其中:x,y 点的坐标,
理论上,点的集合构成线。
把一个一个实数对,绘制出来,就构成了曲线。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2014-03-26
展开全部
用timer 和line 就行了,每采集一个数据就画一张picture
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2014-03-26
展开全部
picture控件画图啦
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式