MSCOMMを使用して0-255までの8ビットの信号を送るには?


高穂  2004-07-27 06:47:27  No: 115068  IP: [192.*.*.*]

MSCOMMを使用して、マイコン制御のため8Bitの情報( 0-255 )を送りたいのですが、
MSCOMM1.Output = Chr()で送信してしまうと、0x81以上が送れなく、トラぶっております。
何か、いい方法はないでしょうか?
よろしくお願いします。

編集 削除
36NET  2004-07-27 09:01:01  No: 115069  IP: [192.*.*.*]

0x81以上が原因ではなく対応する文字コードがないことが原因ではないでしょうか?
0xA1等は送れませんか?

方法としては送信をバイナリ形式に変えるなどでしょうか?
http://support.microsoft.com/default.aspx?scid=kb%3Bja%3B411403

編集 削除
マグ  2004-07-27 11:37:57  No: 115070  IP: [192.*.*.*]

もしかしたら、
文字などが遅れないのではないでしょうか?

編集 削除
高穂  2004-07-27 22:54:13  No: 115071  IP: [192.*.*.*]

マグさん  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()をはずすと、エラーで送信ができなくなります。
再度、アドバイスをいただけると、大変助かります。

編集 削除
魔界の仮面弁士  2004-07-28 02:52:02  No: 115072  IP: [192.*.*.*]

>   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」を渡してください。

編集 削除
高穂  2004-08-05 02:15:08  No: 115073  IP: [192.*.*.*]

魔界さん  返信ありがとうございます。  早速、トライしてみました。(変数宣言も各々Byteで宣言しなおしました。)しかし、今度は各データにByteで入力されるため、(つまり、0x13が送りたいとします。バイト配列には0x31  と 0x33に分かれ、CのようなBIT処理ができれば、解決しそうですが。。。 )できなくて、困っています。

編集 削除
ふむ  2004-08-05 10:23:11  No: 115074  IP: [192.*.*.*]

0x13送るんですよね?
dim Buf(0) as byte 
buf(0)=13
MSComm1.Output = buf
でいいんじゃないですか?

編集 削除