【发布时间】:2021-12-21 03:54:55
【问题描述】:
我是 modbus 通信的新手,我必须使用 modbus 协议从一个寄存器中从逆变器读取单个值(为此,我使用 python 和 pymodbus): 从逆变器文档中我读到了寄存器文档:
注册 ADR:31249 说明:PCC处系统的有功功率(W) 碳纳米管:2 类型:S32 格式:FIX0 访问:RO
好吧,我试试我的 python 脚本是这样的:
from pymodbus.client.sync import ModbusTcpClient
client = ModbusTcpClient("192.168.1.10", port=502, timeout=3)
client.connect()
read=client.read_holding_registers(address = 31249 ,count =2,unit=1)
read.registers
所以我有这个值:
[65535, 65535]
我猜这不是寄存器的解码值,所以我尝试解码提取值:
read_encoded = read.encode()
read_encoded
b'\xff\xff\xff\xff'
read_encoded_value = int.from_bytes(read_encoded, byteorder="big")
read_encoded_value
所以如果我打印我的变量,我会得到:
4294967295
这意味着价值有点大。 读取和解码我的 modbus 寄存器值的过程是否正确?
如何从我的逆变器的 modbus 寄存器文档中提取和读取数据?
提前非常感谢
【问题讨论】:
-
S32通常表示“带符号的 32 位”,所以我怀疑您需要int.from_bytes(b'\xff\xff\xff\xff', byteorder='big', signed=True)(结果为 -1)。如果没有关于控制器的信息,您正在投票,很难进一步评论。
标签: python-3.x modbus-tcp pymodbus pymodbustcp