一文了解CAN DBC文件
一文了解CAN DBC文件
DBC文件是汽车研发中用于解析CAN通讯数据的重要文件,它将二进制/十六进制格式的数据与物理信号相互转换。本文详细介绍了DBC文件的结构和功能,包括节点(Node)、报文(Message)、信号(Signal)及其相互关系,并提供了实际应用中的常见问题和解决方案。
1. 为什么需要DBC文件
汽车控制器主要采用CAN总线进行通信,当采用高速CAN的数据帧进行数据传输,那么每一帧报文将能传递8个字节,即64个bit的数据,每个bit能传输0/1。当然利用CAN通讯是为了传输物理信号,而不只是没有物理/实际意义的二进制数值,比如将MCU的电机转速传输给VCU,VCU最终希望获得是电机转速多少rpm,而不是一个没有实际意义的二进制/十进制/十六进制数值,此时就希望有这样一份“密码本”,可以将没有物理/实际意义的数据转换为有意义的物理信号。
DBC文件就是这份“密码本”,因此DBC文件是主机厂的绝密文件,其他厂商进行竞品分析时,要耗费很大的人力物力来破解部分内容。因此不难理解,DBC文件是描述汽车网络拓扑上所有ECU之间CAN通讯信息的数据库文件,其中包含了CAN总线协议中协议数据及其所代表的具体意义,它可以用来监测和分析CAN网络上的报文数据,也可以用来模拟某个ECU的CAN节点。通常一个DBC文件只能包含一个CAN网络的节点信息,为了描述整车的网络拓扑信息,会需要多个DBC文件。
2. DBC文件详解
接下来就从节点开始,逐个介绍节点(Node)、报文(Message)、信号(Signal)以及它们之间的关系。
2.1 节点Nodes
在介绍节点之前,先回顾下整车网络拓扑,以一个经典的网路拓扑为例:
假如这里DBC文件描述的辅助驾驶CAN,那么当你打开DBC文件,看到的Node会有BSD、 PAS和IEC。同理,假设某路CAN有两个控制器ACU和CCU,那么,DBC文件的ECUs和Network nodes就应该有这两个控制器。
因此,对于DBC文件中的ECUs和Network nodes中具有哪些控制器,其来源于整车网络拓扑。当ECU明确了有ACU和CCU之后,那么接下来关注的它俩分别会接收哪些报文(Tx Messages)以及发送哪些报文(Rx Messages)。
2.2 报文Messages
将视线转到DBC文件中的Messages,这里将包含整个DBC文件的所有接收和发送的报文。
对于一条报文,其信息包括:
- 定义Definition,包括报文的名字、报文类型(标准格式/扩展格式)、ID、长度和报文种类(周期型/事件型)等信息;
- 信号Signals,此报文包含哪些信号;
- 收发方,如果该报文发送方,那么接收方是哪些ECU;如果该报文是接收方,那么发送方是哪个ECU;
- 信号排列Layout,报文所包含的信号是怎样排列在这64bit中。
也就是通过对报文进行编辑和配置,那么一方面Message与Network Nodes已经建立了联系,该条报文属于哪个ECU的Tx messages,哪个ECU的Rx messages,即报文的存在一定有发送方也一定有接收方;另一方面Message与Signals也建立了联系,Messages配置完整的前提一定是明确了包含哪些信号。
2.3 信号Signals
其实,在进行报文配置的同时,就要开始进行信号的配置,只有信号配置好了,报文的配置才能完成。对于信号的配置,关键点是定义Definition,这决定了CAN数据帧的64bit数据能否被正确地解析为物理信号。Definition的配置根据CAN通讯矩阵的具体定义,另外个人认为对于值的描述Value Description(枚举量)也非常重要,非常便于相关人员快速获取信号的物理意义。
2.4 三者的关系
通过上述的三个小结分别介绍了节点(Nodes)、报文(Messages)和信号(Signals),每一项都需要有哪些配置内容,然后从节点—>报文—>信号,以此形成了一个有层次的结构。
这样理清了三者之间的关系,那么再来看DBC的内容,思路就会十分的清晰。即使DBC文件包含的报文或信号数量非常多,当你需要找一个信号时,也不会觉得难找。这时找信号的思路是:
- 第一个关注点是哪个ECU接收还是发送的;
- 第二个关注点是在哪条报文(ID);
- 第三个关注点是信号的具体定义。
3. DBC使用常见问题
在DBC使用过程中可能会遇到一些问题,个人体会有以下几点:
- 关于报文采集,DBC文件是用来将CAN报文解析成具有实际意义的信号,没有DBC文件不会影响用设备(周立功,PCAN和CANalyzer等)去采集报文信号,在Trace界面仍然能看到不同报文及其数据在不断刷新。
- 关于DBC文件版本,DBC文件版本要确认好,不然会出现解析出来的信号异常或有偏差,有时情况很明显,信号一看就不正常,有时情况不明显,信号一点偏差,刚开始没发现,大量数据分析结果之后总觉得数据有点不对。
- 关于DBC文件加载,DBC文件该加载到设备哪个通道,经常会碰到不同的人用不同配置去采集报文数据,比如A的配置是设备的通道1采CAN1,通道2采CAN2,而B却反之,结果A打开B采的数据,没看不到。其实两个通道还好,如果多几个呢?这里分享一个不要问别人的配置DBC文件的技巧,即试错法,拖着DBC文件依次放在不同通道上,数据出来就配对了。
- 关于DBC文件创建,最好学习下如何自动生成DBC文件,手写太费时。
以上就是关于DBC基础使用过程中需要关注的一些点,更多DBC文件的内容可持续关注后续文章!