我这有一段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
回复:VB 作实时数据采集曲线
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
回复:VB 作实时数据采集曲线
烦劳楼上的详细讲讲好吗,多谢多谢了!!!!!!!!!!!
回复:VB 作实时数据采集曲线
right函数后加$是什么意思?
我看好多函数后都加$
回复:VB 作实时数据采集曲线
"$" 为与 ms basica 兼容,不要也可以
回复:VB 作实时数据采集曲线
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个字节吗?
回复:VB 作实时数据采集曲线
看 Val() 的说明
回复:VB 作实时数据采集曲线
很简单的东西 ,仔细看下vb就知道了。
回复:VB 作实时数据采集曲线
实在看不懂,我太笨了~~!!
回复:VB 作实时数据采集曲线
它能否像示波器一样显示出来???
回复:VB 作实时数据采集曲线
buffer = buffer & right$(Hex(&h100+Inbyte(i)), 2) & " "
换成c语言就是
buffer+= (右两位of Hex(&h100+Inbyte(i)) )后面加了个空格。
buffer出来应该是 “00 01 25 44 77”这样的字符串。
回复:VB 作实时数据采集曲线
val那句就是取值。&H来看,还是16位的。其实10位,16位画出高度来都一样。转换的话没什么意义。