В настоящее время я кодирую modbus rtu в python, используя пакет pymodbus. В этом случае я буду считывать данные с датчика TDS с помощью функционального кода 4/Read Input Registers (см. техническое описание Aquas SMR-08). Данные были успешно получены, и я конвертирую их в hex, но данные должны быть преобразованы снова в правильное значение. Я пытаюсь преобразовать шестнадцатеричное значение с помощью scadacore (онлайн-конвертер шестнадцатеричных данных) и вижу правильные данные в Float Big Endian (ABCD)
Шестнадцатеричное значение равно 41FB:
результат преобразования 31,375 (это значение температуры):
Итак, как алгоритм или какой код pymodbus преобразовать, как scadacore (онлайн-преобразование гекса)?
кто-нибудь может помочь? Заранее спасибо, и извините за мой плохой английский, хи-хи-хи
это мой код
import time
from pymodbus.client.sync import ModbusSerialClient as ModbusClient
from pymodbus.constants import Defaults
from pymodbus.constants import Endian
from pymodbus.payload import BinaryPayloadDecoder
Defaults.RetryOnEmpty = True
Defaults.Timeout = 5
Defaults.Retries = 5
client = ModbusClient(method='rtu', port='/dev/ttyUSB0', timeout=2, stopbits=1, bytesize=8,
parity='N', baudrate=19200)
client.connect()
while True:
tds1 = client.read_input_registers(address=0, count=2, unit=1)
bacatds1 = tds1.registers[0]
bacatds2 = tds1.registers[1]
tds1hex = hex(bacatds1)
tds2hex = hex(bacatds2)
print(tds1hex)
print(tds2hex)
decoder1 = BinaryPayloadDecoder.fromRegisters(tds1.registers, Endian.Little)
hasil1 = decoder1.decode_32bit_float()
print(hasil1)
print('==================================')
time.sleep(1)
# ----------------------------------------------------------------
tds2 = client.read_input_registers(address=1, count=2, unit=1)
bacatds3 = tds2.registers[0]
bacatds4 = tds2.registers[1]
tds3hex = hex(bacatds3)
tds4hex = hex(bacatds4)
print(tds3hex)
print(tds4hex)
decoder2 = BinaryPayloadDecoder.fromRegisters(tds2.registers, Endian.Big)
hasil2 = decoder2.decode_32bit_float()
print(hasil2)
print('===================================')
time.sleep(1)