MSComm通信中のフリーズ対策


なお  2010-04-23 10:21:39  No: 102347  IP: [192.*.*.*]

お世話になってます。
下記のようなPCのUSB(仮想COM)ポートにつないだUSBマイコンと通信
するプログラムを作りました。
ボタンを押すと通信を開始するのですが、通信完了まではおよそ3秒程度かかります。
その通信中(送信中)に万が一接続が外れたと仮定して通信中にポート
からUSBコネクタを引き抜くとVBがフリーズします。
ステップイン実行で行い、cmdw_Click()内のFor文内をステップイン動作中に
USBを引き抜くとOnComm()イベントに飛び(引き抜かなければForループが終
わるまでOnCommイベントには飛ばない)comEventTxFullに引っかかり、
End Selectの後MSComm1.Outputの部分で8021:アプリケーション定義またはオブジェクト定義のエラーと表示されれます。
そのエラーを無視してステップイン実行を続けると、For文内のMSComm1.Outputの
部分に再度差し掛かった時点でフリーズします。
このフリーズの原因は何か
また、フリーズをうまく回避して送信を中断する方法はないのかをお聞きしたいです
よろしくおねがいします。

'受信イベント発生(受信バッファ1バイト以上)
Private Sub MSComm1_OnComm()


Select Case MSComm1.CommEvent
Case comEvReceive
data = data + MSComm1.InBufferCount

    Buffer = MSComm1.Input
    txBuffer = txBuffer & Buffer
    Text2.Text = txBuffer
Case・・・


Case comEventTxFull
MsgBox "送信バッファがいっぱい", vbCritical

・   
End Select
End Sub

'テキストデーターeeprom書き込みコマンド
Private Sub cmdw_Click()
dim x as integer
x=0
For c = 1 To 32

MSComm1.Output = x & Chr(13) 'データを書き込むコマンド
x=x+10

Next c
end sub

編集 削除
K.J.K.  2010-04-24 09:26:23  No: 102348  IP: [192.*.*.*]

単純に、OnComm イベントでエラーを表す値がフラグをセットして、
それに応じて Exit For するとか。

ただ、通信プログラムの基本は状態遷移をキチンと作って、それに正しく
対応することだと思います。まず状態遷移表などを作ってみては。

編集 削除
K.J.K.  2010-04-26 09:36:13  No: 102349  IP: [192.*.*.*]

# 誤字の訂正
# 「値がフラグを」を「値をフラグに」になおしてください。

単純に、OnComm イベントでエラーを表す値をフラグにセットして、
それに応じて Exit For するとか。

バッファがいっぱいでもう書き込めないのにも関わらず、それでも
書き込もうとすればエラーを報告しますよね。

エラー番号:8021は、オブジェクトブラウザを見る限り comDCBError
となっていますね。

編集 削除
特攻隊長まるるう  2010-04-26 12:56:08  No: 102350  IP: [192.*.*.*]

マルチポスト先リンク
http://bbs.wankuma.com/index.cgi?mode=al2&namber=49130

編集 削除