1. 储能通信网关协议转换工程导论

储能电站是一个由多种设备协同工作的复杂系统。电池管理系统(BMS)负责电芯电压、温度、SOC、SOH 等状态采集与保护;储能变流器(PCS)负责直流与交流之间的双向变换和功率调度;能量管理系统(EMS)负责站级策略、功率分配、调度响应与运行监控;消防系统监测可燃气体、温度与烟雾并执行联动;空调或液冷系统维持电池舱温湿度在安全区间。这些设备来自不同厂家,使用不同通信协议、不同数据模型和不同点表定义,彼此之间无法直接“对话”。储能通信网关的核心价值,就是把这些异构设备统一接入、统一语义、统一转发,使 EMS 能够以一致的方式读取和控制全站设备。

本课程的目标不是泛泛介绍通信原理,而是围绕“协议转换工程”这一实际交付任务展开。学完本课程,你应当能够读懂储能站通信架构,识别 EMS、PCS、BMS、消防、空调之间的接口边界;能够根据设备手册和点表,完成 Modbus、IEC 61850、CAN、MQTT 等常见协议之间的映射设计;能够配置网关的采集、转发、告警和断线缓存策略;能够使用抓包、日志和点表核对手段定位通信故障;最终能够独立输出一套可交付的协议转换工程文件,包括通信点表、映射表、网关配置、测试记录和验收依据。

从架构上看,储能通信网关通常位于站控层与设备层之间,起到“协议适配 + 数据汇聚 + 语义统一”的作用。设备层中,BMS 多采用 CAN 或 Modbus RTU,PCS 常见 Modbus TCP 或 IEC 61850,消防主机可能使用 Modbus RTU 或私有协议,空调/液冷机组常为 Modbus RTU 或 BACnet。网关向下通过串口、以太网、CAN 等物理接口采集这些设备数据,向上通过 Modbus TCP、IEC 61850 MMS、MQTT 或 IEC 104 与 EMS 或云平台通信。下图给出一个典型的储能站通信架构与网关定位示意。

EMS / 云平台 / 调度主站 Modbus TCP · IEC 61850 MMS · MQTT · IEC 104 储能通信网关 协议适配 · 数据汇聚 · 语义统一 · 断线缓存 采集调度 · 转发控制 · 告警联动 · 安全隔离 南向:Modbus RTU/TCP · CAN · IEC 61850 · BACnet BMS 电池管理系统 电芯电压 · 温度 · SOC · SOH 保护动作 · 均衡状态 CAN 2.0B / Modbus RTU PCS 储能变流器 有功/无功 · 直流电压电流 运行模式 · 故障码 Modbus TCP / IEC 61850 消防系统 烟感 · 温感 · 可燃气体 声光报警 · 灭火联动 Modbus RTU / 私有协议 空调 / 液冷机组 舱温 · 湿度 · 水温 运行模式 · 告警状态 Modbus RTU / BACnet 协议转换工程核心任务 ① 点表梳理 ② 地址映射 ③ 数据缩放 ④ 通信调度 ⑤ 告警联动 ⑥ 测试验收 交付物:通信点表 · 映射表 · 网关配置 · 测试记录 · 验收报告

理解这张架构图后,协议转换工程的核心任务就清晰了。第一项是点表梳理:从 BMS、PCS、消防、空调各自的手册中提取需要接入的遥测、遥信、遥控、遥调点,明确每个点的名称、地址、数据类型、量纲、读写权限和正常范围。第二项是地址映射:把设备侧地址映射到网关内部统一的数据模型,再映射到 EMS 侧地址。例如 BMS 的 CAN 报文中的 SOC 位于某个字节偏移,需要转换为 Modbus 寄存器地址 40001,并保持浮点或整型格式一致。第三项是数据缩放:很多设备以整数传输,例如温度乘以 10 后传输,网关需要按比例还原为真实值,或者按 EMS 要求统一量纲。第四项是通信调度:确定采集周期、超时时间、重试次数和并发策略,避免轮询过密导致设备响应超时。第五项是告警联动:把设备故障码、消防报警、温度越限等信号映射为网关告警,并支持向 EMS 推送或触发本地联动。第六项是测试验收:通过点表逐点核对、抓包分析和断线恢复测试,确认数据准确、控制可靠、异常可恢复。

