看到源代码了,但是order数组的内容是什么,变量的类型是什么,详细点

解决方案 »

  1.   

    MSComm1.RThreshold = 42
    使数据全部到达后再开始校验。
      

  2.   

    '一条命令42字节,分几次读入,命令的开头&He7,第二位&Ha0或者&ha1.Private Sub MSComm_OnComm()
    Dim max As Variant
    Dim foo As Variant
    Dim serial As Variant   '当前包号
    Dim sum As Variant
    'On Error GoTo Mscomm2Error
        InByte = MSComm2.Input
        '屏蔽空信号
        If UBound(InByte) = -1 Then
            Exit Sub
        End If    If readstart = True Then   '判断是否命令的开头
            If Not InByte(0) = &HE7 Then  '检验起使位是否为E7
                '放弃
                MessageBox 0&, "前导码错,退出", "IDMS", &H0&
                Call Cancel1            Exit Sub        End If
            If Not (InByte(1) = &HA0 Or InByte(1) = &HA1) Then    '检验数据流向位是否为A0或A1
                 '放弃
                 MessageBox 0&, "数据流向错,退出", "IDMS", &H0&
                Call Cancel1            Exit Sub
            End If        max = UBound(InByte)
            ReDim order(0 To max)
            order = InByte
            readstart = False
        Else
             '合并数组order()与inbyte()
            foo = UBound(order)
            max = foo + UBound(InByte) + 1
            ReDim Preserve order(max)
            For I = LBound(InByte) To UBound(InByte)            order(foo + 1 + I) = InByte(I)
            Next I
     
            If UBound(order) >= 41 Then  '命令完整读入
                 '检查效验和
                sum = 0
                For I = 0 To (40)
                    sum = sum + order(I)
                Next I
                I = 0
                sum = Hex(sum And 255)
                If Not Hex(order(41)) = sum Then
                    '需要扩充放弃
                     MessageBox 0&, "校验和错,退出", "IDMS", &H0&                Call Cancel1            End If            readstart = True            
                    serial = order(11) * 16 * 16 + order(12)
                    If Not serial = Num + 1 Then
                    '放弃
                        MessageBox 0&, "包号不连续,退出", "IDMS", &H0&                    Call Cancel1                End If
                    Num = serial                '调用命令处理过程                Call Perform(order)
                End If
      

  3.   

    of123()
    命令不一定会一直是42个字节,其他类型的命令长度不定呀
        MSComm.CommPort = 1
        MSComm.RThreshold = 1
        MSComm.InputLen = 0
        MSComm.PortOpen = True
        MSComm.InBufferCount = 0
    这是我打开串口的代码
      

  4.   

    但是order数组的内容是什么,变量的类型是什么,详细点
    inbyte()字节数组,将输入缓存区的内容读入到数组
    order()字节数组,存储inbyte(_)读出的数据直到命令完整读出.
    sum 是Variant型
    我觉得原因不应该是数据类型的问题呀,因为单步执行的话一点问题都没有,不知道有没有朋友遇到过类似的情况
      

  5.   

    以前碰到过因为触发不同事件或是时间延迟导致设断点和不设断点结果不一致
    建议用Debug.Print 来查看数据,不要设断点
      

  6.   

    你的这段代码是放在MSComm_OnComm的哪一个事件中?你的42位数据中间间隔多久发另一串的?另外你的这种情况象是数据没有接收完全或是接收出错了,你试试用TIMER定时器来接收数据。