首页 > 解决方案 > 使用 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

无论哪种方式,它似乎都没有任何寄存器....

标签: modbusrs485pymodbussolar

解决方案


您需要将您的地址从 0x3100 更改为 0x3500。

我反编译了 SolarStationSoftware,发现他们将实时地址更改为 13568。


推荐阅读