vb comm口通讯问题?

来源:百度知道 编辑:UC知道 时间:2024/09/28 08:08:53
Option Explicit
Dim inData As String
Dim a() As Byte

Private Sub Form_Load()
MSComm1.Settings = "9600,n,8,1"
MSComm1.RThreshold = 1
MSComm1.InputMode = comInputModeBinary '二进制接收
MSComm1.PortOpen = True
End Sub

Private Sub MsComm1_OnComm()
Dim intInputLen As Integer
Dim i As Integer
Select Case MSComm1.CommEvent
Case comEvReceive
'此处添加处理接收的代码
intInputLen = MSComm1.InBufferCount
ReDim a(intInputLen)
a = MSComm1.Input
For i = 0 To UBound(a)
If Len(Hex(a(i))) = 1 Then
inData = inData & "0" & Hex(a(i))
Else
inData = inData & Hex(a(i))
End If
Next
Text2 = inData
End Select
End Sub

问题:既然MSComm1.RThreshold = 1 ,那么每接收一个字节就触发一次oncomm事件,那intInputLen = MSComm1.InBufferCount ,intInputLen不是应该等于1吗?a = MSComm1.Input ,.input不应该也是一个字节吗?那么UBound(a) 不就是0吗?只有a(0)里有数据,应该是8位2进制吧? 那么为什么inData里是很多个字符

MSComm1.RThreshold 这个一般不用设置也行,这是我接收的代码(二进制和文本模式都可以收到)

Dim byt() As Byte, HexTxt As String
comData = MSComm1.Input
Text1.SelStart = Len(Text1.Text)
Text1.SelText = "{收到数据}" & vbCrLf & comData & vbCrLf

byt = comData
For N = 0 To UBound(byt)
If N Mod 16 = 15 Then HexTxt = HexTxt & " " & vbCrLf
HexTxt = HexTxt & Right("00" & Hex(byt(N)), 2) & " "
Next
Text2.SelStart = Len(Text2.Text)
Text2.SelText = "{收到数据}" & vbCrLf & Trim(HexTxt) & vbCrLf