■ 数値データを送信するには?

[Visual Basic Q & A 掲示板] [過去ログの一覧]


しん 2008/01/15(火) 14:29:28 <初心者>
RS-232CでHTERMに数値データを送信したいのですが、文字データになってしまいます。どうすればよいのかよければ教えてください。

我龍院 2008/01/15(火) 17:05:47
Byte配列で送る。

しん 2008/01/15(火) 18:35:22 <初心者>
返事ありがとうございます!
Byte配列で送ろうとしてもできないのですが、どこが悪いのですか?
よかったら教えてください。
            ma(3) = 1
            ma(4) = 2
            i = Val(ma(3)) & Val(ma(4))
            i = ma(3) & ma(4)
            AxMSComm1.Output = ma(3) & ma(4)

しんご 2008/01/16(水) 00:39:58 <中級者>
このコードではどこもかしこも・・・
変数「i」は意味あるんですか?
1と2をByte配列で送りたいんですか?
MSCommの通信関係のプロパティはどうなっていますか?

我龍院 2008/01/16(水) 08:43:11
MSCommコントロールのOutput プロパティは多態性が有って、
文字列をセットすると文字列を、数値をセットすると数値を、
配列をセットすると其の配列の中身を送信します。
たとえば1と2の2バイトの数値を送りたい場合は、
Dim byteData(1) As Byte
byteData(0) = 1
byteData(1) = 2
MSComm1.Output = byteSendData()
とやるわけです。
通常数値は16進で書きます、なぜかと言うと12を送ると言った場合
1と2を送りたいのか12を送りたいか紛らわしい為で、この場合は
&H1と&H2の2バイトを送ると言えば間違いが起こりにくい訳です。

VBの「&」演算子はこれも多態性を持っていて、文字列を両側にセットすると
文字列の連結を返し、どちらか一方又は両方に数値をセットすると
数値を文字列に変換してしてそれを連結して返します。
従って ma(3) & ma(4) は文字列を返していますから、数値ではなく
文字列が送られた訳です。

多分変数「i」は色々やってみたのでしょうが、このValは基本的には
引数の文字列を数値に変換して返しますが、引数に何でも来いの複雑な関数で、
Val(5)とやってもVal("5")とやっても5を返しますし、Val("&HFA")とやっても
Val(&HFA)とやっても250を返します、またVal("&HFA 5")とすると4005を
返すと言う変わり者です。

それとコードの最初に「Option Explicit」を必ず書き、変数は宣言して使いましょう、
今回の場合も下のように宣言をしていれば、エラーが出たはずです。
Dim i As Integer
i = ma(3) & ma(4)
AxMSComm1.Output = i

毎週金曜日はポイント最大3倍!さらに4倍のチャンスも!

Programming Library