VB 作实时数据采集曲线

[复制链接]
5430|17
 楼主| rockzone 发表于 2007-6-25 13:03 | 显示全部楼层 |阅读模式
我这有一段VB程序是为了画实时采集曲线的。

软件编程我不行,如果大家有看得懂得,请帮我看看。

程序不多

Private Sub MSComm1_OnComm()
  Dim Inbyte() As Byte
  Dim buffer As String
  Dim datatemp(1000) As Single 
  If num > 199 Then Call renew    '刷新绘图区
  '读取仪表返回数据串
  Select Case MSComm1.CommEvent
    Case comEvReceive
      Inbyte = MSComm1.Input'这地方看不懂,数组可以这样赋值吗?
      
      For i = LBound(Inbyte) To UBound(Inbyte)
        buffer = buffer + Hex(Inbyte(i)) + Chr(32)
 'for语句也没看懂,尤其是buffer这赋的是什么值?
      Next i
    Case comEvSend
  End Select
  '获取十进制测量数据
  ’这下面的又是没看懂,应该是将十六进制转换为十进制,怎么转换的呢?
  If Len(Trim(Mid(buffer, 1, 2))) = 1 Then
    datatemp(num) = Val("&H" & Mid(buffer, 3, 2) & Str("0") & Mid(buffer, 1, 2)) * 0.01
  Else
    datatemp(num) = Val("&H" & Mid(buffer, 3, 2) & Mid(buffer, 1, 2)) * 0.01

  End If


‘绘制曲线
Private Sub draw()
  Picture1.Cls
  Picture1.DrawWidth = 2
  Picture1.BackColor = QBColor(7)
’下面的程序我看不懂,用的是什么原理画的曲线呢?
  Picture1.Scale (0, 50)-(200, 0)
  For i = 1 To num - 1
    X1 = (i - 1): Y1 = datatemp(i - 1)
    X2 = i: Y2 = datatemp(i)
    Picture1.Line (X1, Y1)-(X2, Y2), QBColor(1)
  Next i

End Sub
dengm 发表于 2007-6-25 13:24 | 显示全部楼层

re:

Private Sub MSComm1_OnComm()
  Dim Inbyte() As Byte
  Dim buffer As String
  Dim datatemp(1000) As Single   
 '**** 最好定义为: STATIC datatemp!(1000)

  If num > 199 Then Call renew    '刷新绘图区
  '读取仪表返回数据串
  Select Case MSComm1.CommEvent
    Case comEvReceive
      Inbyte = MSComm1.Input'这地方看不懂,数组可以这样赋值吗?
'**** 动态字节数组可以,i.e.  Inbyte = "abcdefg"
      
      For i = LBound(Inbyte) To UBound(Inbyte)
        buffer = buffer + Hex(Inbyte(i)) + Chr(32) 'for语句也没看懂,
尤其是buffer这赋的是什么值?
'**** 应为  buffer = buffer & right$(Hex(&h100+Inbyte(i)), 2) & " "

      Next i
    Case comEvSend
  End Select
  '获取十进制测量数据
  ’这下面的又是没看懂,应该是将十六进制转换为十进制,怎么转换的呢?
    datatemp(num) = Val("&H" & Mid(buffer, 3, 2) & Mid(buffer, 1, 2)) * 0.01

‘绘制曲线
Private Sub draw()
  Picture1.Cls
  Picture1.DrawWidth = 2
  Picture1.BackColor = QBColor(7)
’下面的程序我看不懂,用的是什么原理画的曲线呢?
  Picture1.Scale (0, 50)-(200, 0)  
'**** 定坐标系统
  For i = 1 To num - 1
    X1 = (i - 1): Y1 = datatemp(i - 1)
    X2 = i: Y2 = datatemp(i)
    Picture1.Line (X1, Y1)-(X2, Y2), QBColor(1)
'*** 画线
  Next i
End Sub
 楼主| rockzone 发表于 2007-6-25 13:43 | 显示全部楼层

烦劳楼上的详细讲讲好吗,多谢多谢了!!!!!!!!!

烦劳楼上的详细讲讲好吗,多谢多谢了!!!!!!!!!!!
 楼主| rockzone 发表于 2007-6-25 14:20 | 显示全部楼层

?????

right函数后加$是什么意思?
我看好多函数后都加$
dengm 发表于 2007-6-25 14:27 | 显示全部楼层

