如何通过DBC文件看懂CAN通信矩阵

news2024/9/22 15:35:22

实现汽车CAN通信开发,必不可少要用到DBC文件和CAN通信矩阵。

CAN通信矩阵是指用于描述 CAN 网络中各个节点之间通信关系的表格或矩阵。它通常记录了每个节点能够发送和接收的消息标识符(ID)以及与其他节点之间的通信权限。

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

  • 通信权限管理:通过通信矩阵可以清晰地了解每个节点之间的通信权限,包括哪些节点可以向哪些节点发送消息,以及哪些节点可以接收来自哪些节点的消息。这有助于确保网络中的数据传输是有序和安全的。
  • 网络配置和管理:通信矩阵可以用于配置和管理 CAN 网络的通信规则。通过调整矩阵中的条目,可以灵活地修改节点之间的通信关系,以满足不同的通信需求和网络拓扑结构。
  • 故障诊断:在出现通信故障或异常情况时,通信矩阵可以作为诊断工具,帮助定位问题。通过比较实际通信情况和预期的通信矩阵,可以找出通信错误的根本原因,并进行相应的修复。

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

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

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

以下是一个DBC文件示例:

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

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

  • 控制器名称 :控制器ECU名称
  • 报文名称 :每个报文消息规定的名字
  • 报文ID :唯一标识报文的ID号,一般规定ID范围为0x00 - 0x7FF
  • 报文发送类型 :分为周期报文,事件报文,周期事件报文,使能周期发送
  • 报文周期 :周期报文的发送周期值
  • 长度  :报文字节长度

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

  • 信号名称:信号英文名称,一般命名:ECUName_MessgeName,ECUName为发送节点的名字简写,MessgeName为具体的报文名称
  • 信号描述:信号中文名称描述
  • 信号类型:信号的数据类型,比如布尔类型Boolean,无符号 Unsigned,有符号Signed
  • 信号长度:信号的长度,即占多少个bit 位的长度
  • 字节次序 :规定信号的大小端位置和布局layout,有Motorola格式和Intel格式
  • 起始字节位置:起始位所在的字节序号
  • 起始位位置:信号起始位所在的bit位置编号
  • 精度/偏移量:描述信号值如何转变成信号物理值,计算公式:真实物理值 = 信号值 * 精度 + 偏移量
  • Range范围 :信号数值的范围
  • 信号单位 :信号数值的单位,比如可为:m ,km
  • 信号值描述:信号数值含义
  • 初始值:信号默认的初始值
  • 无效值 :信号无任何含义的无效值状态
  • 备注:信号备注内容

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • 周期 :报文按照固定的周期发送,例如周期为100ms,则每隔100ms发送一帧报文。
  • 事件 :当事件触发后,发送出数据报文,一般规定连续发送3帧,间隔20ms。
  • 周期事件 :周期和事件的结合,报文以周期时间发送每帧报文,当某个事件信号触发后,按照事件的形式立马发送出来,之后恢复到固定周期发送。
  • 使能周期 :报文以周期时间发送每帧报文,当某个事件触发后并且达到下一个发送周期时,这个时刻按照事件发送,一般规定连续发送3帧,间隔20ms。

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

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

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

  • RollingCounter信号 :滚动计数值,例如示例信号从0 - 15,循环滚动,每发送一帧报文,该信号值累加1。
  • CheckSum信号 :检验值,基于某种校验算法,将报文数据进行加密处理,加密算法一般使用的是CRC算法。

资料:

1、https://www.cnblogs.com/yao-zhang/p/10220665.html

2、https://blog.csdn.net/PlutoZuo/article/details/133043032

3、https://blog.csdn.net/CJohn1994/article/details/124105213

4、https://blog.csdn.net/wteruiycbqqvwt/article/details/102929488

5、https://mp.weixin.qq.com/s/5x0-JqTKx6Uv_3yz9p4K0g

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1932854.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis中数据分片与分片策略

概述 数据分片是一种将数据分割并存储在多个节点上的技术,可以有效提高系统的扩展性和性能。在Redis中,数据分片主要用于解决单个实例存储容量和性能瓶颈的问题。通过将数据分散存储到多个Redis节点中,可以将负载均衡到不同的服务器上&#…

防火墙之双机热备篇

为什么要在防火墙上配置双机热备技术呢? 相信大家都知道,为了提高可靠性,避免单点故障 肯定有聪明的小伙伴会想到那为什么不直接多配置两台防火墙,然后再将他们进行线路冗余,不就完成备份了吗? 答案是不…

UDP客户端、服务端及简易聊天室实现 —— Java

UDP 协议(用户数据包协议) UDP 是无连接通信协议,即在数据传输时,数据的发送端和接收端不建立逻辑连接,简单来说,当客户端向接收端发送数据时,客户端不会确认接收端是否存在,就会发出…

【深度学习教程】

文章目录 pytorch官方教程知识蒸馏:https://pytorch.org/tutorials/beginner/knowledge_distillation_tutorial.html 李宏毅-机器学习/深度学习https://speech.ee.ntu.edu.tw/~hylee/ml/2021-spring.phphttps://speech.ee.ntu.edu.tw/~hylee/ml/2022-spring.phphttp…

深入解析公有IP与私有IP:地址分配与使用限制

IP地址在网络基础设施的建设和维护过程中起着至关重要的作用。作为IP地址的两大类型,公有IP和私有IP各自具有独特的分配机制和使用限制。本文将详细分析两者之间的区别,以帮助读者更好地理解和使用IP地址。 1. 公有IP与私有IP概述 IP地址是网络中的唯一…