下面给出一份协议转换工程中常用的点表映射示例,用于说明从设备侧到 EMS 侧的字段对应关系。表中参数为教学示例,实际工程应以设备手册和设计图纸为准。

设备 设备侧地址/标识 数据含义 数据类型 缩放系数 网关内部点号 EMS 侧地址 读写
BMS CAN ID 0x18F 电池簇 SOC UINT16 ×0.1 % GW_BMS_SOC_01 40001 只读
BMS CAN ID 0x18F 最高单体温度 INT16 ×0.1 ℃ GW_BMS_TMAX_01 40002 只读
PCS Modbus 40010 有功功率 INT32 ×0.001 kW GW_PCS_P_01 40100 只读
PCS Modbus 40120 有功功率设定 INT32 ×0.001 kW GW_PCS_PSET_01 40200 读写
消防 Modbus 30001 烟感报警状态 BOOL — GW_FIRE_SMOKE_01 40300 只读
空调 Modbus 30010 舱内温度 INT16 ×0.1 ℃ GW_HVAC_TEMP_01 40400 只读

在实际工程中,网关配置通常以结构化文件或配置界面完成。以下是一个简化的网关采集与转发配置片段,用于说明配置对象和字段组织方式。该片段为教学示例,不代表任何具体厂商的私有格式。

{
  "gateway": {
    "name": "GW-ESS-01",
    "southbound": [
      {
        "protocol": "modbus_tcp",
        "target": "PCS",
        "ip": "192.168.10.21",
        "port": 502,
        "poll_interval_ms": 500,
        "timeout_ms": 300,
        "retry": 2,
        "points": [
          { "name": "PCS_P", "addr": 40010, "type": "int32", "scale": 0.001, "unit": "kW" },
          { "name": "PCS_PSET", "addr": 40120, "type": "int32", "scale": 0.001, "unit": "kW", "rw": "rw" }
        ]
      },
      {
        "protocol": "modbus_rtu",
        "target": "BMS",
        "port": "/dev/ttyS1",
        "baud": 9600,
        "poll_interval_ms": 1000,
        "points": [
          { "name": "BMS_SOC", "addr": 1, "type": "uint16", "scale": 0.1, "unit": "%" },
          { "name": "BMS_TMAX", "addr": 2, "type": "int16", "scale": 0.1, "unit": "C" }
        ]
      }
    ],
    "northbound": {
      "protocol": "modbus_tcp",
      "listen_port": 502,
      "mapping": [
        { "internal": "PCS_P", "addr": 40100, "type": "int32", "scale": 0.001 },
        { "internal": "BMS_SOC", "addr": 40001, "type": "uint16", "scale": 0.1 }
      ]
    }
  }
}

配置完成后,判断网关工作是否正常,不能只看“通信灯亮”。应逐点核对:EMS 侧读取的 SOC 是否与 BMS 本地显示一致,误差是否在允许范围内;PCS 有功功率设定值下发后,PCS 是否在设定周期内响应;消防报警信号是否能在网关告警列表中正确置位;断开某台设备后,网关是否按预期标记该设备离线,并在恢复后自动重新采集。这些判断依据,正是后续章节中测试与排障环节的基础。

本课程贯穿一条主线:从设备手册和点表出发,经过映射设计、网关配置、通信测试,最终形成可交付的协议转换工程文件。学习时建议始终带着一个真实或假想的储能站对象,把每一章的方法落到具体设备、具体地址和具体参数上。

需要特别注意的是,协议转换工程不是简单的“地址翻译”。它涉及数据语义一致性、时序一致性、异常可恢复性和安全边界。例如,BMS 的 SOC 在设备侧可能是 0~1000 对应 0~100%,而 EMS 期望 0~100 的整数;PCS 的功率设定可能要求先写使能位再写数值,顺序错误会导致控制无效;消防报警需要最高优先级转发,不能被普通遥测轮询阻塞。这些细节决定了网关是“能通”还是“可靠”。