"$" 为与 ms basica 兼容,不要也可以

 楼主| rockzone 发表于 2007-6-25 14:42 | 显示全部楼层

疑问

buffer = buffer & right$(Hex(&h100+Inbyte(i)), 2) & " "

这条语句的意思是什么?


If Len(Trim(Mid(buffer, 1, 2))) = 1 Then
    datatemp(num) = Val("&H" & Mid(buffer, 3, 2) & Str("0") & Mid(buffer, 1, 2)) * 0.01
  Else
    datatemp(num) = Val("&H" & Mid(buffer, 3, 2) & Mid(buffer, 1, 2)) * 0.01
  End If

这是用什么方法将16进制转成10进制的数。

还有,我从AD7705里采集进来的数是2个字节,通过串口发到计算机中,这两个字节的数,我用VB怎么处理呢,上面的程序能处理2个字节吗?
 楼主| rockzone 发表于 2007-6-25 20:59 | 显示全部楼层

D

没人会吗
dengm 发表于 2007-6-26 13:31 | 显示全部楼层

看 Val() 的说明

jxyhome 发表于 2007-6-26 13:41 | 显示全部楼层

很简单的东西 ,仔细看下vb就知道了。

 楼主| rockzone 发表于 2007-6-26 20:36 | 显示全部楼层

aaaa

实在看不懂,我太笨了~~!!
xzhenggen 发表于 2007-6-27 08:36 | 显示全部楼层

VB 能有作实时数据采集曲线吗?

它能否像示波器一样显示出来???
HotPower 发表于 2007-6-28 01:07 | 显示全部楼层

这些玩意用CVI或LV是最好不过的了~~~用VB累死人了~~~

turmary 发表于 2007-6-28 01:49 | 显示全部楼层

$

$表这个函数的返回值是String类型.
turmary 发表于 2007-6-28 01:56 | 显示全部楼层

buffer

buffer = buffer & right$(Hex(&h100+Inbyte(i)), 2) & " "

意思是
将Inbyte(i)转换成2位的16进制字符串并且加上空格加到buffer末尾
如buffer 为"12 "
Inbyte(i)为34
执行后buffer为"12 34 "



turmary 发表于 2007-6-28 02:06 | 显示全部楼层

If


If Len(Trim(Mid(buffer, 1, 2))) = 1 Then
    datatemp(num) = Val("&H" & Mid(buffer, 3, 2) & Str("0") & Mid(buffer, 1, 2)) * 0.01
  Else
    datatemp(num) = Val("&H" & Mid(buffer, 3, 2) & Mid(buffer, 1, 2)) * 0.01
  End If

如果buffer开头两个字符中有一个空格的话 条件为真
如buffer="1 13"
datatemp(num) 则为&H1301 * 0.01
条件为假的
buffer="1234"
datatemp(num) 为&H3412 * 0.01
dengm 发表于 2007-6-28 12:40 | 显示全部楼层

VB 是“快速开发语言”,还是很好用的。

  Dim Inbyte() As Byte
  Dim datatemp(1000) As Single 
  DIM NUM%

Private Sub MSComm1_OnComm()
  If num > 199 Then Call renew    '刷新绘图区
  '读取仪表返回数据串
  IF MSComm1.CommEvent = comEvReceive THEN
     Inbyte = MSComm1.Input'这地方看不懂,数组可以这样赋值吗?
                       '获取十进制测量数据
     datatemp(num) = (INBYTE(0)+INBYTE(1) * 256!)*0.01
     NUM = NUM + 1  
  ENDIF
  

‘绘制曲线
Private Sub draw()
  Picture1.Cls
  Picture1.DrawWidth = 2
  Picture1.BackColor = QBColor(7)
’下面的程序我看不懂,用的是什么原理画的曲线呢?
  Picture1.Scale (0, 50)-(200, 0)
  For i = 0 To num - 1
    X1 = (i - 1): Y1 = datatemp(i - 1)
    X2 = i: Y2 = datatemp(i)
    Picture1.Line (X1, Y1)-(X2, Y2), QBColor(1)
  Next i
End Sub

yikuang2012 发表于 2012-5-18 22:27 | 显示全部楼层
学习!
yikuang2012 发表于 2012-5-25 21:17 | 显示全部楼层
顶一下,谢谢楼主
您需要登录后才可以回帖 登录 | 注册

本版积分规则

69

主题

812

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部