- ベストアンサー
シリアル通信エラーの原因と解決方法について
- VBのMSCommを使用してシリアル通信アプリを作成しましたが、WinMeのノートPCではデータ受信時にエラーが発生します。
- エラーコード1006はポートオーバーランを意味し、FIFOバッファが一杯になりデータの一部が失われた可能性があります。
- 受信バッファを低レベルに設定することで解決する可能性がありますが、現在の設定では問題が解消されていないため、他の解決策を模索しています。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
全てお察しの通りです。 おそらくWin2000マシンの方はパワーがあるので間に合っているが、Meマシンはパワー不足で間に合わず、フロー制御がかからないため、デバイス上のFIFOバッファを使い切り、そこでデータを喪失しているのでしょう。 バイナリーファイルのやりとりならソフトウェアフローは使用できませんね。相手側にもちゃんとハードウェアフローをしてもらうしかないでしょうし、それで解決するはずです。 それと、前回の回答でも書きましたが、ケーブルのせいかもしてないので、その辺はきちんと調査して切り分けてくださいね。
その他の回答 (2)
- kabasan
- ベストアンサー率44% (264/588)
受信バッファは3000バイトを指定していますから充分ですね。 MSCommのフロー制御はデバイスの受信バッファ(16バイト)の使用量によって自動的に制御線を操作してくれるはずですから、以下の2点が怪しいと思います。 ・ケーブルの結線でRTS、CTSが自分自身に戻されている。 ・相手側がフロー制御無しになっている。 MSCommのプロパティでHandshaking=0、RTSEnable=Falseとしてみて動作させ、相手がデータを送信してくるようなら、フロー制御ができていません。一度試してみてください。 あと、あんまり解決にならないんですが、コンパイルオプションで速度重視にすれば、エラーの確率をちょっぴり落とせるかも。
補足
ご回答ありがとうございます。 おっしゃる通り、Handshaking=0、RTSEnable=Falseで試してみても相手からデータを送信してきました。 これはフロー制御が出来ていないという事ですね。バイナリ-送受信の為、ソフトウェアフロー制御を行いたくないので、 MSCommの設定としてはHandShaking=2にして、RTSEnable=Trueとする設定を行い、相手側もそれに あわせるという事でよろしいのでしょうか?また、この問題はハードウェアフロー制御を行う事により、 完全に解決されるのでしょうか?あと、このエラーというのは私の推察通り、やはりFIFOバッファー(メインメモリー上 の受信バッファーではなく)上のデータ喪失と捉えてよろしいのでしょうか? 以上、再度ご回答願えればうれしいです。
- ginyou
- ベストアンサー率32% (138/431)
えっと、通信の受信バッファを何バイトにしていますか? 文章を読むと意味不明なところがあるんですが、受信バッファを1024バイト程度にしておけば、十分間に合うとおもうんですが、 逆に、受信バッファ1バイトとかするとまず間に合いませんよ。(通信速度にもよりますが)
お礼
ありがとうございました。
お礼
本当にわかりやすく説明して頂き、ありがとうございました。