通信协议 & 波特率
CAN 2.0B 扩展帧
250 Kbps (推荐) / 500 Kbps
主板节点 (Android)
Android Host 主控
Node ID: 0x00
MCU 节点 / 广播
1 ~ 36 号舱门/枪口
Node ID: 0x01~0x24 | 广播: 0xFF
安规看门狗保护
1000 ms 心跳周期
5~10s 超时强断高压
一、 29位 CAN 扩展帧 (ID) 结构位图 Canvas 渲染
标识符结构:3位 Priority (28..26) + 8位 Func Code (25..18) + 8位 Src Node (17..10) + 10位 Dst Node (9..0)
二、 核心功能接口定义列表 (共 9 个接口)
控制类指令 (Android ➔ MCU)
状态与事件 (MCU ➔ Android)
2.1 控制类接口(Android 发送 ➔ MCU 接收)
Func: 0x10
方向: Android ➔ MCU | 触发: 响应 OCPP Start/Stop Transaction
1. 启动 / 停止充电控制 (Cmd_StartStopCharge)
| Byte | 字段名称 | 数据类型 | 单位 / 偏移量 | 详细取值说明 |
|---|---|---|---|---|
| Byte 0 | ConnectorID | uint8 | - | 舱门/枪口号 (1 ~ 36) |
| Byte 1 | Action | uint8 | - | 0x01: 启动充电 (闭合继电器) | 0x00: 停止充电 (切断继电器) |
| Byte 2-3 | MaxCurrentLimit | uint16 | 0.1 A | 最大允许电流限额,大端模式 (如 160 = 16.0 A),支持 OCPP 动态功率控制 |
| Byte 4-7 | Reserved | uint8[4] | - | 保留字节,固定填充 0x00 |
Func: 0x11
方向: Android ➔ MCU | 触发: 换电开门解锁、归位锁枪
2. 舱门 / 枪锁控制 (Cmd_DoorControl)
| Byte | 字段名称 | 数据类型 | 单位 / 偏移量 | 详细取值说明 |
|---|---|---|---|---|
| Byte 0 | CabinetID | uint8 | - | 舱门号 (1 ~ 36) |
| Byte 1 | LockCmd | uint8 | - | 0x01: 弹开门锁 / 解锁 | 0x02: 锁定门锁 |
| Byte 2-7 | Reserved | uint8[6] | - | 保留字节,固定填充 0x00 |
Func: 0x12
方向: Android ➔ MCU | 触发: 响应 OCPP SetChargingProfile 限制广播
3. 动态功率 / 电流限制 (Cmd_SetCurrentLimit)
| Byte | 字段名称 | 数据类型 | 单位 / 偏移量 | 详细取值说明 |
|---|---|---|---|---|
| Byte 0 | ConnectorID | uint8 | - | 舱门/枪口号 (1 ~ 36) |
| Byte 1-2 | MaxCurrentLimit | uint16 | 0.1 A | 最大允许电流,大端模式 (例如 320 = 32.0 A) |
| Byte 3-7 | Reserved | uint8[5] | - | 保留字节,固定填充 0x00 |
Func: 0x05
方向: Android ➔ MCU | 触发: 响应 OCPP Reset 请求远程软硬件重启
4. 硬件复位指令 (Cmd_Reset)
| Byte | 字段名称 | 数据类型 | 单位 / 偏移量 | 详细取值说明 |
|---|---|---|---|---|
| Byte 0 | CabinetID | uint8 | - | 舱门号 / 板卡 ID (1 ~ 36;0xFF 代表全柜广播复位) |
| Byte 1 | ResetMode | uint8 | - | 0x01: 软复位 (Soft Reset) | 0x02: 硬件硬重启 (Hard Reset) |
| Byte 2-7 | Reserved | uint8[6] | - | 保留字节,固定填充 0x00 |
Func: 0x01
方向: Android ➔ MCU | 周期: 1000ms / 次 (高优先级)
5. 系统心跳包 & 安规看门狗 (Cmd_Heartbeat)
| Byte | 字段名称 | 数据类型 | 单位 / 偏移量 | 详细取值说明与安规约束 |
|---|---|---|---|---|
| Byte 0 | SeqNo | uint8 | - | 心跳流水号 (0 ~ 255 循环递增) |
| Byte 1 | AppStatus | uint8 | - | 0x01: Android 正常运行 | 0x00: 异常退隐/崩溃 |
| Byte 2-5 | Timestamp | uint32 | 秒 (s) | UTC Unix 秒级时间戳,用于下层 MCU 校准系统时间 |
| Byte 6-7 | Reserved | uint8[2] | - | 保留字节,固定填充 0x00 |
| 安规硬性保护逻辑: MCU 若连续 5 ~ 10 秒未收到此心跳,必须主动断开高压继电器,防止 Android 程序卡死/崩溃导致持续加热或引发火灾事故! | ||||
2.2 状态与事件接口(MCU 发送 ➔ Android 接收)
Func: 0x20
方向: MCU ➔ Android | 触发: 毫秒级变更推送 + 1000ms 周期广播
6. 状态与故障上报 (Evt_StatusNotification)
| Byte | 字段名称 | 数据类型 | 单位 / 偏移量 | 详细取值说明与 OCPP 映射 |
|---|---|---|---|---|
| Byte 0 | ConnectorID | uint8 | - | 舱门/枪口号 (1 ~ 36) |
| Byte 1 | DoorCPStatus | uint8 | - | 0x00: 未插枪/关门空闲 | 0x01: 已插枪/关门准备中 | 0x02: 门已打开 (触发视频抓拍) |
| Byte 2 | LockStatus | uint8 | - | 0x00: 解锁 | 0x01: 锁定 | 0x02: 锁故障 |
| Byte 3 | RelayStatus | uint8 | - | 0x00: 主继电器断开 | 0x01: 主继电器吸合 |
| Byte 4-5 | ErrorCode | uint16 | - | OCPP 错误代码:0x0000: 无故障 | 0x0001: 急停按下 | 0x0002: 输入过压/欠压 | 0x0003: 输出过流 | 0x0004: 过温告警 | 0x0005: 绝缘接地故障 |
| Byte 6-7 | Reserved | uint8[2] | - | 保留字节,固定填充 0x00 |
| 预录视频联动机制: 当 Android 解析到 Byte 1 == 0x02(门已打开)信号时,视频监控模块须零延迟提取内存环形缓冲区中开门前 5 秒的视频并启动落盘存档。 | ||||
Func: 0x30
7. 实时电参数上报 (Evt_MeterPowerData)
发送频次: 1000 ms ~ 2000 ms | 映射 OCPP MeterValues
- Byte 0: ConnectorID (舱门/枪口号 1~36)
- Byte 1-2: 实时输出电压 (uint16, 大端, 0.1V, 如 600=60.0V)
- Byte 3-4: 实时输出电流 (uint16, 大端, 0.1A, 如 100=10.0A)
- Byte 5-6: 实时功率 (uint16, 大端, 0.1 kW)
- Byte 7: 枪头 / 柜内温度 (int8, ℃, 偏移量 -40)
Func: 0x31
8. 电量与 BMS 数据上报 (Evt_MeterEnergyData)
发送频次: 1000 ms ~ 2000 ms | 计费核心字段
- Byte 0: ConnectorID (舱门/枪口号 1~36)
- Byte 1-4: 累计充入总电量 (uint32, 大端, Wh / 0.001kWh)
- Byte 5: 电池当前 SOC (uint8, 0 ~ 100 %)
- Byte 6: 电池当前 SOH (uint8, 0 ~ 100 % 健康度)
- Byte 7: BMS 通信状态 (0x01: 在线 | 0x00: BMS 离线)
Func: 0xFF
方向: MCU ➔ Android | 触发: 收到控制指令后立即响应 (< 50 ms)
9. 控制指令通用应答 (Ack_CommandResponse)
| Byte | 字段名称 | 数据类型 | 单位 / 偏移量 | 详细取值说明 |
|---|---|---|---|---|
| Byte 0 | CmdFuncID | uint8 | - | 被应答的指令 Func Code (如 0x10, 0x11, 0x12, 0x05) |
| Byte 1 | ConnectorID | uint8 | - | 舱门/枪口号 (1 ~ 36) |
| Byte 2 | ResultCode | uint8 | - | 0x00: 成功 (ACK) | 0x01: 拒绝 / 参数非法 | 0x02: 执行失败 / 硬件忙碌 |
| Byte 3-7 | Reserved | uint8[5] | - | 保留字节,固定填充 0x00 |
三、 交互式 CAN 报文模拟与 Canvas 载荷可视化
支持全 9 种 ICD 功能接口,实时计算 29 位 CAN ID、优先级、节点及 8-Byte 物理载荷位图
生成的 29位 CAN ID (Hex):
0x10100001
优先级 (Priority):
4
功能码 (Func):
0x10
源节点 ➔ 目标节点:
0x00 ➔ 0x01
Data Field (8-Bytes) 物理载荷分色映射图: