掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
MSCommの通信エラーをクリアするには? (ID:106589)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
ととろジョージさん、書き込みありがとうございます。 長期外出をしており書き込みが遅くなったことをお詫びします。 コードは以下のようにしています。 コマンドに対する返信は2種類あります。仮に返信Aと返信Bとします。 Aは20byte、Bは2000byteでテキストデータです。 ボーレートは57600bpsです。 エラー対処のチェックをするため、InBufferSize=512とし、 わざとオーバーフローが起こるようにしています。 まずAを受信します。(エラーは起こりません) 次にBを受信します。(オーバーフローとなります) 次に再度Aを受信します。 CommEventはオーバーフローとなっていますが受信データは正常です。 InBufferCountも正常です。 '--- シリアル受信 データを終わりまで受信する--- Public Sub Sr_Rcv() Err_Mes = "" Rcv_Cnt = 0 '受信データカウント Recv_Buf = "" Main_Form.Timer1.Enabled = True '制限時間 Timer_Flag = False i = 0 RCV_LOOP: Do 'CR待ちループ If Main_Form.MSComm.InBufferCount > 0 Or Recv_Buf <> "" Then Recv_Wrk = Main_Form.MSComm.Input Recv_Buf = Recv_Buf & Recv_Wrk i = InStr(Recv_Buf, vbCr) 'Debug.Print Recv_Buf, i If i > 0 Then Exit Do End If End If If Timer_Flag = True Then Timer_Flag = False Err_Mes = "タイムアウト" Exit Sub End If If Main_Form.MSComm.CommEvent > 1000 And Main_Form.MSComm.CommEvent < 1012 Then '通信エラー Exit Do End If DoEvents Loop 'CRあり Main_Form.Timer1.Enabled = False If Main_Form.MSComm.CommEvent = comRxOver Then Err_Mes = "バッファオーバーフロー" MsgBox Err_Mes, vbCritical, "エラー表示" MsgBox i & "," & Main_Form.MSComm.InBufferCount & ";" & vbCrLf & Recv_Buf 'チェック用 Do '受信内容チェック Recv_Wrk = Main_Form.MSComm.Input Recv_Buf = Recv_Buf & Recv_Wrk If Recv_Wrk = "" Then Exit Do End If DoEvents Loop MsgBox Recv_Buf '受信内容 'Exit Sub ElseIf Main_Form.MSComm.CommEvent > 1000 And Main_Form.MSComm.CommEvent < 1012 Then '通信エラー Err_Mes = "通信エラーです" & vbCrLf & "エラー番号: " & Main_Form.MSComm.CommEvent MsgBox Err_Mes, vbCritical, "エラー表示" Exit Sub End If If i > 0 Then Rcvdat(Rcv_Cnt) = Left$(Recv_Buf, i - 1) Recv_Buf = Right$(Recv_Buf, Len(Recv_Buf) - i) End If MsgBox Recv_Buf If InStr(Rcvdat(Rcv_Cnt), DEF_END) > 0 Then '"END"で受信を終わる Exit Sub End If Rcv_Cnt = Rcv_Cnt + 1 If Err_Mes = "" Then GoTo RCV_LOOP '受信ループになる End If End Sub
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.