解析.DBC文件, 读懂CAN通信矩阵,实现车内信号仿真

  通常我们拿到某个ECU的通信矩阵数据库文件,.dbc后缀名的文件。 直接使用CANdb++ Editor打开,可以很直观的读懂信号矩阵的信息,例如下图:

现在要把上图呈现的信号从.dbc文件中解析出来,供实现自动化仿真总线信号使用,比如使用python+支持can收发的硬件即可替代canoe实现信号仿真(性能上不够用,可满足功能测试所需)。

一个标准CAN帧中包含的信息有,消息ID、报文发送周期、 报文长度、信号信息等。

开始解析前,先了解一下报文帧。下表体现了摩托罗拉字节位序的报文发送时的字节序和bit序,一会儿可以帮助我们理解dbc中的定义

 

 我使用了notepad++打开数据库文件,提取数据库文件中的关键信息。此处随意选取了其中一个ID=1015(dec)作为例子讲解。全文本搜索1015,结果如下:

Line 62: BO_ 1015 IPK_ODO_Consump: 8 Vector__XXX
Line 883: CM_ BO_ 1015 "Transmitted by IPK, including EV DTE odometer, power consumption and fuel consumption";
Line 884: CM_ SG_ 1015 IPK_EVDTEodometer "The EV DTE odometer ";
Line 1265: BA_ "GenMsgCycleTime" BO_ 1015 1000;
Line 1463: BA_ "GenSigStartValue" SG_ 1015 IPK_EVDTEodometer 4095;
Line 1967: VAL_ 1015 IPK_EVDTEodometer 4095 "Invalid" ;

挨个戳开每条搜索结果查看详细内容,逐句解释:

说明:dbc文件以空格符拆分数据信息,类似于csv文件以","拆分数据的意思," "属于分隔符。还有其他分割信息的符号,如 "|",",","()","[]"等

1、报文消息数据格式解读

举例:以下是DBC中代表一条消息的描述信息

BO_ 1015 IPK_ODO_Consump: 8 Vector__XXX 

解释:

BO_              代表一条消息的起始标识

1015          消息ID的十进制形式,=0x3f7

IPK_ODO_Consump   消息名

:            分割符号

8           消息报文长度,帧字节数

Vector__XXX       发出该消息的网络节点,标识为Vector__XXX时未指明具体节点

2、信号信息数据格式解读

每条报文消息里面有多个报文信号,报文信号的信息的起始标识为"SG_", 它以一个"BO_"开始至下一"BO_"之间的内容止,详细报文消息以缩进1或2个空格符形式类似树图子节点的方式呈现。

举例:一条消息下的一个信号的信息,此处缩进一个空格

 SG_ IPK_EVDTEodometer : 7|12@0+ (1,0) [0|999] "km"  TBOX

解释:

SG_           代表一个信号信息的起始标识

IPK_EVDTEodometer    信号名,分长名与短名,此处是短名。长名非必须存在,可以不定义

 :             分割符号

7             信号起始bit

|             分割符号

12            信号总长度

@0+            @0表示是Motorola格式(Intel格式是1),+表示是无符号数据

(1,0)          (精度值,偏移值)

[0|999]          [最小值|最大值], 物理意义的最小与最大,现实世界的有物理意义的值,比如此处仪表续航里程最大999KM

"km"           "单位"

TBOX          接收处理此信号的节点,同样可以不指明,写为Vector__XXX

1)Motorola格式与Intel格式

这个决定了信号起始bit, 生成报文计算信号值时的大小端算法。

Motorola格式:

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

比如我设置续航里程998KM, 它的信号值在整条报文中表现为 3E,60,00,00,00,00,00,00

发送字节序

 信号布局图 (横轴bit序,纵轴字节序;先从左至右,再由上至下阅读信号)

 

Intel格式:

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

比如我设置续航里程998KM, 信号值在报文中为 E6,03,00,00,00,00,00,00

 信号布局图(横轴bit序,纵轴字节序;先从右至左,再由上至下阅读信号)

 

 

2)精度值与偏移量,物理值与信号值的关系公式:

  信号值*精度值 + 偏移量 = 物理值

总线上报文消息中传递的是信号值,当此信号传递到ECU时,需转换为物理意义的值在输出接口显示。

