VB6.0用掲示板の過去のログ(No.2)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [管理用]

投稿日: 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をしないといけない
のではないでしょうか?

 とりあえず、送信側のみ気になったところを書いて見ました。仕様がよくわから
ないので、中途半端なレスになってしまいましたが。


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- VBレスキュー(花ちゃん) - - Web Forum -