charging-cabinet/docs/开发文档.md

936 lines
43 KiB
Markdown
Raw Permalink Normal View History

# 36仓体直流电瓶车充电柜 - 开发文档
## 1. 项目概述
### 1.1 项目目标
开发一款36仓体直流电瓶车充电柜配置6个电源每个电源对应6个仓体的独立直流输出口支持每个仓体输出口独立设置电流、电压参数适配星恒BMS Modbus协议与电源1TN RS485协议实现安全、高效的独立充电功能。每个仓体配套状态指示灯通过不同灯光状态反馈仓体工作情况同时支持平台远程禁用仓体。
核心新增定制仓控主板及柜控主板功能:
- 每个仓控主板单独与所属电源通讯
- 仓控板采用拨码开关设置IDID范围1-6
- 柜控板ID固定为128
### 1.2 核心功能矩阵
| 功能模块 | 子功能 | 说明 |
|---------|--------|------|
| 独立充电 | 多电压适配 | 48V/60V/72V直流适配电流5A-20A可调 |
| | 快充模式 | 直流快充1-2小时充满 |
| | 充电控制 | 扫码开门/预约/定时充电 |
| | BMS协议适配 | 支持星恒485一线通、天能485平台可配置 |
| | 无协议充电 | 固定电压电流输出,低电流自动停止 |
| 仓体状态指示 | 绿灯闪烁 | 充电中,继电器闭合,电源正常输出 |
| | 绿灯常亮 | 仓体空闲,可正常启动充电 |
| | 红灯常亮 | 平台仓体禁用,管理员锁定 |
| | 红灯闪烁 | 电池不符合要求或设备告警或门未关 |
| 门锁控制 | 扫码开门 | 用户扫码→平台验证→下发开门指令 |
| | 门磁检测 | 实时监测仓门开/关状态 |
| | 关门超时报警 | 超过设置阈值未关门,上传告警(阈值可配置) |
| 平台仓体控制 | 远程禁用 | 管理员下发禁用指令,强制锁定仓体 |
| | 状态同步 | 禁用后指示灯切换,禁止充电 |
| | 手动解除 | 管理员解除禁用,恢复空闲状态 |
| 协议对接 | 1TN RS485 | 仓控板与电源通讯(电源参数控制) |
| | 星恒BMS Modbus | 仓控板与星恒电池BMS通讯状态监测 |
| | 天能485 | 仓控板与天能电池BMS通讯状态监测 |
| | 仓控-柜控485 | 仓控板ID1-6与柜控板ID128通讯 |
| 安全防护 | 过充/过温/过流/短路/漏电 | 实时监测,自动断电 |
| | 烟感+喷淋 | 烟感触发→断开接触器+打开喷淋电磁阀 |
| | 浸水保护 | 浸水触发→断开接触器切断380V |
| | 远程恢复 | 误报警可平台远程吸合接触器恢复供电 |
| | 6路温控 | 仓体温度实时采集,高温阈值可配置 |
| | 加热风扇 | 环境温度<0°C自动启动加热25°C停止 |
| 固件管理 | OTA升级 | 平台远程升级柜控板和仓控板固件 |
| 定制主板 | 仓控主板 | 6路继电器、门锁驱动、门磁检测、光耦隔离、多通道485、温控 |
| | 柜控主板 | 烟感/浸水接口、喷淋电磁阀、加热风扇、电磁泵、4G模块(TCP长连接) |
## 2. 系统架构
### 2.1 硬件架构
```
┌───────────────────────┐
│ 380V 市电输入 │
└──────────┬────────────┘
┌────┴────┐
│ 漏保 │
└────┬────┘
┌──────────┼──────────┐
│ │ │
┌─────┴─────┐ ┌──┴───┐ ┌───┴──────┐
│ 12V电源 │ │接触器 │ │其他负载 │
│(预接触器) │ │柜控板控│ │(风扇等) │
└─────┬─────┘ └──┬───┘ └──────────┘
│ │
┌─────┴─────┐ ┌──┴───────────┐
│ 柜控板128 │ │ 充电电源×6 │
│ 仓控板×6 │ │ (直流输出) │
│ (常供电) │ └──────────────┘
└─────┬─────┘
┌─────┴─────┐
│ 后备电池 │
│(380V断电备用)│
└───────────┘
```
### 2.2 软件架构
```
┌─────────────────────────────────────────────┐
│ 后台管理平台 │
│ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────────┐ │
│ │设备管理│ │用户管理│ │数据统计│ │故障管理 │ │
│ │OTA升级│ │ │ │ │ │报警阈值 │ │
│ └──┬───┘ └──┬───┘ └──┬───┘ └────┬─────┘ │
│ ┌──┴──────────┴──────────┴──────────┴────┐ │
│ │ BMS协议配置 · 无协议充电参数 │ │
│ │ 门锁控制 · 仓体控制 · 仓体禁用 │ │
│ └─────────────────────────────────────────┘ │
│ ┌────────────────────────────────────────┐ │
│ │ 自定义TCP通讯服务长连接 │ │
│ └────────────────────────────────────────┘ │
├─────────────────────────────────────────────┤
│ 微信小程序 │
│ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────────┐ │
│ │扫码充电│ │预约充电│ │进度查询│ │消息通知 │ │
│ │扫码开门│ │ │ │ │ │ │ │
│ └──────┘ └──────┘ └──────┘ └──────────┘ │
├─────────────────────────────────────────────┤
│ 柜控主板ID128固件 │
│ ┌──────────┐ ┌──────────┐ ┌─────────────┐ │
│ │ TCP通讯 │ │数据处理 │ │充电控制逻辑 │ │
│ ├──────────┤ ├──────────┤ ├─────────────┤ │
│ │烟感/浸水 │ │485主站 │ │门锁指令转发 │ │
│ │喷淋电磁阀 │ │OTA管理 │ │BMS配置管理 │ │
│ └──────────┘ └──────────┘ └─────────────┘ │
├─────────────────────────────────────────────┤
│ 仓控主板ID1-6固件 │
│ ┌──────────┐ ┌──────────┐ ┌─────────────┐ │
│ │ 485从站 │ │BMS通讯 │ │ 继电器控制 │ │
│ │ │ │多协议适配 │ │ 门锁控制 │ │
│ ├──────────┤ ├──────────┤ ├─────────────┤ │
│ │指示灯控制 │ │温控采集 │ │ 门磁监测 │ │
│ │OTA升级 │ │ │ │ 数据上报 │ │
│ └──────────┘ └──────────┘ └─────────────┘ │
└─────────────────────────────────────────────┘
```
## 3. 通讯协议设计
### 3.1 电源 1TN RS485 协议
#### 3.1.1 协议基础
- 标准号YG20240118-1版本 V1.0
- 制定方:苏州翌工电源科技有限公司
- 适用设备换电柜用锂电池充电器1TN系列多路充电器
- 传输模式Modbus-RTU
- 波特率9600
- 字格式11位1个起始位(0) + 8个数据位 + 1个停止位
- 通讯方式:半双工主从应答(仓控板为主机,电源为从机)
- 地址范围0x01-0x07对应电源3位拨码开关001=0x01 ... 111=0x07
- 校验方式和校验SUM = 所有字节相加取低8位
- 字节序BigEndian网络字节序
#### 3.1.2 信息帧格式
| 字段 | 字节数 | 说明 |
|------|--------|------|
| ADDR | 1 | 电源地址 (0x01-0x07对应拨码开关) |
| CHx | 1 | 通道号高7位通道编号Bit0主/副通道 |
| CMD | 1 | 功能码 |
| LEN | 1 | 数据区长度 |
| DATA | LEN | 数据区BigEndian |
| SUM | 1 | 和校验 = (ADDR+CHx+CMD+LEN+DATA) & 0xFF |
**CHx 通道字节解析:**
| 通道 | Bit1-7 | CHx值(Bit0=0) | CHx值(Bit0=1) |
|------|--------|---------------|---------------|
| CH1 | 0x00 | 0x00 (主通道) | 0x01 (副通道) |
| CH2 | 0x01 | 0x02 (主通道) | 0x03 (副通道) |
| CH3 | 0x02 | 0x04 (主通道) | 0x05 (副通道) |
| CH4 | 0x03 | 0x06 (主通道) | 0x07 (副通道) |
| CH5 | 0x04 | 0x08 (主通道) | 0x09 (副通道) |
| CH6 | 0x05 | 0x0A (主通道) | 0x0B (副通道) |
#### 3.1.3 功能码定义
| 序号 | 命令 | CMD | LEN | 数据区 |
|------|------|-----|-----|--------|
| 1 | 设置通道输出电压/电流 | 0x02 | 0x04 | 电压(2B mV) + 电流(2B 0.1A) |
| 2 | 设置通道开关机 | 0x03 | 0x01 | 0x00=关机, 0x01=开机 |
| 3 | 通道组合指令(开关机+调压+调流) | 0x04 | 0x05 | 开关(1B) + 电压(2B) + 电流(2B) |
| 4 | 电源通道信息查询 | 0x05 | 0x01 | 查询类型 |
| 5 | 供应商/型号/版本号/序列号查询 | 0x12 | 0x01 | 查询类型 |
| 6 | 升级状态查询 | 0x18 | - | 详见升级协议 |
| 7 | OTA远程升级 | 0x19 | - | 详见升级协议 |
**电源回复数据格式:**
| 指令 | 回复LEN | 回复DATA说明 |
|------|---------|-------------|
| 0x02设置V/I | 0x01 | 0x01=设置成功 |
| 0x03开关机 | 0x01 | 0x01=设置成功 |
| 0x04组合指令 | 0x07 | 电压(2B) + 电流(2B) + 故障码(2B) + 环温(1B 0.1℃) |
| 0x05查询 | 0x0D | 设置电压(2B) + 设置电流(2B) + 故障码(2B) + 环温(1B) + 输入电压(2B 0.01V) + 输入电流(2B 0.01A) + 输入功率(2B W) |
| 0x12供应商信息 | 0x0F | 厂商(2B ASCII) + 型号(8B ASCII) + 硬件版本(1B) + 软件版本(1B) + 生产日期(3B) + 序列号(2B) |
#### 3.1.4 故障码定义
**故障字节1 (设备状态)**
| Bit | 含义 | Bit | 含义 |
|-----|------|-----|------|
| Bit0 | 输入欠压 | Bit4 | 输出欠压 |
| Bit1 | 输入过压 | Bit5 | 输出短路 |
| Bit2 | NC | Bit6 | 输出过流 |
| Bit3 | 输出过压 | Bit7 | 过温 |
**故障字节2 (系统状态)**
| Bit | 含义 | Bit | 含义 |
|-----|------|-----|------|
| Bit0 | 硬件故障 | Bit4 | NC |
| Bit1 | PFC故障 | Bit5 | NC |
| Bit2 | 风扇故障 | Bit6 | NC |
| Bit3 | 电池反接故障 | Bit7 | NC |
#### 3.1.5 指令示例
```
设置1#电源 CH1 开启+60.0V+10.0A (组合指令 0x04):
主控 → 电源: ADDR=0x01, CHx=0x00, CMD=0x04, LEN=0x05,
DATA=[0x01, 0x02, 0x58, 0x00, 0x64],
SUM=(0x01+0x00+0x04+0x05+0x01+0x02+0x58+0x00+0x64)=0xC9
电源 → 主控: ADDR=0x01, CHx=0x00, CMD=0x04, LEN=0x07,
DATA=[0x02,0x58, 0x00,0x64, 0x01,0x01, 0x1A],
回复: 当前电压60.0V, 电流10.0A, 故障码0x0101, 环温26℃
读取1#电源 CH1 运行信息 (查询 0x05):
主控 → 电源: ADDR=0x01, CHx=0x00, CMD=0x05, LEN=0x01, DATA=[0x00], SUM=0x07
电源 → 主控: ADDR=0x01, CHx=0x00, CMD=0x05, LEN=0x0D,
DATA=[0x02,0x58, 0x00,0x64, 0x01,0x01, 0x1A,
0x55,0xF0, 0x03,0xE8, 0x08,0x98],
回复: 设定60.0V/10.0A, 故障码0x0101, 环温26℃,
输入电压220.00V, 输入电流10.00A, 输入功率2200W
设置2#电源 CH2 关机 (开关机 0x03):
主控 → 电源: ADDR=0x02, CHx=0x02, CMD=0x03, LEN=0x01, DATA=[0x00], SUM=0x08
供应商信息查询 (0x12):
主控 → 电源: ADDR=0x01, CHx=0x00, CMD=0x12, LEN=0x01, DATA=[0x00], SUM=0x14
电源 → 主控: ADDR=0x01, CHx=0x00, CMD=0x12, LEN=0x0F,
DATA='YGCP1TN-A' + 硬件版本(1B) + 软件版本(1B) +
生产日期(3B: 年/月/日) + 序列号(2B)
```
### 3.2 BMS 协议适配
充电柜支持多协议BMS适配通过平台远程配置当前柜体使用的BMS协议类型。仓控板根据配置选择对应的BMS通讯协议进行电池数据读取。
#### 3.2.1 BMS协议类型配置
| 协议类型 | 说明 | 配置方式 |
|---------|------|---------|
| 星恒485一线通 | 标准Modbus-RTU地址0x16 | 平台配置 |
| 天能485 | 自定义协议 | 平台配置 |
| 无协议充电 | 不读取BMS固定电压电流输出 | 平台配置 |
BMS协议配置存储在柜控板Flash中仓控板上电时从柜控板获取当前BMS协议类型。平台可远程切换协议类型切换后下次充电生效。
#### 3.2.2 星恒 BMS Modbus 协议
**协议基础:**
- 版本V1.1
- 传输模式Modbus-RTU
- 波特率9600数据位8停止位1无校验
- BMS固定地址0x16 (16H)
- 支持功能码03H读保持寄存器、10H写控制指令
**核心寄存器映射:**
| 寄存器地址 | 参数 | 类型 | 单位 | 说明 |
|-----------|------|------|------|------|
| 10000-10002 | BMS软硬件版本/控制 | 只读/读写 | - | 10002: 充电禁止/允许 |
| 10003-10027 | 电池条码 | 只读 | ASCII | 25个寄存器 |
| 10036 | 电芯材料 | 只读 | - | 磷酸铁锂/三元锂/锰酸锂 |
| 10043-10072 | 30串单体电压 | 只读 | mV | 30个寄存器 |
| 10074 | 总电压 | 只读 | mV | 1个寄存器 |
| 10080-10089 | 10路电芯温度 | 只读 | 0.1℃ | 10个寄存器 |
| 10091 | 单体过压告警 | 只读 | BIT | bit0=告警 |
| 10092 | 单体欠压告警 | 只读 | BIT | bit0=告警 |
| 10094 | 电芯不平衡告警 | 只读 | BIT | bit0=告警 |
| 10095 | 过流告警 | 只读 | BIT | bit0=告警 |
| 10096 | 过温告警 | 只读 | BIT | bit0=告警 |
| 10097 | 低温告警 | 只读 | BIT | bit0=告警 |
| 10101 | SOH | 只读 | 0.01 | 健康度0-1 |
| 10102 | SOC | 只读 | 0.1% | 剩余电量 |
| 10103 | 充电请求电压 | 只读 | mV | BMS请求的充电电压 |
| 10104 | 最大充电请求电流 | 只读 | 0.1A | BMS请求的最大电流 |
| 10156 | 电池组唯一编码 | 只读 | - | - |
| 10166 | 总压异常告警 | 只读 | BIT | bit0=告警 |
| 10167 | 容量通量 | 只读 | - | - |
| 10169 | 能量通量 | 只读 | - | - |
| 10172 | 生产日期 | 只读 | - | 年/月/日 |
#### 3.2.3 天能 485 协议
**协议基础:**
- 传输模式自定义RS485协议
- 波特率9600数据位8停止位1无校验
- BMS地址0x01
- 协议细节以天能电池官方提供的BMS通讯协议文档为准仓控板固件中预留协议适配层支持按配置切换协议实现
**适配策略:**
仓控板BMS通讯模块采用分层设计
1. **协议抽象层**:统一的数据接口(电压/电流/SOC/温度/告警等)
2. **协议实现层**星恒Modbus实现、天能自定义协议实现
3. **配置选择层**根据平台下发的BMS类型选择对应的协议实现
#### 3.2.4 无协议充电模式
当配置为无协议充电模式时仓控板不通过485_2总线读取BMS数据充电过程完全由平台下发的固定参数控制
- 平台下发固定充电电压、充电电流
- 仓控板直接控制电源输出设定值
- 通过监测电源输出电流判断是否充满:电流低于设定阈值时自动停止
- 低电流阈值由平台配置,可在充电过程中动态调整
### 3.3 仓控主板 ↔ 柜控主板 485 通讯
#### 3.3.1 通讯参数
- 波特率9600
- 半双工主从方式
- 柜控主板ID128为主站
- 仓控主板ID1-6为从站
- 光耦隔离保护
- 通讯响应延迟 ≤ 0.5s
#### 3.3.2 通讯帧结构
自定义协议帧:
| 字段 | 字节数 | 说明 |
|------|--------|------|
| 帧头 | 2 | 0xAA 0x55 |
| 目标ID | 1 | 0x01-0x06 或 0x80柜控板 |
| 源ID | 1 | 0x01-0x06 或 0x80 |
| 功能码 | 1 | 指令类型 |
| 数据长度 | 2 | BigEndian |
| 数据区 | N | 具体数据 |
| CRC16 | 2 | Modbus CRC16 |
#### 3.3.3 功能码定义
| 功能码 | 指令 | 方向 | 说明 |
|--------|------|------|------|
| 0x01 | 上传BMS数据 | 仓控→柜控 | 电池SOC/电压/温度/告警/BMS协议类型 |
| 0x02 | 上传温控数据 | 仓控→柜控 | 6路仓体温度+环境温度 |
| 0x03 | 上传电源状态 | 仓控→柜控 | 电源运行参数 |
| 0x04 | 上传设备状态 | 仓控→柜控 | 继电器/通讯/门磁/门锁状态 |
| 0x05 | 上传门磁状态 | 仓控→柜控 | 6路仓体门开/关状态 |
| 0x06 | 上传OTA状态 | 仓控→柜控 | OTA升级进度/结果 |
| 0x81 | 继电器控制 | 柜控→仓控 | 充电继电器通断控制 |
| 0x82 | 电源参数设置 | 柜控→仓控 | 电压/电流/开关/无协议充电参数 |
| 0x83 | 指示灯控制 | 柜控→仓控 | 绿灯/红灯/闪烁 |
| 0x84 | 查询指令 | 柜控→仓控 | 查询全量状态 |
| 0x85 | 平台禁用 | 柜控→仓控 | 禁用/解除禁用 |
| 0x86 | 模式切换 | 平台→柜控 | 切换平台模式/柜控模式 |
| 0x87 | 接触器控制 | 平台→柜控 | 合闸/分闸指令 |
| 0x88 | 门锁控制 | 柜控→仓控 | 开门/锁门,指定仓体(位掩码) |
| 0x89 | OTA升级 | 柜控→仓控 | 固件升级数据包/启动升级/查询版本 |
| 0x8A | BMS类型配置 | 柜控→仓控 | 设置当前BMS协议类型(星恒/天能/无协议) |
| 0x8B | 报警阈值配置 | 柜控→仓控 | 设置关门超时/高温报警阈值 |
## 4. 定制主板设计
### 4.1 仓控主板ID1-6
#### 4.1.1 硬件规格
| 模块 | 规格 |
|------|------|
| MCU | 内置MCU控制器独立运行支持OTA固件升级 |
| 继电器 | 6路直流继电器寿命≥10万次 |
| 电子门锁驱动 | 6路MOSFET输出/继电器12V电控锁驱动 |
| 门磁检测 | 6路开关量输入检测仓门开/关状态 |
| 485接口 | 3路隔离4851路接柜控板ID128、1路接BMS6仓体共用总线、1路接所属电源模块 |
| 光耦隔离 | 3路485均做光耦隔离 |
| 温控接口 | 6路适配常用温控传感器NTC/DS18B20 |
| ID设置 | 4位拨码开关设置与柜控板通讯的485从站ID范围1-6 |
| 指示灯接口 | 6路每仓体1路支持绿灯/红灯控制 |
#### 4.1.2 接口定义
```
┌─────────────────────────────────────┐
│ 仓控主板 (ID1-6) │
├─────────────────────────────────────┤
│ [拨码开关] ← 设置485从站ID (1-6) │
│ [485_1] ← 柜控主板 (ID128) │
│ [485_2] ← BMS总线 (6仓体共用) │
│ [485_3] ← 所属电源 (1TN协议) │
│ [TEMP1-6] ← 6路仓体温控 │
│ [RELAY1-6] ← 6路直流继电器 │
│ [DOOR_LK1-6]→ 6路电子门锁驱动 │
│ [DOOR_ST1-6]← 6路门磁检测 │
│ [LED1-6] ← 6路仓体指示灯 │
│ [4PIN] ← 充电线2路正负极+2路485
└─────────────────────────────────────┘
```
#### 4.1.3 固件功能模块
| 模块 | 功能 |
|------|------|
| 485从站模块 | 响应柜控板ID128指令按拨码开关ID寻址 |
| BMS通讯模块 | 按配置协议(星恒/天能/无协议读取BMS数据或跳过 |
| 电源通讯模块 | 通过独立485与所属电源1TN协议交互 |
| 继电器控制模块 | 6路独立通断控制 |
| 指示灯控制模块 | 6路独立LED状态控制关联门锁/充电/告警状态 |
| 温控采集模块 | 6路温度数据采集 |
| ID管理模块 | 拨码开关读取与ID识别 |
| 门锁控制模块 | 6路独立门锁驱动接收柜控板门锁指令开锁 |
| 门磁监测模块 | 6路门磁状态检测上传门状态超时未关门报警 |
| OTA升级模块 | 接收固件升级数据包,校验写入,重启切换 |
#### 4.1.4 核心逻辑流程
```
初始化:
1. 读取拨码开关 → 获取本机ID (1-6)
2. 初始化3路485接口9600, 8, 1, none
3. 初始化继电器 → 全部断开
4. 初始化门锁 → 全部锁闭
5. 初始化指示灯 → 全部绿灯常亮(空闲)
6. 初始化温控接口 → 开始采集
7. 从柜控板获取BMS协议类型配置
8. 从柜控板获取报警阈值配置(关门超时/高温)
9. 注册到柜控板 → 发送上线通知源ID=本机ID, 目标ID=128
主循环:
每个周期100ms
1. 检查柜控板指令485_1
→ 如有指令:解析功能码,执行对应操作
→ 门锁控制(0x88):按位掩码开门/锁门
→ OTA升级(0x89):处理固件升级数据
→ BMS配置(0x8A)切换BMS协议类型
→ 报警阈值配置(0x8B):更新关门超时/高温阈值
2. 按配置的BMS协议类型轮询BMS总线485_2
→ 星恒模式Modbus-RTU读取电池数据
→ 天能模式:自定义协议读取电池数据
→ 无协议模式跳过BMS读取
→ 解析数据,故障时联动继电器+指示灯
3. 读取6路温控数据
→ 超范围时触发保护
→ 温度超过高温报警阈值 → 上传告警
4. 读取6路门磁状态
→ 检测到开门 → 启动计时
→ 超过设置阈值未关门 → 上传告警
5. 通过485_3查询所属电源状态
→ 读取电压/电流/故障码1TN协议
→ 无协议充电模式:监测输出电流,低于阈值通知柜控板停止
6. 上传数据至柜控板ID128
→ BMS数据 + 温控 + 电源状态 + 继电器状态 + 门磁状态
7. 更新指示灯状态
充电启动流程:
1. 检测到仓门关闭(门磁闭合)
2. 按配置协议读取BMS数据无协议模式跳过
3. 上传数据至柜控板ID128等待充电指令
4. 收到允许充电指令 → 闭合继电器
→ 通过485_3发送电源开启+调压调流指令1TN协议
→ 无协议模式:使用平台下发的固定电压/电流值
→ 指示灯切换为绿灯闪烁(充电中)
5. 实时同步数据,动态调整电源参数
→ 有BMS模式根据BMS请求调整
→ 无协议模式:监测电流,低于阈值自动停止
6. 充满/异常 → 断开继电器,关闭电源输出
门开锁流程:
1. 用户扫码 → 平台验证通过
2. 平台下发开门指令至柜控板(TCP)
3. 柜控板转发0x88开门指令至对应仓控板
4. 仓控板解析位掩码 → 驱动对应门锁继电器/MOSFET → 开锁
5. 门锁动作时间到 → 自动复位
6. 用户开门取/放电池
7. 门磁检测到关门 → 上报门已关闭状态
```
### 4.2 柜控主板ID128
#### 4.2.1 硬件规格
| 模块 | 规格 |
|------|------|
| MCU | 内置MCU控制器独立运行支持OTA固件升级 |
| 485接口 | 1路隔离RS485与6个仓控板通讯光耦隔离 |
| 485电表接口 | 1路隔离RS485接DL/T645电表读取耗电量数据 |
| 4G模块 | Air780E自定义TCP协议长连接 |
| 烟感接口 | 1路开关量输入 |
| 浸水接口 | 1路开关量输入 |
| 倾倒检测 | 1路开关量输入 |
| 环境温控传感器 | 1路NTC/DS18B20用于加热风扇自动温控 |
| 接触器控制 | 1路继电器输出控制常开接触器默认断开给信号吸合 |
| 喷淋电磁阀 | 1路继电器输出烟感触发时自动打开喷淋灭火 |
| 加热风扇继电器 | 1路独立继电器输出220V/10A自动温控 |
| 电磁泵继电器 | 1路继电器输出平台远程控制通断 |
| 接触器按钮 | 2个物理按钮合闸按钮吸合接触器、分闸按钮断开接触器用于离线时手动操作 |
| 存储 | Flash存储设备配置参数BMS类型、报警阈值、无协议充电参数本地不留充电数据 |
| 主电源 | 来自12V电源预接触器常供电 |
| 后备电源 | 后备电池输入380V总断电时自动切换维持板子供电与远程通讯 |
| | 平台可远程下发恢复指令 → 吸合接触器恢复充电电源供电 |
#### 4.2.2 接口定义
```
┌─────────────────────────────────────┐
│ 柜控主板 (ID128) │
├─────────────────────────────────────┤
│ [485] ←→ 仓控板ID1-6 │
│ [485_METER]←→ DL/T645电表耗电量采集
│ [4G/TCP] ←→ 后台平台自定义TCP长连接
│ [SMOKE] ← 烟感传感器(开关量) │
│ [WATER] ← 浸水传感器(开关量) │
│ [TILT] ← 倾倒检测(开关量) │
│ [TEMP_AMB] ← 环境温度传感器NTC/DS18B20
│ [CONTACTOR]→ 接触器控制(继电器输出) │
│ [SPRINKLER]→ 喷淋电磁阀控制(继电器输出)│
│ [FAN] → 加热风扇控制(独立继电器输出)│
│ [PUMP] → 电磁泵控制(继电器输出) │
│ [合闸按钮] ← 手动吸合接触器 │
│ [分闸按钮] ← 手动断开接触器 │
│ [PWR_IN] ← 12V电源输入 │
│ [PWR_OUT] → 仓控板供电输出 │
└─────────────────────────────────────┘
```
#### 4.2.3 固件功能模块
| 模块 | 功能 |
|------|------|
| 485主站模块 | 与仓控板ID1-6双向通讯ID寻址 |
| TCP通讯模块 | 与后台平台数据交换自定义TCP协议长连接 |
| 数据处理模块 | BMS/温控/电源/门磁数据解析转发 |
| 充电控制模块 | 双模式充电控制逻辑(平台/本地),支持无协议充电参数管理 |
| 安全监测模块 | 烟感/浸水/倾倒监测触发后断开接触器切断380V + 打开喷淋电磁阀 |
| 接触器控制模块 | 控制380V接触器吸合上电/恢复)/断开(告警/急停),含按钮去抖逻辑 |
| 按钮处理模块 | 合闸→吸合接触器,分闸→断开接触器,离线时手动操控,优先级高于平台指令 |
| 告警联动模块 | 烟感/浸水→断开接触器+打开喷淋→上报平台→记录日志 |
| 加热风扇控制模块 | 自动温控:读取环境温度传感器,<0°C启动加热25°C停止 |
| 电磁泵控制模块 | 接收平台远程指令控制继电器通断 |
| 门锁指令转发模块 | 接收平台开门指令 → 转发对应仓控板0x88 |
| OTA升级模块 | 接收平台固件包 → 分片转发至仓控板或本地升级 |
| BMS配置管理模块 | 存储/切换BMS协议类型新配置下发至仓控板 |
| 电表采集模块 | 通过独立485按DL/T645协议读取电表耗电量定时上报平台 |
#### 4.2.4 核心逻辑流程
```
初始化:
1. 初始化485主站9600, 8, 1, none
2. 初始化4G模块 → 与后台平台建立TCP长连接
3. 初始化烟感/浸水接口(中断模式)
4. 初始化接触器继电器 → 吸合(系统正常上电)
5. 读取存储的配置参数BMS类型、报警阈值、无协议充电参数
6. 轮询所有仓控板ID1-6上线状态
7. 下发BMS类型配置至所有仓控板
8. 下发报警阈值配置至所有仓控板
9. 上传设备上线通知至平台
主循环:
每500ms
1. 轮询仓控板ID1-6数据
→ 发送查询指令 → 接收BMS/温控/电源/门磁/设备状态
→ 按ID分类存储
2. 处理后台下行指令TCP长连接接收
→ 仓体禁用/解除 → 转发对应仓控板
→ 充电控制指令 → 转发对应仓控板
→ 电磁泵控制 → 通/断控制电磁泵继电器
→ 门锁控制 → 开门指令转发对应仓控板0x88
→ OTA升级 → 固件包处理,转发仓控板或本地升级
→ BMS类型配置 → 存储+下发仓控板0x8A
→ 报警阈值配置 → 存储+下发仓控板0x8B
→ 无协议充电参数 → 存储+转发仓控板
→ 配置更新 → 本地存储+生效
3. 安全监测检查(最高优先级)
→ 烟感触发 → 立即断开接触器 + 打开喷淋电磁阀
→ 浸水触发 → 立即断开接触器
→ 倾倒触发 → 立即断开接触器 + 上传告警
→ 发送急停指令至所有仓控板(断开继电器)
→ 板子仍由12V电源正常供电通讯不受影响
→ 上传告警至平台
→ 等待人工/平台远程复位才可重新吸合接触器
4. 电表数据采集
→ 通过485_METER按DL/T645协议读取电表耗电量
→ 定时采集每5分钟缓存累计数据
→ 上报平台
5. 加热风扇自动温控
→ 读取环境温度传感器
→ 温度 < 0°C 闭合加热风扇继电器启动加热
→ 温度 ≥ 25°C → 断开加热风扇继电器(停止加热)
→ 温度在0-25°C之间 → 保持当前状态(滞回控制)
→ 状态变化时上传平台
5. 接触器状态同步
→ 接触器异常断开 → 上报平台
→ 平台远程恢复 → 吸合接触器,恢复充电电源供电
6. 充电控制逻辑
→ 平台模式(默认):等待平台远程指令,需在线
→ 柜控模式:由平台远程切换为本地模式,离线也可正常充电
· 平台下发"启用本地模式"指令 → 柜控板切换为本地控制
· 本地校验项BMS握手成功/无协议充电参数合规、电池参数合规、仓体未被禁用
· 符合条件 → 下发允许充电指令
· 不符合条件 → 下发拒绝指令(红灯闪烁)
→ 平台模式/柜控模式可通过平台远程切换
8. 数据上传
→ 实时上报BMS/温控/状态数据供平台监控
→ 上报加热风扇状态(运行/停止)及环境温度
→ 上报电磁泵状态(通/断)
→ 上报各仓体门磁状态(开/关)及关门超时告警
→ 上报烟感/喷淋状态
→ 上报电表耗电量数据
→ 平台仅记录充电记录(起止时间、电量、费用等)
TCP断连处理
1. 检测到TCP断连 → 触发告警
2. 如已启用柜控模式,离线充电不受影响
3. 如为平台模式 → 充电控制暂停,等待重连
4. 缓存待上传数据(重连后补偿上报)
5. 自动重连间隔递增10s/30s/60s/300s
6. 重连成功 → 补偿上传缓存数据
```
## 5. 指示灯状态控制
### 5.1 状态定义
| 指示灯状态 | 对应状态 | 触发条件 | 继电器 | 电源输出 |
|-----------|---------|---------|--------|---------|
| 绿灯闪烁 | 充电中 | 正常充电BMS通讯正常有协议或电源输出正常无协议 | 闭合 | 正常输出 |
| 绿灯常亮 | 仓体空闲 | 无充电任务、无故障、无禁用、门已关闭 | 断开 | 无输出 |
| 红灯常亮 | 平台禁用 | 管理员下发禁用指令 | 断开 | 无输出 |
| 红灯闪烁 | 电池不符合要求/设备告警/门未关 | BMS校验不通过/故障/门长期未关 | 断开 | 无输出 |
### 5.2 状态切换条件
```
[绿灯常亮] ──扫码/预约充电──→ [绿灯闪烁]
[绿灯闪烁] ──充满/用户停止──→ [绿灯常亮]
[绿灯常亮] ──平台禁用指令──→ [红灯常亮]
[红灯常亮] ──平台解除禁用──→ [绿灯常亮]
[绿灯常亮] ──插入不合规电池──→ [红灯闪烁]
[红灯闪烁] ──拔掉电池──→ [绿灯常亮]
[绿灯闪烁] ──故障告警──→ [红灯闪烁]
[红灯闪烁] ──故障排除──→ [绿灯常亮]
任何状态 ──烟感/浸水触发──→ [红灯闪烁/常亮]
```
### 5.3 控制实现
指示灯控制由仓控主板直接驱动柜控主板通过485下发指示灯控制指令功能码0x83仓控板执行具体GPIO控制
```
绿灯控制GPIO输出PWM闪烁/高电平(常亮)/低电平(灭)
红灯控制GPIO输出PWM闪烁/高电平(常亮)/低电平(灭)
```
## 6. 充电控制逻辑
### 6.1 电池握手流程
```
[用户扫码 → 平台验证 → 下发开门指令]
[仓门打开 → 用户放入电池 → 关闭仓门]
仓控板检测门磁闭合
按配置BMS协议类型读取电池数据
┌─ 星恒模式Modbus 03H读取寄存器
│ - 10000-10002: 版本+控制状态
│ - 10003-10027: 电池条码
│ - 10043-10072: 单体电压30串
│ - 10074: 总电压
│ - 10080-10089: 温度10路
│ - 10091-10099: 告警状态
│ - 10101: SOH
│ - 10102: SOC
│ - 10103-10104: 充电请求参数
├─ 天能模式:自定义协议读取对应数据
└─ 无协议模式跳过BMS读取使用平台下发的固定参数
数据有效性校验SOC 0-100%, 电压40-80V等
打包数据 → 上传至柜控板ID128→ TCP长连接上传平台
等待充电控制指令
```
### 6.2 双模式充电控制
#### 6.2.1 平台控制模式
```
后台平台接收BMS信息 → 管理员判断/自动规则
下发充电允许/禁止指令
柜控板接收 → 转发至对应仓控板
仓控板执行:
允许 → 闭合继电器 → 电源开启+调压调流 → 绿灯闪烁
禁止 → 断开继电器 → 电源关闭 → 红灯闪烁
```
#### 6.2.2 柜控板控制模式
```
后台预设触发条件特殊ID列表、参数规则等
柜控板接收BMS信息 → 自动校验条件
符合条件 → 下发充电允许 → 仓控板执行充电启动
不符合条件 → 下发禁止 → 红灯闪烁
校验结果上传至平台
拔掉电池 → 自动恢复绿灯常亮(空闲)
```
### 6.3 充电过程动态调整
```
每1秒循环
1. 读取BMS实时数据有协议模式/ 读取电源输出电流(无协议模式)
2. SOC ≥ 98% → 满电保护:关闭电源,绿灯常亮
3. 电池温度 > 55℃ 或 < -10 过温保护关闭电源
4. 仓体温度 > 高温报警阈值平台可配置默认55℃→ 高温告警上传
5. 告警状态检查:
- 单体过压/欠压 → 保护动作
- 过流 → 降低电流或断电
- 电芯不平衡 → 预警提示
6. 动态调压调流:
- 有协议模式根据BMS请求电压/电流调整电源输出功能码0x02/0x04
- 无协议模式:保持平台下发的固定电压/电流输出
- 电压偏差 ≥ 0.5V 时重新调节
7. 无协议模式低电流检测:
- 输出电流 < 平台设置的停止阈值 判定充满自动断电
```
### 6.4 无协议充电模式
当配置为无协议充电模式时充电过程不依赖BMS通讯由平台下发固定参数控制
**配置参数(平台设置):**
| 参数 | 说明 | 范围 |
|------|------|------|
| 充电电压 | 固定输出电压 | 40-80V |
| 充电电流 | 固定输出电流 | 5-20A |
| 停止电流阈值 | 低于此值判定充满自动停止 | 0.5-5A |
**充电流程:**
```
[用户放入电池 → 关闭仓门]
仓控板检测门磁闭合
无BMS握手 → 直接上传"仓体就绪"至平台
平台下发充电允许 + 充电参数(电压/电流/停止电流阈值)
仓控板闭合继电器 → 通过485_3设置电源输出固定电压/电流
指示灯切换为绿灯闪烁(充电中)
每1秒监测电源输出电流
输出电流 < 停止电流阈值 判定充满
断开继电器 → 关闭电源输出 → 绿灯常亮
上报充电完成(时长+总输出电量估算)
```
## 7. 软件平台设计
### 7.1 后台管理系统
#### 7.1.1 技术栈建议
```
后端框架Spring Boot / Node.js (Egg.js/Nest.js) / Python (FastAPI)
数据库MySQL + Redis + InfluxDB时序数据
通信协议自定义TCP协议长连接设备通讯+ HTTP/WebSocket前端
前端框架React / Vue3 + Element Plus / Ant Design
```
#### 7.1.2 核心模块
| 模块 | 功能 |
|------|------|
| 设备管理 | 实时监控、远程重启、参数配置、OTA固件升级柜控板+仓控板) |
| 仓体控制 | 独立电流/电压设置、禁用/解除、状态查看、远程开门 |
| BMS协议配置 | 设置当前柜体BMS协议类型星恒/天能/无协议充电) |
| 无协议充电参数配置 | 设置固定充电电压/电流/停止电流阈值 |
| 充电控制模式配置 | 平台/柜控模式切换、特殊ID管理 |
| 用户管理 | 注册/登录、权限分配(管理员/普通/骑手) |
| 数据统计 | 充电量、使用率、故障率、温控数据、告警统计 |
| 故障管理 | 故障记录、工单分配、处理跟踪、解除禁用 |
| 报警阈值管理 | 关门超时阈值配置、高温报警阈值配置、设备告警管理 |
| TCP连接管理 | 连接状态监控、心跳检测、断连告警 |
| 辅助设备控制 | 电磁泵远程通断控制、加热风扇状态监控 |
#### 7.1.3 设备数据模型
```
充电柜 (Cabinet):
- id, 名称, 位置, 状态(在线/离线)
- BMS协议类型(星恒/天能/无协议)
- 无协议充电参数(电压/电流/停止电流阈值)
- 报警阈值(关门超时/高温)
- 6个电源 (Power): 型号, 版本, 状态
- 36个仓体 (Compartment):
- 所属电源, 所属仓控板ID
- 状态(空闲/充电中/禁用/故障/门未关)
- 当前电压/电流设置
- 指示灯状态
- 门磁状态(开/关) · 门锁状态
- 关门超时告警
- 6个仓控板 (CabinBoard):
- ID(1-6), 状态, 固件版本, OTA升级进度
- 6路温控数据
- 6路门磁数据
- 1个柜控板 (CabinetBoard):
- ID(128), 状态, 固件版本, OTA升级进度
- TCP连接状态 · 4G信号强度
- 加热风扇状态(运行/停止) · 环境温度
- 电磁泵状态(通/断)
- 喷淋电磁阀状态(开/关)
- 电表耗电量(kWh) · 电表通讯状态
- 烟感/浸水/喷淋状态
充电记录 (ChargeRecord):
- 仓体ID, 仓控板ID, 电源通道
- 开始时间, 结束时间
- 充电量, 最高温度, 平均电压
- BMS数据快照(SOC/电压/温度)
- 充电状态(正常/异常中断/手动停止)
故障记录 (FaultRecord):
- 仓体ID/主板ID, 故障类型, 故障码
- 发生时间, 处理时间
- 处理状态(待处理/处理中/已解决)
- 故障等级(预警/保护/严重)
```
### 7.2 微信小程序
#### 7.2.1 功能页面
| 页面 | 功能 |
|------|------|
| 首页 | 附近充电柜列表/地图,空闲舱位显示 |
| 扫码充电 | 扫描仓体二维码,启动充电 |
| 预约充电 | 选择仓体,预约时间段 |
| 充电进度 | 实时显示SOC/电压/温度/充电时间 |
| 消息通知 | 充电完成、故障告警、系统通知 |
| 个人中心 | 充电记录、用户信息、反馈 |
#### 7.2.2 仓体状态展示
小程序同步显示仓体指示灯状态及门锁状态:
- 绿灯闪烁 → "充电中"
- 绿灯常亮 + 门锁图标开 → "空闲(门已开)"
- 绿灯常亮 + 门锁图标关 → "空闲(门已关)"
- 红灯 → "禁用/故障"
扫码开门流程:
1. 用户扫描仓体二维码
2. 小程序显示仓体信息和操作按钮
3. 点击"开门"按钮 → 平台验证 → 下发开门指令
4. 门锁打开,用户放入/取出电池
5. 关门后系统自动检测门磁闭合
## 8. 安全防护设计
### 8.1 电气安全
| 防护类型 | 实现方式 | 触发动作 |
|---------|---------|---------|
| 过充保护 | SOC监测 + 电压监测 | SOC≥98%自动断电 |
| 过温保护 | 温控传感器 + BMS温度 | 超过平台设置高温报警阈值(可配置)时告警+断电 |
| 过流保护 | 电源故障码监测 | 超过设定值断电 |
| 短路保护 | 电源故障码监测 | 即时断电 |
| 漏电保护 | 漏保 | 快速切断380V输入 |
| 浪涌保护 | 浪涌保护器件 | 吸收浪涌冲击 |
| 烟感保护 | 开关量烟感传感器 | 断开接触器切断380V + 打开喷淋电磁阀 + 告警 |
| 浸水保护 | 开关量浸水传感器 | 断开接触器切断380V + 告警 |
| 门未关报警 | 门磁传感器+计时 | 超过平台设置关门超时阈值(可配置)时上传告警 |
### 8.2 数据安全
| 安全类型 | 措施 |
|---------|------|
| 存储加密 | 用户信息、BMS数据加密存储 |
| 通讯校验 | 1TN和校验 + Modbus CRC16校验 |
| 网络传输 | 自定义TCP协议加密传输 |
| 权限管控 | 管理员/普通用户分级权限 |
### 8.3 防护联动流程
```
[烟感/浸水触发]
柜控板检测到开关量变化(中断)
烟感触发 → 立即断开接触器切断充电电源380V输入+ 打开喷淋电磁阀(简易喷淋)
浸水触发 → 立即断开接触器切断充电电源380V输入
发送0x81急停指令至所有仓控板(ID1-6):继电器全部断开
柜控板+仓控板仍由12V电源正常供电预接触器4G通讯在线
所有仓体指示灯切换为红灯(告警)
上传告警至后台平台(即时推送)
管理员接收通知 → 判断是否为误报警
误报警 → 平台下发恢复指令 → 关闭喷淋电磁阀 → 柜控板吸合接触器 → 充电电源恢复供电
真实告警 → 现场排查处理 → 灭火后平台关闭喷淋 → 故障排除后恢复
各仓体恢复空闲(绿灯常亮)
```
## 9. 性能指标
| 指标 | 要求 |
|------|------|
| 仓控-柜控通讯延迟 | ≤ 0.5s |
| 仓控-电源通讯延迟 | ≤ 0.3s |
| TCP数据上传延迟 | ≤ 1s |
| 指示灯状态切换延迟 | ≤ 0.5s |
| 平台指令执行延迟 | ≤ 1s |
| 门锁响应延迟(平台→开门) | ≤ 1.5s |
| 门磁检测上报延迟 | ≤ 1s |
| OTA升级成功率 | ≥ 99% |
| 烟感→喷淋联动延迟 | ≤ 0.5s |
| 通讯故障率 | ≤ 0.1% |
| MTBF | ≥ 8000小时 |
| 设备故障率 | ≤ 0.5% |
| 继电器寿命 | ≥ 10万次 |
| 指示灯寿命 | ≥ 50000小时 |
| 工作温度 | -10℃ ~ +70℃ |
| 工作湿度 | 10% ~ 90% |