汽车软件开发之DBC文件介绍

笔者目前身处于这个行业,深感各大OEM(整车厂),供应商在ADAS(高级驾驶辅助系统)上的竞赛非常激烈。因此这方面的人才也是供不应求,很多公司都是相互挖人,抢人大战还是比较激烈的。所以,小伙伴,大家一起学习,赶紧赶上这个潮流啊。
下面转入正题,讨论一下DBC文件是什么东西,在汽车开发过程中起什么作用。
我是在做数据处理的时候接触到这个文件的。车辆,传感器供应商都会提供自己的DBC文件用于汽车驾驶辅助系统开发的。
首先我所了解的数据采集是通过:
车辆及传感器CAN总线接口——>PCAN——>PC运行程序采集

PCAN-USB Pro
通过上图这个设备,将车辆及传感器CAN总线接口与电脑USB接口连接起来,即可使用配套的PCAN View软件看到传递的数据,也可自行编写程序存储数据。
想要了解这个设备的可以访问下列链接:
PCAN-USB:https://www.peak-system.com/PCAN-USB-Pro.200.0.html?&L=1
下图为我们采集的部分数据截图,是车辆高速CAN数据:

图 1
前四个数字为时间戳,用于与其它数据同步。
第五位:ID(标号), 谁的ID等会儿会说到。
第六位:数据长度
第七位到最后:数据部分
注意!到此,准备引入DBC了。
假如我告诉你,数据部分包含了车辆的速度,加速度,发动机转速等信息后,请问你能看懂数据部分表示的什么意思吗?
答案肯定是不能的。也就是说,车辆上的电子设备之间通信的数据是经过“加密”处理的。如何才能看懂这些数据呢?那就要靠DBC文件了。
一般车辆的DBC文件是不会外泄的,否者会造成很大安全隐患。因此我只能简单向大家展示一下:

图2
如图中所示:
左侧树状图中Messages下有很多message(报文),每个报文下又有一些signal(信号)。报文名称后的括号内就是这个报文的ID。右侧为每个信号的一些具体信息,比如起始位,结束位,字节序,参数类型等。
到此,不知大家是否理解了DBC的作用。
利用对应的DBC文件,我们就可以解读上面的采集来的数据了。首先匹对报文ID,然后将数据转换为二进制0和1,对应到下图的8*8的方格中:

图3
然后按字节序排列每个信号包含的二进制数据。这个字节序包括Motorola(大端序)和Intel(小端序),可自行百度学习。计算出每个信号的十进制值后,再通过对应信号的参数信息计算出最终我们可以看懂的数据。
比如下图发动机转速信号(EnSpdHSC1)的参数:

图4
第一步:匹对报文ID,找到包含EnSpdHSC1信号的报文数据。
例如:图2中显示包含EnSpdHSC1信号的报文ID为0xc9,
在图1中找到第11行为该报文数据:
6408055,0,490,6407351,c9,8,80,1d,7c,0,0,0,10,91
第二步:后八位数据,把每个16进制数字转化为二进制填充到图3的8*8方格中:
1 0 0 0 0 0 0 0
0 0 0 1 1 1 0 1
0 1 1 1 1 1 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 1 0 0 0 0
1 0 0 1 0 0 0 1
第三步:根据图2,找到EnSpdHSC1信号的起始位,结束位,可知该信号包含第二行和第三行数据,并根据Motorola字节序可知该信号的raw值为:0001 1101 0111 1100 = 7548
第四步:根据图4参数:
发动机转速 = raw值 * factor + offset = 7548 * 0.25 + 0 = 1887 (rpm 转每分钟)
并且图4中还规定了这个信号的最大值和最小值。
图2 ~ 图4均来自于对应的DBC文件。
好啦,这次就讨论到这儿了。辛苦码字一晚上,经验还比较浅,仅供大家参考学习,后续还会不定时讨论。
另外,谢谢大家关注。一起学习进步。共勉。
版权归原作者所有。如有侵权,请与我联系。我将会及时处理。
夜雨聆风
