凡亿专栏 | 如何通过DBC文件看懂CAN通信矩阵
如何通过DBC文件看懂CAN通信矩阵

通信矩阵在 CAN 网络中具有重要作用:

  • 通信权限管理:通过通信矩阵可以清晰地了解每个节点之间的通信权限,包括哪些节点可以向哪些节点发送消息,以及哪些节点可以接收来自哪些节点的消息。这有助于确保网络中的数据传输是有序和安全的。

  • 网络配置和管理:通信矩阵可以用于配置和管理 CAN 网络的通信规则。通过调整矩阵中的条目,可以灵活地修改节点之间的通信关系,以满足不同的通信需求和网络拓扑结构。

  • 故障诊断:在出现通信故障或异常情况时,通信矩阵可以作为诊断工具,帮助定位问题。通过比较实际通信情况和预期的通信矩阵,可以找出通信错误的根本原因,并进行相应的修复。


DBC(DataBase Container)文件是用于描述CAN总线网络中消息和信号的一种格式,是一种数据库文件,通常由CAN网络中的通信和信号定义组成,可用于配置和管理CAN总线上的通信协议。


下载CANdb  软件可以打开DBC文件。


链接:https://www.vector.com/int/en/products/products-a-z/software/candb/#c104632

ceae4f3d960d52612544694c62dfa1.jpg


以下是一个DBC文件示例:


a7c7ec4c810de5a703dcf17a03b0f1.jpg


以下是 DBC 文件的主要组成部分:


消息定义:描述了在CAN总线上发送和接收的消息,包括消息的ID、周期、发送节点等信息。每个消息定义通常包含了一条或多条信号定义。


27234bdedae5ae176760a81e0c99e1.jpg

  • 控制器名称 :控制器ECU名称

  • 报文名称 :每个报文消息规定的名字

  • 报文ID :唯一标识报文的ID号,一般规定ID范围为0x00 - 0x7FF

  • 报文发送类型 :分为周期报文,事件报文,周期事件报文,使能周期发送

  • 报文周期 :周期报文的发送周期值

  • 长度  :报文字节长度


信号定义:描述了消息中传输的数据,如信号的名称、起始位、长度、单位、因子、偏移量等。信号定义用于将物理数据映射到CAN消息的数据域中。


58c8b6b024dcac4bbbc1fc340e2243.jpg

  • 信号名称:信号英文名称,一般命名:ECUName_MessgeName,ECUName为发送节点的名字简写,MessgeName为具体的报文名称

  • 信号描述:信号中文名称描述

  • 信号类型:信号的数据类型,比如布尔类型Boolean,无符号 Unsigned,有符号Signed

  • 信号长度:信号的长度,即占多少个bit 位的长度

  • 字节次序 :规定信号的大小端位置和布局layout,有Motorola格式和Intel格式

  • 起始字节位置:起始位所在的字节序号

  • 起始位位置:信号起始位所在的bit位置编号

  • 精度/偏移量:描述信号值如何转变成信号物理值,计算公式:真实物理值 = 信号值 * 精度   偏移量

  • Range范围 :信号数值的范围

  • 信号单位 :信号数值的单位,比如可为:m ,km

  • 信号值描述:信号数值含义

  • 初始值:信号默认的初始值

  • 无效值 :信号无任何含义的无效值状态

  • 备注:信号备注内容


打开DBC文件后,我们主要关注:Tx Messages和Rx Messages,这里面是CAN发送和接收的信息。


a52220c6b670b0ed31774bb8e724f7.jpg


写程序时候,最容易搞错的就是起始位和信号长度,如果发送或者接收的信号没有对齐,数据解析就会存在问题。


d3070fffd20d9a78a75682a3e7f1ea.jpg


可以使用CANdb  软件打开Layout,通过可视化的方式看清楚报文的字节排序,例如以下0X342报文的字节排序:


e5ed03428dc09c2ec87a168a62058c.jpg


以一个8byte的报文为例,8byte即为64个bit位,会将每一个bit位编号为0 - 63,信号起始位数值即为起始位位置所在的编号值,信号长度表示从起始位开始,连续占用的bit位长度。


