求解释一段vb代码,关于mscomm控件接收事件的,请高手帮忙
MSComm1.RThreshold=1'缓冲区接收到一个字符,就产生一次oncomm事件;这是接收事件代码:PrivateSubMSComm1_OnComm()'接收事...
MSComm1.RThreshold = 1 '缓冲区接收到一个字符,就产生一次oncomm事件;
这是接收事件代码:
Private Sub MSComm1_OnComm() '接收事件
Dim inbyte() As Byte
On Error Resume Next
Select Case MSComm1.CommEvent
Case comEvReceive '有接收事件
inbyte = MSComm1.Input
For i = 0 To UBound(inbyte)
inputdata = inputdata & Hex(inbyte(i)) & " "
Next i
Text1.Text = inputdata
MSComm1.InBufferCount = 0 '清空接收缓冲区
End Select
End Sub
其中有个问题“Dim inbyte() As Byte” ,现在是给inbyte定义为字节数组吗?如果是为什么能给他赋值“inbyte = MSComm1.Input”?求详细介绍一下呗,还有这句“ inputdata = inputdata & Hex(inbyte(i)) & " "”
我发送的数据是一串16进制的数据,接收的数据也是一串16进制的数据 展开
这是接收事件代码:
Private Sub MSComm1_OnComm() '接收事件
Dim inbyte() As Byte
On Error Resume Next
Select Case MSComm1.CommEvent
Case comEvReceive '有接收事件
inbyte = MSComm1.Input
For i = 0 To UBound(inbyte)
inputdata = inputdata & Hex(inbyte(i)) & " "
Next i
Text1.Text = inputdata
MSComm1.InBufferCount = 0 '清空接收缓冲区
End Select
End Sub
其中有个问题“Dim inbyte() As Byte” ,现在是给inbyte定义为字节数组吗?如果是为什么能给他赋值“inbyte = MSComm1.Input”?求详细介绍一下呗,还有这句“ inputdata = inputdata & Hex(inbyte(i)) & " "”
我发送的数据是一串16进制的数据,接收的数据也是一串16进制的数据 展开
展开全部
1)定义Dim inbyte() As Byte是因为MSComm控件接收缓冲区存的是字节数组, 调用inbyte = MSComm1.Input后,相当于把缓冲区收到数据的复制到到inbyte数组
2) inputdata = inputdata & Hex(inbyte(i)) & " "” 是因为COMM端口收到的数据是不知道长度的,只能是发现有数据后持续读,然后追加到原来的数据后面,具体格式要程序员自己解析。这里inputdata是一个全局变量,用来保存收到的数据的,Hex(inbyte(i))的目的是把inbyte数组的字节数据用16进制来表示,因为text控件没法显示不可见字符,比如你发送一个16进制0x10,不转换是没法显示的,后面的空格是为了区隔每个字节的16进制。
2) inputdata = inputdata & Hex(inbyte(i)) & " "” 是因为COMM端口收到的数据是不知道长度的,只能是发现有数据后持续读,然后追加到原来的数据后面,具体格式要程序员自己解析。这里inputdata是一个全局变量,用来保存收到的数据的,Hex(inbyte(i))的目的是把inbyte数组的字节数据用16进制来表示,因为text控件没法显示不可见字符,比如你发送一个16进制0x10,不转换是没法显示的,后面的空格是为了区隔每个字节的16进制。
更多追问追答
追问
恩 ,首先谢谢你的回答。“把缓冲区收到数据的复制到到inbyte数组”,不是规定不能直接为数组赋值吗?还是我理解错了 嘿嘿,还有个问题 ,每次接收的数据都存在了inbyte中,下一次新的数据不会把旧的数据覆盖掉吗?
追答
1)这个控件的用法就这这样的,相当于指针拷贝。
2)每次接收的数据存在inbyte里,下次肯定要被覆盖。因此你必须在这个事件处理中把收到的数据保存到一个全局数组中。你的例子里面inputdata = inputdata & Hex(inbyte(i))保存到字符串中是为了显示,这里就是用的追加方式,可以保存所有数据。真正的程序里应该是放大一个全局数组中。
展开全部
程序调整一下:
Private Sub MSComm1_OnComm() '接收事件 Dim inbyte() As Byte '定义字节型数据数组
Dim inputdata As String '字符型On Error Goto OnCommErr ’错误处理 Select Case MSComm1.CommEvent Case comEvReceive '有接收事件 inbyte = MSComm1.Input
'当用 Input 后系统自动清除接收缓存,后面不需要手工清除 For i = 0 To UBound(inbyte) inputdata = inputdata & Hex(inbyte(i)) & " " Next i Text1.Text = inputdata
End Select
Exit SUb
OnCommErr:
MsgBox "记录下面错误信息:"+chr$(13)+Error$,48,"重要提示"
End Sub
inByte() 中存放的是16进制数据,要转换成字符型数据,需要按位来处理,不能直接赋值给字符型变量 inputdata
Private Sub MSComm1_OnComm() '接收事件 Dim inbyte() As Byte '定义字节型数据数组
Dim inputdata As String '字符型On Error Goto OnCommErr ’错误处理 Select Case MSComm1.CommEvent Case comEvReceive '有接收事件 inbyte = MSComm1.Input
'当用 Input 后系统自动清除接收缓存,后面不需要手工清除 For i = 0 To UBound(inbyte) inputdata = inputdata & Hex(inbyte(i)) & " " Next i Text1.Text = inputdata
End Select
Exit SUb
OnCommErr:
MsgBox "记录下面错误信息:"+chr$(13)+Error$,48,"重要提示"
End Sub
inByte() 中存放的是16进制数据,要转换成字符型数据,需要按位来处理,不能直接赋值给字符型变量 inputdata
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询