教えて下さい。232Cでデータを受信するのにMSCommを利用していますが、1バイトずつの受信は可能でしょうか?
現在のプログラムでは一度にデータを受信します。
(232Cからのデータは13バイトor14バイトずつふってくる)
一度に受信するデータ内容は
33 21 00 00 21 44 88 5a 4b 00 2a 2c 5d
1バイトごと受信し、解析するにはどのようにしたらいいのでしょうか?
解析は33 21 00の時は「設定完了」、21 44の時は「確認要求」などです。
ちなみに現在はこの内容を解析するのに、
MSComm1.RThreshold = 1 '1 バイト受信するごとに OnComm()呼び出し
MSComm1.InputLen = 0 'Input で受信バッファから全バイト取得
Private Sub MSComm1_OnComm()
If MSComm1.CommEvent = comEvReceive Then
で受信し、受信バイトを1バイトずつ区切り解析していますが、
この設定では一度に13バイト受信してしまいます。
受信が13バイトでも解析を1バイトずつ行えばよいのでは?
編集 削除のみさんの言われる通り、何バイト受信しても1バイトづつ
解析しながら、受信データが無くなるまで繰り返すと言う、
手法で無ければ、非同期通信でOnComm使う意味がありません。
仮にボーレートが、9600bpsであった場合、設定にもよりま
すが・・・
13 バイト × 10 ビット = 130 ビット
130 ビット ÷ 9600 ビット = 0.01354...
0.01354 × 1000 = 13.54 (ms)
13バイト受信するのに、9600ボーで、理論的に約13ミリ秒の
時間がかかることになります。で、では、1バイトごととな
りますと、約1ミリ秒です。
VB6 のコ−ドで、1ミリ秒の応答が可能な・・・と言うのは
不可能です。そこまで応答性はよくないと言うのが、経験的
な性能です。
これが、19200bpsとか、高速なボーレートでは、当然、もう
一気に受信バッファにデータが入ってきますので、1バイト
毎に応答して・・・順次解析して・・・と言うのは、完全に
無理です。何バイトあっても、順次解析を行いつつと言う、
非同期通信の本来の意味と、OnCommでの非同期受信のスタイ
ルをコーディングしなければならないと思います。
※ 他に何か重い処理をするプログラムが動けば、当然、
もっと応答性が悪くなりますので・・・
その辺を考慮され、OnCommの部分のアルゴリズムの改造に
頑張って下さい。
以上。