我用串口接收数据,通信开始后在没有任何干扰的情况下数据会一直正确,但是当我运行其他程序,甚至剧烈晃动鼠标或者点击一个按钮,就会数据出错!在已知波特率、奇偶校验、数据位、停止位等设置没有错误的情况下,请问这是什么问题?
注:我的数据是以一个字节一个字节的方式从下位机向上位机发送,当满20个字节为一帧,将一帧数据做一个校验来判断其对错,如果数据正确再接收下一帧,不正确便提示出错!

解决方案 »

  1.   

    给你一点建议:
    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