VB6で、RS232経由の双方向制御アプリを作成しています。
しかし、Chr(128)〜(160)のように、印字できないバイナリ値を送信できずに
悩んでいます。なお印字できない文字は、イミディエイトで調べるとヌル値になっていました。
送信の形式はMSComm.output = Chr(128)のように行っています。
MSComm.outputは、バイナリ値での送信も可能とのヘルプの表記ですが、
値の設定のどこが悪いのか、ご存知の方はご教授いただけないでしょうか。
おバカな事で恐縮ですが、よろしくお願い申し上げます。
バイナリデータを送信することも可能ということでしたら、
MSComm.output = 128
とするのではないのかな?
InputModeプロパティーの値はどうなっていますか?
編集 削除早速のご助言ありがとうござます。
>副長官 2004/01/22(木) 01:26:30
>InputModeプロパティーの値はどうなっていますか?
InputModeは宣言していません。受信はASCIIのみで充分な為です。
これももしや?とは考えたのですが、未試行です。早速やってみます。
>バイナリデータを送信することも可能ということでしたら、
>MSComm.output = 128
>とするのではないのかな?
これは気づきませんでした。試してみます。Hex()は試したのですが、Chr()構文でないと受信側が受け付けませんでした。
なお、Chr()で送信できない文字は、文字コード表ではwindowsで扱えないとされている領域でした。
貴重なご助言をいただきましたご両名様に、深く御礼申し上げます。
いぜん、MSCommでBinary送信の説明をしたときのログです。
参考になりますでしょうか...
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200310/03100030.txt
Dim OutChr() As Byte
OutChr = StrConv(Chr(2) & Chr(80) & Chr(84), vbFromUnicode)
MSComm1.Output = OutChr
VBのバグだか何だかよくわからないのですが、StrConvを使用して文字列変換を行った後にバイト配列に入れてから送信してやれば出来たはずです。
上のコードは以前作ったものからの抜粋なんですが、こんな感じで問題ないと思います。
あ、バグと言うのは、そのままだと送信できないこと、のことです。
編集 削除>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
のほうがいいですよ。
送れました。
奥が深いですね。
ご教授いただきました皆様、
まことにありがとうございました。