各位高手好,请教一个关于vb里mscomm控件接收数据的问题:
我想用vb编程实现以下功能:按下一个按钮后接收由串口调试助手发来的一组数据(共4个十六进制的数)分别赋给a,b,c,d,并转换为十进制数显示在四个对话框中,我现在编好了一...
我想用vb编程实现以下功能:按下一个按钮后接收由串口调试助手发来的一组数据(共4个十六进制的数)分别赋给a,b,c,d,并转换为十进制数显示在四个对话框中,我现在编好了一个程序能够赋一个数给a并转化为十进制显示出来(串口调试助手和程序我已经通过虚拟串口vspd连接起来)。 代码如下,我想请教高手如何在现有基础上作出修改以达到我一开始的要求: 即将一组数(由4个十六进制数组成)分别赋给a,b,c,d(另外我还需要每接收一次新的数据后都自动清空上次接收到的数据): Private Sub Command1_Click() If Not MSComm1.PortOpen Then MSComm1.PortOpen = True Command1.Caption = "关闭串口" Else MSComm1.PortOpen = False Command1.Caption = "打开串口" End If Dim a As Single a = Val(Text1.Text) End Sub Private Sub Form_Load() '串口初始化 MSComm1.CommPort = 2 '设置串口号 MSComm1.Settings = "9600,N,8,1" MSComm1.InputLen = 0 '设置从接收缓冲区读取字符数为1;为0时读取全部 MSComm1.RThreshold = 1 '接受到1个字节时触发oncomm事件 MSComm1.InputMode = comInputModeBinary '二进制方式发送 End Sub Private Sub MSComm1_OnComm() (接下来这段oncomm事件代码是我从网上摘抄下来,它的功能是帮我将接受到的16进制数据转换为10进制,但是这段程序无法在接到新数据后清除上次接受的数据) Dim i As Long Dim iData() As Byte If MSComm1.InBufferCount > 0 Then iData = MSComm1.Input For i = 0 To UBound(iData) Text1.Text = Text1.Text & iData(i) & " " Next i End If End Sub 请高手指点~谢谢!
展开
1个回答
展开全部
MSDN,Input
属性:返回并删除接收缓冲区中的数据流。
你尝试加上以下语句看看:
Private
Sub
MSComm1_OnComm()
if
MSComm1.CommEvent
=
comEvReceive
then
Dim
i
As
Long
Dim
iData()
As
Byte
If
MSComm1.InBufferCount
>
0
Then
iData
=
MSComm1.Input
For
i
=
0
To
UBound(iData)
Text1.Text
=
Text1.Text
&
iData(i)
&
"
"
Next
i
End
If
End
If
End
Sub
属性:返回并删除接收缓冲区中的数据流。
你尝试加上以下语句看看:
Private
Sub
MSComm1_OnComm()
if
MSComm1.CommEvent
=
comEvReceive
then
Dim
i
As
Long
Dim
iData()
As
Byte
If
MSComm1.InBufferCount
>
0
Then
iData
=
MSComm1.Input
For
i
=
0
To
UBound(iData)
Text1.Text
=
Text1.Text
&
iData(i)
&
"
"
Next
i
End
If
End
If
End
Sub
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询