DBC的故事
1.DBC定义
DBC(data base CAN)是汽车ECU间进行CAN通讯的报文内容,有了它相互之间才能听懂。
2.DBC查看
DBC是文本文件,可以用记事本打开,一般都用CANdb++,可以更方便的查看和编辑。
3.DBC组成
DBC是由一系列的Message和Signal组成,文件定义了Message和Signal的属性,可参考vector文档(回复“DBC文档”获取)。下面介绍几个重要的关键字:
1)BO_
BO_是对Message的定义。
- 格式:BO_ ID Name: DLC Transmiter
- 例子:BO_ 100 ESP_01: 8 ESP
- 释义:发送方=ESP,帧名称=ESP_01,帧ID=0x64,报文长度=8个字节
2)SG_
SG_是对Signal的定义。
- 格式:SG_ Name : StartBit | Length @ ByteOrder SignedFlag (Factor,Offset) [Minimum | Maximum] "Unit" Receiver1,Receiver2
- 例子:SG_ VehSpd : 7|16@0+ (0.01,0) [0|655.35] "km/h" ECM.TCM
- 释义:信号名称=VehSpd,起始地址=7,长度=16,字节顺序=MSB(大端),符号位=无符号,系数=0.01,偏移=0,最小值=0,最大值=655.35,单位=km/h,接收方=ECM和TCM
3)VAL_
VAL_是对Signal枚举值的定义。
- 格式:VAL_ ID Name key1 "value1" key2 "value2" ;
- 例子:VAL_ 100 VehSpdValid 1 "Valid" 0 "Invalid" ;
- 释义:帧ID=0x64,信号名称=VehSpdValid,枚举值(0x0=Invalid,0x1=Valid)
4.DBC解析
上文已经介绍了DBC的格式,接下来介绍如何使用DBC从原始报文中解析出物理值。在此之前要先理解MSB(大端)和LSB(小端)。MSB是高位在前,LSB是低位在前,大多数都用的MSB。
1)原始值
假设有3个信号:signal1、signal2和signal3,长度分别是16、4、12。这3个信号包括了3种类型:完整字节,部分字节和跨字节。用Layout来比较。下面使用了位操作指令:&是按位与,<<是左移,>>是右移。
- MSB
MSB高位在前。
signal1:起始地址=7,值=Byte0<<8+Byte1。(Byte0是高位,Byte1是低位)
signal2:起始地址=23,值=(Byte2&0xf0)>>4。(取Byte2的高4位)
signal3:起始地址=19,值=(Byte2&0x0f)<<8+Byte3。(取Byte2的低4位,作为高位)
- LSB
LSB是低位在前。
signal1:起始地址=0,值=Byte0+Byte1<<8。(Byte0是低位,Byte1是高位)
signal2:起始地址=16,值=Byte2&0x0f。
signal3:起始地址=20,值=(Byte2&0xf0)>>4+Byte3<<4。(Byte2是低位,Byte3是高位)
2)物理值
物理值=原始值*Factor+Offset
3)代码实现
以.NET(C#)为例,绘制layout,计算出数值。
(回复“DBC例子”获取源代码)
- MSB
- LSB
5.DBC开源资料
(回复“DBC开源”随机获取)
DBC的故事的更多相关文章
- DBC的故事(二)
上篇介绍了MSB和LSB,此篇介绍更复杂的:有符号和无符号数. 1.信号符号 CAN信号有其物理意义,如温度.扭矩等,这些信号是有负值的,常见的解决方案有2种: 1)把offset设成负值 如温度of ...
- (python爬取小故事网并写入mysql)
前言: 这是一篇来自整理EVERNOTE的笔记所产生的小博客,实现功能主要为用广度优先算法爬取小故事网,爬满100个链接并写入mysql,虽然CS作为双学位已经修习了三年多了,但不仅理论知识一般,动手 ...
- 背后的故事之 - 快乐的Lambda表达式(一)
快乐的Lambda表达式(二) 自从Lambda随.NET Framework3.5出现在.NET开发者眼前以来,它已经给我们带来了太多的欣喜.它优雅,对开发者更友好,能提高开发效率,天啊!它还有可能 ...
- 2000条你应知的WPF小姿势 基础篇<28-33 WPF启动故事>
在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师.最为出色的是他维护了两个博客:2,000Things You Should Know About C# 和 2,0 ...
- 背后的故事之 - 快乐的Lambda表达式(二)
快乐的Lambda表达式 上一篇 背后的故事之 - 快乐的Lambda表达式(一)我们由浅入深的分析了一下Lambda表达式.知道了它和委托以及普通方法的区别,并且通过测试对比他们之间的性能,然后我们 ...
- UDAD 用户故事驱动的敏捷开发 – 演讲实录
敏捷发展到今天已经在软件行业得到了广泛认可,但大多数敏捷方法都是为了解决某一特定问题而总结出来的特定方法或实践,一直缺乏一个可以将整个开发过程串接起来的成体系的方法.用户故事驱动的敏捷开发(User ...
- iOS系列 基础篇 02 StoryBoard 故事板文件
iOS基础 02 StoryBoard 故事板文件 目录: 1. 故事板的导航特点 2. 故事板中的Scene和Segue 3. 本文最后 在上篇HelloWorld工程中有一个Main.storyb ...
- 前端少侠的ps故事
前端少侠的ps故事 正所谓,码在江湖,身不由己.自21世纪前后端分离,代码分工细化以来,前端与设计的合作也变得越来越重要.有人说,如果前端懂设计的话,工作会更快一点.倘若说我入前端半年能算半个前端少侠 ...
- 【码在江湖】前端少侠的json故事(上)日月第一击
日月第一击 这是我前端生涯第一次和后台对接,其经历真是苦不堪言,多次绝处逢生,柳暗花明,可就是迟迟见不到那条村子.当然,最后我还是完成了这次对接.下面来聊一聊我这白痴一般的经历. 序章 话说天下大势, ...
随机推荐
- 1021. Deepest Root (25) -并查集判树 -BFS求深度
题目如下: A graph which is connected and acyclic can be considered a tree. The height of the tree depend ...
- pig 的chararry类型不能用比较运算符comparison operator
pig 的chararry类型可能是按字段,逐个字段进行比较. element_id 是chararray类型, 语句: no_app_category_mapping = filter no_ele ...
- 在CSDN开通博客专栏后如何发布文章(图文)
今天打开电脑登上CSDN发现自己授予了专栏勋章,有必要了解如何在专栏发布文章. 很感谢已经有前辈给出了图文教程,此文章转载自博客:http://blog.csdn.net/upi2u/article/ ...
- Cocos2D:塔防游戏制作之旅(十六)
编译运行你的app,放置一些炮塔在你的地图上吧!你将看到炮塔在敌人移动如攻击范围时如何立即开始攻击,并且敌人的血条将随着攻击不断减少知道它们被人道毁灭!胜利即将来临了! 哦!Okay,这里只有少数细节 ...
- 【一天一道LeetCode】#89. Gray Code
一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 The gra ...
- 查看Linux下的文件
到了这个时候了,也大概的知道了寄出的Linux的操作,是时候接触一下如何查看文件了.我们常用的有以下几种方式: 1.cat,使用cat命令可以将文件的内容输出到显示屏上,也可以将两个文件结合一起输出. ...
- (NO.00002)iOS游戏精灵战争雏形(七)
接上一篇博文,我们继续完成射击的功能. 还是在MainScene.m中,添加initBullets方法: -(void)initBullets{ CCSprite *bullet; for (int ...
- VC2010工程依赖不再自动链接
发现 VC2010 Express 设置了 Project Dependencies 之后并没有自动链接. 而在VC2008中工程依赖不仅影响构建顺序,也会自动链接依赖项. 具体说明见: http: ...
- Dynamics CRM ADFS及IFD部署后延长系统注销时间
Dynamics CRM 部署IFD后,一段时间后登陆状态会失效,系统会提示让你重新登陆,可以通过延长失效时间来规避 在 powershell中执行如下指令 Set-ADFSRelyingPartyT ...
- kafka原理简介并且与RabbitMQ的选择
kafka原理简介并且与RabbitMQ的选择 kafka原理简介,rabbitMQ介绍,大致说一下区别 Kafka是由LinkedIn开发的一个分布式的消息系统,使用Scala编写,它以可水平扩展和 ...