开始是先发6个字节的命令出去,返回来最多是一个一串118个字节的数据或是8个字节的接受正确命令.我的做法是在收到的内容中插找是哪种命令来决定发出去什么东西,现在是在接收的串口中,一开始只接受8个字节的内容,从而无法接收完整的数据.还有什么地方可以更改串口设置?
   MSComm1.CommPort = 1
   MSComm1.Settings = "9600,N,8,1" 
   MSComm1.InputMode = comInputModeBinary 
   MSComm1.RThreshold = 1 '
   MSComm1.SThreshold = 1 
   MSComm1.InputLen = 0
   MSComm1.PortOpen = True串口接受我是这样写的:
Private Sub MSComm1_OnComm()
'...通讯事件发生
Dim bytInfo() As Byte
Dim varTmp As Variant
Dim 读取 As String
Dim buf() As Byte
Dim tmp As String, 校检1tmp As String, 校检2tmp As String    '存放临时收到的数据
Dim X As Integer, i As Integer
  
  Select Case MSComm1.CommEvent
    Case MSComm1.CommEvent
        varTmp = MSComm1.Input '.....
        bytInfo() = varTmp 
         For K = 0 To UBound(bytInfo)
        tmp = tmp & Right(Hex(bytInfo(K)), 2)
        Next
        Debug.Print tmp
          If Mid(tmp, 3, 2) = "C6" Then     '如果字符中有c6延时10ms
          MSComm1.RThreshold = 0             '屏蔽OnComm事件
            Sleep 120
          MSComm1.RThreshold = 1
        End If
        If InStr(tmp, "B") > 0 Then '检查接受到的数据是否到BB结束字符号
           fag = True              
           读取 = Left(tmp, InStr(tmp, "B") + 1)
           校检1tmp = Mid(读取, Len(读取) - 5, 2) 
           校检2tmp = Mid(读取, Len(读取) - 3, 2) 
          读取 = Right(读取, Len(读取) - 2) 
           读取 = Left(读取, Len(读取) - 6)  
           tmp = Mid(读取, 1, 2)            
           If tmp = "C1" Then     '是连接命令
              X = 1
              校检1 = ""      
                校检2 = ""
              Call 校检(读取)             '校检接收到的是否正确
              If 校检1tmp = 校检1 And 校检2tmp = 校检2 Then      
                 读取 = "d10200012a"   '接收正确,发送对应的硬件版本号
                 Call 校检(读取)
                 Call 发送(读取, X)
              End If
           ElseIf tmp = "C7" Then  
              X = 2
              校检1 = ""                  
              校检2 = ""
              读取 = ""
              For h = 0 To UBound(文本数据)     
                  读取 = 读取 & 文本数据(h)
              Next
              读取 = "D7" & 读取 & "2A"
              'Call 校检(读取)             '校检接收到的是否正确
              Call 数字转换(读取, X)
              Call 发送(读取, X)
           ElseIf tmp = "C6" Then    '发送写入下位机数据
              X = 1
              校检1 = ""   
              校检2 = ""
              Call 校检(读取)
              If 校检1tmp = 校检1 And 校检2tmp = 校检2 Then     
                 'Debug.Print 读取
                 读取 = Right(读取, Len(读取) - 2)               '去掉命令自符C6
                 读取 = (Left(读取, Len(读取) - 2))                '去掉校检和标志符
                 Debug.Print 读取   '在这里看收到的内容分成了两不分,先是收了一个8字的的数据然后再收的是后面的100个数据,并不是合成为118个的数据包,求问我是哪里设置错了还是哪里写错了?
                 tmp = ""
                 'Debug.Print 读取
                 For i = 1 To Len(读取)
                     tmp = tmp & Val(Mid(读取, (i * 2 + 1), 2) - 30)
                 Next
                 For i = 0 To 27
                     文本数据临时(i) = Mid(读取, (i * 4 + 1), 4)
                 Next
              End If
           End If
        End If
  End Select
End Sub