我如何使用pymodbus中断寄存器的输出?

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

我正在使用pymodbus通过modbus获取一些寄存器的值。我有一个联系和结果,但是我对如何解释结果感到困惑。我的代码是:

from pymodbus.client.sync import ModbusTCPClient

client = ModbusTcpClient(host ="192.168.0.42", port= 502)
client.conect()
rr = client.read_input_registers(0,2, unit=42)
print(rr.registers)

我得到的结果是[37139,16190]。我正在使用的仪器的文档说:“这些寄存器均为16位...所有值均报告为32位IEEE标准754浮点格式。它使用2个连续寄存器,最低有效位在前16位。 ”这是否意味着最终的浮点数为1619037139?结果应在0.2-0.4(四舍五入)的范围内。感谢您的帮助!

python endianness modbus pymodbus
1个回答
0
投票

IEEE 754是对浮点数进行编码的一种手段,“最低的16位在前”意味着很少的字节序编码; pymodbus可以帮助您解码此格式:

from pymodbus.constants import Endian
from pymodbus.payload import BinaryPayloadDecoder

registers = [37139,16190]
decoder = BinaryPayloadDecoder.fromRegisters(registers, wordorder=Endian.Little)
print ("Result: " + str(decoder.decode_32bit_float()))

([try it-结果是0.18659807741641998,这似乎与您的期望相符。]。

请注意,this是用于从Modbus查询中获取原始(十六进制)结果并以多种方式对其进行解码的有用工具。

© www.soinside.com 2019 - 2024. All rights reserved.