本人用mscomm与下位机进行通信,现遇到一个怪现象:
收到的数据一会正常,一会乱码,而且是周期性的
乱码的时候出现?,就是奇偶校验错误,也有其他乱码
我设定的每次收的数据是14字节,但经常会出现28字节乱码一起来,意味着没有收到回车符
这种现象哪位大侠遇到过,急盼指教,谢谢

解决方案 »

  1.   

    你可以通过设置触发mscomm控件的字节数来决定触发mscomm的oncomm事件,进入后可以先关闭下一个oncomm事件的触发,处理完毕后再打开触发即可
      

  2.   

    试着改变你的InputMode 属性
    comInputModeText 0 (缺省)数据通过 Input 属性以文本形式取回。 
    comInputModeBinary 1 数据通过 Input 属性以二进制形式取回。 
      

  3.   

    MSCOMM控件在接收8字长或其倍数时出错概率低,字长在外的经常会有出错,可在接收代码中用
    IF   THEN
    ENDIF
    语句来判断:
                MSComm1.InputMode = comInputModeText '按ASCII接收
                intInputLen = MSComm1.InBufferCount
                ReDim bytInput(intInputLen)
                bytInput = MSComm1.Input
                Text1 = bytInput
                Text2 = Text1
                jscd = Len(Text1)
                If Left(Text1, 1) <> Chr(27) Or jscd > 14 Then 
                    frmMain.Label.BackColor = vbRed
                    frmMain.Label.ForeColor = vbWhite
                    frmMain.Label.Caption = "接收信号出错!"
                ElseIf Left(Text2, 1) = Chr(27) And Mid(Text2, 14, 1) = Chr(13) Then
                    frmMain.Label.BackColor = vbGreen
                    frmMain.Label.ForeColor = vbBlack
                    frmMain.Label.Caption = "接收信号正常!"
                    If Left(Text2, 1) = Chr(27) And jscd = 14 Then
                        '插入数据处理代码
                    End If
                End If
    将上述代码按你的接收命令格式修改后,放于MSCOMM的MSComm1_OnComm事件的代码中.
      

  4.   

    在MSCOMM控件所在窗体的初始化中执行MSComm1.RThreshold = 14
      

  5.   

    Do  With MSComm1
      data = ""
       Do
          Do
            DoEvents
          Loop Until .InBufferCount > 0 '循环等待接收缓冲区>=3个字节
       data = data & .Input
       buffer = data
       Loop Until buffer(UBound(buffer())) = &H2A
    BufBound = UBound(buffer())
    'sTem1 = ""
    For i = 0 To BufBound '这个大家应该清楚吧,最高位,也就是收到的数据的长度赋值给I
    'ReDim stem(UBound(buffer)) As String
    'stem2 = stem2 & Right("00" & Hex(buffer(i)), 2) '缓存里每两位取出来,并且以“十六进制”的形式加进stem2
    'sTem1 = sTem1 & Chr(buffer(i)) '每个字符以字符串的形式加进STEM1
    Next i
     End WithWhile BufBound >= 9If BufBound >= 8 Then  If buffer(BufBound - 8) = &H2 Then
      i = buffer(BufBound - 7)
       
          Sampled(i) = True
         ' Enable(i) = True
             MapBuffer = buffer()
          BufBound = BufBound - 10
      End If
    End IfIf BufBound >= 12 Then
      If buffer(BufBound - 12) = &H4 Then
      
      For i = 1 To 9
          If buffer(BufBound - i) = &HFE Then
             Enable(10 - i) = False
          Else
             Enable(10 - i) = True
          End If
      Next
        
             MapBuffer = buffer()
       Frmjiankong.Draw
       BufBound = BufBound - 14
       End If
    End IfWendLoop Until MSComm1.PortOpen = False
    呵呵
    这是我接收硬件的数据
    因为数据有2中格式。一种是12位16进制书,一种是14位16进制书