如何使用pymodbus TCP库获取浮点值?

问题描述 投票:0回答:1

我正在从具有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.可能有什么不对?

python python-3.x modbus pymodbustcp
1个回答
1
投票

听起来你的系统有一个Endian转换错误。如果使用pymodbus.payload转换器,则可以更改endian转换以获取正确的数据。

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()
© www.soinside.com 2019 - 2024. All rights reserved.