1998b5311cc08dc01c49fa91de2a3d.jpg


根据具体的布局安排,以及数据的大小端规定,DBC中CAN字节排序有两种格式:Motorola格式和Intel格式。


Intel格式:也称为小端序。在Intel格式中,数据的低位字节存储在低地址,高位字节存储在高地址。与Motorola格式相反,数据的最低有效字节存储在地址最低的位置,而最高有效字节存储在地址最高的位置。大多数个人计算机和x86架构的处理器都使用小端序。


Intel格式规定的布局安排规定示例如下,起始位位置规定了位于64bit(编号0-63)具体的那个位置,如下示例起始位置为12;信号长度规定了从起始位编号位置开始,连续占用的bit位长度,如下示例信号长度为12。


43d431f8e9ccbe54a743caa5c712d3.jpg


Motorola格式:也称为大端序。在Motorola格式中,数据的高位字节存储在低地址,低位字节存储在高地址。这意味着数据的最高有效字节存储在地址最低的位置,而最低有效字节存储在地址最高的位置。这种格式通常用于一些嵌入式系统和网络协议中。起始位表示信号的大小端规定不同,又可以分成 Motorola MSB格式 和 Motorola LSB格式。


Motorola MSB格式布局示例如下,起始位位置表示的是大端位置。


56f9665ba5a47b7d88f961b4dd9ab5.jpg


Motorola LSB格式布局示例如下,起始位位置表示的是小端位置。


c8d79415eaefc5dae29335cc47bed1.jpg


使用Intel格式设置续航里程998KM, 它的信号值在整条报文中为3E、60、00、00、00、00、00、00,在DBC文件中设置如下:


c8eccc19dbeb5852dc3344e2752d03.jpg


信号以低字节低位起始,此处占了12bit,以第一字节的低bit 0位算起,计12个bit总长度,信号是非连续的(发送的字节序体现出的信号值非连续,但是bit位是由低到高连续的)。 


使用Motorola格式设置续航里程998KM, 它的信号值在整条报文中为3E、60、00、00、00、00、00、00,在DBC文件中设置如下:


9dbe16549aa861feaad8c88e463e84.jpg


信号以高字节低位起始,此处占了12bit,以第二字节的低bit 12位算起,计12个bit总长度,信号是连续的(此处连续针对低字节在前的字节发送序,参看LSB与MSB)。 


报文发送类型可分为:周期,事件,周期事件,使能周期。


3a2e09030a5c2a4046d6aac31b2632.jpg


  • 周期 :报文按照固定的周期发送,例如周期为100ms,则每隔100ms发送一帧报文。

  • 事件 :当事件触发后,发送出数据报文,一般规定连续发送3帧,间隔20ms。

  • 周期事件 :周期和事件的结合,报文以周期时间发送每帧报文,当某个事件信号触发后,按照事件的形式立马发送出来,之后恢复到固定周期发送。

  • 使能周期 :报文以周期时间发送每帧报文,当某个事件触发后并且达到下一个发送周期时,这个时刻按照事件发送,一般规定连续发送3帧,间隔20ms。


周期事件报文中的事件信号,在实际应用中,有事件保持和事件不保持两种。


  • 事件保持 :触发信号发送后,信号一直保持之前的状态。

  • 事件不保持 :触发信号发送后,信号恢复到默认值状态。


有些报文规定了两个特殊的信号:RollingCounter信号 和 CheckSum信号,为CAN报文添加安全加密属性,保护CAN报文信号数据。


59c86313dd810e1b0417c43c1712e9.jpg


  • RollingCounter信号 :滚动计数值,例如示例信号从0 - 15,循环滚动,每发送一帧报文,该信号值累加1。

  • CheckSum信号 :检验值,基于某种校验算法,将报文数据进行加密处理,加密算法一般使用的是CRC算法。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表凡亿课堂立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。
相关阅读
进入分区查看更多精彩内容>
精彩评论

暂无评论