【解決方法】シリアル接続された RFID カード リーダーのシリアル ポートに 16 進数値を書き込む正しい方法

プログラミングQA

[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()

VB
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

データを送信して応答を取得しているように見えます。

VB
receiveddata = SerialPort1.ReadByte()

21 を受け取りました。これは、NAK (16 進数 15) のアスキー 10 進バージョンです。 これは、デバイスが送信内容を理解していないことを示しています。 返信を 16 進数値として受け取るには、次のようにします。

VB
receiveddata = Hex(SerialPort1.ReadByte())

データ文字列をデバイスに送信するには、次を使用します。

VB
SerialPort1.WriteLine(code)

よろしく

[Edit]

WriteLine は文字列に改行を追加するので、あまり使いにくいかもしれません。
書き込みを使用して、それぞれを個別に送信します。

拡張 ascii フォーマットの一部である 0x99 コードをチェックします。これをコンポートに送信すると、何か違うものが読み取られ、残りはすべて正常に見えます。 デバイスのマニュアルをもう一度確認してください。

解決策 2

わかりました、ここにあります、何という痛みです。 いずれにせよ、デフォルトのデコードは 128 文字しかサポートしないため、127 を超える値は「?」として表示されます。 または3F\

これを変更するには、SerialPort エンコーディングを変更する必要があります。 (下記参照)

VB
'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]

コメント

タイトルとURLをコピーしました