可以利用 MSComm 控件的 OnComm 事件捕获并处理这些通讯事件。OnComm 事件还可以检查和处理通讯错误

解决方案 »

  1.   

    to Jneu(沧海桑田) 具体办法??最好有源代码
      

  2.   

    OnComm 事件示例
    下例说明如何处理通讯错误和事件。可以在相关的 Case 语句之后插入代码来处理特定的错误或事件。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
      

  3.   

    '首先设置MSComm1的参数,如Private Sub Form_Load ()
      ' 保存输入子串的缓冲区
      Dim Instring As String
      ' 使用 COM1。
      MSComm1.CommPort = 1
      ' 9600 波特,无奇偶校验,8 位数据,一个停止位。
      MSComm1.Settings = "9600,N,8,1"
      ' 当输入占用时,
      ' 告诉控件读入整个缓冲区。
      MSComm1.InputLen = 0
      ' 打开端口。
      MSComm1.PortOpen = True
    End Sub'接收数据MSComm1.Input,有两种方法:
    '1、事件驱动
    '  缓冲区变化后,产生OnComm,响应时间并接收处理,适应于不等个数据包长或随时发送而不是定时发送,如:
    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、定时接收
    Private Sub Timer1_Timer()
      Buffer$ =  MSComm1.Input
    End Sub
    '发送数据MSComm1.Output
    Dim datas[10] as byte
    Dim datasend 
    datas[1]=1
    datas[2]=11
    datas[3]=21
    datas[4]=41
    datas[5]=71
    '.
    '.
    '.
    datasend=datas
      MSComm1.Output = "要发送的数据,可以是字符或二进制数据"
      MSComm1.Output = datasend
    '最后关闭串行端口。
      MSComm1.PortOpen = False
      
    --------------------------------------------------------------------------------