You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Modbus读取连接GoodWe记录仪的GoodWe逆变器?及相关设备配置咨询

解决方案:通过Modbus TCP读取GoodWe逆变器(经EzLogger3000C & WireGuard)

针对你的设备拓扑(Python客户端 → WireGuard → Teltonika RUT241 → EzLogger3000C → 逆变器),我结合实际部署GoodWe光伏系统的经验,分三个问题逐一解答:

1. 如何通过Modbus读取连接GoodWe记录仪的GoodWe逆变器?

核心逻辑是:EzLogger3000C充当了Modbus RTU(RS485)到Modbus TCP的网关,你的Python脚本不需要直接处理RTU协议,只需通过TCP连接到记录仪,指定逆变器的Modbus站号即可读取对应寄存器。

实现步骤:

  • 先确认EzLogger3000C已启用Modbus TCP服务并配置正确(详见问题2)。
  • 使用Python的pymodbus库(最常用的Modbus客户端库)编写脚本,示例代码如下:
from pymodbus.client import ModbusTcpClient

# 替换为EzLogger3000C的LAN静态IP(或WireGuard访问时的路由器转发地址)
client = ModbusTcpClient('192.168.1.100', port=502)  # 默认Modbus TCP端口为502
client.connect()

# 读取逆变器直流输入电压(示例寄存器,需参考GW25K-MT的Modbus手册)
# 注意:unit参数是逆变器的Modbus站号(默认通常为1,需和记录仪配置匹配)
response = client.read_input_registers(address=0x0000, count=2, unit=1)

if not response.isError():
    print(f"直流输入电压: {response.registers[0] / 10} V")  # 寄存器值需按手册缩放
else:
    print(f"读取失败: {response}")

client.close()
  • 关键提醒:必须用逆变器的Modbus站号作为unit参数,记录仪仅负责转发RTU帧到RS485总线,本身不占用站号。

2. GoodWe EzLogger3000C记录仪的正确配置参数

EzLogger3000C需通过Web管理界面(默认IP通常为192.168.1.10,LAN连接后访问)完成配置,核心项如下:

网络配置

  • 设置静态LAN IP:比如192.168.1.100,子网掩码255.255.255.0,网关指向Teltonika RUT241的LAN IP(如192.168.1.1),确保IP固定,避免端口转发失效。

Modbus TCP服务配置

  • 启用Modbus TCP服务:在「Modbus设置」或「网关设置」中开启TCP服务。
  • 服务端口:保持默认502(若冲突可自定义,需同步修改端口转发和Python脚本)。
  • 访问权限:允许来自LAN及WireGuard网段的访问(部分固件需添加白名单,比如WireGuard客户端网段10.0.0.0/24)。

RS485(Modbus RTU)配置

  • 波特率:9600(GW25K-MT默认RS485波特率)。
  • 数据位8、停止位1、校验位None(无校验)——必须和逆变器参数完全匹配。
  • 逆变器站号:记录逆变器的Modbus站号(默认1,可在逆变器菜单或手册确认),后续脚本需用此值。
  • 启用RTU转TCP转发:确保记录仪开启该功能,实现TCP请求与RTU帧的双向转换。

3. Teltonika RUT 241路由器的端口转发设置

由于你的Python客户端通过WireGuard连接路由器,需配置端口转发让WireGuard客户端访问LAN内的EzLogger3000C:

配置步骤:

  1. 登录RUT241的Web管理界面(默认IP192.168.1.1)。
  2. 进入「Network」→「Port Forwarding」(或「NAT」→「Port Forwarding」)菜单。
  3. 添加新规则:
    • Name:自定义,比如GoodWe-Modbus。
    • Protocol:选择TCP(Modbus TCP基于TCP协议)。
    • External Port:可填默认502,或自定义如5020(降低暴露风险)。
    • Internal IP Address:填写EzLogger3000C的静态LAN IP,比如192.168.1.100。
    • Internal Port:填写EzLogger的Modbus TCP端口(默认502)。
    • Source Address:设置为WireGuard客户端网段(如10.0.0.0/24),仅允许WireGuard设备访问,提升安全性。
  4. 保存规则,部分固件需重启路由器生效。

额外说明:

如果WireGuard配置已允许客户端直接访问LAN网段(比如路由器WireGuard服务器开启了LAN访问权限),则无需端口转发——直接在Python脚本中填写EzLogger的LAN IP即可访问。


内容的提问来源于stack exchange,提问作者Matthias Luh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 06:39:48