VB读取串口的程序,不知道什么错误,老实现不了

来源:百度知道 编辑:UC知道 时间:2024/06/07 14:53:12
有单片机固定向计算机发送这样的数据W+32位数据,我是这样想的,设定接受长度为1,判断是否为W,为W则把接收长度改为32,这样就能就收剩下的32位数据,然后再把接收长度改回1,等待下一个W的到来,下面是我的程序,测试可以接受到W,但是剩下的32字节无法收到。
Dim re As String
Dim restr As String
Private Sub Form_Load()
If MSComm1.PortOpen Then
MSComm1.PortOpen = False
End If
MSComm1.CommPort = 2
MSComm1.Settings = "4800,N,8,1"
MSComm1.InputLen = 1
MSComm1.RThreshold = 1
MSComm1.PortOpen = True
End Sub

Private Sub MSComm1_OnComm()
On Error Resume Next
If MSComm1.InputLen = 1 Then
re = MSComm1.Input
If re = "W" Then
MSComm1.Input = 32
MSComm1.RThreshold = 32
End If
Else
restr = MSComm1.Input
Label1.Caption = restr
MSComm1.Input = 1
MSComm1.RThreshold = 1
End If
End Sub
我觉得问题不在这里,就算有数据被覆盖,但是我发送回来的不只一组,而是连续的n组数据,中间大概1秒间隔,但是我除了第一个W收到外,其他什么都没有

问题应该出现在MSComm1.InputLen = 1 ,每次只读进来1个字符
修改为如下试试:
Private Sub MSComm1_OnComm()
On Error Resume Next
If MSComm1.InputLen = 1 Then
re = MSComm1.Input
If re = "W" Then
'MSComm1.Input = 32 '语句错误了吧?
'修改为:
mscomm1.inputlen=32
MSComm1.RThreshold = 32
End If
Else
restr = MSComm1.Input
Label1.Caption = restr
'MSComm1.Input = 1 '这个语句干什么?错误了吧?!
mscomm1.inputlen=1
MSComm1.RThreshold = 1
End If
End Sub

这样肯定出错。因为串口接收和发送数据速度很快,所以应该先将数据一次性接收到缓冲区,然后判断。才不至于本次数据被下次数据覆盖。