0

シリアル経由で PLC と通信していますが、PLC の仕様には 16 進応答から値を取得するための式が記述されていません。応答を処理する Python スクリプトを作成しています。

最終結果は符号付き整数であり、C++ では「short」であり、仕様では SEND メッセージで LSB/MSB が言及されていると思いますが、これが応答に当てはまるかどうかはわかりません。

ここに私が取り組んでいる値のいくつかがあります:

18 FD = -744
20 FF = -224
07 00 = 7    (parsed OK)
0A 00 = 10   (parsed OK)
64 00 = 100  (parsed OK)
36 01 = 310  (parsed OK)
B0 04 = 1200 (parsed OK)
A4 06 = 1700 (parsed OK)

現時点では、私の計算は まで正しく解析されFF 00ますが、正しい式がわからないということは、255 を超える値が謎のままであることを意味します。

編集:質問を書いた後、明らかになりました。16 進バイトを反転する必要があります。現在、負の値は不明です。

必要に応じて、仕様をここで見つけることができます。

4

1 に答える 1

2

負の数は、2 の補数を使用してエンコードされているようです。大まかに言えば、数値の最上位ビットが設定されている場合、「実際の」値を取得するには 2^16 を減算する必要があります。

于 2013-04-11T00:16:31.587 に答える