- 締切済み
以前、「USB-RS232c変換コネクタを介して通信するC++のプログ
以前、「USB-RS232c変換コネクタを介して通信するC++のプログラム」の質問をさせて頂いた者です。 http://okwave.jp/qa/q5502351.html 回答者様方のお陰で通信ができるようになったので、 VC++2005で、送信した文字列をそのまま返すプログラムを作成しました。 現状、通信等は正常に動作するのですが、 たまに受信文字列が正しく返ってこないことがあります。 不具合例) 送信文字列「test data」 受信文字列「test d」 といった具合で、途中までしか返ってきません。 この原因が分かる方、どうか教えてください。 通信は、こちらのサイトのクラスを使っています。 http://7ujm.net/C++/Rs232c.h.html よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- penta1331
- ベストアンサー率64% (16/25)
こんにちは。 RS232cクラスを見てみましたが、読み込みはどちらを使っていますか? Read_CRLFに気になった点が1つ。 CR・LFペアを受信するまでひたすら1文字ずつReadしてますよね。 ReadTotalTimeoutMultiplierが0に設定してあるので、場合によってはReadに失敗して途中で終わることがあり得る気がします。 「ReadFileを繰り返して、受信した文字をprintfなりTRACEなりするプログラム」を作って受信側でテストすれば、多少は原因の切り分けができると思います。
- koi1234
- ベストアンサー率53% (1866/3459)
どんなプログラムかいてるか分かりませんが 送信関数1回で文字列送ったとしても 受信関数1回で全ての文字列受信できるわけではありません キャラクター間タイマーなど一切気にせず受信途中で 読み込み終了して勝手に途中までしか返ってきてない と思い込んでるだけではないですか?
お礼
ご回答ありがとうございます。 お返事が遅れてしまい、申し訳ありません。 キャラクター間タイマーについては何も考えていませんでした。 いじくるとしたらバッファサイズとかでしょうか・・・。 ひとまず、自分で検討してみたいと思います。 ありがとうございました。
- SnowShower
- ベストアンサー率40% (140/348)
>といった具合で、途中までしか返ってきません。 >この原因が分かる方、どうか教えてください。 ・送信側が送信できていない。 ・受信側が受信できていない。 ・送信/受信で(ボーレート等の)設定ミスがある。 通信系は「結果」だけで「できた/できない」ではなくて、 「本当にデータが送信できているのか」という観点からプロトコルアナライザーで 通信ラインをキャプチャしながら確認するのがベストなんですが……
お礼
返事が遅くなってしまって申し訳ありません。 ご回答ありがとうございます。 プロトコルアナライザがよく分からなくて、ググってみたのですが、 結構お高い品のようですね…。 金銭的に少し辛いので見送りますが、 通信が本当にできているのかを調べることは確かに重要ですね。 今後の参考にさせていただきます。 ありがとうございました。
お礼
返事が遅くなってしまい、申し訳ありません。 ご回答ありがとうございます。 読み込みはRead_CRLFの方です。 >「ReadFileを繰り返して、受信した文字をprintfなりTRACEなりするプログラム」を作って受信側でテスト>すれば、多少は原因の切り分けができると思います。 なるほど。 この方法を使って検討させていただきたいと思います。 ありがとうございました。