Mscommを使って外部機器とのバイナリ通信プログラムを作っています。
通常の通信はうまくいったのですがライン上にゴミが発生したりして
パリティーエラーやフレームオーバーが発生したときにアプリの動作が
重くなりしばらくするとまた復帰します。
onCommイベントでエラートラップしてInBufferCountを0にしているのですが
これはハードウェアの受信監視タイマーかなにかが働いているのでしょうか?
バイナリ通信でのエラー処理についてお教えください。
RS-232Cの通信で、テキスト・バイナリに関係なく、通信バッファ(受信)に
通信していない状態でも、何がしかデータ(ゴミ)が受信されてしまうと言う
状態は、外部機器との接続で電位が同じでない、もしくは、漏電、もしくは
外来ノイズがひどい・・・等々のことが考えられます。
RS-232Cのケーブルをシールドタイプのものに変更するか、コネクタの口金を
アースに落とすかして試しても改善しないようであれば、接続されている機器
の本体側に何等かの問題がある場合があります。
あまりひどいと、パソコン側のRS-232Cインターフェースやパソコン自体の故障
になってしまうケースがありますので、早期にノイズ源を探り、対処されるの
が好ましいと思います。
受信監視タイマーとか、そういう気のきいたものはありません。
まず電気的な問題を除去してから、正常な通信を行えるようにしてやることが
先決です。
以上。
岡田様。
早速のご指導ありがとうございます。
データのゴミについてですがご指摘のように環境の問題もありますが、
今回教えていただきたいのは通信を行う上で通常起こりうる文字化け等の
エラークリア方法についてお教え願いたいのですが。
よろしくお願いいたします。
通信エラーが発生した場合受信内容が正しくないため、バッファを
クリアしてから再度受信をやり直すのが一般的だと思います。
エラーが発生したデータは無理に使おうとせずに捨てる勇気が大切です。
受信バッファのクリア方法はVBのサンプルに載ってますよ。
ツイート | ![]() |