使用comdebeger V1.0软件接收到232串口的数据为:
AB 01 EE 01 AD 10 15 AD 00 00 00 00 02 00 00 00 即16个16进制数
使用VB6中MScom控件自己编写的串口调试程序接收到的的数据为:
AB 01 EE 01 AD 10 15 AD 00 00 00 00 02
AB 01 EE 02 AD 10 15 AD 00 00 00
AB 01 EE 03 AD 10 15 AD 00 00 00 00
这是为什么?怎么能让自己编写的调试程序能接收到上面格式的数据(即16个16进制数)
AB 01 EE 01 AD 10 15 AD 00 00 00 00 02 00 00 00 即16个16进制数
使用VB6中MScom控件自己编写的串口调试程序接收到的的数据为:
AB 01 EE 01 AD 10 15 AD 00 00 00 00 02
AB 01 EE 02 AD 10 15 AD 00 00 00
AB 01 EE 03 AD 10 15 AD 00 00 00 00
这是为什么?怎么能让自己编写的调试程序能接收到上面格式的数据(即16个16进制数)
MSComm1.RThreshold = 16
Dim strData As String
Dim BytReceived() As BytePrivate Sub Form_Load()
MSComm1.CommPort = 1 'COM端口
MSComm1.Settings = "9600,n,8,1"
MSComm1.InputMode = comInputModeBinary '采用二进制传输
MSComm1.InBufferCount = 0 '清空接受缓冲区
MSComm1.OutBufferCount = 0 '清空传输缓冲区
MSComm1.RThreshold = 1 '产生MSComm事件
MSComm1.InBufferSize = 1024
MSComm1.PortOpen = True
End SubPrivate Sub MSComm1_OnComm() '接收数据
Dim strBuff As String
Select Case MSComm1.CommEvent
Case 2
MSComm1.InputLen = 0
strBuff = MSComm1.Input
BytReceived() = strBuff
Dim i As Integer
'接收数据处理为16进制
For i = 0 To UBound(BytReceived)
If Len(Hex(BytReceived(i))) = 1 Then
strData = strData & "0" & Hex(BytReceived(i))
Else
strData = strData & Hex(BytReceived(i))
End If
Next
If Mid(strData, 1, 2) = "AB" And Len(strData) = 32 Then
Text1 = strData
strData = ""
End If
End Select
End Sub
Dim strData As String
Dim BytReceived() As BytePrivate Sub Form_Load()
MSComm1.CommPort = 1 'COM端口
MSComm1.Settings = "9600,n,8,1"
MSComm1.InputMode = comInputModeBinary '采用二进制传输
MSComm1.InBufferCount = 0 '清空接受缓冲区
MSComm1.OutBufferCount = 0 '清空传输缓冲区
MSComm1.RThreshold = 1 '产生MSComm事件
MSComm1.InBufferSize = 1024
MSComm1.PortOpen = True
End SubPrivate Sub MSComm1_OnComm() '接收数据
Dim strBuff As String
Select Case MSComm1.CommEvent
Case 2
MSComm1.InputLen = 0
strBuff = MSComm1.Input
BytReceived() = strBuff
Dim i As Integer
'接收数据处理为16进制
For i = 0 To UBound(BytReceived)
If Len(Hex(BytReceived(i))) = 1 Then
strData = strData & "0" & Hex(BytReceived(i)) & " "
Else
strData = strData & Hex(BytReceived(i)) & " "
End If
Next
If Mid(strData, 1, 2) = "AB" And Len(strData) = 48 Then
Text1 = strData
strData = ""
End If
End Select
End Sub
On Error GoTo ErrExit
MSComm1.CommPort = PortNo '采用COM端口
MSComm1.Settings = "9600,n,8,1"
MSComm1.InputMode = comInputModeBinary '采用二进制传输
MSComm1.InputLen = 0 '读取缓冲区全部内容
MSComm1.NullDiscard = False 'NULL字符从端口传送到接受缓冲区
MSComm1.DTREnable = False 'DTR线无效
MSComm1.EOFEnable = False '不寻找EOF符
MSComm1.RTSEnable = False 'RTS线无效
MSComm1.InBufferCount = 0 '清空接受缓冲区
MSComm1.OutBufferCount = 0 '清空传输缓冲区
MSComm1.SThreshold = 0 '不产生MSComm事件
MSComm1.RThreshold = 1 '收到一个字符就产生MSComm事件
MSComm1.InBufferSize = InBufferSize '接收缓冲区 默认为1024个字节
MSComm1.OutBufferSize = OutBufferSize '发送缓冲区 默认为512个字节
MSComm1.PortOpen = True '打开端口
OpenPort = 0
Exit Function
ErrExit:
OpenPort = 1
End FunctionPrivate Sub MSComm1_OnComm()
'------------------------------------------------
If MSComm1.CommEvent >= 1001 And MSComm1.CommEvent <= 1011 Then
Exit Sub
End If '----------------------------------------------------
Dim bytReceiveArray() As Byte '接收数据缓冲区
Dim VarReceiveData As Variant '接收的变体数据
Dim t As Integer
Dim i As Long '数据接收
If MSComm1.CommEvent = comEvReceive And MSComm1.InBufferCount >= 1 Then
'-------------------------------
t = MSComm1.InBufferCount
VarReceiveData = MSComm1.Input
ReDim bytReceiveArray(0) As Byte
bytReceiveArray = VarReceiveData
For i = 0 To t - 1
txtR.Text = txtR.Text & Hex(bytReceiveArray(i)) & " "
Next End If
'------------------------------------------------ Exit Sub '----------------
ToExit:
'Resume Next
End Sub
Private Sub MSComm1_OnComm()
If MSComm1.CommEvent >= 1001 And MSComm1.CommEvent <= 1011 Then
Exit Sub
End If
Dim bytReceiveArray() As Byte '接收数据缓冲区
Dim VarReceiveData As Variant '接收的变体数据
Dim t As Integer
Dim i As Long
'数据接收
If MSComm1.CommEvent = comEvReceive And MSComm1.InBufferCount >= 1 Then
t = MSComm1.InBufferCount
VarReceiveData = MSComm1.Input
ReDim bytReceiveArray(0) As Byte
bytReceiveArray = VarReceiveData
For i = 0 To t - 1
If Len(Hex(bytReceiveArray(i))) = 1 Then
txtr.Text = txtr.Text & "0" & Hex(bytReceiveArray(i)) & " "
Else
txtr.Text = txtr.Text & Hex(bytReceiveArray(i)) & " "
End If
Next
If Mid(txtr, 1, 2) = "AB" And Len(txtr) = 48 Then
Text1 = txtr
txtr = ""
End If
End If
Exit Sub
End Sub
Dim PortNo As Long
Dim InBufferSize As Integer
Dim OutBufferSize As Integer
Private Sub Command1_Click()
PortNo = 1
OpenPort (PortNo)
End SubPublic Function OpenPort(PortNo As Integer, Optional InBufferSize As Integer = 1024, Optional OutBufferSize As Integer = 512) As Long
On Error GoTo ErrExit
MSComm1.CommPort = PortNo '采用COM端口
MSComm1.Settings = "9600,n,8,1"
MSComm1.InputMode = comInputModeBinary '采用二进制传输
MSComm1.InputLen = 0 '读取缓冲区全部内容
MSComm1.NullDiscard = False 'NULL字符从端口传送到接受缓冲区
MSComm1.DTREnable = False 'DTR线无效
MSComm1.EOFEnable = False '不寻找EOF符
MSComm1.RTSEnable = False 'RTS线无效
MSComm1.InBufferCount = 0 '清空接受缓冲区
MSComm1.OutBufferCount = 0 '清空传输缓冲区
MSComm1.SThreshold = 0 '不产生MSComm事件
MSComm1.RThreshold = 1 '收到一个字符就产生MSComm事件
MSComm1.InBufferSize = InBufferSize '接收缓冲区 默认为1024个字节
MSComm1.OutBufferSize = OutBufferSize '发送缓冲区 默认为512个字节
MSComm1.PortOpen = True '打开端口
OpenPort = 0
Exit Function
ErrExit:
OpenPort = 1
End FunctionPrivate Sub Form_Load()
txtr = ""
End SubPrivate Sub MSComm1_OnComm()
If MSComm1.CommEvent >= 1001 And MSComm1.CommEvent <= 1011 Then
Exit Sub
End If
Dim bytReceiveArray() As Byte '接收数据缓冲区
Dim VarReceiveData As Variant '接收的变体数据
Dim t As Integer
Dim i As Long
'数据接收
If MSComm1.CommEvent = comEvReceive And MSComm1.InBufferCount >= 1 Then
t = MSComm1.InBufferCount
VarReceiveData = MSComm1.Input
ReDim bytReceiveArray(0) As Byte
bytReceiveArray = VarReceiveData
For i = 0 To t - 1
If Len(Hex(bytReceiveArray(i))) = 1 Then
txtr.Text = txtr.Text & "0" & Hex(bytReceiveArray(i)) & " "
Else
txtr.Text = txtr.Text & Hex(bytReceiveArray(i)) & " "
End If
Next
If Mid(txtr, 1, 2) = "AB" And Len(txtr) = 48 Then
Text1 = txtr
txtr = ""
End If
End If
Exit Sub
End Sub