RS-232CでHTERMに数値データを送信したいのですが、文字データになってしまいます。どうすればよいのかよければ教えてください。
編集 削除Byte配列で送る。
編集 削除返事ありがとうございます!
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)
このコードではどこもかしこも・・・
変数「i」は意味あるんですか?
1と2をByte配列で送りたいんですか?
MSCommの通信関係のプロパティはどうなっていますか?
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