关于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编译错误,请大虾们就我补充的几点再帮我看看,问题解决了追加多少分没问题!!
展开
 我来答
zdingyun
推荐于2016-06-19 · 知道合伙人软件行家
zdingyun
知道合伙人软件行家
采纳数:15429 获赞数:48173
1982年上海业余工业大学化工系毕业 现退休

向TA提问 私信TA
展开全部
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字节的数据.
lxz1969
2009-02-12 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8524
采纳率:33%
帮助的人:1.1亿
展开全部
没仔细看,不过感觉应该在代码某处加一句
clear bytInput,即及时清除数组空间,如果不孙汪睁及时清陵梁除,就会造成“溢出堆栈空则岁间”的错误。
我忽略了,在VB里应该是:Erase bytInput
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式