com口问题,没办法,只有上来找答案了
我写了一个com口程序,是用来发送16进制数的,也是在网上七拼八凑也算做成功了虽然功能能实现,因为程序有部分是在网上搜到得,有一些还不理解,希望能在这找到答案
主要是接受部分的程序:
Private Sub MsComm1_OnComm() '接收数据
Dim strData As Variant
Dim BytReceived() As Byte
Dim strBuff As String
Select Case MSComm1.CommEvent
Case 2
strBuff = MSComm1.Input '
BytReceived() = strBuff '如果是二进制接收模式则进行数据处理,否则直接显示字符串
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
End Select
Text2=strData
现在我发送 02 03 00 01 00 01 D5 F9 给com口,com口 接收到得数据和发送的一样,也就是说程序时没问题的,
但我现在就有个疑问,MsComm1_OnComm()事件是串口里一旦有字符了,就执行,即使数据还在往串口里发,如果总共有8个字符需要发送,目前已经收到了1个,应该就执行MsComm1_OnComm()事件了,然后就执行下面这句:
Select Case MSComm1.CommEvent
Case 2
通过查帮助得知: 收到 Rthreshold 个字符。该事件将持续产生直到用 Input 属性从接收缓冲区中删除数据。
也就是说收到在Rthreshold 中定义的字节数就会产生2的事件,我在Rthreshold 里写的是0,应该是一有数据,
而且通讯无误就返回一个2,这也没错。问题就在这个for循环上
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
Text2 = strData
如果才刚刚接受到了一个字符,虽然还有7个还没收到,那也就是说程序也开始触发执行了,到上面这句FOR循环上,这句程序的意思就是将每个字符值连起来,但目前才一个字符,比如02,执行完已经是strData为02了,因为BytReceived(0)为存放第一个值的数组项,然后再循环,i=1了,由于可能其他7个字符还没有收到(不会那么巧,一个循环后,另外一个
字符到达),而前面的数据被清除了,那BytReceived(1)可能就是0了,又一次循环后,理论上讲就应该是 strdata为02 00 了,但执行结果却是正确的02 03 00 01 00 01 D5 F9 ,不知道我的理解哪里不对,还请帮我指点迷津,谢谢各位了
[解决办法]
串口问题为什么在COM版发呢?
[解决办法]
问一个MsComm1_onComm 的问题
已经回复
[解决办法]
问一个MsComm1_onComm 的问题
已经回复