采用的波特率是115200,利用虚拟串口的时候,从另外一个串口发过来的数据可以完整的接收,没有一点问题。但是和真实的硬件设备连上去的时候,只能接受到个别几个字节的数据( 硬件发过来的的数据大约有120个字节左右。)
————————————————————————————————————————————
串口初始化的代码如下:
'按下按键打开串口
Private Sub Command10_Click()  
  MSComm1.CommPort = PortNo
  MSComm1.Settings = BTL & ",n,8,1"
  MSComm1.InputMode = comInputModeBinary
  MSComm1.InBufferCount = 0
  MSComm1.OutBufferCount = 0
  MSComm1.RThreshold = 1
  MSComm1.PortOpen = True
 ' Shape1.FillColor = &H80000003
  Shape1.FillColor = &HC000C0
  com_flag = 1 
  If MSComm1.PortOpen = True Then
     Label15.Caption = "串口已打开"
  End If
End Sub串口接收代码如下:
Private Sub MSComm1_OnComm()
Hextext.Text = ""
Dim InputLen As Integer  '返回byte数组的长度
Dim result As String
Dim i As Integer
Select Case MSComm1.CommEvent
  Case comEvReceive
  InputLen = MSComm1.InBufferCount
  ReDim receivedbyte(InputLen)           '重新定义数组大小
  
  receivedbyte() = MSComm1.Input
  
  For i = 0 To UBound(receivedbyte) - 1  'Ubound()返回数组的大小
  
    If Len(Hex(receivedbyte(i))) = 1 Then    
     '转换为十六进制文本缺位的补0+空格,
     result = result & "0" & Hex(receivedbyte(i)) & " "     
    Else      
      '转换为十六进制文本+空格,
     result = result & Hex(receivedbyte(i)) & " "
   End If  
  Next i
    
 End Select
   
 '串口返回数据显示为十六进制的文本
 Hextext.Text = result————————————————————————————————————————

解决方案 »

  1.   


    实际发送数据比较慢,所以无法一次收完,所以需要接收等待一个时间。
    在OnComm事件Case comEvReceive 处加添加类似下面这样的代码     Dim T As Single,BytesReceived As Integer
    ‘  
    Case comEvReceive
        'InputLen = MSComm1.InBufferCount ‘这行不要
        InputLen = 0
        T = Timer
        Do
            If InputLen = MSComm1.InBufferSize Then Exit Do
            InputLen = MSComm1.InBufferSize
        Loop Until Abs(1000 * (Timer - T)) > 100 '定义超时时间100ms 根据实际情况可以调大或者调小等待时间
        ReDim receivedbyte(InputLen)           '重新定义数组大小
        receivedbyte() = MSComm1.Input
    ’