したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | メール | |

RS232Cでバイナリファイルの終わりの検出について

1タカミ:2008/10/24(金) 07:26:22
初めまして、タカミと申します。
2台のコンピューターでバイナリデータの通信プログラムを作成しています。
データの送受信は出来たのですが、受信データの終わりを検出することが出来ません。
何か良い方法は無いでしょうか。
環境は VS2005 C# WIndows xp です。
宜しくお願いします。

2igoten:2008/10/24(金) 11:30:34
おお! 記念すべき初めての質問ですね、丁寧に説明しちゃおうかな。

バイナリデータの終わりの検出ですね。
幾つかの考え方があります。
1、通信時間を見て判断する。
2、データ長のヘッダーを付ける。
3、エンドマークを付ける。
4、ピンチェンジを利用する。

1、DataRecievedの中でタイマーを設定し有る時間に次のデータが
来ない場合は、さっきのデータが最後のデータだったんだなと判断する方法です。
送る方で連続でデータを送らない制御が必要になります。
タイマーは500mSec(0.5秒)位に設定すればよいでしょう。
この方法が一番簡単です。

2、あらかじめ送るデータ長がわかっている場合は、4バイト程度の固定のヘッダーに
長さを書き込んで送る方法が有ります。
受信側はこのヘッダーを読み込んでデータの終わりを判断します。
この方法が一番お奨めです。
データの長さを先ず送り、100mSec位してデータを送ると、受信側は
データのByte配列の大きさをあらかじめ設定できますので、受信処理が簡単になります。


3、バイナリデータにエンドマーク!と驚かれるかもしれませんが、出来ます。
「¥¥」などのエスケープキャラクタを思い出して下さい。
2バイト又は4倍とのエンドマークを付けます。
データにエンドマークと同じデータが出現した場合はエスケープで同じマークを重ねます。
受信側ではエンドマークを監視する必要が有ります。
2バイトですと同じデータの出現確立が1/65536になります。
エンドマークは0x0とか0xFF等は止めたほうがいいです。

4、DTRやCTSをデータの終わりでOn/Offする方法が有ります。
DTRの場合について説明しますと、送信側は送信が終わったら、
DTRをOffします、受信側はDSRHoldingを見ていて、データの終わりを
判断します。
送信側は再度データを送る前にDTRをONします。
送信側でDTRをOffする時はデータ送信後100mSec位開けると良いでしょう。

3タカミ:2008/10/25(土) 15:59:20
丁寧な説明ありがとうございます。
2番目の方法に挑戦してみます。
わからないことが有ったらまたお願いします。


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板