Spring Boot 中使用 Resilience4j 实现弹性微服务的简单了解

1. 引言 在微服务架构中,服务的弹性是非常重要的。Resilience4j 是一个轻量级的容错库,专为函数式编程设计,提供了断路器、重试、舱壁、限流器和限时器等功能。 这里不做过多演示,只是查看一下官方案例并换成maven构建相关展示&…

hexo搭建博客(github node git )(失败版本)

HexoGitHub搭建个人博客教程(2023最新版) 搭建失败了 是因为git命令一直报错 打算明天把git和node版本全部重新安装后再弄 同时回顾一下github git 和 node的基础知识 Github新手之路(全过程)(站在前辈的肩膀上的总…

使用 ABBYY FineReader PDF 15 在创建或转换 PDF 时自动生成书签

使用 ABBYY 为 PDF 文件添加书签,可以帮助快速定位文档中的主要内容,也能更方便的梳理出一份文档大纲。 有很多 PDF 文件在创建时并没有编辑书签,这里介绍使用 ABBYY FineReader PDF 15(Win 系统)在 PDF 中自动添加书…

两大国产多模态大模型推荐

GLM-4V 智谱AI 开放平台提供一系列具有不同功能和定价的大模型,包括通用大模型、超拟人大模型、图像大模型、向量大模型等,并且支持使用您的私有数据对模型进行微调。GLM-4V 就是在不牺牲任何NLP任务性能的情况下,实现了视觉语言特征的深度融…

网络编程-TCP/IP

网络概述 网络采用分而治之的方法设计,将网络的功能划分为不同的模块,以分层的形式有机组合在一起。 每层实现不同的功能,其内部实现方法对外部其他层次来说是透明的。每层向上层提供服务,同时使用下层提供的服务 网络体系结构…

【LeetCode】删除排序链表中的重复元素 II

目录 一、题目二、解法完整代码 一、题目 给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。 示例 1: 输入:head [1,2,3,3,4,4,5] 输出:[1,2,5] 示例 …

WEB前端06-DOM对象

BOM浏览器对象模型 浏览器对象模型:将浏览器的各个组成部分封装成对象。是用于描述浏览器中对象与对象之间层次关系的模型,提供了独立于页面内容、并能够与浏览器窗口进行交互的对象结构。 组成部分 Window:浏览器窗口对象 Navigator&…

win11局域网共享打印机或者文件提示:\\计算机名 无法访问。你可没有权限使用网络资源。请与这台服务器的管理员联系以查明你是香有访问权限。网络不存在或尚未启动。解决方法

win11局域网共享打印机或者文件提示:\\计算机名 无法访问。你可没有权限使用网络资源。请与这台服务器的管理员联系以查明你是香有访问权限。网络不存在或尚未启动。 是因为win11更新会默认关闭不安全的SMB1协议,导致局域网共享不可用。既然这样&#xf…

Web开发:四角线框效果(HTML、CSS、JavaScript)

目录 一、实现效果 二、完整代码 三、页面准备 1、页面结构 2、初始样式 3、现有效果 三、线框实现 1、需求分析 2、线框结构 3、线框大小 4、线框位置 5、线框样式 6、移动线框 7、添加过渡效果 8、使用CSS变量 一、实现效果 如下图所示,当鼠标移动…

项目管理进阶之RACI矩阵

前言 项目管理进阶系列续新篇。 RACI?这个是什么矩阵,有什么用途? 在项目管理过程中,如Team规模超5以上时,则有必要采用科学的管理方式,满足工作需要。否则可能事倍功半。 Q:什么是RACI矩阵 …

SQL面试题练习 —— 查询每个用户最大连续登录天数

目录 1 题目2 建表语句3 题解 1 题目 查询每个用户最大连续登录天数 样例数据如下 login_log: 2 建表语句 --建表语句 create table if not exists login_log (user_id int comment 用户id,login_time date comment 登录时间 ); --数据插入 INSERT overwrit…

N Puzzle (数字推盘游戏)

N Puzzle [数字推盘游戏] 1. 15 Puzzle2. N PuzzleReferences puzzle /ˈpʌzl/:n. 谜,智力游戏,疑问,不解之谜,令人费解的事 vt. 迷惑,使困惑1. 15 Puzzle https://en.wikipedia.org/wiki/15_puzzle The…

Python 在Word表格中插入、删除行或列

Word文档中的表格可以用于组织和展示数据。在实际应用过程中,有时为了调整表格的结构或适应不同的数据展示需求,我们可能会需要插入、删除行或列。以下提供了几种使用Python在Word表格中插入或删除行、列的方法供参考: 文章目录 Python 在Wo…

Qt QProcess 进程间通信读写数据通信

本文介绍了如何使用Qt的QProcess 进行程序开发,包括启动进程间通信、设置环境变量、通用方法;方便在日常开发中使用; 1.使用Qt进行程序开发,可以通过QProcess类用于启动外部程序并与其进行通信.; 进程A(…

【时时三省】tessy 集成测试:小白入门指导手册

目录 1,创建集成测试模块且分析源文件 2,设置测试环境 3,TIE界面设置相关函数 4,SCE界面增加用例 5,编辑数据 6,用例所对应的测试函数序列 7,添加 work task 函数 8,为测试场景添加函数 9,为函数赋值 10,编辑时间序列的数值 11,执行用例 12,其他注意事项…