我正在使用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。可能出了什么问题?
听起来您的系统有一个错误的字节序转换。 如果您使用 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()