MSCOMMを使用して、マイコン制御のため8Bitの情報( 0-255 )を送りたいのですが、
MSCOMM1.Output = Chr()で送信してしまうと、0x81以上が送れなく、トラぶっております。
何か、いい方法はないでしょうか?
よろしくお願いします。
0x81以上が原因ではなく対応する文字コードがないことが原因ではないでしょうか?
0xA1等は送れませんか?
方法としては送信をバイナリ形式に変えるなどでしょうか?
http://support.microsoft.com/default.aspx?scid=kb%3Bja%3B411403
もしかしたら、
文字などが遅れないのではないでしょうか?
マグさん 36NETさん 返信ありがとうございます。
今日、再度試してみました。0xA1はマイコン側が、認識しています。その他大体0xA1あたりから0xDFあたりまで正しく、送れているみたいですが、0xE0以上また
0x80 - 0xA0あたり?までは認識していないですね。36NETさんからアドバイス頂いたようにバイナリ形式で送信をトライしているのですが、
Private Sub Command1_Click()
Dim Data1, Data2 As Byte
If MSComm1.PortOpen = False Then
MSComm1.PortOpen = True
End If
Data1 = Val("&H" & Text1.Text)
Data2 = Val("&H" & Text2.Text)
Delay_time = Text3
If Check1.Value = 1 Then
MSComm1.Output = Chr(Data1)
End If
If Check1.Value = 1 Or Check2.Value = 1 Then
Wait (Delay_time)
End If
If Check2.Value = 1 Then
MSComm1.Output = Chr(Data2)
End If
End Sub
で、Chr()をはずすと、エラーで送信ができなくなります。
再度、アドバイスをいただけると、大変助かります。
> Dim Data1, Data2 As Byte
この場合、Data2はByte型になりますが、
Data1は規定の型(通常はVariant型)になってしまいますよ。
> MSComm1.Output = Chr(Data1)
バイナリの送信をする場合は、Chr関数は使いません。
36NETさんの回答にある URL にもありますが、Byte型の配列をそのまま渡してください。
# データが化ける最大の原因は、バイト/文字列の相互変換にあります。
# Shift_JISにないコードは文字列に変換できないため、データが化けるわけです。
> で、Chr()をはずすと、エラーで送信ができなくなります。
渡すのは、「Byte配列」であって、「Byte」ではありません。
「Dim Data1 As Byte」ではなく、「Dim Data1() As Byte」を渡してください。
魔界さん 返信ありがとうございます。 早速、トライしてみました。(変数宣言も各々Byteで宣言しなおしました。)しかし、今度は各データにByteで入力されるため、(つまり、0x13が送りたいとします。バイト配列には0x31 と 0x33に分かれ、CのようなBIT処理ができれば、解決しそうですが。。。 )できなくて、困っています。
編集 削除0x13送るんですよね?
dim Buf(0) as byte
buf(0)=13
MSComm1.Output = buf
でいいんじゃないですか?