Chr()で表示できないバイナリ値をMSCommで送信するには?

解決


エフ  2004-01-22 00:10:21  No: 81631  IP: [192.*.*.*]

VB6で、RS232経由の双方向制御アプリを作成しています。
しかし、Chr(128)〜(160)のように、印字できないバイナリ値を送信できずに
悩んでいます。なお印字できない文字は、イミディエイトで調べるとヌル値になっていました。
送信の形式はMSComm.output = Chr(128)のように行っています。
MSComm.outputは、バイナリ値での送信も可能とのヘルプの表記ですが、
値の設定のどこが悪いのか、ご存知の方はご教授いただけないでしょうか。
おバカな事で恐縮ですが、よろしくお願い申し上げます。

編集 削除
k.k  2004-01-22 01:14:00  No: 81632  IP: [192.*.*.*]

バイナリデータを送信することも可能ということでしたら、
MSComm.output = 128
とするのではないのかな?

編集 削除
副長官  2004-01-22 01:26:30  No: 81633  IP: [192.*.*.*]

InputModeプロパティーの値はどうなっていますか?

編集 削除
エフ  2004-01-22 07:22:59  No: 81634  IP: [192.*.*.*]

早速のご助言ありがとうござます。

>副長官 2004/01/22(木) 01:26:30
>InputModeプロパティーの値はどうなっていますか?
InputModeは宣言していません。受信はASCIIのみで充分な為です。
これももしや?とは考えたのですが、未試行です。早速やってみます。

>バイナリデータを送信することも可能ということでしたら、
>MSComm.output = 128
>とするのではないのかな?
これは気づきませんでした。試してみます。Hex()は試したのですが、Chr()構文でないと受信側が受け付けませんでした。

なお、Chr()で送信できない文字は、文字コード表ではwindowsで扱えないとされている領域でした。

貴重なご助言をいただきましたご両名様に、深く御礼申し上げます。

編集 削除
batchman  2004-01-22 08:58:26  No: 81635  IP: [192.*.*.*]

いぜん、MSCommでBinary送信の説明をしたときのログです。
参考になりますでしょうか...

http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200310/03100030.txt

編集 削除
sugi  2004-01-22 09:15:41  No: 81636  IP: [192.*.*.*]

Dim OutChr() As Byte
OutChr = StrConv(Chr(2) & Chr(80) & Chr(84), vbFromUnicode)
MSComm1.Output = OutChr

VBのバグだか何だかよくわからないのですが、StrConvを使用して文字列変換を行った後にバイト配列に入れてから送信してやれば出来たはずです。
上のコードは以前作ったものからの抜粋なんですが、こんな感じで問題ないと思います。

編集 削除
sugi  2004-01-22 09:18:47  No: 81637  IP: [192.*.*.*]

あ、バグと言うのは、そのままだと送信できないこと、のことです。

編集 削除
GOD  2004-01-22 10:22:19  No: 81638  IP: [192.*.*.*]

>OutChr = StrConv(Chr(2) & Chr(80) & Chr(84), vbFromUnicode)
StrConvは使用しないほうがいいでしょう。
&HE0〜&HFCの領域が0になってしまいますので。
やるなら
Dim OutChr(2) As Byte
OutCHr(0) = 2
OutCHr(1) = 80
OutCHr(2) = 84
MSComm1.Output = OutChr
のほうがいいですよ。

編集 削除
エフ  2004-01-24 06:05:00  No: 81639  IP: [192.*.*.*]

送れました。
奥が深いですね。
ご教授いただきました皆様、
まことにありがとうございました。

編集 削除