MSCommを使用してシリアル通信を行うプログラムを作っているのですが、
今ひとつわからない部分があるのでわかられる方どうぞお知恵をお貸しください。
フロー制御をcomRTSにし送信バッファを512(デフォルト)でPCに何もつながない状態で20文字程度の送信を実行するとハード的には送信できない状態にあると思うので送信バッファにたまるだけでどこにも送信されないと思っていたのですが送信バッファのカウント(OutBufferCount)が時間の経過とともに20から0になってしまうのですが、一体送信バッファにたまった20文字程度のデータはどこにいっちゃったのでしょう?時間とともに送信バッファはこぼしていくのでしょうか?
すみません
文章をだらだら書いて何を言っているのかわからなくなっているので
コードを書きます。
'まずこれだけ送信
MSComm1.Output="konnakotoannakoto"
'接続してないから送信バッファにたまるはずだよね
Do While MSComm1.OutBufferCount<>0
'送信バッファカウントは"0"にならないはずだよね
DoEvents
Loop
'ここにこないはずだよね?無限ループになるはずだよね?
MSComm1.Output="aredousiteokuretyauno"
こんな感じです。
さらに、MSComm1.Output="aredousiteokuretyauno"のまえに
CTSHoldingプロパティによりCTSラインを監視するようにしても
MSComm1.Output="konnakotoannakoto" これで送信した
"konnakotoannakoto"の途中(たとえば残り4文字送信前)
でCTSラインが非アクティブになると残り4文字は破棄されちゃう
見たいなんですが何か対策はないものなのでしょうか?
Outputしたデータは破棄されるのは正常な処理です。
一旦Outputしたデータを取得することはできないので、もしエラーが
発生したときに消えて困るようなら予め変数かなにかに退避させてから
送信したほうがいいでしょう。
>Do While MSComm1.OutBufferCount<>0
>'送信バッファカウントは"0"にならないはずだよね
> DoEvents
>Loop
はじめはOutBufferCountが20なのでLoopする。
送信エラーが発生して DoEvents で〜OnComm のイベントが
発生する。
その際に送信しようとした(全部または一部の)データはエラーのため
送信バッファから消えてしまう。
もし送信バッファにデータが残っているなら再度送信しようとするが
またエラーが発生し 〜OnComm のイベントへ...と繰り返し
エラーのたびに送信しようとしたデータがバッファからなくなり
最終的にLoopから抜けるように見えますがどうですか?
OutBufferCountが20....でなくてMSComm1.Outputしようとしたバイト数ですね。
猫屋敷さん返信ありがとうございます。
データを破棄するのは正常なのですね。
何かほかの手をとるようにします。
ありがとうございました。
ツイート | ![]() |