现有一个设备,源源不断的往COM1上送数据:数据格式如下:
一个数据字包括2个字节(高字节和底字节)
高8位(二进制): ********
底8位(二进制): ########问题:现在我从VB程序中通过MSCOMM控件发指令读某一时刻的数据,请问我如何才能正确的将数据读到呀?? 最后要保存为double 或者float类型?
没有用过MSCOMM控件,请多指点!!
一个数据字包括2个字节(高字节和底字节)
高8位(二进制): ********
底8位(二进制): ########问题:现在我从VB程序中通过MSCOMM控件发指令读某一时刻的数据,请问我如何才能正确的将数据读到呀?? 最后要保存为double 或者float类型?
没有用过MSCOMM控件,请多指点!!
而我现在就是要间断的从串口读取传感器发送回来的数据,而且还要正确的读取!传感器发送数据的格式就是:
一个数据字包括2个字节(高字节和底字节)
高8位(二进制): ********
底8位(二进制): ########
即:********########********########********########********########
你想读取时,先清输入缓冲区,再去读取,读到数据结束符后,再读取下一个数据,第二个数据肯定是正确的。
也可以多读取一些数据,把buff里的数据全读出来在取平均数(当然是短时间内,距离变化太快就不成了)。
其中你要知道高位和低位的判断,也就是之间的一种协议要自己搞清。
然后你可以这样做:在MSCOMM控件的OnComm事件中写代码,当COM口接收到数据的时候会触发这个事件。
Private Sub Com1_OnComm()
Dim Temp as String '是字符型没错
If Com1.CommEvent=comEvReceive Then
Temp = Com1.Input '这里你已经接收到了来自COM口的数据
'这里你需要把你接收到的16进制的字符串转化为你需要的10进制数字,
'这个代码我就不写了。
End If
End Sub
具体的问题请自己参考一下MSDN吧,里面有例程。这里实在是说不清。
请问各位高手,有没有这部分的源程序供参考呀?
sub Form_load()
With Com1
If .PortOpen Then .PortOpen = False '先关闭端口
.CommPort = 1 '使用com1
.InputMode = comInputModeText '使用文本模式传送
.Settings = "9600,n,8,1" '设置波特率等
.Handshaking = 0 '设置握手方式
.InBufferCount = 0 '清空接受缓存
.PortOpen = True '打开端口
End With
End sub
照着用就是了,把串口号、波特率、传送模式和握手方式改成你要用的
Dim data As String
Select Case MSComm1.CommEvent
Case comEvReceive
word = Trim(MSComm1.Input) + word
If Len(word) < 10 Then
GoTo error
Else
StatusBar1.Panels(3).text = Left(word, 30)
po = InStr(1, word, "//")
data = Mid(word, po + 2, 36)
information(0) = Left(data, 2)
information(1) = "20" & Mid(data, 3, 6)
information(2) = Mid(data, 9, 6)
information(3) = Mid(data, 15, 4)
information(4) = Mid(data, 19, 4)
information(5) = Mid(data, 23, 4)
information(6) = Mid(data, 27, 4)
information(7) = Mid(data, 31, 4)
Form3.Text1.text = information(1) & information(2) & information(3) & information(4)
End If
End Select
error:
Exit Sub
俺的一個小程序. 是以//開始的.供參考