如何通过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:
配置步骤:
- 登录RUT241的Web管理界面(默认IP
192.168.1.1)。 - 进入「Network」→「Port Forwarding」(或「NAT」→「Port Forwarding」)菜单。
- 添加新规则:
- 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设备访问,提升安全性。
- Name:自定义,比如
- 保存规则,部分固件需重启路由器生效。
额外说明:
如果WireGuard配置已允许客户端直接访问LAN网段(比如路由器WireGuard服务器开启了LAN访问权限),则无需端口转发——直接在Python脚本中填写EzLogger的LAN IP即可访问。
内容的提问来源于stack exchange,提问作者Matthias Luh
相关产品推荐
相关产品推荐

