请问 串口如何非按时间 轮询读取数据读,而是 实时读取数据?
就是说下面有消息上来了,不是我隔1秒轮询来接收,而是立刻就上来。Private Sub Timer1_Timer()    Dim tmp_str As String
    tmp_str = MSComm1.Input
    Sleep 1000
    Debug.Print tmp_strEnd Sub这个是轮询程序,实时如何写呢?

解决方案 »

  1.   

    Private Sub MSComm_OnComm ()
       Select Case MSComm1.CommEvent
       ' Handle each event or error by placing 
       ' code below each case statement' 错误
          Case comEventBreak   ' 收到 Break。
           Case comEventCDTO   ' CD (RLSD) 超时。
          Case comEventCTSTO   ' CTS Timeout。
          Case comEventDSRTO   ' DSR Timeout。
          Case comEventFrame   ' Framing Error
          Case comEventOverrun   '数据丢失。
          Case comEventRxOver'接收缓冲区溢出。
          Case comEventRxParity' Parity 错误。
          Case comEventTxFull   '传输缓冲区已满。
          Case comEventDCB   '获取 DCB] 时意外错误   ' 事件
          Case comEvCD   ' CD 线状态变化。
          Case comEvCTS   ' CTS 线状态变化。
          Case comEvDSR   ' DSR 线状态变化。
          Case comEvRing   ' Ring Indicator 变化。
          Case comEvReceive   ' 收到 RThreshold # of
    chars.
          Case comEvSend   ' 传输缓冲区有 Sthreshold 个字符                     '
                         '
          Case comEvEof   ' 输入数据流中发现 EOF 字符
                         ' 
       End Select
    End Sub
      

  2.   

    先设置 MSCOMM 的RThreshold 为 1Private Sub MSComm1_OnComm()
        Dim Buffer As String
            Do
            Buffer = MSComm1.Input
            'UNICODE 直接链接 ,如果是纯英文,则转换到 vbFromUnicode
            Text1.Text = Text1.Text & Buffer ' StrConv(StrConv(Buffer, vbUnicode), vbFromUnicode)
            DoEvents
            Buffer = ""
             If bb = True Then Exit Do: Exit Sub
             If MSComm1.InBufferCount = 0 Then Exit Do
        Loop
    End SubPrivate Sub Form_Unload(Cancel As Integer)
    MSComm1.PortOpen = False
    bb = True
    End
    End Sub
      

  3.   

    485通讯只能轮询,232可以在oncomm中写代码
      

  4.   

    mscomm oncomm事件可以实时截获串口数据。具体可以参考MSDN上的帮助
      

  5.   

    间隔多长时间这个具体要看实际的应用了,节点数、通信延时等等参数都影响着传输时间。但一般来说,对于这种串行通信,大多采用“呼叫/响应”的机制进行通信,也就是说主机下下位机发送一个请求后,下位机才进行反馈。基于RS485的典型应用是西门子的Profibus现场总线,你可以参考一下相关的文档。