Private Sub Form_Load()
     With MSComm1
     .CommPort = 1
     .Settings = "9600,n,8,1" '设置通信口参数
     .InputMode = comInputModeBinary '设置接收数据模式为二进制形式
     .InBufferSize = 4
     .OutBufferSize = 5
     .InputLen = 1 '设置Input 一次从接收缓冲读取字节数为1
     .SThreshold = 1 '设置Output 一次从发送缓冲读取字节数为1
     .RThreshold = 1 '设置接收一个字节产生OnComm事件
     .InBufferCount = 0 '清除接收缓冲区
     .OutBufferCount = 0 '清除发送缓冲区
     If .PortOpen = False Then '判断通信口是否打开
     .PortOpen = True '打开通信口
     End If
     End With
End SubPrivate Sub MSComm1_OnComm()
            Dim ab(2) As Byte '字节数据类型数组,用来存储接收到的一组字节数据
            Dim av As Variant '用来从接收缓冲区读取数据            With MSComm1
            Select Case .CommEvent '判断MSComm1通信事件
            Case comEvReceive '收到Rthreshold个字节产生的接收事件
            av = .Input '读取一个接收字节
            ab(0) = av(0) '转换保存到字节数据类型数组
            av = .Input '读取第二个数据字节(BCD码高位字节)
            ab(1) = av(0) '转换保存到字节数据类型数组
            Case Else
            End Select
            End With
            Text2.Text = CStr(ab(0)) + CStr(ab(1))
End SubPrivate Sub sendReadDec()
    Dim zh As String
     On Error GoTo errhandle
     arrSend0(0) = &H1
     MSComm1.Output = arrSend0     arrSend1(0) = &H0
     MSComm1.Output = arrSend1     arrSend2(0) = &H0
     MSComm1.Output = arrSend2     arrSend3(0) = &HC
     MSComm1.Output = arrSend3     arrSend4(0) = &HC
     MSComm1.Output = arrSend4
errhandle:
     If Err.Number = 8018 Then
     MsgBox "端口已经被其它应用程序打开,系统不能正常运行!", vbOKOnly + vbCritical, "端口错误"
     End If
End Sub请大家帮忙看看这段代码,我用串口的调试软件发送01 00 00 12 12时,可以有数据返回,为什么我上面的这段程序不行呢?请指教谢谢大家。

解决方案 »

  1.   

    Dim av() As byte '用来从接收缓冲区读取数据
      

  2.   

    Dim av() As byte 
    Dim arrsend1() As byte 
    Dim arrsend2() As byte 
    .
    .
    .
      

  3.   

    这些我都已经定义了,好像问题不在这里。产生了oncomm事件。可是没有接受到数据???
      

  4.   

    inputlen=0
    dim arrSend(4) as byte     
         arrSend(0) = &H1
         arrSend(1) = &H0
         arrSend(2) = &H0
         arrSend(3) = &HC
         arrSend(4) = &HC
         MSComm1.Output = arrSend
    你那样发送每发1个就会进入mscomm1_oncomm()事件中,数据取出缓冲区自动清空