采用的波特率是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————————————————————————————————————————
————————————————————————————————————————————
串口初始化的代码如下:
'按下按键打开串口
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————————————————————————————————————————
实际发送数据比较慢,所以无法一次收完,所以需要接收等待一个时间。
在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
’