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

如何通过Modbus读取连接至GoodWe EzLogger3000C的GoodWe逆变器数据?及Teltonika RUT 241路由器端口转发与Logger配置方案咨询

解答:通过Modbus TCP读取GoodWe逆变器数据及相关配置方案

我来一步步帮你拆解这两个问题,结合你的系统架构给出具体的实现步骤和配置细节:


1. 如何通过Modbus读取连接至GoodWe数据采集器的GoodWe逆变器数据?

GoodWe EzLogger3000C本质是一个Modbus RTU转TCP的网关——它负责和逆变器做RS485/RTU通信,同时对外提供Modbus TCP服务器接口,你的Python客户端只需要和EzLogger建立TCP连接,就能间接读取逆变器的数据。具体步骤如下:

核心准备工作

  • 先获取GoodWe SMT GW25K-MT的Modbus寄存器映射表:这是关键,不同型号逆变器的寄存器地址、数据类型(16位/32位)、寄存器类型(输入寄存器/保持寄存器)都不一样。比如总交流功率、直流输入电压、当日发电量等参数,都需要对应到正确的寄存器地址,还要注意数据的字节序(大端/小端)。
  • 选择Python的Modbus库:推荐使用pymodbus,这是目前最常用的开源Modbus实现库。

示例Python代码(基于pymodbus)

from pymodbus.client import ModbusTcpClient
from pymodbus.payload import BinaryPayloadDecoder
from pymodbus.constants import Endian

# 配置参数:这里的IP是通过WireGuard+端口转发后能访问到EzLogger的地址
EZLOGGER_IP = "10.0.0.1"  # 假设RUT241的WireGuard地址,或者直接映射后的端口对应的地址
EZLOGGER_PORT = 502
INVERTER_SLAVE_ID = 1  # 逆变器的Modbus从站地址,默认一般是1

# 建立Modbus TCP连接
client = ModbusTcpClient(EZLOGGER_IP, port=EZLOGGER_PORT)
connection = client.connect()

if connection:
    # 读取逆变器的总交流功率(示例:假设对应输入寄存器地址0x0034,32位大端格式)
    response = client.read_input_registers(address=0x0034, count=2, slave=INVERTER_SLAVE_ID)
    
    if not response.isError():
        # 解码32位浮点型数据(根据寄存器表的格式调整)
        decoder = BinaryPayloadDecoder.fromRegisters(response.registers, byteorder=Endian.Big, wordorder=Endian.Big)
        total_power = decoder.decode_32bit_float()
        print(f"逆变器总交流功率:{total_power} kW")
    else:
        print(f"读取失败:{response}")
    
    # 关闭连接
    client.close()
else:
    print("无法连接到EzLogger3000C")

注意事项

  • 一定要根据GW25K-MT的官方寄存器表调整代码中的寄存器地址、数据类型和字节序,比如有些参数是16位整数,需要除以对应系数(比如电压寄存器值除以10才是实际V数)。
  • 确保EzLogger已经正确和逆变器建立RS485通信(这依赖于下面的EzLogger配置)。

2. GoodWe EzLogger3000C的配置参数及Teltonika RUT 241端口转发方案

2.1 GoodWe EzLogger3000C核心配置

你需要通过EzLogger的Web管理界面(默认IP一般是192.168.1.10,具体看说明书)完成以下配置:

  • LAN网络配置:
    • 设置固定IP地址(比如192.168.1.100),子网掩码255.255.255.0,网关设为Teltonika RUT241的LAN口IP(比如192.168.1.1)。固定IP是端口转发的前提,避免DHCP分配的IP变动导致转发失效。
  • Modbus TCP服务器配置:
    • 开启「Modbus TCP服务器」功能,设置监听端口(默认是502,建议保持默认,也可以自定义,但要和路由器转发规则一致)。
    • 设置允许访问的客户端IP范围:为了安全,建议只允许你的WireGuard子网(比如10.0.0.0/24)访问,而不是0.0.0.0/0(允许所有)。
  • RS485/Modbus RTU配置:
    • 波特率:设置为9600(GoodWe逆变器默认波特率,若逆变器有修改则同步调整)。
    • 数据位:8,停止位:1,奇偶校验:无。
    • 逆变器从站地址:设置为和逆变器一致的数值(默认一般是1,若有多个逆变器则每个地址唯一)。

2.2 Teltonika RUT 241端口转发设置

你的架构中,笔记本/服务器通过WireGuard连接到RUT241,所以需要配置从WireGuard子网到EzLogger LAN IP的端口转发规则:

  1. 登录RUT241的Web管理界面,找到「NAT」→「Port Forwarding」(或者类似命名的菜单,不同固件版本可能略有差异)。
  2. 添加一条新的端口转发规则:
    • 外部接口:选择WireGuard隧道接口(比如命名为wg0,或者「WireGuard」)。
    • 外部端口:填写502(和EzLogger的Modbus TCP端口一致)。
    • 内部IP地址:填写EzLogger的固定LAN IP(比如192.168.1.100)。
    • 内部端口:填写502。
    • 协议:选择TCP(Modbus TCP基于TCP协议)。
    • 描述:可以填Modbus to GoodWe EzLogger方便识别。
  3. 配置防火墙规则(若RUT241默认禁止跨子网访问):
    • 找到「Firewall」→「Rules」,添加一条允许规则:
      • 源地址:WireGuard子网(比如10.0.0.0/24)。
      • 目标地址:EzLogger的LAN IP(192.168.1.100)。
      • 目标端口:502。
      • 协议:TCP。
      • 动作:Accept。

验证配置

配置完成后,可以在你的笔记本/服务器上执行telnet 10.0.0.1 502(假设RUT241的WireGuard地址是10.0.0.1),如果能连通,说明端口转发和EzLogger的Modbus服务正常。


内容的提问来源于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.27 09:22:30