Как получить значение с плавающей точкой с библиотекой pymodbus TCP?
Я читаю некоторые значения с компьютера с библиотекой pymodbusTCP, но у меня неправильные значения при чтении с плавающей точкой. Функция для получения значений:
def ler_dado(endereco,tipo):
if tipo == "float":
valor = modbus.read_holding_registers(endereco,1*2)
return [utils.decode_ieee(f) for f in utils.word_list_to_long(valor)][0]
if tipo == "int":
return modbus.read_holding_registers(endereco,1)[0]
Например, истинное значение 367, но читается 366. Что может быть не так?
1 ответ
Похоже, у вас неправильное преобразование Endian для вашей системы. Если вы используете конвертер pymodbus.payload, вы можете изменить ваши порядковые преобразования, чтобы получить правильные данные.
from pymodbus.constants import Endian
from pymodbus.client.sync import ModbusTcpClient
from pymodbus.payload import BinaryPayloadDecoder
UNIT = 0x01
client = ModbusTcpClient(config_modbus['ip'],config_modbus['port'])
client.connect()
result = client.read_holding_registers(entry['address'],entry['count'],unit=UNIT)
decoder = BinaryPayloadDecoder.fromRegisters(result.registers, Endian.Big, wordorder=Endian.Big)
value = decoder.decode_32bit_float()