首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

com口有关问题,没办法,只有上来找答案了

2012-01-08 
com口问题,没办法,只有上来找答案了我写了一个com口程序,是用来发送16进制数的,也是在网上七拼八凑也算做

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 的问题 
已经回复 
 

热点排行