4、充电协议详解(GB/T 27930续):参数配置阶段、充电阶段、结束阶段、故障处理机制
好,咱们接着聊GB/T 27930。上一章我们把握手和辨识阶段讲透了,这一章我重点说说后面三个关键阶段:参数配置、充电、结束,还有那个谁都不想碰但必须懂的故障处理。
说实话,我在现场调试时,80%的通讯问题都出在参数配置和结束阶段。很多人觉得握手过了就万事大吉,其实真正的坑都在后面。
4.1 参数配置阶段:BMS和充电桩的“讨价还价”
握手成功后,BMS和充电桩就要开始谈条件了。说白了,就是BMS告诉充电桩:“我需要这么多电,你给不给得起?”
核心报文:
- BRM(BMS辨识报文):BMS上报电池类型、额定容量、额定总电压。嗯,这里有个细节——额定容量单位是Ah,不是kWh,我见过有人搞混过。
- BCP(BMS参数配置):BMS发送电池充电参数,包括最高允许充电总电压、最高允许充电电流、最高允许单体电压等。
- CTS(充电机参数配置):充电桩回复自己的输出能力,比如最大输出电压、最大输出电流。
- CML(充电机最大输出):充电桩告诉BMS:“我最多能给你这么多。”
关键点:参数配置阶段有一个超时机制。BMS发送BCP后,必须在5秒内收到CTS,否则通讯超时,直接进入故障处理。我曾经在项目里遇到过,因为CTS报文里的电压参数写成了字符串格式,导致BMS解析失败,一直超时重启。查了两天才找到原因。
避坑指南:我曾经在测试中发现,有些BMS会把“最高允许充电电流”填得特别大,比如电池包额定100A,它填200A。充电桩如果真按这个值输出,电池就危险了。所以,充电桩侧一定要做二次校验,不能完全信BMS的数据。
4.2 充电阶段:真正的“拉锯战”
参数配置完成后,就进入充电阶段了。这个阶段的核心是BCL(BMS充电需求)和CCS(充电机充电状态)的交互。
报文交互流程:
- BMS发送BCL,告诉充电桩:“我现在要XX电压、XX电流。”
- 充电桩回复CCS,说:“好的,我输出XX电压、XX电流。”
- 这个交互每50ms一次,一直持续到充电结束。
你想想看,如果BMS突然要一个很大的电流,充电桩能不能给?不一定。充电桩有自己的功率限制,还有当前其他枪的负载情况。这就是多枪功率分配的核心逻辑所在。
个人经验:我习惯在充电桩侧做一个“电流平滑”处理。BMS的电流需求变化可能很剧烈,比如从50A直接跳到100A。如果充电桩直接响应,输出电流会有一个尖峰,对继电器和接触器都不好。所以,我会在软件里加一个斜坡函数,让电流在200ms内逐渐上升。这样既满足BMS需求,又保护了硬件。
充电阶段的状态机:
| 状态 | 描述 | 典型报文 |
|---|---|---|
| 充电准备 | 等待BMS发送BCL | BCL |
| 充电中 | 正常功率输出 | BCL ↔ CCS |
| 充电暂停 | BMS或充电桩请求暂停 | BST/BSM |
| 充电结束 | 收到BST或CST | BST/CST |
这里有个容易忽略的点:充电暂停。BMS可以发BST(BMS中止充电)报文,充电桩收到后必须停止功率输出,但通讯链路保持。等BMS发BSM(BMS状态报文)恢复后,再继续充电。我在现场见过因为暂停后恢复时序不对,导致充电桩直接报故障的案例。
4.3 结束阶段:好聚好散
充电结束,不是直接拔枪走人那么简单。协议里有一套完整的“分手流程”。
正常结束流程:
- BMS发BST,中止充电,原因码为“正常结束”。
- 充电桩收到后,停止输出,发CST(充电机中止充电)确认。
- 双方交换充电统计数据(比如充了多少度电、充了多久)。
- 最后,BMS断开接触器,充电桩断开继电器。
异常结束:如果BMS检测到电池过压、过温,或者充电桩检测到绝缘故障,任何一方都可以直接发中止报文,不需要对方确认。说白了,就是“我不管你了,我先停”。
注意:结束阶段最容易出问题的是“接触器粘连检测”。BMS在断开接触器后,会检测接触器两端电压。如果还有电压差,说明接触器可能粘连了。这时候BMS会报故障,并且不允许再次充电。我遇到过因为继电器触点烧蚀,导致接触器检测失败的案例,最后只能换继电器。
4.4 故障处理机制:保命要紧
故障处理,说白了就是“出了事怎么办”。GB/T 27930定义了一套完整的故障分级和处理机制。
故障分级:
- 一级故障(致命):比如绝缘故障、电池过压。必须立即停止充电,断开接触器。
- 二级故障(严重):比如通讯超时、温度过高。可以降功率运行,或者请求暂停。
- 三级故障(一般):比如电压轻微波动、电流纹波偏大。可以继续充电,但需要记录日志。
故障处理流程:
- 检测到故障后,发送对应的故障报文(比如BEM、CEM)。
- 根据故障等级,执行相应动作(停止、降功率、告警)。
- 记录故障码和时间戳,方便后续排查。
- 如果是可恢复故障(比如通讯临时中断),在故障消除后,可以重新进入握手阶段。
我的建议:故障处理一定要做“防抖”处理。比如绝缘检测,可能因为环境湿度大,瞬间出现一个低绝缘值,但很快就恢复了。如果直接触发一级故障,用户就得拔枪重来,体验很差。我一般会做3次连续检测,如果3次都低于阈值,才判定为真实故障。
常见故障码举例:
| 故障码 | 含义 | 处理方式 |
|---|---|---|
| 0x01 | 电池过压 | 立即停止充电 |
| 0x02 | 电池欠压 | 停止充电,告警 |
| 0x03 | 电池过温 | 降功率或停止 |
| 0x04 | 绝缘故障 | 立即停止,断开接触器 |
| 0x05 | 通讯超时 | 重试3次,失败则停止 |
嗯,这里要注意,故障码的定义在协议里是开放的,不同厂家可以自定义。但建议尽量遵循标准定义,否则不同品牌的BMS和充电桩对接时,容易出兼容性问题。
好了,这一章的内容就这些。参数配置、充电、结束、故障处理,这四个阶段环环相扣,任何一个环节出问题,都会影响充电体验。下一章我们聊聊多枪功率分配的具体算法,那才是真正考验架构设计能力的地方。