シリアル通信エラー

解決済みの質問

シリアル通信エラー

VBのMSCommにてシリアル通信アプリを作成しました。
デスクトップPC(Win2000)では正常に動作するにも関わらず、
ノートPC(WinMe)ではデータ受信時にとりこぼしが発生する様です。
とりあえず、MSCommのOnCommイベントプロシージャ内でCommEventプロパティにて
エラーコードを引っ掛けると、1006(ポート オーバーランです。ハードウェアから 1 文字が読み取られる前に、次の文字が受信されたため、先の文字は失われました。)というエラーが返却されます。
デスクトップPCでは何日か継続して通信させておいても、全くこのエラーが出ないのに
ノートPCでは数秒~数分で頻繁に発生します。
このエラーの意味について調査したのですが、様々なHPを見ると、FIFOバッファ(通常16バイト)のエリアが一杯になり、前にかかれていたデータが上書き
されたという事ではないかという所に辿り着きました。そこで、デバイスのポート設定の詳細
にて受信バッファを低レベル(1バイト受信毎にCPU割り込みを発生)にする事により、なるべく
FIFOバッファの余裕を持たせる設定にすれば、問題は解決あるいは頻度の減少を期待出きる
と思い、設定したのですが、結果は全く変わりませんでした。そこで質問です。
1)このエラーの意味は本当にFIFOバッファのオーバーランなのでしょうか。
2)もし、そうであるならば、解決策はあるのでしょうか?  フロー制御で回避出きる問題ではありませんよね?
3)このFIFOバッファあたりの調査が可能なツールはありますでしょうか?出きれば、本当にFIFOバッファが一杯になる現象がデータとして取得出きればうれしいのですが。

現在、MSCommの設定としては以下の通りです。
Settings=115200,N,8,1
InBufferSize=3000
Handshaking=2

以上、1)~3)すべてでなくても構いません、よろしくお願いします。

投稿日時 - 2003-07-30 23:58:21

QNo.615682

すぐに回答ほしいです

質問者が選んだベストアンサー

全てお察しの通りです。
おそらくWin2000マシンの方はパワーがあるので間に合っているが、Meマシンはパワー不足で間に合わず、フロー制御がかからないため、デバイス上のFIFOバッファを使い切り、そこでデータを喪失しているのでしょう。

バイナリーファイルのやりとりならソフトウェアフローは使用できませんね。相手側にもちゃんとハードウェアフローをしてもらうしかないでしょうし、それで解決するはずです。

それと、前回の回答でも書きましたが、ケーブルのせいかもしてないので、その辺はきちんと調査して切り分けてくださいね。

投稿日時 - 2003-07-31 15:32:31

お礼

本当にわかりやすく説明して頂き、ありがとうございました。

投稿日時 - 2003-07-31 18:14:32

ANo.3

4人が「このQ&Aが役に立った」と投票しています

[  前へ  |  次へ ]

ベストアンサー以外の回答(2件中 1~2件目)

ANo.2

受信バッファは3000バイトを指定していますから充分ですね。

MSCommのフロー制御はデバイスの受信バッファ(16バイト)の使用量によって自動的に制御線を操作してくれるはずですから、以下の2点が怪しいと思います。

・ケーブルの結線でRTS、CTSが自分自身に戻されている。
・相手側がフロー制御無しになっている。

MSCommのプロパティでHandshaking=0、RTSEnable=Falseとしてみて動作させ、相手がデータを送信してくるようなら、フロー制御ができていません。一度試してみてください。


あと、あんまり解決にならないんですが、コンパイルオプションで速度重視にすれば、エラーの確率をちょっぴり落とせるかも。

投稿日時 - 2003-07-31 01:47:36

補足

ご回答ありがとうございます。
おっしゃる通り、Handshaking=0、RTSEnable=Falseで試してみても相手からデータを送信してきました。
これはフロー制御が出来ていないという事ですね。バイナリ-送受信の為、ソフトウェアフロー制御を行いたくないので、
MSCommの設定としてはHandShaking=2にして、RTSEnable=Trueとする設定を行い、相手側もそれに
あわせるという事でよろしいのでしょうか?また、この問題はハードウェアフロー制御を行う事により、
完全に解決されるのでしょうか?あと、このエラーというのは私の推察通り、やはりFIFOバッファー(メインメモリー上
の受信バッファーではなく)上のデータ喪失と捉えてよろしいのでしょうか?
以上、再度ご回答願えればうれしいです。

投稿日時 - 2003-07-31 14:46:45

ANo.1

 えっと、通信の受信バッファを何バイトにしていますか?
 文章を読むと意味不明なところがあるんですが、受信バッファを1024バイト程度にしておけば、十分間に合うとおもうんですが、

 逆に、受信バッファ1バイトとかするとまず間に合いませんよ。(通信速度にもよりますが)

投稿日時 - 2003-07-31 00:16:32

お礼

ありがとうございました。

投稿日時 - 2003-07-31 14:47:42

あわせてチェックしたい
  • MScommのOncommイベントが発生しない ...
  • MSCommで、文字化け ...
  • MSCommの受信について。 ...
PR

OKWaveのオススメ

教えて弁護士さん!

お金の悩みQ&A特集はこちら