私はminimalmodbusを使ってrs485プロトコルを使用するマイクロモーションフローメーターと通信しています。私はusb-rs485コンバータを使用しています。マイクロモーションモードバスのドキュメントはこちらです。minimalmodbusのPythonでスレーブからペイロードを抽出
私はこのコード
import minimalmodbus
minimalmodbus.CLOSE_PORT_AFTER_EACH_CALL=True
import serial
instrument = minimalmodbus.Instrument('/dev/ttyUSB0', 1)
instrument.serial.baudrate = 9600
instrument.serial.timeout = 1
instrument.serial.baudrate = 9600
instrument.serial.bytesize = 8
instrument.serial.parity = serial.PARITY_NONE
instrument.serial.stopbits = 1
instrument.serial.timeout = 0.05
instrument.mode = minimalmodbus.MODE_RTU
instrument.debug = True
try:
values = instrument.read_float(250, 3, 2)
print (values)
except IOError:
print("Failed")
を使用して2つのレジスタから浮動小数点数を読んだとき、それは私にこの応答を与える:
よう29.879または29.78687何かのようにする必要がありMinimalModbus debug mode. Writing to instrument (expecting 9 bytes back): '\x01\x03\x00ú\x00\x02ä:' (01 03 00 FA 00 02 E4 3A)
MinimalModbus debug mode. No sleep required before write. Time since previous read: 1502310315020.7 ms, minimum silent period: 4.01 ms.
MinimalModbus debug mode. Response from instrument: '\x01\x03\x04\x9f3Aâ\x941' (01 03 04 9F 33 41 E2 94 31) (9 bytes), roundtrip time: 28.8 ms. Timeout setting: 50.0 ms.
-3.7959221374830406e-20
それ。 bytestringの順序のために。ここには回避策があります。 https://minimalmodbus.readthedocs.io/en/master/advancedusage.html#workaround-for-floats-with-wrong-byte-order
それは、このコード
values = read_registers(3924, numberOfRegisters=2)
registerstring = chr(values[2]) + chr(values[3]) + chr(values[0]) + chr(values[1])
floatvalue = minimalmodbus._bytestringToFloat(registerstring)
または類似のものを使用して、そこに書かれたとして、我々は、通常のoutputs.Butイム
values = read_registers(3924, numberOfRegisters=2)
リターン調印int型を使用して、ここで立ち往生するバイト順を右に置くことができます2つのレジスタを読み込むと、リストに2つの値が与えられます。
[61552, 16865]
私はどのように注文の権利を設定するためにバイトを取得することになっています。今私の質問は、スレーブからペイロードを保存する方法です。私はこのバイト文字列を '\ x01 \ x03 \ x04 \ x9f3A \ x941'変数に保存したいので、バイトオーダーを変更できます。 _bytestringToFloat() に渡すので、実際の値を取得できます。私は初心者ですので、助けてください。
ありがとうございます。 –