Как получить значение с плавающей точкой с библиотекой pymodbus TCP? - PullRequest
0 голосов
/ 23 апреля 2019

Я читаю некоторые значения с машины с библиотекой 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 Ответ

1 голос
/ 24 апреля 2019

Звучит так, как будто у вас неправильное преобразование 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()
...