[ad_1]
こんにちは、
問題があります。シリアル ポートの Hex コードに正しい方法を書き込む方法がわかりません。
シリアルポートに次を書き込む必要があります。
&H02 &H00 &H09 &H35 &H32 &H08 &H99
デモ プログラムがあり、シリアル ポートに書き込まれるコードを確認できます。
送信: 02 00 09 35 32 08 99
答え:06
送信 : 05
答え : 02 00 04 035 32 08 59 03 53
私は次のことをしようとしました:
SerialPort1.Open()
Dim code As String = "" Dim receiveddata As Byte = 0
コード = Chr(&H2) + Chr(&H0) + Chr(&H9) + Chr(&H35) + Chr(&H32) + Chr(&H8) + Chr(&H99)
SerialPort1.Write(コード)
receiveddata = SerialPort1.ReadByte() ‘ 通常は 06 を受け取るはずですが、21 を受け取るので正しくありません。
マニュアルの chr(&Hxx) が原因で間違ったコードを送信したと思います。
したがって、私のシステムが正しくない可能性があると思います。
ありがとう。
よろしく
ディディエ
解決策 1
データを送信して応答を取得しているように見えます。
receiveddata = SerialPort1.ReadByte()
21 を受け取りました。これは、NAK (16 進数 15) のアスキー 10 進バージョンです。 これは、デバイスが送信内容を理解していないことを示しています。 返信を 16 進数値として受け取るには、次のようにします。
receiveddata = Hex(SerialPort1.ReadByte())
データ文字列をデバイスに送信するには、次を使用します。
SerialPort1.WriteLine(code)
よろしく
[Edit]
WriteLine は文字列に改行を追加するので、あまり使いにくいかもしれません。
書き込みを使用して、それぞれを個別に送信します。
拡張 ascii フォーマットの一部である 0x99 コードをチェックします。これをコンポートに送信すると、何か違うものが読み取られ、残りはすべて正常に見えます。 デバイスのマニュアルをもう一度確認してください。
解決策 2
わかりました、ここにあります、何という痛みです。 いずれにせよ、デフォルトのデコードは 128 文字しかサポートしないため、127 を超える値は「?」として表示されます。 または3F\
これを変更するには、SerialPort エンコーディングを変更する必要があります。 (下記参照)
'Other Serial Port Property SerialPort1.Parity = IO.Ports.Parity.None SerialPort1.StopBits = IO.Ports.StopBits.One SerialPort1.DataBits = 8 SerialPort1.Encoding = System.Text.Encoding.GetEncoding(28605) 'Then for your output array '(Note I am ussing an array here this will only work with integers) Dim arCommand(6) As Int16 arCommand(0) = &H2 arCommand(1) = &H0 arCommand(2) = &H9 arCommand(3) = &H35 arCommand(4) = &H32 arCommand(5) = &H8 arCommand(6) = &H99 Dim x As Int16 'This one and the array should be declared at the class level For x = 0 To 6 SerialPort1.Write(Convert.ToChar(arCommand(x))) Next
エンコーディング機能の完全なリストについては、この MSDN リンクを参照してください。
http://msdn.microsoft.com/en-us/library/system.text.encoding.getencodings.aspx[^]
ディディエ、これに 5 を投票してください。
よろしく
[ad_2]
コメント