本文以国标GB/T 27930—2015《电动汽车非车载传导式充电机与电池管理系统之间的通信协议》为基础,讲述了直流充电网协议报文解析方法。主打实用,对于偏理论的部分仅作浅层叙述。文章主要囊括:
- 直流充电网CAN报文结构介绍
- CAN报文分析方法
报文组成
一条报文主要由ID(标识符)、数据帧等组成,在通常应用中主要关注的是报文ID、数据内容、发送周期,此处仅对此三项进行分析。关于CAN报文的详细定义可参照GB/T 27930—2015文件中的“2 规范性引用文件”中所述。
下图是车辆直流充电握手阶段的报文,以第一条报文“序号0”行为例,这是直流充电网的第一条报文(CRM),在插枪并启动充电柜后由充电柜发送。主要信息如下:
时间标识:0x0068214a 报文ID: 0x1826f456 报文数据:01 01 00 注: 报文中的数字不区分大小写; 获取的报文数据均为十六进制(为简便起见,未用符号表明); 数字前方的“0x”符号表示此数字为十六进制; 数字后方的“H”符号也表示此数字为十六进制; 数字后方的“b”表示此数字为二进制; 本文中十进制数字均省去符号位。直流充电网充电初始阶段报文
- 时间标识
通过时间标识可看出该条报文的发送时刻、时间间隔。
时间标识算法: 上图为十六进制,以0x182656f4(CRM)前两条为例,其时间标识为0x0068214a和0x00682b10,换算成十进制则分别为6824266和6826768(单位为0.1ms)。取二者差值2502,即时间差为250.2ms,符合国标对CRM要求的250ms周期(偏差0.2ms,在允许范围内)。 若为系统时间,则计算更简洁,直接将两个北京时间取差值即可。(系统时间存在极少量偏差,如无需进行精确分析,可忽略此偏差) 也有设备显示的原始时间标识直接为十进制,这样更直观。- 报文ID
报文ID相当于一条报文的身份证。下图为国标中对协议数据单元(PDU)的定义,此处以CRM报文为例,其ID为0x1826f456,可分为四部分0x18、0x26、0xf4、0x56.
报文ID解析: ⚫ 0x18,包含优先权P(3位)、保留位R(1位)、数据页DP(1位)三项内容。R和DP均为0 首先将0x18转换为二进制:11000B,分为三部分 优先权P:110B,换算成十进位为6,表示此条CRM报文的优先权为6 保留位R:0 数据页DP:0 ⚫ 0x26,为此条报文的PF,可用来查询此条报文的参数。直流充电网中每条报文具有惟一的PF,相当于身份证号。 ⚫ 0xf4,目标地址PS,即此条报文是发给地址为0xf4的节点的。国标中车辆BMS的地址为0xf4,充电柜的地址为0x56 ⚫ 0x56,源地址SA,即此条报文是地址为0x56的节点发出来的。协议数据单元(PDU)定义
参照国标“9 报文分类“,该处定义了每条报文的代号、名称、PGN、优先权、报文周期、数据长度、源-目标地址,可直接根据此处所列找到对应报文ID.这是报文目录,分析充电网报文时会经常用到。
以参数配置阶段的BRO报文为例
其优先权为4,则二进制P(100B)、R(0)、DP(0)一起为10000B,换算成十六进制为0x10;
其PGN为000900H,则PF为0x09;
目标地址为充电机0x56;
源地址为BMS,即0xf4;
组合起来其ID便为0x100956f4.
参数配置阶段报文列表
后续分析报文时看其PGN中间两个数(如0x01、0x07、0x0A等)即可筛选出对应ID.(组帧报文例外,具体见下方组帧报文部分描述)
- 报文数据
CAN网络中一帧报文所含的字节最多为8个,若报文的数据长度不超过8个字节,则在CAN网络中以一帧报文发出(如下图中的BCL报文0x181056f4、CCS报文0x1812f456、BSM报文0x181356f4这三条)。若数据长度超过8个字节,则以组帧形式发送(如下图中的0x1cec56f4、0x1cecf456、1ceb56f4,具体格式及解析方式见下方“组帧传输“)。
充电过程报文
如上图,excel中数据列有8列,从左往右依次为报文的第1、2…8字节。如BCL(0x181056f4)报文数据长度为0x5,则其数据列对应如下
组帧报文传输
当报文的数据长度超过8个字节时,在CAN网络上将会按照组帧报文格式进行传输。直流充电国标中,在充电的每个阶段最多有一条数据长度超过8的报文,均为BMS发送出来的。下图是直流充电网中的BRM、BCP两条报文。
(不同组帧报文,传输过程中其ID均用同一组,需要从数据内容中区分)
BCP和BCS报文传输
以BCP报文为例,组帧报文传输主要关注下面这段BCP报文中标注颜色的部分即可。
BCP报文示例
组帧报文虽稍复杂,但应用时只需关注其主要特征点,可参照以下对话框模拟示意。
组帧报文传输示意
BCP报文详细规则
上述对话框简图已涵盖分析数据时需关注的点和方法,接下来将详细描述组帧报文传输规则。
- BMS请求
BMS发送组帧报文时,会先发送一条ID为0x1cec56f4的报文,用来告知充电柜开始组帧报文的传输。实际应用时直接看第七字节内容即可识别此组组帧报文所对应的的PGN。
0x1cec56f4报文字节解析如下: 第一字节。第一字节为控制字10,内容固定; 第二、三字节。为数据长度,BCP报文的数据长度为13,因此换算成十六进制为0xD,用两个字节表示为0x000D,其中低字节填入第二字节0x0D,高字节填入第三字节0x00; 第四字节。为数据包个数,即接下来会以两帧报文(ID 为0x1ceb56f4)来传输13个字节的数据内容; 第五字节。预留,默认发0xFF 第六、七、八字节。即BCP报文的PGN,为000600H- 充电柜回应
充电柜接到这条报文后会回复一条ID为0x1cecf456的报文,用于告知BMS充电柜已准备好接收。此条报文一般可忽略。
0x1cecf456报文字节解析如下: 第一字节。11为控制字,内容固定; 第二字节。02,即告知BMS,充电柜可以接收2个数据包; 第三字节。01,即将接收的这个数据包编号为“01“; 第四、五字节。默认发0xFFFF; 第六、七、八字节。即BCP报文的PGN,为000600H.- 数据传输
接下来BMS就开始以0x1ceb56f4报文来正式发送数据。每条报文可发送7个字节(第1字节为序号),BCP长度为13,因此用两条报文来发送。
这个ID的报文承载了所有需要传输的数据,重点关注这一块。
0x1cec56f4报文字节解析如下: 第一条0x1ceb56f4报文 第一字节为序号01,即第一条数据包 第二到八字节依次为要发送的第1、2…7字节数据 第二条0x1ceb56f4报文 第一字节为序号02,即第二条数据包 第二到七字节依次为要发送的第8、9、10、11、12、13字节数据- 充电柜确认
发送且接收完毕后,充电柜则回复一条0x1cecf456报文,用来告知BMS,充电柜已完成接收。一般可忽略不看。
0x1cecf456报文字节解析如下: 第一字节13:控制字,表示已接收完毕; 第二、三字节000D:表示接收到的数据为13个字节; 第四字节02:接收到的数据分两个数据包; 第五字节FF:默认填充; 第六、七、八字节。即BCP报文的PGN,为000600H.注:以上所说部分报文可忽略的前提是BMS、充电机程序均按照标准发送报文。若出现程序问题或网络通讯问题,这些均要按照规则逐一排查。
哇哦,感谢耐心看完~
到这里是不是已经对CAN报文的格式和报文解析方式有了初步的认识呢,若文章有描述不详细或有其他疑问的地方欢迎评论提出^_^