电池管理系统的报文采集与解析①
2020-06-20任大恒黄碧雄
任大恒,严 晓,2,黄碧雄,王 影
1(上海工程技术大学 机械与汽车工程学院,上海 201620)
2(上海玫克生储能科技有限公司,上海 201619)
电动汽车车用锂电池发展十分迅速,全球电动汽车保有量在逐年增加,但随之而来的电池安全问题也日益严重,主要还是电池一致性问题.纯电动汽车的电池信息主要由电池管理系统(BMS)发出,因此采集BMS 发出的CAN 报文,准确的诊断预测出电池存在的安全隐患至关重要.因为CAN 协议格式并没有固定标准格式,计算机无法识别CAN 协议,所以在CAN 报文解析需要将CAN 协议转换为机器可读的文件,在之前的研究中有采用XML 文件作为机器可读文件,这种方法需要人工录入协议内容,按照对应的格式将每一条信息转换成XML 文件[1],这样做会使工作量加大并且人工录入容易出错,导致结果不准确,目前CAN 网络中各逻辑节点信息采用由德国维克多公司发布的DBC 文件,DBC 文件能够被机器识别,拥有固定的格式,依据DBC 文件可以开发出用来监视CAN 网络中所有逻辑节点的运行状态,也可以是有针对性的ECU通信应用软件[2],因此被广泛使用.但是DBC 文件目前主要依赖于专用软件的建立和解析,而软件的使用价格昂贵.本文基于树莓派设计了一套便携式可移动的BMS 的CAN 报文采集与解析系统,只需要将DBC 文件导入到树莓派内,设备便能根据DBC 文件进行报文解析.能够实时有效的检测电池组一致性的好坏,有利于提高电池的利用率,方便维修检查电池工作状态.
1 CAN 报文采集系统设计
1.1 CAN 总线概述
CAN 总线是一种串行通信协议,能有效地支持具有很高安全等级的分布实时控制.CAN 控制器局域网是1986年Bosch 公司提出的面向汽车的串行通信协议,目前是国际上标准的汽车网络协议[3].当CAN 总线上的节点发送数据时,以报文形式广播给网络中的所有节点,总线上的所有节点都不使用节点地址等系统配置信息,只根据每组报文开头的11 位标识符(CAN 2.0A 规范)解释数据的含义来决定是否接收[4].CAN总线可以分为3 个层次:物理层、传输层、对象层.物理层中定义实际信号的传输方法,用来定义不同节点之间根据电气属性如何进行位的实际传输.传输层负责把接收到的报文提供给对象层,以及接收来自对象层的报文.对象层中可以为远程数据请求以及数据传输提供服务,确定由实际要使用的传输层接收哪一个报文,并且为恢复管理和过载通知提供手段[5].
1.2 硬件结构设计
本文采用树莓派3B+作为CAN 报文采集的载体,树莓派是一款基于ARM 的微型电脑主板,以SD/MicroSD卡为内存硬盘,支持WiFi 和蓝牙连接,主板周围有4 个USB 接口和一个以太网接口,外部有40 个GPIO接口,支持Linux 系统,体积小价格低廉.针对CAN 报文的采集本文设计了树莓派的外接扩展板,采用MCP2515作为CAN 的控制器,Microchip 的MCP2515 是一款CAN 协议控制器,完全支持CAN V2.0B 技术规范.该器件能发送和接收标准和扩展数据帧以及远程帧.通过SPI 接口挂载在树莓派上,树莓派在使用该芯片时不需要手动编写驱动,打开设备树中的内核驱动就能够使用.同时选用DS1307 时钟芯片为树莓派断电时提供准确时间,在采集报文时同时能记录下报文采集的绝对时间.扩展板部分原理图如图1所示.
图1 原理图
1.3 软件结构设计
CAN 报文采集使用C 语言编写采集程序,采集速率更快数据更加准确,在采集的同时在每条报文后添加采集时间,便于后续对电池性能的评估.CAN 报文在采集时软件上主要分为5 步:
(1)CAN 总线配置:主要用于设置CAN 总线的位速率以及使能CAN 设备;
(2)创建套接字:Socket CAN 采用的是原始套接字,常用于检验新的协议实现或访问现有服务中配置的新设备;
(3)指定CAN 设备:绑定要用的CAN 设备;
(4)定义接收过滤规则:在数据接收时,可以根据预先设置的过滤规则,实现对报文的过滤;
(5)显示报文:报文按照帧ID、数据长度、数据、时间的顺序用空格分隔开,生成采集的报文文件.
采集的CAN 报文如图2所示.
2 CAN 报文解析系统设计
2.1 DBC 文件结构
目前DBC 文件的广泛使用,它是CAN 矩阵的另一种表示,各节点通过CAN 网络传输信号协议规定ECU 怎么发送和接收信号:例如信号长度、类型、精度、偏移量、信号名等,这些参数通过编辑工具生成DBC 文件[6].
图2 采集报文示例
根据Vector 发布的DBC 文件格式规范,本文设计了针对DBC 文件的解析系统.以一路CAN 对应的文件为例,DBC 文件的格式如下:
VERSION ""
NS_ :
BS_:
BU_:Vector__XXX
BO_ 408961267 Bms2VcuBasiInfo:8 Vector__XXX
SG_ SysVolt :7|16@0+ (0.1,0)[0|6553.5] "V"Vector__XXX
SG_ BatCurrent :23|16@0- (0.1,-1000)[-4276.8|2276.7] "A" Vector__XXX
SG_ BatSoc :32|8@1+ (1,0)[0|255] "%"Vector__XXX
SG_ BatSoh :40|8@1+ (1,0)[0|255] "%"Vector__XXX
SG_ BatState :52|4@1+ (1,0)[0|15] ""Vector__XXX
SG_ BatAlmLv :48|4@1+ (1,0)[0|15] ""Vector__XXX
SG_ BatLife :56|8@1+ (1,0)[0|255] ""Vector__XXX
DBC 头部包含着VERSION 与NS( new symbol)的信息,BU 为网络节点的定义,BS 为波特率设置,BO_为关键字表示报文,408 961 267 表示消息ID 的十进制形式,Bms2VcuBasiInfo 是消息名称,“8”为报文的数据长度帧字节数,Vector__XXX 为发出消息的网络节点.SG_ SysVolt :7|16@0+ (0.1,0)[0|6553.5] "V" Vector__XXX 是一条消息下的一个信号,其中SG_表示消息的起始.SysVolt 表示信号名,7 代表起始位Bit,16 表示信号长度,0 或1 表示Motorola 格式或Intel 格式,±表示有无符号,括号内表示精度值和偏移量,中括号内表示最大和最小值,“V”为单位,Vector__XXX 为信号节点.
2.2 CAN 报文解析
DBC 文件格式是固定不变的,且有固定的关键字表征不同的信息.因此本文采用Python 语言基于正则表达式对DBC 文件进行识别读取.其中关键匹配信息”BU_:(.*)”是匹配网络节点;“BO_ (.*?)(.*?):(.*?)(.*)”是匹配消息、帧ID、消息名、数据长度的模板;”SG_ (.*?):(.*?)|(.*?)@(.*?)((.*?),(.*?))[(.*?)|(.*?)]"(.*?)" (.*)”;匹配消息下的信号内容.根据以上关键的匹配语句,读取DBC 文件的关键信息来解析采集的CAN 报文.
CAN 报文是指发送单元向接收单元传送数据帧.通常所说的CAN 报文是指在CAN 线上利用ECU 和CAN 卡接收到的十六进制报文.接收到的CAN 报文由很多部分组成,但解析时主要用到的是帧ID 和数据两部分.帧ID 实际上是由29 位标识符转换得到的,目前的通信协议中都直接给出了对应的帧ID,不需要再做转换.数据一般由8 个字节组成,每个字节由两个字符组成,读取时要根据字节的顺序读取(Motorola 格式或者Inter 格式).CAN 总线的数据传输规则是首先传输一个字节的高位,最后传输该字节的低位,所以当信号不超过一个字节时两种格式解析没有区别,当发送的信号超过一个字节或跨字节时,采用Inter 格式,该信号的高位将被放在高字节的高位,信号的低位将被放在低字节的低位.这样,信号的起始位就是低字节的低位.当采用Motorola 格式时,该信号的高位将被放在低字节的高位,信号的低位将被放在高字节的低位.这样,信号的起始位就是高字节的低位.例如报文“1827F402 0C 48 0C 3F 00 50 02 B1”中“1827F402”是帧ID,“0C 48 0C 3F 00 50 02 B1”是数据段,根据DBC 文件,如按照Motorola 的格式,解析时按照16 进制就是0x0C48,而按照Inter 格式解析时就是0x480C,两种解析格式在夸字节时有绝对的区别.
本文在解析时将报文数据段转换为二进制字符串,即0-63 位总共64 个字符,将64 个字符串的序号与二进制的位号做一转换,例如数据段“0C880C670C5D0 C60”转换为二进制字符串后为0000110010001000 0000110001100111000011000101110100001100011000 00 解析时根据DBC 文件中的起始位和数据长度,将数据的起始位转换成二进制字符串的起始位,如果是Motorola 格式则根据转换后的字符串起始位指直接取数据长度对应的字符长度便能得到需要的数据.如果是Inter 格式只需要将二进制字符串前后顺序颠倒即可.这样使解析报文更加快捷.CAN 报文解析流程图如图3所示.
图3 报文解析流程图
3 实例验证
开路电压是电池组评判电池一致性的参数之一,根据各单体电压的差值大小,可以判断电池组的一致性优劣,并且在必要时对电池组进行均衡操作.
实验采用24 串磷酸铁锂电池组进行充放电实验,在实验开始之前能够测到各单体电池的开路电压情况,根据各单体电池开路电压的大小,可以评估电池组一致性.如图4中箱型图所示,箱型图能够显示一组数据分散情况,提供了识别异常值的一个标准,根据CAN报文中解析到的单体电池数据可以看到大部分电池均分布在3200 mV 上下,有两个电池属于异常值,需要做进一步处理.其他单体电池一致性相对较好.
图4 开路电压箱型图
4 结论
本文采用MCP2515 芯片设计了树莓派扩展板,能够实现BMS 的CAN 报文采集,并用其采集到的CAN报文,按照格式生成报文文件.根据协议的DBC 文件,对采集得到的CAN 报文进行解析.解析系统将CAN 报文的数据段转换成二进制字符,根据DBC 文件的编码类型,按Motorola 格式和Inter 格式对数据进行翻译,使得报文解析更加准确快速.同时,根据DBC 文件格式统一固定这一特点,写出了DBC 文件关键信息的正则表达式匹配模板,能够任意组合便于筛选报文内容得到需要的信息,本文所设计的CAN 报文采集系统只需要把DBC 文件导入树莓派中即可完成对报文的解析,操作简单便利,同时也是便携可移动式的CAN 报文采集解析系统,并且在解析后能做简单的计算分析,对电池的一致性从开路电压等角度做出评估.由于本文是基于树莓派设计的因此在之后的应用中能够进行二次开发,对解析数据做更深层次的处理,从更多的方面对电池组的性能做出诊断和预测,具有重大应用价值.
致谢
感谢企业导师郑小鹿教授在本文工作中技术上的指导,研究过程中的支持和帮助!