欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

直流充电网络 GB/T 27930 协议 CAN 报文解析方法

最编程 2024-04-28 08:10:15
...

直流充电网GB/T 27930协议CAN报文解析方法

本文非原创,原文章地址如下:直流充电网GB/T 27930协议CAN报文解析方法 (ofweek.com)

之所以放在这里,是作为我学习积累的见证。

本文以国标GB/T 27930—2015《电动汽车非车载传导式充电机与电池管理系统之间的通信协议》为基础,讲述了直流充电网协议报文解析方法。主打实用,对于偏理论的部分仅作浅层叙述。文章主要囊括:

  • 直流充电网CAN报文结构介绍

  • CAN报文分析方法

报文组成

一条报文主要由ID(标识符)、数据帧等组成,在通常应用中主要关注的是报文ID、数据内容、发送周期,此处仅对此三项进行分析。关于CAN报文的详细定义可参照GB/T 27930—2015文件中的“2 规范性引用文件”中所述。

下图是车辆直流充电握手阶段的报文,以第一条报文“序号0”行为例,这是直流充电网的第一条报文(CRM),在插枪并启动充电柜后由充电柜发送。主要信息如下:

注:

报文中的数字不区分大小写;

获取的报文数据均为十六进制(为简便起见,未用符号表明);

数字前方的“0x”符号表示此数字为十六进制;

数字后方的“H”符号也表示此数字为十六进制;

数字后方的“b”表示此数字为二进制;

本文中十进制数字均省去符号位。

时间标识

0x0068214a

报文ID

0x1826f456

报文数据

01 01 00

时间标识

通过时间标识可看出该条报文的发送时刻、时间间隔。

时间标识算法:

上图为十六进制,以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的节点发出来的。

参照国标“9 报文分类“,该处定义了每条报文的代号、名称、PGN、优先权、报文周期、数据长度、源-目标地址,可直接根据此处所列找到对应报文ID.这是报文目录,分析充电网报文时会经常用到。

以参数配置阶段的BRO报文为例

其优先权为4,则二进制P、R、DP一起为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,则其数据列对应如下

报文ID

0x181056f4

8C

19

3C

0F

02

组帧报文传输

当报文的数据长度超过8个字节时,在CAN网络上将会按照组帧报文格式进行传输。直流充电国标中,在充电的每个阶段最多有一条数据长度超过8的报文,均为BMS发送出来的。下图是直流充电网中的BRM、BCP两条报文。

(不同组帧报文,传输过程中其ID均用同一组,需要从数据内容中区分)

以BCP报文为例,组帧报文传输主要关注下面这段BCP报文中标注颜色的部分即可。

 报文ID

0x1cec56f4

10

0D

00

02

FF

00

06

00

0x1cecf456

11

02

01

FF

FF

00

06

00

0x1ceb56f4

01

9D

01

00

00

73

09

04

0x1ceb56f4

02

1A

6A

DE

03

98

17

 

0x1cecf456

13

0D

00

02

FF

00

06

00

组帧报文虽稍复杂,但应用时只需关注其主要特征点,可参照以下对话框模拟示意。

BCP报文详细规则

上述对话框简图已涵盖分析数据时需关注的点和方法,接下来将详细描述组帧报文传输规则。

BMS请求

BMS发送组帧报文时,会先发送一条ID为0x1cec56f4的报文,用来告知充电柜开始组帧报文的传输。实际应用时直接看第七字节内容即可识别此组组帧报文所对应的的PGN。

 报文ID

0x1cec56f4

10

0D

00

02

FF

00

06

00

0x1cec56f4报文字节解析如下:

第一字节。第一字节为控制字10,内容固定;

第二、三字节。为数据长度,BCP报文的数据长度为13,因此换算成十六进制为0xD,用两个字节表示为0x000D,其中低字节填入第二字节0x0D,高字节填入第三字节0x00;

第四字节。为数据包个数,即接下来会以两帧报文(ID 为0x1ceb56f4)来传输13个字节的数据内容;

第五字节。预留,默认发0xFF

第六、七、八字节。即BCP报文的PGN,为000600H

充电柜回应

充电柜接到这条报文后会回复一条ID为0x1cecf456的报文,用于告知BMS充电柜已准备好接收。此条报文一般可忽略。

 报文ID

0x1cecf456

11

02

01

FF

FF

00

06

00

0x1cecf456报文字节解析如下:

第一字节。11为控制字,内容固定;

第二字节。02,即告知BMS,充电柜可以接收2个数据包;

第三字节。01,即将接收的这个数据包编号为“01“;

第四、五字节。默认发0xFFFF;

第六、七、八字节。即BCP报文的PGN,为000600H.

数据传输

接下来BMS就开始以0x1ceb56f4报文来正式发送数据。每条报文可发送7个字节(第1字节为序号),BCP长度为13,因此用两条报文来发送。

这个ID的报文承载了所有需要传输的数据,重点关注这一块。

 报文ID

0x1ceb56f4

01

90

01

00

00

73

09

04

0x1ceb56f4

02

1A

6A

DE

03

98

17

 

0x1cec56f4报文字节解析如下:

第一条0x1ceb56f4报文

第一字节为序号01,即第一条数据包

第二到八字节依次为要发送的第1、2…7字节数据

第二条0x1ceb56f4报文

第一字节为序号02,即第二条数据包

第二到七字节依次为要发送的第8、9、10、11、12、13字节数据

充电柜确认

发送且接收完毕后,充电柜则回复一条0x1cecf456报文,用来告知BMS,充电柜已完成接收。一般可忽略不看。

 报文ID

0x1cecf456

13

0D

00

02

FF

00

06

00

0x1cecf456报文字节解析如下:

第一字节13:控制字,表示已接收完毕;

第二、三字节000D:表示接收到的数据为13个字节;

第四字节02:接收到的数据分两个数据包;

第五字节FF:默认填充;

第六、七、八字节。即BCP报文的PGN,为000600H.

最后,附上几张学习笔记。