举例:

SG_ TCU_TransOilTemp : 7|8@0+ (1,-40) [-40|214] "°C"  TBOX

若传感器显示16度,则 信号值=(物理值-偏移量)/精度值 = (16 - (-40))/1 = 56(dec) = 0x38, 报文呈现为“38,00,00,00,00,00,00,00”  (此处00表示未设置信号,","分割字节,以上同)

 3、消息与信号的详细描述

CM_ BO_ 1015 "Transmitted by IPK, including EV DTE odometer, power consumption and fuel consumption";
CM_ SG_ 1015 IPK_EVDTEodometer "The EV DTE odometer ";

解释:

CM_    起始标识,我猜测CM_为comment缩写

4、消息发送周期

BA_ "GenMsgCycleTime" BO_ 1015 1000;

解释:

BA_  起始标识,描述消息与信号更详尽的信息。 以上语句描述了消息的周期,单位ms

5、信号默认值,起始值

BA_ "GenSigStartValue" SG_ 1015 IPK_EVDTEodometer 4095;

解释:

BA_   起始标识,描述消息与信号更详尽的信息。 以上语句描述了消息中具体信号的初始值,十进制表示

6、值枚举或特殊值列举或取值范围描述

VAL_ 1015 IPK_EVDTEodometer 4095 "Invalid" ;

 解释:

VAL_  起始标识符,对信号值的描述

以上是DBC解析的的完整内容,转载注明出处。

转载于:https://www.cnblogs.com/yao-zhang/p/10220665.html

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

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

相关文章

linux命令——init 的使用用法

1.手动输入命令会执行相关操作 #init 0 - 停机(千万不能把initdefault 设置为0 ) #init 1 - 单用户模式 #init 2 - 多用户,没有 NFS 不联网#init 3 - 完全多用户模式(标准的运行级) #init 4 - 没有用到 #init 5 - X11 (xwindow) 图…

01-数据库基础

1 数据库系统概述 1.1 数据库的4个基本概念 数据(Data):数据库中存储的基本对象数据库(Database):长期储存在计算机内、有组织的、可共享的大量数据的集合。数据库管理系统(DBMS):用户与操作系统之间的一层…

linux命令——crontab的使用方法

一、crond简介 crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检…

mongdb group聚合操作

1、数据准备 [{"goods_id":1,"cat_id":4,"goods_name":"KD876","goods_number":1,"click_count":7,"shop_price":1388.00,"add_time":1240902890},{"goods_id":4,"cat_id&quo…

PHP连接MySQL数据库的几种方法

1.最简单的方式-mysql&#xff08;面向过程&#xff09; <?php $con mysql_connect("localhost","root","password"); $select_db mysql_select_db(test); if (!$select_db) {die("could not connect to the db:\n" . mysql_e…

jQuery 教程01——jQuery安装

1、简介 jQuery是一个轻量级的”写的少&#xff0c;做的多”的JavaScript库。 jQuery 极大地简化了 JavaScript 编程。 jQuery 很容易学习。 jQuery库包含以下功能&#xff1a; HTML 元素选取 HTML 元素操作 CSS 操作 HTML 事件函数 JavaScript 特效和动画 HTML DOM 遍历和…

第一个程序 快速编译链接的办法

转载于:https://www.cnblogs.com/ZHONGZHENHUA/p/10223249.html

变量 和 注释

转自&#xff1a;白月黑羽Python3教程&#xff1a;http://www.python3.vip/doc/tutorial/python/0003/ Python语言中&#xff0c;所有的 数据 都被称之为 对象。 每个整数、小数、字符串&#xff0c;还有我们后面要学的 字典、元组、列表 等&#xff0c; 都是对象。 在Python程…

jQuery 教程02-jQuery 语法

通过 jQuery&#xff0c;您可以选取&#xff08;查询&#xff0c;query&#xff09; HTML 元素&#xff0c;并对它们执行”操作”&#xff08;actions&#xff09;。 jQuery 语法 jQuery 语法是通过选取 HTML 元素&#xff0c;并对选取的元素执行某些操作。 基础语法&#x…

jQuery教程03-jQuery 元素、id、.class和*全选择器

jQuery 基础选择器 jQuery 选择器允许您对 HTML 元素组或单个元素进行操作。 jQuery 选择器基于元素的 id、类、类型、属性、属性值等"查找"&#xff08;或选择&#xff09;HTML 元素。 它基于已经存在的 CSS 选择器&#xff0c;除此之外&#xff0c;它还有一些自定…

前台一键备份数据库+PHP实现方式

一、实现思路 1、单击备份按钮传递参数到后台&#xff0c;ajax实现&#xff1a; function backupDatabase(){var back backupDatabase;$.ajax({url:system_backup.php?dobackupDatabase,type:POST,data:back,dataType:json,beforeSend:function(){intervalwindow.setInterv…

网络操作系统 第四章 磁盘管理

习题 1.磁盘的数据结构包括哪些内容? 1)主引导扇区 2)操作系统引导扇区 3)文件分配表 4)目录区 5)数据区 2.什么是基本磁盘和动态磁盘? 1&#xff09;基本磁盘: 基本磁盘和旧版本Windows操作系统中使用了相同的磁盘结构。在使用基本磁盘时&#xff0c;我们被限制只能在每个磁…

