打印

VB 作实时数据采集曲线

[复制链接]
4251|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

相关帖子

来自 2楼
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函数后加$是什么意思?
我看好多函数后都加$

使用特权

评论回复
5
dengm| | 2007-6-25 14:27 | 只看该作者

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

使用特权

评论回复
6
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个字节吗?

使用特权

评论回复
7
rockzone|  楼主 | 2007-6-25 20:59 | 只看该作者

D

没人会吗

使用特权

评论回复
8
dengm| | 2007-6-26 13:31 | 只看该作者

看 Val() 的说明

使用特权

评论回复
9
jxyhome| | 2007-6-26 13:41 | 只看该作者

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

使用特权

评论回复
10
rockzone|  楼主 | 2007-6-26 20:36 | 只看该作者

aaaa

实在看不懂,我太笨了~~!!

使用特权

评论回复
11
xzhenggen| | 2007-6-27 08:36 | 只看该作者

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

它能否像示波器一样显示出来???

使用特权

评论回复
12
HotPower| | 2007-6-28 01:07 | 只看该作者

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

使用特权

评论回复
13
turmary| | 2007-6-28 01:49 | 只看该作者

$

$表这个函数的返回值是String类型.

使用特权

评论回复
14
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 "



使用特权

评论回复
15
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

使用特权

评论回复
16
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

使用特权

评论回复
17
yikuang2012| | 2012-5-18 22:27 | 只看该作者
学习!

使用特权

评论回复
18
yikuang2012| | 2012-5-25 21:17 | 只看该作者
顶一下,谢谢楼主

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

69

主题

807

帖子

4

粉丝