掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
MSCOMMについて (ID:110299)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
RS-232Cのハードウェア側のFIFOバッファの都合やOSやマシンの性能の問題 があるのですが、RThreshold=1としても、必ず1バイト受信したら割り込み が発生するわけではありません。それにそのようになったら、受信バッファ オーバーランが発生したりしますし、その為にFIFOバッファをハードウェア 側で持たなくてはならなくなっているのです。 本題としては、ボーレートやマシンの性能にもよりますが、たまたま8バイト 目で受信したことをVB側が検知したと言うか、MSCOMM側の受信バッファに 入ったと言うところですネ! では、その分を読み込んだあと、再度、あと12バイト分を受信しているはず ですので、再度、受信割り込みのOn_Commが入ってくるはずです。 ですが、RThreshold=1でなれば、仮に、RThreshold=10とかしていて、残り 受信しなければならないデータが、8バイトであった場合、On_Commは発生 しません。要は、RThreshold=1でないと、受信割り込みは必ず起きないと 言うことになります。 あと今回の部分で受信したいデータが可変長であると言う部分では、相手の モノが解らないのでなんとも言えませんが、パソコン側からコマンドを送信 して、その応答にデータを受信する場合は、予め受信しなければならない バイト数は自分が知っているわけですから、そのバイト数を受信するまで、 ソフト的な受信バッファ変数に文字列を連結していき、予定バイト数になる まで待つ方法しか無いでしょう・・・ コマンド等送信を行わず、ただ垂れ流しでデータを受信するなら、データの 末尾の区切り記号に相当するデリミタと言う何か文字が設定されていない場合 受信した文字列を繋ぎ合わせつつ、自分で、この辺が区切りだと思う部分まで 受信して、ソフト本体の方に渡すしかないでしょう。 不定長の文字列から所定のデリミタでトークンを切り出す・・・ と言う手法になるのですが・・・ とりあえずは、RThreshold=1にして、複数回のOn_Commで、受信したいデータ を漏れなく受信させることから始まります。 頑張って下さい! 以上。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.