jQuery教程04-jQuery_this选择器

jQuery选择器之特殊选择器this 相信很多刚接触jQuery的人&#xff0c;很多都会对$(this)和this的区别模糊不清&#xff0c;那么这两者有什么区别呢&#xff1f; 1、JS中的this this是JavaScript中的关键字&#xff0c;指的是当前的上下文对象&#xff0c;简单的说就是方法/属…

网络操作系统 第七章 管理TCP/IP网络

习题 1.简述TCP /IP 通信协议的四层结构的内容及应用。 应用层&#xff1a;应用程序间沟通的层&#xff0c;如简单电子邮件传输协议(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。 传输层&#xff1a;在此层中&#xff0c;它提供了节点间的数据传送服务&#xff0c;…

windows+PHP+shell_exec()无法执行的原因

今天使用shell_exec()命令执行wkhtmltopdf.exe 生成pdf文件时&#xff0c;总是无法生成PDF文件&#xff0c;使用var_dump()打印返回值&#xff0c;结果是null。可是检查代码并没有什么问题啊&#xff1f;执行程序的目录是 D:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe …

通过wkhtmltopdf导出支持CSS样式的pdf文件

在公司项目中发现有下载pdf文件的功能&#xff0c;但是不能识别CSS样式&#xff0c;导致下载的pdf文件格式显得很别扭&#xff0c;虽然能看但是难看。然后就是百度啊&#xff0c;google啊&#xff0c;最后找到一款能够识别CSS样式的软件—wkhtmltopdf。wkhtmltopdf可以直接把任…

【算法基础笔记】常用的排序算法的时间、空间复杂度,部分排序算法原理

冒泡排序 比较相邻的元素。如果第一个比第二个大&#xff0c;就交换他们两个。对每一对相邻元素做同样的工作&#xff0c;从开始第一对到结尾的最后一对。在这一点&#xff0c;最后的元素应该会是最大的数。针对所有的元素重复以上的步骤&#xff0c;除了最后一个。持续每次对越…

windows定时任务

在windows系统中创建定时任务&#xff0c;与在linux中创建定时任务是不同的。因为平时会用到windows的定时任务&#xff0c;所以在这里做个记录&#xff0c;同事给小伙伴们一个参考。 一、windows定时任务的工作流程 1、首先创建一个批处理脚本&#xff0c;就是扩展名为bat的…

jQuery实现checkbox的全选反选方法

checkbox的全选、取消全选、选中所有奇数、选中所有偶数等方法的实现代码如下&#xff1a; 注意jQuery的版本&#xff1a;jQuery1.6增加了prop&#xff0c;1.6之前的还是使用attr()和removeAttr() <!DOCTYPE html> <html lang"en"> <head> <ti…

爬虫前期知识的储备(二)

通用爬虫与聚焦爬虫&#xff1a; 通用爬虫&#xff1a;搜索引擎用的爬虫系统1&#xff09;目标&#xff1a;把互联网的网页下载下来&#xff0c;放到本地服务器形成备份&#xff0c;再对这些网页做相关处理&#xff08;提取关键字&#xff0c;去掉广告&#xff09;&#xff0c;…