如何使用 pymodbus 插入寄存器的输出?
How do I interpert the output of registers using pymodbus?
我正在使用 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]。我正在使用的仪器的文档说 "These registers are 16 bits each...All of the values are reported as 32-bit IEEE standard 754 floating point format. This uses 2 sequential registers, least significant 16 bits first."
这是否意味着生成的浮点数是 1619037139?结果应在 0.2-0.4 的范围内(四舍五入)。感谢您的帮助!
IEEE 754是浮点数编码方式,"least significant 16 bits first"是小端编码; 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 查询中获取原始(十六进制)结果并以多种方式对其进行解码。
我正在使用 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]。我正在使用的仪器的文档说 "These registers are 16 bits each...All of the values are reported as 32-bit IEEE standard 754 floating point format. This uses 2 sequential registers, least significant 16 bits first." 这是否意味着生成的浮点数是 1619037139?结果应在 0.2-0.4 的范围内(四舍五入)。感谢您的帮助!
IEEE 754是浮点数编码方式,"least significant 16 bits first"是小端编码; 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 查询中获取原始(十六进制)结果并以多种方式对其进行解码。