如何用MSCOMM控件完整接收长度不定的十六进制的数据, 100
如何用MSCOMM控件完整接收长度十六进制的数据,该数据长度不定,但都是以“0x1B”开头标识,第四五个字节是整个数据的总长度,最后一位是校验,我在接收的时候也能收到,但...
如何用MSCOMM控件完整接收长度十六进制的数据,该数据长度不定,但都是以“0x1B”开头标识,第四五个字节是整个数据的总长度,最后一位是校验,我在接收的时候也能收到,但我用AccessPort查看的时候发现每次收到的不是一个完整的数据帧,而是被拆分成了几个帧,因为是需要高速连续接收的发送的,所以帧被拆分了很不好处理,效率很低,故求达人解答,提供解决方案。附上我的代码
'////////////////////////////////////////////////////////////////////
MSComm1.InputMode = comInputModeBinary '采用二进制传输
MSComm1.InBufferCount = 0 '清空接受缓冲区
MSComm1.OutBufferCount = 0 '清空传输缓冲区
MSComm1.RThreshold = 1 '产生MSComm事件
MSComm1.InBufferSize = 1024
TxtSend = ""
txtReceive = ""
MSComm1.Settings = C2
MSComm1.CommPort = C1
MSComm1.PortOpen = True
'//////////////////////////////////////////////////////////////////////////
Private Sub MSComm1_OnComm() '接收数据
Dim strBuff As String
Select Case MSComm1.CommEvent
Case 2
MSComm1.InputLen = 0
strBuff = MSComm1.Input
BytReceived() = strBuff
jieshou
'‘ lenInput = Len(StrData)
' Text2 = lenInput \ 2
'数据处理代码
End Select
End Sub
Public Function jieshou() '接收数据处理为16进制
Dim i As Integer
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
txtReceive = StrData
End Function 展开
'////////////////////////////////////////////////////////////////////
MSComm1.InputMode = comInputModeBinary '采用二进制传输
MSComm1.InBufferCount = 0 '清空接受缓冲区
MSComm1.OutBufferCount = 0 '清空传输缓冲区
MSComm1.RThreshold = 1 '产生MSComm事件
MSComm1.InBufferSize = 1024
TxtSend = ""
txtReceive = ""
MSComm1.Settings = C2
MSComm1.CommPort = C1
MSComm1.PortOpen = True
'//////////////////////////////////////////////////////////////////////////
Private Sub MSComm1_OnComm() '接收数据
Dim strBuff As String
Select Case MSComm1.CommEvent
Case 2
MSComm1.InputLen = 0
strBuff = MSComm1.Input
BytReceived() = strBuff
jieshou
'‘ lenInput = Len(StrData)
' Text2 = lenInput \ 2
'数据处理代码
End Select
End Sub
Public Function jieshou() '接收数据处理为16进制
Dim i As Integer
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
txtReceive = StrData
End Function 展开
4个回答
展开全部
刚查了一下MSComm控件的output属性“Output 向传输缓冲区写一个字符串”,应该是该控件只支持字符型数据,如果你要发送数值型数据,那就只能通过str()函数先转换,接收后再通过val()函数转回。如果数据有小数点,要注意这两个函数的参数设置。
“达到以一个字节的长度发送任意一个八位二进制数能表示的数值呢?”,你可以直接把这个八位二进制数作为字符串发送,接收后再根据你需要作相关处理。
“达到以一个字节的长度发送任意一个八位二进制数能表示的数值呢?”,你可以直接把这个八位二进制数作为字符串发送,接收后再根据你需要作相关处理。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
该数据长度不定,但都是以“0x1B”开头标识,第四五个字节是整个数据的总长度,最后一位是校验,我在接收的时候也能收到,但我用AccessPort查看的时候发现每次收到的不是一个完整的数据帧,而是被拆分成了几个帧,因为是需要高速连续接收的发送的,所以帧被拆分了很不好处理,效率很低,故求达人解答,提供解决方案。附上我的代码
'////////////////////////////////////////////////////////////////////
MSComm1.InputMode = comInputModeBinary '采用二进制传输
MSComm1.InBufferCount = 0 '清空接受缓冲区
MSComm1.OutBufferCount = 0 '清空传输缓冲区
MSComm1.RThreshold = 1 '产生MSComm事件
MSComm1.InBufferSize = 1024
TxtSend = ""
txtReceive = ""
MSComm1.Settings = C2
MSComm1.CommPort = C1
MSComm1.PortOpen = True
'//////////////////////////////////////////////////////////////////////////
Private Sub MSComm1_OnComm() '接收数据
Dim strBuff As String
Select Case MSComm1.CommEvent
Case 2
MSComm1.InputLen = 0
strBuff = MSComm1.Input
BytReceived() = strBuff
jieshou
'‘ lenInput = Len(StrData)
' Text2 = lenInput \ 2
'数据处理代码
End Select
End Sub
Public Function jieshou() '接收数据处理为16进制
Dim i As Integer
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
txtReceive = StrData
End Function
'////////////////////////////////////////////////////////////////////
MSComm1.InputMode = comInputModeBinary '采用二进制传输
MSComm1.InBufferCount = 0 '清空接受缓冲区
MSComm1.OutBufferCount = 0 '清空传输缓冲区
MSComm1.RThreshold = 1 '产生MSComm事件
MSComm1.InBufferSize = 1024
TxtSend = ""
txtReceive = ""
MSComm1.Settings = C2
MSComm1.CommPort = C1
MSComm1.PortOpen = True
'//////////////////////////////////////////////////////////////////////////
Private Sub MSComm1_OnComm() '接收数据
Dim strBuff As String
Select Case MSComm1.CommEvent
Case 2
MSComm1.InputLen = 0
strBuff = MSComm1.Input
BytReceived() = strBuff
jieshou
'‘ lenInput = Len(StrData)
' Text2 = lenInput \ 2
'数据处理代码
End Select
End Sub
Public Function jieshou() '接收数据处理为16进制
Dim i As Integer
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
txtReceive = StrData
End Function
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你数据不用整理编排的吗?、
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询