投稿日 | : 2005/07/19(Tue) 18:00 |
投稿者 | : GOD |
Eメール | : |
URL | : |
タイトル | : Re^3: MSCommバイナリーデータ受信処理 |
> ' データを一括で受信できるようにする
> MSComm1.InBufferCount = 0
>
--- MSDNから抜粋
InBufferCount プロパティを 0 に設定すると、受信バッファをクリアすることができます。
--- ここまで
受信ボタンを押下するたびに毎回、初期化しているみたいですが、なぜでしょうか。
ポートのオープン前に一度初期化すればいいと思うのですが。
> If Len("Buffer") = 6 Then
> >条件が常にTrueになりますが・・・
> 申し訳ございません。理解することができません。
>
"Buffer"は""で囲まれているのでBuffer という文字列です。
Len("Buffer")はBufferという文字列が6文字であるか比較しています。
その結果、条件は常にTrueを返します。
さらにいうとBuffer変数はByte配列として宣言しています。
MSComm1.InputMode = comInputModeBinary
を設定することによりMSComm1.Inputは
--- MSDNから抜粋
バイナリ データがバリアント型のバイト配列で読み取られます。
--- ここまで
となっていますので、受信バイト数は配列の次元と比較するべきです。
if Ubound(Buffer) = 5 Then
↑5と比較したのは通常なにも指定しない(Option Baseステートメント)と0〜5の要素を使用して6Byte格
納
します。UBoundは次元の最大値を返す為に5となります。
ヘルプと実験で理解してください。
> >If Mid(Buffer, 1, 1) <> COMM_CODE.DLE Then MsgBox "DLE 1 NG"
> >文字列と数値を比較するようになってますね。
> >そもそもBufferって文字列じゃない見たいですが。
> まずBufferというバイナリーデータを数値に変換することが先なのでしょうか・・?!
' If Buffer(0) <> COMM_CODE.DLE Then MsgBox "DLE 1 NG"
のコメントを外して使用すればいいはずです。