投稿日 | : 2005/07/26(Tue) 03:12 |
投稿者 | : Starfish |
Eメール | : |
URL | : |
タイトル | : Re: MSCommのOn_Comm受信 |
通信系は多少はわかりますが、あまり詳しくはないので、違っているところ
があるかもしれませんが。
> NAK:6バイト固定で送信されるコマンド
> セレクティング:TEXTへ入力されたバイナリー形式の文字列を送信する可変バイトのコマンド
> の二つがあります。
送るのが、NAKとセレクティングですか?又、セレクティングにデータが引っ付いている
のですか?どんなプロトコルですか?
> コマンドはボタンを押し手動で送信をかける作りになっています。
NAKとかセレクティングって、普通コマンドボタンからいきなり送信するって
普通ないですよね?テストプログラムなの?
> ' DLNGH・DLNGL設定
> COMM_CODE.DLNGH = "&H" + Left(Format(txtLen, "0000"), 2)
> COMM_CODE.DLNGL = "&H" + Right(Format(txtLen, "0000"), 2)
大文字のみの名前は、定数とか型の名前で使うことが多いから変数名に使うと
見にくいですね。(よく見るとピリオドが入っているんだ>COMM_CODE.DLNGH)
COMM_CODE.DLNGH って、バイト型の変数だと思うんですが、文字列をセット
していますね。VAL関数とかで、数値に変換してから代入しましょう。
長さを、BCDでセットしようとしています?普通はバイナリデータだと思うんですが、
であればこんなかんじでいいのでは?
COMM_CODE.DLNGH = txtLen \ 256
COMM_CODE.DLNGL = txtLen Mod 256
> j = 0
> For i = 0 To txtLen - 1 Step 1
> strTxtData = Mid(strData, 1 + 2 * i, 2)
> bytBuf = CByte("&H" & strTxtData)
> Buffer(i + j + 12) = bytBuf
>
> If bytBuf = &H10 Then
> j = j + 1
> Buffer(i + j + 12) = bytBuf
> End If
> Next i
データに、DLEがあったら、DLE+DLEにしていますよね。その場合に、
データ長は増やさないのですか?増やさない場合は、受信側が単純に
DLNGH・DLNGLからデータの長さがわからないので、受信側が面倒にな
りますね。
> COMM_CODE.BCC = "&H" & (txtLen + j + 6)
変な仕様ですね、これでは文字化けしててもチェックできませんね。又、文字列を
セットしているし、データ長が大きいとオーバフローしそうですね。
> If COMM_CODE.BCC = COMM_CODE.DLE Then
> Buffer(i + j + 14) = COMM_CODE.DLE
> Buffer(i + j + 15) = COMM_CODE.BCC
> bufLen = txtLen + 17
> Else
> Buffer(i + j + 14) = COMM_CODE.BCC
> bufLen = txtLen + 16
> End If
BCCがDLEのときは、DLE+BCCとするのですね。送信側と受信側で
あっていれば問題ないですけどね。
bufLen ですが、1大きいような気がします。又、+jをしないといけない
のではないでしょうか?
とりあえず、送信側のみ気になったところを書いて見ました。仕様がよくわから
ないので、中途半端なレスになってしまいましたが。