第1章:通信协议选型——MQTT、Modbus、HTTP/HTTPS深度解析

大家好,我是老张。做光储系统这么多年,我见过太多因为协议选型翻车的项目了。今天咱们就聊聊这个看似基础、实则坑最多的环节——通信协议选型。

说白了,协议就是设备之间沟通的“语言”。选错了,轻则数据丢包,重则系统瘫痪。我刚开始做EMS对接时,就吃过这个亏。

1.1 MQTT协议详解

MQTT,全称Message Queuing Telemetry Transport。名字挺长,但核心就三个字:轻、快、稳。

为什么光储系统爱用MQTT?我总结了几点:

  • 发布/订阅模式:设备不用直接对话,通过Broker中转。这就像微信群,你发消息,群里所有人都能收到。
  • QoS质量等级:0、1、2三级。我一般用QoS 1,既保证送达,又不会太耗资源。
  • 遗嘱消息:设备突然掉线,Broker会替它发最后一条消息。这个功能我在项目中救过好几次场。
  • 保留消息:新设备上线,能立刻拿到最新状态,不用等轮询。

核心要点:MQTT最适合带宽有限、设备数量多的场景。比如光伏逆变器、储能BMS的数据上报。

来看一个典型的MQTT数据包结构:

固定报头(2字节):
  - 消息类型(4bit):CONNECT、PUBLISH、SUBSCRIBE等
  - 标志位(4bit):DUP、QoS、RETAIN
  - 剩余长度(可变)

可变报头:
  - 协议名:"MQTT"
  - 协议级别:4(MQTT 3.1.1)
  - 连接标志:用户名、密码、遗嘱等
  - 保持连接:心跳间隔(秒)

有效载荷:
  - 主题名:如 "solar/inverter/001/status"
  - 消息内容:JSON格式数据

避坑指南:我曾经遇到一个项目,设备上报频率太高,Broker直接崩溃。后来我加了限流和消息去重,才稳住。记住,MQTT不是越快越好,要匹配你的Broker性能。

1.2 Modbus协议详解

Modbus,工业界的“普通话”。它诞生于1979年,比我还大几岁。但你别小看它,至今仍是PLC、电表、逆变器的标配。

Modbus分两种:RTU(串口)和TCP(网口)。我重点讲TCP,因为现在光储系统基本都用网络了。

Modbus的核心概念:

  • 主从架构:一个主站(比如EMS),多个从站(比如逆变器)。主站问,从站答。
  • 功能码:03读保持寄存器,06写单个寄存器,16写多个寄存器。记住这三个就够了。
  • 寄存器地址:从0开始,每个寄存器16位。比如地址40001对应实际地址0。
  • 数据格式:大端模式。我见过不少新手搞反高低字节,数据全乱套。

一个标准的Modbus TCP报文:

MBAP报文头(7字节):
  - 事务标识符(2字节):用于匹配请求和响应
  - 协议标识符(2字节):固定为0x0000
  - 长度(2字节):后续字节数
  - 单元标识符(1字节):从站地址

PDU(协议数据单元):
  - 功能码(1字节):如0x03
  - 起始地址(2字节):如0x0000
  - 寄存器数量(2字节):如0x000A(读10个寄存器)

注意:Modbus没有安全机制。我曾经在项目现场,被人用Modbus扫描工具直接改了逆变器参数,差点酿成事故。所以,Modbus一定要走内网,或者加VPN。

1.3 HTTP/HTTPS对比

HTTP,互联网的基石。HTTPS就是它的加密版。在光储系统里,它们主要用于:

  • 云平台API调用(查询历史数据、下发策略)
  • 文件上传(日志、告警截图)
  • Web管理界面

两者的核心区别:

特性 HTTP HTTPS
加密 明文传输 TLS/SSL加密
端口 80 443
性能 快(无加密开销) 慢(握手+加解密)
安全性 低(可被嗅探) 高(防篡改、防窃听)
证书 不需要 需要CA证书

我的建议:凡是涉及用户数据、控制指令的,必须用HTTPS。纯监控数据,内网可以用HTTP,但外网绝对不行。

举个例子,一个典型的HTTPS请求流程:

1. 客户端发起HTTPS连接
2. 服务器返回证书(包含公钥)
3. 客户端验证证书合法性
4. 客户端生成对称密钥,用公钥加密后发送
5. 服务器用私钥解密,得到对称密钥
6. 后续通信使用对称密钥加密

嗯,这里要注意:证书过期是个常见坑。我有个项目,HTTPS证书过期了,所有API调用都失败,运维排查了半天才发现。

1.4 协议选型建议

说了这么多,到底怎么选?我画了张图,帮你理清思路:

光储系统通信协议选型决策树 通信协议选型 设备侧通信 平台侧通信 实时数据上报 控制指令下发 MQTT(推荐) Modbus TCP API接口调用 文件/日志上传 HTTPS(必须) HTTPS(推荐) 选型总结 设备上报 → MQTT(轻量、可靠) 设备控制 → Modbus TCP(实时、确定) 平台对接 → HTTPS(安全、标准)

最后,我总结几条实战经验:

  1. 设备端优先MQTT:尤其是逆变器、BMS这类资源受限的设备。MQTT的QoS 1足够用了。
  2. 控制类用Modbus:需要实时响应的场景,比如下发功率指令,Modbus的确定性比MQTT强。
  3. 云平台必须HTTPS:别省那点证书钱。我见过用HTTP对接云平台的,数据被中间人篡改,损失惨重。
  4. 混合使用是常态:一个项目里,MQTT+Modbus+HTTPS同时存在很正常。关键是各司其职。

避坑指南:我曾经在一个项目里,设备用MQTT上报,但云平台要求HTTP。结果网关既要转MQTT,又要转HTTP,性能瓶颈严重。后来我改成网关只做MQTT Broker,云平台直接订阅MQTT主题,问题解决。记住,协议转换越少越好。

好了,这一章就到这里。协议选型没有银弹,关键是根据场景做取舍。下一章我们聊聊具体的对接流程。


公众号:蓝海资料掘金营,微信deep3321