アプリ版:「スタンプのみでお礼する」機能のリリースについて

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)すべてでなくても構いません、よろしくお願いします。

A 回答 (3件)

全てお察しの通りです。


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

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

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

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

お礼日時:2003/07/31 18:14

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



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

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

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


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

この回答への補足

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

補足日時:2003/07/31 14:46
    • good
    • 0

 えっと、通信の受信バッファを何バイトにしていますか?


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

 逆に、受信バッファ1バイトとかするとまず間に合いませんよ。(通信速度にもよりますが)
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/07/31 14:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!