我采用ASCII方式接受发送,使用OnComm方式接收,
我发送一串数据后,对方应答一串字符
但是我发现它并不相应ONCOMM事件,只有重新打开串口才能相应,而且本来接受6个字符的只能接收到4个,请教高手

解决方案 »

  1.   

    我用 OnComm方法时候 也遇到同样的问题。
    就是读取 串口(字符串)时候,少掉了前面一大截。
    问题解决时候也告诉我一下,可以吗 ?
    顶!~
      

  2.   

    你看看你的com控件的inbuffersize是否设置得足够大,inputlen设置是否合理。
      

  3.   

    Private Sub Form_Load()
      With MSComm1
            .CommPort = "com1"
            .Settings = "9600,n,8,1" 
            .InputLen = 0
            .RThreshold = 1
            .PortOpen = True
        End With
    end subPrivate Sub MSComm1_OnComm()
    On Error GoTo err001
    Dim GetChar As String
    Select Case MSComm1.CommEvent
          Case comEventOverrun   '数据丢失。
          MsgBox "数据丢失!", vbExclamation, "错误"
          Case comEventBreak   ' 收到 Break。
          Case comEventCDTO   ' CD (RLSD) 超时。
          MsgBox " CD (RLSD) 超时。!", vbExclamation, "错误"
          Case comEventCTSTO   ' CTS Timeout。
          MsgBox "CTS Timeout", vbExclamation, "错误"
          Case comEventDSRTO   ' DSR Timeout。
          MsgBox "DSR Timeout。", vbExclamation, "错误"
          Case comEventFrame   ' Framing Error
          MsgBox "Framing Error", vbExclamation, "错误"
          Case comEventOverrun   '数据丢失。
          MsgBox "数据丢失。!", vbExclamation, "错误"
          Case comEventRxOver '接收缓冲区溢出。
          MsgBox "接收缓冲区溢出!", vbExclamation, "错误"
          Case comEventRxParity ' Parity 错误。
          MsgBox "Parity 错误!", vbExclamation, "错误"
          Case comEventTxFull   '传输缓冲区已满。
          MsgBox "传输缓冲区已满!", vbExclamation, "错误"
          Case comEventDCB   '获取 DCB] 时意外错误
          MsgBox "获取 DCB] 时意外错误!", vbExclamation, "错误"      Case comEvReceive   ' 收到数据
            If MSComm1.InBufferCount Then
                GetChar = MSComm1.Input
            End If
            MsgBox GetChar
            '执行某一函数(省略)
    End Select
        Exit Sub
    err001:
        MsgBox Err.Description, vbCritical, "错误"
    End Sub能帮我看看吗?搞不动问题出在哪!~
    我把inbuffersize设置成很大,也还是不行的呀!~
      

  4.   

    你的设置是读取缓冲区全不字符,如果GetChar = MSComm1.Input该指令执行的时候,oncomm事件只触发了3 次,那么缓冲区只有3个,(你的.RThreshold = 1)所以肯定不全.你应当判断你所读取的最后一位是否是你协议中设置的停止位,(一般都是Chr(13).),如果不是继续读取,直到完全读取为止.
    否则,就是不全的.
      

  5.   

    可以了!~谢谢  sunny8226(袋鼠) !~ 这个帖不是我发的,所以不能给分分啦,下次遇到一定补!~