改一下程序结构了:
Private Sub MSComm_OnComm()
if MSComm.CommEvent= comEvReceive then 
            av = MSComm.Input
            buffer(1) = av(0)
            If buffer(1) = &HBA Then
              MSComm.RThreshold = 0
              Do
                DoEvents
                Loop Until MSComm.InBufferCount >= 4
                av = MSComm.Input
                buffer(2) = av(0)
                av = MSComm.Input
                buffer(3) = av(0)
                av = MSComm.Input
                buffer(4) = av(0)
                av = MSComm.Input
                buffer(5) = av(0)
                Debug.Print buffer(1)
                Text1.Text = Text1.Text + Str(buffer)
                MSComm.RThreshold = 1
End ifEnd Sub

解决方案 »

  1.   

    这里好像有点问题
    string1 = &HABAA01    '多此一举,Hex(string1) ="ABAA01"  
    MSComm.Output = Hex(string1) + Chr$(13) 既然用二进制通信,就得用二进制发送数据,上面用的是文本方式
    Dim buffer() As Byte
    redim buffer(3)
    buffer(0)=ChrB(13)
    buffer(1)=&H01
    buffer(2)=&HAA
    buffer(3)=&HABMSComm.Output = buffer还有,这里比较容易出问题
    Do
       DoEvents
    Loop Until MSComm.InBufferCount >= 4
    如果一直等不到数据,那就是死循环了,最好有超时处理,比如
    tm1=timer               
    Do
       DoEvents
    Loop Until MSComm.InBufferCount >= 4 or timer-tm1>1你的inputLen=0,那读进来的数据是缓冲区里面的全部数据
    buffer(0) = av(0)
    ...
    buffer(1) = av(0)
    这是错的
    直接buffer=Mscomm1.input就行了问题比较多,自己再好好看看资料吧
                    
      

  2.   

    在VB中有MSComm32.ocx的帮助文件吗?
    有的话,烦请邮一个给我,多谢!
    [email protected]
      

  3.   

    用vb开发COMM应用还是用
    MOXA公司的PCOMM好!
    www.moxa.com