关于VB串口数据接受转换为16进制显示问题
程序如下:PrivateSubMsComm1_OnComm()DimiAsIntegerDimrecdataAsStringDimintinputlenAsInteger...
程序如下:
Private Sub MsComm1_OnComm()
Dim i As Integer
Dim recdata As String
Dim intinputlen As Integer
intinputlen = MSComm1.InBufferCount
ReDim bytInput(intinputlen)’存放数据用
bytInput = MSComm1.Input
MSComm1.InputMode = comInputModeBinary '二进制接收
recdata = recdata & MSComm1.Input '读取传送数据
Text1.Text = recdata + Text1.Text ’文本显示
jieshou ’16进制转换
End Sub
Public Function jieshou() '接收数据处理为16进制
Static i As Integer
For i = 0 To UBound(bytInput)
If Len(Hex(bytInput(i))) = 1 Then
strData = strData & "0" & Hex(bytInput(i))
Text1.Text = strData
Else
strData = strData & Hex(bytInput(i))
Text1.Text = strData
End If
Next
Text1 = strData
Call MsComm1_OnComm
End Function
程序目的是把串口接受来的二进制数据转换为16进制数据,以备其他程序进行处理。
问题是 此段代码单步调试可以通过 但是连续运行时 会出现“溢出堆栈空间”的错误信息,实时错误代码‘28’
串口接收的是最长28字节的数据,每隔1秒发送一次串口数据。
请针对我的程序做出解答,不要照搬 MSDN里的帮助解答,具体需要改动哪里,请在我的程序上修改,问题解决有追加分,在线等~
zdingyun 感谢你给的程序,可是我调试的时候运行的到Case 2 这句 就直接跳转到End Select这句了,中间字符串传换位16进制的语句都没有运行,所以什么都没有转换啊!!!我设计的是按下一个接受按钮Command1,就会循环接受串口数据然后调用16进制转换程序 通过文本Text1来显示。注意,我需要的是要循环接收显示, 楼下的都同意应该加一个 clear bytinput 的语句,可VB里clear并不能这么用啊,也就是clear bytinput编译错误,请大虾们就我补充的几点再帮我看看,问题解决了追加多少分没问题!! 展开
Private Sub MsComm1_OnComm()
Dim i As Integer
Dim recdata As String
Dim intinputlen As Integer
intinputlen = MSComm1.InBufferCount
ReDim bytInput(intinputlen)’存放数据用
bytInput = MSComm1.Input
MSComm1.InputMode = comInputModeBinary '二进制接收
recdata = recdata & MSComm1.Input '读取传送数据
Text1.Text = recdata + Text1.Text ’文本显示
jieshou ’16进制转换
End Sub
Public Function jieshou() '接收数据处理为16进制
Static i As Integer
For i = 0 To UBound(bytInput)
If Len(Hex(bytInput(i))) = 1 Then
strData = strData & "0" & Hex(bytInput(i))
Text1.Text = strData
Else
strData = strData & Hex(bytInput(i))
Text1.Text = strData
End If
Next
Text1 = strData
Call MsComm1_OnComm
End Function
程序目的是把串口接受来的二进制数据转换为16进制数据,以备其他程序进行处理。
问题是 此段代码单步调试可以通过 但是连续运行时 会出现“溢出堆栈空间”的错误信息,实时错误代码‘28’
串口接收的是最长28字节的数据,每隔1秒发送一次串口数据。
请针对我的程序做出解答,不要照搬 MSDN里的帮助解答,具体需要改动哪里,请在我的程序上修改,问题解决有追加分,在线等~
zdingyun 感谢你给的程序,可是我调试的时候运行的到Case 2 这句 就直接跳转到End Select这句了,中间字符串传换位16进制的语句都没有运行,所以什么都没有转换啊!!!我设计的是按下一个接受按钮Command1,就会循环接受串口数据然后调用16进制转换程序 通过文本Text1来显示。注意,我需要的是要循环接收显示, 楼下的都同意应该加一个 clear bytinput 的语句,可VB里clear并不能这么用啊,也就是clear bytinput编译错误,请大虾们就我补充的几点再帮我看看,问题解决了追加多少分没问题!! 展开
2个回答
推荐于2016-06-19 · 知道合伙人软件行家
关注
展开全部
1楼意见正确,给个接收28字节长度敬桥耐的代码:
Option Explicit
Dim strData As String
Private Sub Form_Load()
MSComm1.Settings = "9600,n,8,1"
MSComm1.InputMode = comInputModeBinary
MSComm1.RThreshold = 1
MSComm1.PortOpen = True
Text1 = ""
End Sub
Private Sub MSComm1_OnComm()
Dim buffer() As Byte
Dim i As Integer
Select Case MSComm1.CommEvent
Case 2
buffer = MSComm1.Input
For i = 0 To UBound(buffer)
If Len(Hex(buffer(i))) = 1 Then
strData = strData & "0"亮春 + Hex(buffer(i))
Else
strData = strData & Hex(buffer(i))
End If
Next i
If Len(strData) = 56 Then '接收28字节长度数据
Text1.Text = strData
strData = ""
End If
End Select
End Sub
补消侍充:LZ你须发送28字节的数据.
Option Explicit
Dim strData As String
Private Sub Form_Load()
MSComm1.Settings = "9600,n,8,1"
MSComm1.InputMode = comInputModeBinary
MSComm1.RThreshold = 1
MSComm1.PortOpen = True
Text1 = ""
End Sub
Private Sub MSComm1_OnComm()
Dim buffer() As Byte
Dim i As Integer
Select Case MSComm1.CommEvent
Case 2
buffer = MSComm1.Input
For i = 0 To UBound(buffer)
If Len(Hex(buffer(i))) = 1 Then
strData = strData & "0"亮春 + Hex(buffer(i))
Else
strData = strData & Hex(buffer(i))
End If
Next i
If Len(strData) = 56 Then '接收28字节长度数据
Text1.Text = strData
strData = ""
End If
End Select
End Sub
补消侍充:LZ你须发送28字节的数据.
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询