modbus - 使用 pymodbus 从 Epever uPower 充电器/逆变器读取 modbus 寄存器
问题描述
我在从 Epever uPower 太阳能充电器/逆变器读取 modbus 寄存器时遇到问题。我正在使用在 Raspberry Pi 上运行的 pymodbus 库,通过 USB 到 RS485 电缆进行通信。我知道硬件和电缆工作正常,因为我可以在 Windows 笔记本电脑上获取数据。它似乎也适用于 PI,因为当我在下面的代码中选择不同的单元 ID 时,我收到连接错误。
有许多从 Epever 设备读取寄存器的有据可查的示例,以下代码似乎适用于大多数设备,但我无法让它适用于较新的 uPower 设备:
import logging
logging.basicConfig()
log = logging.getLogger()
log.setLevel(logging.DEBUG)
client = ModbusClient(method = 'rtu', port = '/dev/ttyUSB0', baudrate = 115200, stopbits=1, timeout=1, parity='N' )
client.connect()
result = client.read_input_registers(0x3100,6,unit=10)
print(result.registers)
solarVoltage = float(result.registers[0] / 100.0)
solarCurrent = float(result.registers[1] / 100.0)
batteryVoltage = float(result.registers[4] / 100.0)
chargeCurrent = float(result.registers[5] / 100.0)
# Do something with the data
client.close()
调试日志显示以下内容:
DEBUG:pymodbus.transaction:Running transaction 1
DEBUG:pymodbus.transaction:SEND: 0xa 0x4 0x31 0x0 0x0 0x6 0x7f 0x8f
DEBUG:pymodbus.client.sync:New Transaction state 'SENDING'
DEBUG:pymodbus.transaction:Changing transaction state from 'SENDING' to 'WAITING FOR REPLY'
DEBUG:pymodbus.transaction:Changing transaction state from 'WAITING FOR REPLY' to 'PROCESSING REPLY'
DEBUG:pymodbus.transaction:RECV: 0xa 0x84 0x2 0xb3 0x3
DEBUG:pymodbus.framer.rtu_framer:Getting Frame - 0x84 0x2
DEBUG:pymodbus.factory:Factory Response[132]
DEBUG:pymodbus.framer.rtu_framer:Frame advanced, resetting header!!
DEBUG:pymodbus.transaction:Adding transaction 10
DEBUG:pymodbus.transaction:Getting transaction 10
DEBUG:pymodbus.transaction:Changing transaction state from 'PROCESSING REPLY' to 'TRANSACTION_COMPLETE'
Traceback (most recent call last):
File "main.py", line 11, in <module>
print(result.registers)
AttributeError: 'ExceptionResponse' object has no attribute 'registers'
感激地收到任何帮助或指点。如果我能理解代码收到 RECV 的响应,可能会有所帮助:0xa 0x84 0x2 0xb3 0x3
无论哪种方式,它似乎都没有任何寄存器....
解决方案
您需要将您的地址从 0x3100 更改为 0x3500。
我反编译了 SolarStationSoftware,发现他们将实时地址更改为 13568。
推荐阅读
- session - 会话到期日期固定为 1969
- angular - 角度5设置值嵌套表单组表单数组
- javascript - 在 Fabric.js 中获取单击对象上的当前光标位置
- c# - TLS 1.2 仍然无法与 Unity 2018.2.0b3 一起使用
- c++ - std::function、Clang 6.0 和 MSVC (10.0017134.12) - 可能的 ABI 错误或所需的编译器标志
- javascript - 动态创建时如何通过post将参数发送到php页面
- 标签被点击
- php - 如何列出所有的sql行?
- swift - 在 swift 4.1 中使用 CC_MD5
- c# - foreach 中的项目可以为空吗
- python - Python-忽略特殊字符并仅匹配文本