4. 常用通信协议与网络组网

光伏电站监控系统本质上是一个“多源异构数据汇聚”系统:逆变器、汇流箱、智能电表、气象站、跟踪支架控制器、储能PCS、箱变测控等设备来自不同厂商,接口形态从RS-485串口到以太网、光纤、4G/5G无线都有。通信协议决定了这些设备能否被统一采集、统一建模、统一上送。本节围绕光伏监控中最常见的三类协议——Modbus、IEC 61850、MQTT——讲清它们的定位差异、适用场景与组网方式,并给出可落地的选型与配置思路。

一、三类协议的定位差异

Modbus是工业现场最普及的轻量级协议,分为Modbus RTU(串行)和Modbus TCP(以太网)。它采用“主站轮询、从站应答”的请求-响应模式,数据模型简单:线圈、离散输入、输入寄存器、保持寄存器四类地址空间。光伏逆变器、汇流箱、电表几乎都提供Modbus接口,寄存器表由厂商文档给出。它的优点是实现成本低、调试工具多;缺点是缺乏统一语义模型,同一物理量在不同厂商的寄存器地址和缩放系数不同,且轮询机制在设备数量多时实时性下降。

IEC 61850最初为变电站自动化设计,强调“面向对象建模”和“互操作性”。它把设备抽象为逻辑设备(LD)、逻辑节点(LN)、数据对象(DO)和数据属性(DA),并通过SCL配置文件(ICD/CID)描述能力。通信上支持MMS(客户端/服务器)、GOOSE(快速跳闸信号)、SV(采样值)。在光伏监控中,IEC 61850主要用于升压站、并网点、箱变测控等需要与电网调度对接的场合,尤其是大型地面电站的站控层与调度数据网之间。

MQTT是面向物联网的发布/订阅协议,基于TCP,采用Broker中转。设备作为Publisher把数据发布到Topic,监控平台作为Subscriber订阅Topic。它天然支持一对多、断线重连、QoS等级(0/1/2)和遗嘱消息,非常适合分布式光伏、屋顶电站、跨区域多站点汇聚等网络不稳定、设备数量大的场景。缺点是它只负责传输,不定义数据语义,需要在上层约定Topic命名和Payload格式(常用JSON)。

光伏监控三类协议:现场层—站控层—云平台组网关系 现场层(设备侧) 组串逆变器 Modbus RTU / TCP 汇流箱 / 智能电表 Modbus RTU (RS-485) 气象站 / 跟踪支架 Modbus RTU / 私有 箱变测控 / 保护 IEC 61850 MMS/GOOSE 储能PCS / 环境传感器 Modbus / MQTT 站控层(本地汇聚与调度对接) 数据采集网关 / 通信管理机 Modbus主站轮询 + 协议转换 站控层交换机(光纤环网) IEC 61850 MMS 上送 远动装置 / 调度数据网 IEC 61850 / IEC 104 本地SCADA 实时监视 云平台层(远程集中监控) MQTT Broker Topic 分发 / QoS 1 时序数据库 / 消息队列 JSON Payload 解析入库 监控应用 / 告警 / 报表 多站点集中展示 实线:现场采集与站控上送 虚线:经网关/边缘计算转 MQTT 上云

二、Modbus在光伏监控中的实际用法

以一台组串逆变器为例,厂商寄存器表通常给出:交流有功功率在保持寄存器40083,单位0.1kW,有符号16位;日发电量在40101,单位0.1kWh,无符号32位,高字在前。采集网关作为Modbus RTU主站,通过RS-485总线轮询,波特率9600、8位数据位、无校验、1位停止位,从站地址1。轮询周期设为5秒,单条读取指令一次读20个寄存器,减少往返次数。

# 示例:用 pymodbus 读取逆变器有功功率与日发电量(教学示例)
from pymodbus.client import ModbusSerialClient

client = ModbusSerialClient(
    port='/dev/ttyUSB0', baudrate=9600,
    bytesize=8, parity='N', stopbits=1, timeout=1
)
client.connect()

# 读保持寄存器 40083 起 2 个寄存器(地址偏移 82)
rr = client.read_holding_registers(address=82, count=2, slave=1)
power_raw = rr.registers[0]
power_kw = power_raw * 0.1 if power_raw < 32768 else (power_raw - 65536) * 0.1

# 读日发电量 40101 起 2 个寄存器(32位,高字在前)
rr2 = client.read_holding_registers(address=100, count=2, slave=1)
energy_kwh = (rr2.registers[0] << 16 | rr2.registers[1]) * 0.1
print(power_kw, energy_kwh)

关键判断点:若读回值恒为0或异常大,先核对地址偏移(40001对应偏移0还是1)、字节序(高字在前/低字在前)和缩放系数;若出现超时,检查RS-485终端电阻、屏蔽层单端接地和总线长度(9600bps下建议不超过1200米)。

三、IEC 61850的适用边界

IEC 61850不适合直接用于组串级设备采集,因为其建模和配置成本高,且多数逆变器不原生支持。它真正的价值在升压站和并网点:箱变测控、保护装置、电能计量等通过MMS上送站控层,GOOSE用于站内快速联锁。工程上通常由通信管理机把Modbus采集的逆变器数据转换为IEC 61850模型,再统一上送调度。配置时需关注ICD文件导入、数据集(DataSet)定义、报告控制块(BRCB/URCB)的触发条件和缓冲时间。

四、MQTT的组网与Topic设计

分布式光伏站点分散、公网质量不稳定,MQTT是更合适的上云通道。典型组网:现场网关采集Modbus数据后,以JSON格式发布到Broker。Topic建议按层级设计,例如:

pv/{stationId}/{deviceType}/{deviceId}/telemetry
示例:pv/ST001/inverter/INV-03/telemetry
Payload 示例:
{"ts":1718000000,"pac_kw":52.3,"eday_kwh":210.5,"status":1}

QoS选择:遥测数据用QoS 1保证至少一次送达;告警用QoS 1并配合遗嘱消息(Last Will)检测网关离线;高频原始数据可用QoS 0降低开销。Broker端再通过规则引擎写入时序数据库。需要注意:MQTT不保证顺序,时间戳必须由网关携带;Topic层级不宜过深,否则订阅通配符匹配效率下降。

五、选型与组网对照

对比项ModbusIEC 61850MQTT
典型场景逆变器、汇流箱、电表采集升压站、并网点、调度对接分布式站点上云、多站汇聚
通信模式主站轮询/从站应答客户端/服务器 + 发布/订阅发布/订阅(Broker中转)
数据语义寄存器地址,无语义面向对象模型,语义完整Topic + Payload,需自定义
实时性秒级,受轮询周期限制毫秒级(GOOSE)秒级,受网络影响
网络要求RS-485/以太网,局域网站内光纤环网公网/4G/5G,可跨区域
配置成本低高(SCL建模)中(Topic与Payload约定)
实际工程中三类协议常组合使用:现场层用Modbus采集,站控层用IEC 61850对接调度,云平台用MQTT汇聚。网关承担协议转换和边缘计算,是组网的关键节点。
常见排障顺序:先确认物理层(供电、接线、终端电阻),再确认链路层(波特率、IP、端口),最后核对应用层(寄存器地址、字节序、Topic、QoS)。不要一上来就改协议配置。

总结来看,协议选型不是“越先进越好”,而是匹配场景:设备级采集优先Modbus,站控与调度对接优先IEC 61850,远程分散汇聚优先MQTT。组网时把网关放在正确的位置,明确每一层的输入输出和转换关系,才能让监控系统稳定、可维护地运行。