0

Prologix GPIB-USB アダプターを LISTEN のみのモードで使用して、2 つの機器 (半導体関連、つまりテスターとプローバー) 間の通信を解読しています。

マニュアルに記載されているように、ほとんどの情報をデコードできますが、データの 1 つ、つまり BIN カテゴリを変換できません。

サンプルデータ :

018022
C@A@@@@@@@
Q
O
A
A
019022
CA@A@@@@@@

ツールマニュアル:

受信データの読み方マニュアル

私が興味を持っているデータは、「C@A@@@@@@@」と「CA@A@@@@@@」です。最初のバイト、つまり「C」は、渡されるコマンドです。 「@」または「A」にすることができ、実際にテストが合格/不合格であるかどうかを示します。

バイナリへの変換:

@ ---> 0100 0000
A ---> 0100 0001

Result は Byte の下位 4 ビットの 0000(Pass) と 0001(Fail) で決まります。ここまでは正しくデコードできています。

次の 8 バイトは BIN カテゴリを表し、テスト中にテストが失敗した場合は 5 に設定され、合格の場合は 1 に設定されるため、「C@A@@@@@@@」の BIN 番号は 1 であり、対応する BIN 番号は「CA@A@@@@@@」は5に設定されています。

GPIB アダプタから生成されたデータから 5 と 1 の値をデコードできません。実際に5と1としてデコードできるかどうか誰かが提案できますか.受信データの読み取り方法を説明するマニュアルを添付しました.

長い間これにこだわっています:-(

4

1 に答える 1

0

struct.unpack を使用して、バイト値を数値にデコードできます。長さ (この場合は 8 バイト) と、数値がビッグ エンディアンかリトル エンディアンか (わからない場合はテストしてください) を知る必要があります。そして、番号が署名されているか署名されていないか。

文字列が "C@A@@@@@@@" で、バイナリ データが 3 ~ 10 バイトの場合は、試すことができます。

import struct    
foo="C@A@@@@@@@"
print struct.unpack(">Q", foo[3:11])

これは、8 バイト長の符号なしビッグエンディアン数をデコードします。手順については、 https://docs.python.org/2/library/struct.htmlを参照してください。

お役に立てれば。

ハンヌ

于 2016-10-18T10:38:35.673 に答える