如何使用pymodbus插入寄存器的输出?

2024-04-20 04:29:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用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)

我得到的结果是[3713916190]。我正在使用的仪器的文档中说:“这些寄存器每个16位……所有值都以32位IEEE标准754浮点格式报告。这使用2个顺序寄存器,最低有效16位优先。” 这是否意味着得到的浮点数是1619037139?结果应在0.2-0.4(四舍五入)范围内。谢谢你的帮助


Tags: 代码fromimportclienthostportrrsync
1条回答
网友
1楼 · 发布于 2024-04-20 04:29:09

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查询中获取原始(十六进制)结果,并以多种方式对其进行解码

相关问题 更多 >