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

实现汽车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://xiahunao.cn/news/3247454.html

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

相关文章

无需业务改造,一套数据库满足 OLTP 和 OLAP,GaiaDB 发布并行查询能力

在企业中通常存在两类数据处理场景,一类是在线事务处理场景(OLTP),例如交易系统,另一类是在线分析处理场景(OLAP),例如业务报表。 OLTP 数据库擅长处理数据的增、删、改&#xff0c…

Elasticsearch 企业级实战 01:Painless 脚本如何调试?

在企业级应用中,Elasticsearch 常常被用来处理复杂的数据查询和操作。 Painless 是 Elasticsearch 的内置脚本语言,虽然强大,但调试起来并不容易。 本文将详细介绍如何在实战中有效调试 Painless 脚本,以提高开发和运维效率。 本文…

百日筑基第二十三天-23种设计模式-创建型总汇

百日筑基第二十三天-23种设计模式-创建型总汇 前言 设计模式可以说是对于七大设计原则的实现。 总体来说设计模式分为三大类: 创建型模式,共五种:单例模式、简单工厂模式、抽象工厂模式、建造者模式、原型模式。结构型模式,共…

java基础之数组,int[]和ArrayList

开始学java的时候,对于 int[] 和ArrayList总是懵懵懂懂的,不知道啥时候用哪个。现在终于了解了,总结一下跟大家分享一下 int[]数组 创建// 方式一:创建一个固定的数组 int arr1 {1,2,3,4,5}; // 方式二:创建一个长度为10的数组 double[] ar…

28_EfficientNetV2网络详解

V1:https://blog.csdn.net/qq_51605551/article/details/140487051?spm1001.2014.3001.5502 1.1 简介 EfficientNetV2是Google研究人员Mingxing Tan和Quoc V. Le等人在2021年提出的一种深度学习模型,它是EfficientNet系列的最新迭代,旨在提…

HLS加密技术:保障流媒体内容安全的利器

随着网络视频内容的爆炸性增长,如何有效保护视频内容的版权和安全成为了一个亟待解决的问题。HLS(HTTP Live Streaming)加密技术作为一种先进的流媒体加密手段,凭借其高效性和安全性,在直播、点播等场景中得到了广泛应…

十大排序 之 选择排序

!!!排序仅针对于数组哦本次排序是按照升序来的哦 介绍 快速排序英文名为SelectSort从数组中找到最小的放到前边 基本思路 1、默认待排序数组中第一个作为最小值2、找待排序数组(注意不是整个数组哦)中真正的最小值3…

【机器学习实战】Datawhale夏令营2:深度学习回顾

#DataWhale夏令营 #ai夏令营 文章目录 1. 深度学习的定义1.1 深度学习&图神经网络1.2 机器学习和深度学习的关系 2. 深度学习的训练流程2.1 数学基础2.1.1 梯度下降法基本原理数学表达步骤学习率 α梯度下降的变体 2.1.2 神经网络与矩阵网络结构表示前向传播激活函数…

《昇思25天学习打卡营第22天|生成式-Diffusion扩散模型》

Diffusion扩散模型 本文基于Hugging Face:The Annotated Diffusion Model一文翻译迁移而来,同时参考了由浅入深了解Diffusion Model一文。 本教程在Jupyter Notebook上成功运行。如您下载本文档为Python文件,执行Python文件时,请…

数据结构day2

一、思维导图 内存分配 二、课后习题 分文件编译 //sys.h #ifndef TEST_H #define TEST_H #define MAX_SIZE 100//定义学生类型 typedef struct Stu {char name[20]; //姓名int age; //年龄double score; //分数 }stu;//定义班级类型 typedef struct Class {struct …

Xilinx FPGA DDR4 接口配置基础(PG150)

1. 简介 本文为硬件平台创建PL IP模块,创建PL内核,子系统功能仿真,并评估Vivado的时序、资源和功耗收敛。 本文设计过程的主题包括: ClockingResetsProtocol DescriptionCustomizing and Generating the CoreExample Design D…

Linux学习(2):shell脚本和正则

概述 一般使用/bin/bash,也就是bash解析器。最广泛,大家公认。 一般shell脚本的后缀都是 .sh 简单写一个: 执行方法:sh sh文件 or bash sh文件,(不用x权限)直接运行./sh文件可能会有权限问题&#xff…

定制开发AI智能名片商城微信小程序在私域流量池构建中的应用与策略

摘要 在数字经济蓬勃发展的今天,私域流量已成为企业竞争的新战场。定制开发AI智能名片商城微信小程序,作为私域流量池构建的创新工具,正以其独特的优势助力企业实现用户资源的深度挖掘与高效转化。本文深入探讨了定制开发AI智能名片商城微信…

《昇思25天学习打卡营第20天|GAN图像生成》

生成对抗网络(GAN)是一种深度学习模型,用于生成逼真的图像。在手写数字识别的任务中,GAN 可以用来生成与真实手写数字相似的图像,以增强模型的训练数据集。GAN 主要由两个部分组成:生成器(Gener…

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

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

FATE Flow 源码解析 - 日志输出机制

背景介绍 在 之前的文章 中介绍了 FATE 的作业处理流程,在实际的使用过程中,为了查找执行中的异常,需要借助运行生成的日志,但是 FATE-Flow 包含的流程比较复杂,对应的日志也很多,而且分散在不同的文件中&…

Go语言中的并发

简单介绍go中的并发编程. 涉及内容主要为goroutine, goroutine间的通信(主要是channel), 并发控制(等待、退出). 想查看更多与Go相关的内容, 可以查看我的Go编程栏目 Goroutine 语法 在一个函数调用前加上go即可, go func(). 语法很简单, 可以说是并发写起来最简单的程序语言…

【简单介绍Gitea】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…

广联达Linkworks ArchiveWebService XML实体注入漏洞复现

0x01 产品简介 广联达 LinkWorks(也称为 GlinkLink 或 GTP-LinkWorks)是广联达公司(Glodon)开发的一种BIM(建筑信息模型)协同平台。广联达是中国领先的数字建造技术提供商之一,专注于为建筑、工程和建筑设计行业提供数字化解决方案。 0x02 漏洞概述 广联达 LinkWorks…

【C#】已知有三个坐标点:P0、P1、P2,当满足P3和P4连成的一条直线 与 P0和P1连成一条直线平行且长度一致,该如何计算P3、P4?

问题描述 已知有三个坐标点:P0、P1、P2,当满足P3和P4连成的一条直线 与 P0和P1连成一条直线平行且长度一致,该如何计算P3、P4? 解决办法 思路一:斜率及点斜式方程 # 示例坐标 x0, y0 1, 1 # P0坐标 x1, y1 4, 4 # …