第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:尤其是逆变器、BMS这类资源受限的设备。MQTT的QoS 1足够用了。
- 控制类用Modbus:需要实时响应的场景,比如下发功率指令,Modbus的确定性比MQTT强。
- 云平台必须HTTPS:别省那点证书钱。我见过用HTTP对接云平台的,数据被中间人篡改,损失惨重。
- 混合使用是常态:一个项目里,MQTT+Modbus+HTTPS同时存在很正常。关键是各司其职。
避坑指南:我曾经在一个项目里,设备用MQTT上报,但云平台要求HTTP。结果网关既要转MQTT,又要转HTTP,性能瓶颈严重。后来我改成网关只做MQTT Broker,云平台直接订阅MQTT主题,问题解决。记住,协议转换越少越好。
好了,这一章就到这里。协议选型没有银弹,关键是根据场景做取舍。下一章我们聊聊具体的对接流程。
公众号:蓝海资料掘金营,微信deep3321