4、通信协议入门:Modbus RTU/TCP、IEC 104、MQTT在EMS中的应用场景

大家好,我是老张。今天咱们聊聊通信协议。

很多刚入行的朋友一听到「协议」两个字就头大。觉得这东西太抽象,看不见摸不着。其实没那么复杂。说白了,协议就是设备之间沟通的「语言」。你想想看,中国人说中文,英国人说英文,设备也一样——有的设备说Modbus,有的说IEC 104,还有的说MQTT。

在EMS系统里,这些协议各司其职。选对了,系统跑得顺;选错了,调试能让你怀疑人生。我这些年踩过的坑,今天一次性给你讲清楚。

4.1 为什么EMS需要多种协议?

先问一个问题:一个光伏电站里有多少种设备?

  • 逆变器(可能来自华为、阳光、锦浪)
  • 储能变流器(PCS)
  • 电池管理系统(BMS)
  • 电表(多功能电力仪表)
  • 气象站
  • 温控设备
  • ……

这些设备来自不同厂家,年代不同,接口不同。有的用串口,有的用以太网,有的走无线。你不可能让所有设备都说同一种话。所以,EMS必须是个「多语言者」。

核心原则:协议的选择取决于三个因素——设备能力、传输距离、实时性要求。

我个人习惯把协议分成两类:

  • 现场总线类:Modbus RTU、Modbus TCP。适合近距离、确定性高的场景。
  • 网络通信类:IEC 104、MQTT。适合远距离、需要上云或调度的场景。

下面我一个一个讲。

4.2 Modbus RTU/TCP:最通用的「普通话」

Modbus 是工业领域最古老的协议之一,1979年就诞生了。但它至今仍然活跃在光伏储能行业。为什么?因为简单、可靠、免费。

4.2.1 Modbus RTU vs Modbus TCP

特性 Modbus RTU Modbus TCP
物理层 RS-232 / RS-485 以太网
传输方式 串行,半双工 网络,全双工
最大距离 约1200米(RS-485) 100米(网线),可扩展
节点数 最多247个 理论上无限制
典型场景 电表、小型逆变器 PCS、大型逆变器

嗯,这里要注意:Modbus RTU 虽然慢(波特率通常9600或19200),但抗干扰能力强。我在一个偏远的光伏电站遇到过,RS-485线缆拉了800多米,Modbus TCP死活连不上,最后换成RTU,稳如老狗。

4.2.2 数据模型与寄存器

Modbus 的核心是寄存器。说白了,就是设备把数据放在一个个「抽屉」里,EMS去读或写这些抽屉。

// 常见的寄存器类型
// 0x 开头的:线圈(Coil),可读可写,1位
// 1x 开头的:离散输入(Discrete Input),只读,1位
// 3x 开头的:输入寄存器(Input Register),只读,16位
// 4x 开头的:保持寄存器(Holding Register),可读可写,16位

// 举个例子:读取逆变器的当前功率(地址40001)
// 发送:01 03 00 00 00 01 84 0A
// 含义:设备地址1,功能码03(读保持寄存器),起始地址0,读1个寄存器,CRC校验

我曾经调试一个项目,逆变器厂家给的寄存器地址表写的是「40001」,我直接用地址1去读,死活读不到。后来才发现,他们说的40001是PLC的地址习惯,实际Modbus地址是0。这个坑,我至少见过三次。

避坑指南:拿到设备手册后,先确认地址是「协议地址」还是「PLC地址」。协议地址通常从0开始,PLC地址从1或40001开始。差一个数,数据全乱。

4.3 IEC 104:电力调度的「官方语言」

如果你做的是并网型储能项目,迟早要跟IEC 104打交道。这是电力行业的标准协议,电网调度中心用它来下发指令、采集数据。

说实话,IEC 104比Modbus复杂得多。它定义了完整的通信流程,包括:

  • 建立连接(STARTDT/STOPDT)
  • 数据上报(遥测、遥信)
  • 控制指令(遥控、遥调)
  • 时钟同步
  • 文件传输

我记得第一次接触IEC 104时,光看协议文档就看了三天。但实际用起来,核心就几个点:

  1. ASDU(应用服务数据单元):数据的基本单位。比如一个遥测点(电压、电流)就是一个ASDU。
  2. 公共地址:每个设备有一个唯一的地址,类似Modbus的设备地址。
  3. 信息对象地址:每个数据点有唯一的地址,类似Modbus的寄存器地址。
// IEC 104 报文示例(读取遥测数据)
// 发送:68 0E 00 00 00 00 64 01 06 00 01 00 00 00 00 14
// 68:起始字节
// 0E:报文长度(14字节)
// 64:发送序号高位
// 01:发送序号低位
// 06:接收序号高位
// 00:接收序号低位
// 后面是ASDU内容...

