解決済みの質問
シリアル通信のデータ欠けについて教えてください。
WindowsXP上でシリアル通信「115200bps、8、None(ODD、EVEN)、1」の設定で、1ms毎に12バイトの送受信を行っているのですが、1分ほど受信すると、データ欠けが発生します。
受信プログラムはこの問題が発覚してから、受信したデータを変数にバッファリングし、保存ボタンを押してから、ログファイルへ保存するシンプルなプログラムを作成し、確認しています。
「切り分けた内容」
1、57600bpsでも発生する
2、VB6、VisualStudio2008 C#で作成したツール及びフリーソフト(SerialDebugger)でも、データ欠けが発生する
3、RS232Cラインモニタ(キャロちゃん)で確認すると、データ欠けは発生していないので、受信側の問題と判断しています。
4、送信間隔を50msと遅くしても発生する
5、RS232C及び、USB変換したものどちらでも発生する
6、9600bpsでは、発生しない(同じデータ数での判断)
7、ケーブル長は1mほど
ちなみに通信時間に余裕が無い為、チェックサムやハンドシェイクなどの機能は、入れられません。
一般的にWindowsでシリアルの高速受信を行うと、データ欠けが発生するのが当たり前なのでしょうか?
投稿日時 - 2009-10-23 11:40:29
>VC++6.0では、文字抜けは無いとのことですが、通信速度はいくらだったで
>しょうか?
はっきり記憶にあるのは19200bps,100ms間隔で数10バイト受信です。
受信スレッドを起動した場合38400までは実験したように記憶があります。
115200bpsならCOMタイムアウトの設定もそれなりの値を設定してやる
必要が有るかと思います。
//------------- タイムアウト値設定 100ms 間隔
::GetCommTimeouts(hSerialPort, &CommTimeouts);
// 受信文字間タイムアウト[ms]
CommTimeouts.ReadIntervalTimeout= 20;大きすぎ以下同じ
// 受信文字数比例タイムアウト [ms] * 文字数
CommTimeouts.ReadTotalTimeoutMultiplier= 5;
// 受信基底タイムアウト値
CommTimeouts.ReadTotalTimeoutConstant= 20;
// 送信文字数比例タイムアウト値[ms] * 文字数
CommTimeouts.WriteTotalTimeoutMultiplier= 2;
// 送信基底タイムアウト値[ms]
CommTimeouts.WriteTotalTimeoutConstant= 50;大きすぎ
::SetCommTimeouts(hSerialPort, &CommTimeouts);
後、115200bps,1ms間隔,12バイトだと1msを超えるので、
10ms間隔ぐらいでないとうまくいかないと思います。
それか送受信フロー制御で送信側を待たせるかです。
投稿日時 - 2009-10-26 15:13:27
お礼
何度もご回答ありがとうございます。
また、サンプルまで紹介頂き、ありがとうございます。
> 後、115200bps,1ms間隔,12バイトだと1msを超えるので、
>10ms間隔ぐらいでないとうまくいかないと思います。
上記の件ですが、
12バイト = 8bit * 12 = 96bit
1秒間送信データ数 = 96bit * 1000ms = 96000bps
で、間に合うのでは無いのでしょうか?
送受信フロー制御については、検討してみます。
アドバイスありがとうございます。
投稿日時 - 2009-10-27 11:04:12
2人が「このQ&Aが役に立った」と投票しています
ベストアンサー以外の回答(3件中 1~3件目)
>一般的にWindowsでシリアルの高速受信を行うと、データ欠けが発生
>するのが当たり前なのでしょうか?
そんな事は有りません、VC++6.0で受信スレッドを起動した場合
文字抜けは経験しませんでした。
VBでスレッドが起こせるのか知りませんが受信スレッドを使えば
解決すると思います。
投稿日時 - 2009-10-23 11:52:40
お礼
ご回答ありがとうございます。
VC++6.0では、文字抜けは無いとのことですが、通信速度はいくらだったでしょうか?
VB6でも9600bpsでは、データ欠けは発生しませんでした。
VB6では、スレッドの作成はできませんが、受信イベントが発生します。データの送信間隔を遅らせても発生しますので、処理速度が間に合わなくて、発生してるわけでもなさそうなんですよね。
他にC#でも発生していますので、VB6だけの問題だとも考にくいのですが、他に情報はお持ちでは無いでしょうか?
投稿日時 - 2009-10-26 09:44:49
OKWaveのオススメ
おすすめリンク