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


しん  2008-01-15 23:29:28  No: 100074

RS-232CでHTERMに数値データを送信したいのですが、文字データになってしまいます。どうすればよいのかよければ教えてください。


我龍院  2008-01-16 02:05:47  No: 100075

Byte配列で送る。


しん  2008-01-16 03:35:22  No: 100076

返事ありがとうございます!
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 09:39:58  No: 100077

このコードではどこもかしこも・・・
変数「i」は意味あるんですか?
1と2をByte配列で送りたいんですか?
MSCommの通信関係のプロパティはどうなっていますか?


我龍院  2008-01-16 17:43:11  No: 100078

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加