去年 8 月,我们在苏北对接一个 50MW 的工商业分布式项目,现场环境比文档描述的要恶劣得多。逆变器装在屋顶,4G 信号在 -85dBm 到 -95dBm 之间反复横跳,运维后台看到的功率曲线像被锯齿啃过一样,断断续续,根本没法做收益结算。
当时 EPC 的兄弟很纳闷:『明明买的是大牌子的采集器,配置也是 5 分钟传一次,为什么数据还是接不上?』其实这就是典型的『透传思维』在弱网环境下的崩盘。很多工程师习惯了云端 API 的便捷,却忽略了从逆变器 485 总线到云端这『最后一公里』的复杂性。
今天我们不聊宏观的数字化转型,就死磕一个技术点:在多品牌逆变器混接、网络环境不可控的情况下,边缘计算网关到底该怎么做本地预处理、断点续传和协议归一。这是我们团队踩了近百个电站的坑后,总结出的一套保命逻辑。
## 一、 放弃『透明传输』:为什么 DTU 模式正在失效?
在早期的光伏监控中,大家常用的是 DTU(数据传输单元)。它的逻辑很简单:透明传输。逆变器吐出什么 Modbus 报文,它就打包丢向云端。这种模式在光纤直连的地面电站没问题,但在工商业屋顶,网络抖动是常态。
我们做过测试,当 4G 丢包率达到 5% 时,如果采用透明传输,云端的 Modbus 超时重传机制会频繁触发。更糟的是,很多逆变器厂商的云 API 都有频次限制(比如 1 分钟只能请求一次),一旦网络波动导致重传重叠,接口直接就会返回 429 Too Many Requests。
边缘网关的任务,是把『搬运工』升级为『守门员』。它不再是简单地透传字节,而是要在本地实现协议解析。这意味着,网关得自带各个品牌逆变器的寄存器表。比如,针对华为的 Sun2000 系列,网关在本地就通过 485 接口以 5 秒甚至 1 秒的频率轮询实时电压、电流和功率,然后在本地进行一次加权平均或者取最大值,每 1 分钟封装成一个标准的 JSON 结构上送。
这样做的好处是:即使网络断了 30 秒,网关在本地的采集周期并没断。网络恢复的一瞬间,它送出的是一个包含完整信息的结构化包,而不是一堆残缺的 Modbus 原始字节。
## 二、 协议归一化:在边缘侧消灭字段差异
如果你对接过 3 家以上的逆变器,你一定会对那些千奇百怪的寄存器地址感到头大。有的厂家用 0x03 码,有的用 0x04;有的电流单位是 A,有的是 0.1A;有的甚至把功率存在两个不连续的寄存器里,还得你自己去做高低位拼接。
我们现在推行的架构,是把这种『重活』下放到边缘网关。在网关层,我们定义了一套标准的『光伏元数据模型』。无论下层接的是锦浪还是固德威,网关解析完后,统一输出如下格式:
```json
{
"device_id": "inv_001",
"timestamp": 1715832000,
"metrics": {
"active_power": 50.45,
"daily_energy": 120.5,
"dc_voltage": [650.2, 648.5, 0.0, 0.0],
"status": "running"
}
}
```
这种本地归一化的能力,极大地减轻了上层平台的计算压力。以前上层平台得写几百个适配器,现在只需要对接一个标准接口。我们在某个 200 个分布式场站的项目中,通过这种方式,将后端服务的 CPU 负载直接降低了近 40%。
## 三、 断点续传:不只是加个 SD 卡那么简单
『断点续传』听起来很简单:断网了存本地,连网了传上去。但实际工程中,这里面的水深得能淹死人。最常见的坑有两个:时钟漂移和补传风暴。
首先是时钟。网关断电重启后,如果没有同步到 NTP 时间,它记录的数据时间戳可能是 1970 年。当你连上网络开始补传时,这些 1970 年的数据会直接冲毁你的历史数据库。我们的做法是:网关必须内置硬件 RTC(实时时钟),且在没有同步到标准时间前,所有采集数据标记为『待校验状态』,直到获取到 GPS 或云端授时后,再进行偏移量修正。
其次是补传风暴。假设一个电站断网了 2 小时,积压了 240 条数据(按 30 秒间隔计)。网络恢复的一瞬间,如果网关一股脑把这 240 条数据塞给服务器,很容易触发云端的流量限制,甚至把数据库连接池撑爆。
我们采取的策略是『削峰填谷』。网关内部维护一个优先级队列:实时数据第一优先级,补传数据第二优先级。在网络带宽充裕的情况下,每发 1 条实时数据,带 5 条补传数据,直到本地缓存清空。在存储介质选型上,建议放弃廉价的 SD 卡,改用工业级的 eMMC 或 SPI Flash,因为 SD 卡在高温环境下的读写寿命往往撑不过一个夏天。
## 四、 协议透明传输的『回马枪』:远程调测需求
虽然我们主张在边缘做预处理,但协议透明传输(Pass-through)不能全面丢掉。为什么?因为运维需要远程调测。当某台逆变器报了特定的厂家错误码(比如古瑞瓦特的 0x123 号告警),但你的归一化模型里没定义这个字段时,你需要一个『隧道』去读取原始寄存器。
我们在中间件设计中保留了一个『诊断模式』。在这种模式下,网关会临时开启一个 WebSocket 隧道,允许远端的工程师直接发送十六进制 Modbus 指令。这就像是在给逆变器做『远程胃镜』,虽然平时不用,但关键时刻能救命,省去了派人跑 200 公里去现场查故障的差旅费。
## 五、 从采集器到中间件的思维转变
很多做监控平台的团队,总想把所有逻辑都堆在云端,认为云端的算力是无限的。但光伏电站的特殊性在于,它是离散的、分布的,且严重依赖物理链路。把逻辑下沉到边缘,本质上是在做『风险对冲』。
我们把这套多品牌接入、本地归一、防丢包的逻辑抽象出来,做成了 [ZenovaConnect](https://iot.z-energy.tech/r/5wrd3qetgk?s=csdn) 这一层中间件。它存在的意义,就是让上层应用开发者不需要知道 Modbus 是什么,不需要知道不同品牌逆变器的心跳包有什么区别。你只需要告诉网关:『我要这台逆变器的功率』,它就给你一个准确的、格式化的数字。
目前我们已经适配了超过 30 家主流逆变器品牌,在 10000 多台设备上稳定运行。如果你也正在为『数据对不上』、『曲线不连续』或者『新品牌适配太慢』而头疼,其实可以考虑把这一层交给专业的中间件来处理。你专注上层的电站资产管理、运维派单和收益分析,这才是业务的核心价值所在。
最后留个问题给各位同行:在你们的项目中,如果遇到网关本地时钟和逆变器内部时钟不一致(比如逆变器没设时区),你们通常是在网关侧做强制校时,还是在云端做偏移量修正?欢迎在评论区聊聊你们的取舍。
了解 [ZenovaConnect](https://iot.z-energy.tech/r/5wrd3qetgk?s=csdn) 完整方案



