我用串口接收数据,通信开始后在没有任何干扰的情况下数据会一直正确,但是当我运行其他程序,甚至剧烈晃动鼠标或者点击一个按钮,就会数据出错!在已知波特率、奇偶校验、数据位、停止位等设置没有错误的情况下,请问这是什么问题?
注:我的数据是以一个字节一个字节的方式从下位机向上位机发送,当满20个字节为一帧,将一帧数据做一个校验来判断其对错,如果数据正确再接收下一帧,不正确便提示出错!
注:我的数据是以一个字节一个字节的方式从下位机向上位机发送,当满20个字节为一帧,将一帧数据做一个校验来判断其对错,如果数据正确再接收下一帧,不正确便提示出错!
1 要么就开辟一个足够大的缓冲区,能够容纳下位机一次发送的所有字节。2 要么就修改协议,下位机发送 1 帧后,等待 PC 校验正确后返回应答再继续发送。 PC 在返回应答并接收下一帧前清空缓冲区。假设你的帧无帧头,数据字节 20 个,校验字节 1 个,采用简单的异或校验:
Private Sub Form_Load()
'......
MSComm1.RThreshold = 21
MSComm1.InputMode = comInputModeBinary
'......
End SubPrivate Sub MSComm1_OnComm()
Dim i As Integer, arr() As byte, x As Variant, EDC As Byte
If MSComm1.CommEvent = comEvReceive
x = MSComm1.Input
MSComm1.InBufferCount = 0
arr = x
For i = 0 To Ubound(arr)
EDC = EDC Xor arr(i)
Next i
If EDC = 0 Then
MSComm1.Output ...... '发送你的协议应答以继续接收
Else
MSComm1.Output ...... '发送你的协议应答以重发或停止
End If
End If
End Sub