2017-07-11 6 views
0

RS485を介してAirbus(Modbusの変わった変種)コマンドをシリアルデバイスに送信する必要があります。私が送るコマンドは0x8181521500005315です。intをシリアル通信用のバイトに変換する

b'\x81\x81\x15\x21\x00\x00\x53\x15' 

が、私は何とか同じ形式にint型の変数を変換したい:私は正常形式でリテラルとしてコマンドを送信することができますよ。

は、ここで私がこれまで持っているものです。

def advancedWriteR(param): 
command = (0x818152*0x10000000000 + param*0x100000000 + genECC('r', param)) 

msg =command.to_bytes(8, byteorder='big') 

ser.write(msg) 

奇妙なことがMSGになるということである。

b'\x81\x81R\x15\x00\x00S\x15' 

すべてのヘルプは大歓迎です!

+0

あなたの 'param'値は何ですか?そして、 'genecC()'関数は何をしますか? – JohanL

+0

"R"を "\ x52"と "S"を "\ x53"で置き換えた場合、b '\ x81 \ x81R \ x15 \ x00 \ x00S \ x15'はb '\ x81 \ x81 \ x52 \ x15 \ x00 \ x00 \ x53 \ x15'となります。それは何が起こっているのか理解するのに役立ちますか? –

+0

param値とgenECC関数は、int変数を作成するための関数です。 – egemnay

答えて

0

B '\ X81 \ x81R \ X15 \ X00 \ x00S \ X15' 正確
bは '\ X81 \ X81 52 \ X15 \ X00 \ X00 \ 53 \ X15 \'

あなたが得ることができ、それら構造体でモジュール:

>>> import struct 
>>> struct.pack('>Q', 0x8181521500005315) 
b'\x81\x81R\x15\x00\x00S\x15' 
>>> struct.unpack('>Q', b'\x81\x81R\x15\x00\x00S\x15') 
(9331830153036190485,) 
>>> '0x{:x}'.format(9331830153036190485) 
'0x8181521500005315' 
+0

やOPの質問に組み込みの 'to_bytes'を使うことができ、' struct'を気にする必要はありません。私はOPはすでに彼がやりたいことをやったと思っていますが、Pythonがどのように戻り値を表示しているのか理解できませんでした(ASCII印刷可能文字とエスケープされた16進数値の混合)。 –

関連する問題