嗯,这里要提醒一下:IEC 104的调试工具很重要。我建议用 IEC 104 Slave SimulatorCAS Modbus Scanner(它也支持104)。没有工具,纯靠抓包分析,效率极低。

重要提醒:IEC 104的通信超时设置很关键。电网调度通常要求响应时间小于1秒。如果网络延迟大,或者EMS处理慢,调度会判定通信中断,直接下发停机指令。我在一个项目中吃过这个亏,后来把超时从5秒改到3秒,才通过验收。

4.4 MQTT:云端的「快递员」

MQTT 是近几年在光伏储能领域火起来的协议。它基于发布/订阅模式,特别适合设备上云、远程监控的场景。

为什么用MQTT?

  • 轻量级:报文头很小,适合带宽有限的场景(比如4G网络)。
  • 双向通信:设备可以上报数据,云端也可以下发指令。
  • QoS(服务质量):支持三种级别,从「最多发一次」到「确保送达」。
  • 保留消息:新设备上线后,能立即获取最新状态。

我参与的一个分布式光伏项目,200多个屋顶电站,每个电站有一个4G网关。如果用Modbus TCP轮询,带宽根本扛不住。换成MQTT后,每个网关只在上报数据时占用带宽,平时几乎不消耗流量。一个月下来,流量费省了60%。

4.4.1 主题设计

MQTT 的核心是主题(Topic)。主题设计得好,系统扩展性就强。我一般这样设计:

// 主题结构
// 电站ID/设备类型/设备ID/数据类型

// 示例
solar_plant_001/inverter/INV_01/power      // 逆变器功率
solar_plant_001/bms/BMS_01/soc             // 电池SOC
solar_plant_001/meter/MTR_01/energy        // 电表电量

// 云端下发指令
cloud/cmd/solar_plant_001/pcs/PCS_01/set_power  // 设置PCS功率

这样做的好处是:

  • 通过通配符可以批量订阅(比如 solar_plant_001/+/+/power 订阅所有功率数据)
  • 新增设备不影响已有主题
  • 权限控制方便(不同设备只能发布自己的主题)

个人经验:MQTT的QoS级别不要盲目用2(确保送达)。在弱网环境下,QoS 2会导致大量重传,反而降低效率。我一般用QoS 1,配合心跳和重连机制,效果很好。

4.5 协议对比与选型建议

说了这么多,到底怎么选?我画了一张图,帮你快速决策。

EMS通信协议选型决策树 设备通信需求 本地/现场通信 远程/云端通信 串口设备(RS-485) 以太网设备 Modbus RTU Modbus TCP 电网调度需求 设备上云/远程监控 IEC 104 MQTT 注:实际项目中可能混合使用多种协议 常见混合架构 现场设备 → Modbus RTU/TCP → 本地EMS → MQTT → 云端平台 本地EMS → IEC 104 → 电网调度中心

选型时,我一般按这个思路:

  1. 先看设备支持什么:很多电表只支持Modbus RTU,逆变器可能同时支持Modbus TCP和MQTT。
  2. 再看传输距离:同一机柜内用Modbus RTU没问题,跨厂房建议用Modbus TCP或MQTT。
  3. 最后看实时性:电网调度要求毫秒级响应,必须用IEC 104。远程监控允许秒级延迟,MQTT足够。

4.6 实际项目中的协议转换

现实情况是,你不可能让所有设备都直接跟EMS通信。很多时候需要协议转换器(网关)。

举个例子:

  • 电表(Modbus RTU)→ 网关 → EMS(Modbus TCP)
  • 逆变器(Modbus TCP)→ 网关 → 云端(MQTT)
  • BMS(私有协议)→ 网关 → EMS(IEC 104)

我建议选网关时注意三点:

  • 协议库丰富程度:最好支持常见的Modbus、IEC 104、MQTT,以及一些私有协议(如华为、阳光的逆变器协议)。
  • 数据缓存能力:网络中断时,网关能缓存数据,恢复后自动补传。
  • 边缘计算能力:有些网关可以在本地做简单的逻辑判断,减少EMS的负担。

曾经踩过的坑:有一次我选了一款便宜的网关,只支持Modbus RTU转TCP,不支持数据缓存。结果网络抖动时,数据大量丢失,导致EMS的功率曲线出现断点。后来换了支持缓存的网关,问题才解决。所以,网关的钱不能省。

4.7 小结

好了,这一章的内容就这些。总结一下:

  • Modbus RTU/TCP:现场设备的首选,简单可靠,但功能有限。
  • IEC 104:电网调度的标准协议,复杂但功能强大。
  • MQTT:云端通信的利器,轻量灵活,适合大规模部署。

协议没有好坏之分,只有合不合适。选对了,系统稳定运行;选错了,调试能让你崩溃。希望今天的分享能帮你少走弯路。

下一章,我们聊聊EMS的硬件架构——从采集终端到服务器,每一层该怎么设计。到时候见。


专注资料整理