本文首发自公众号“汽车技术馆”

在之前的一篇文章中给大家分享了一些CAN的基本知识,比如CAN通讯是个啥,CAN通讯的机制以及CAN通讯的帧结构等等,相信读过这篇文章的朋友应该都有了一个初步的认识,如果还没有看过的朋友可以在读本文之前再看一下

https://zhuanlan.zhihu.com/p/137064965

今天小编打算给大家介绍一下CAN通讯中使用的DBC文件。

01什么是DBC

DBC是Database Can的缩写,其代表的是CAN的数据库文件,在这个文件中把CAN通讯的信息定义的非常完整清楚,而CAN网络的通讯就是依据这个文件的描述进行的,所以DBC文件的作用非常强大,正是因为有了它才可以使得整个CAN网路的节点控制器无差错的协同同步开发。

02如何创建一个DBC文件

若要创建一个DBC文件,那么首先就需要选择合适的工具,这里小编使用的工具是Vector公司的产品,配合CANoe一起使用的CANdb editor,是一款专门用来编辑DBC文件的软件,如果你还没有选到合适的工具小编推荐你使用这个,确实挺好用的,可以直接在Vector的官网进行下载,软件本身是免费的,包括CANoe软件本身也是免费的,只是如有你需要真正仿真使用的话则需要license,如果只是查看的话都是可以使用的。

比如我已经打开了一个CANoe的软件,但是没有license,只是这种情况下会提示 ”view only“ 而已,有很多编辑功能是禁用的。
好了,这是关于工具层面,小编就不多说了,我们言归正传,如何创建DBC文件。

1打开DBC编辑软件

这里小编是以自己的工具链说明的,实际操作中方法不尽相同,而且不止一种,大家可以多多探索。
在打开的CANoe工程中,选择菜单 Tool, 找到CANbd editor

点击CANdb editor后即可打开DBC编辑软件

2新建一个数据库文件
菜单中选择 ”file“ ,然后创建数据库文件,会出现如下的模板选择对话框

可以根据需要使用的环境选择相应的模板,比如在这里我们选择 ” CANoe template.bdc“,进入如下界面

为创建的数据库文件命名,这个自己定义,只要符合命名的规则即可。
创建好文件名称之后,则进入到了编辑界面

3创建数值表

创建数值表的意义是为了给后续创建的信号提供解释,怎么理解呢?举例来说,在信号的世界里,只有数值一说,信号可以有不同的数值,比如会有0、1、2、3等等,那么这些数值代表什么样的含义,就需要给它解释才能具有真正的物理意义,这就是数值表的意义,随着我们的讲解,大家会逐渐的明白。

创建数值表需要在数值表的视图中操作,通过主菜单的 "view"可以将视图切换到"value table"界面,打开value table界面之后,在空白处右键选择"new"即可新建。

比如这里我们定义名称为 "running_sts_coding",然后再value description中做一下定义,如下:

点击确定,数值表中就会出现我们刚刚定义的这个数值表

4创建signal,关联相应的数值表

前面提到的创建数值表只是一个准备,真正有意义的是信号,而数值表就是为信号服务的,因为数值表中对数值含义的解释可以完成对信号含义的解释。
通过菜单 ”view” 将视图切换为 "overview" ,如下图所示

然后在signals的位置点击右键,新建,打开如下界面

例如,我们做如下定义

关键一步,在value table 的位置选择我们在上一步建立的数值表,这样就将信号和数值表链接起来了,同时也完成了信号的创建。到此,点击确定即可。
可以看到,在视图中新增了一个刚刚建立的信号

当然在实际的应用中信号肯定不止一个,我们这里只是为大家举一个例子如何完成信号的创建,其它的信号创建方法都是类似的,需要多少按照需求创建即可。

5创建message

在之前介绍CAN通讯的文章中我们说到,CAN通讯的载体是帧,也就是消息,而不是单纯的一个一个的信号,是把很多的信号封装到消息帧里面以帧的格式进行传输的,所以在建立了signal之后还需要将信号封装到帧中,那么就需要首先创建message,方法很简单,还是在“overview”的视图中,message位置点击右键,新建

在message中则需要定义清除帧的ID是多少,帧的类型,帧的长度,由哪个节点发送,发送的周期是多少等等,这些概念我们在之前的关于CAN通讯的文章中有过介绍,如果不太清楚的朋友可以翻阅之前的文章查看。

然后,在第二个子选项卡中关联帧的信号

我们之前只建立了一个信号,所以只有一个信号可选,那我们就添加这一个信号。
同时把第一页的基本信息定义如下

然后就可以确定了,定义之后在message界面就会出现一帧新的消息

6创建网络节点

再往上一层,前面提到定义消息的时候需要有发送的节点,那么这个节点就是CAN通讯中的网络节点,这个节点也是需要进行定义的,方法同样很简单,在"overview"界面内的network处,点击右键,选择新建

这里可以定义节点名称和节点地址,这里的地址有别于前面message中涉及的ID,这是两个不同的概念。比如,我们命名如下

然后在Tx message选项卡中设置发送的消息,因为这是第一个节点还有可接收的消息,所以只能设置发送的消息,我们只有一帧消息,所以设置如下:

设置完成之后,将左侧的视图展开如下:

这就是一个基本的DBC文件的结构,不管文件有多大,主要的组成元素就是这些,只不过是网络节点多一些,节点对应的消息多一些,然后消息内的信号多一些。
另外一点需要注意,如果是创建DBC文件,再创建完成之后一定要做一致性检查,菜单内file下的consistency check,我这个文件测试的结果如下

因为这个消息只有发送节点没有接收节点,作为示例只是为大家展示一下如何使用,所以没有真正的创建出网络,才会出现这样的错误。

03小结

DBC数据库文件是用来描述CAN网络节点间数据通讯的一种文件,包含了CAN总线协议中协议数据及其所代表的具体意义。简单的讲,dbc文件描述了在CAN网络上有哪些报文信息;这些报文上又携带了哪些信号信息;该报文是从哪个节点发出,哪个节点进行接收的等信息。是通讯的核心文件,通过创建一个DBC文件可以使你非常深刻的理解文件所包含的含义,同时有助于你理解已经存在的DBC文件,本质上都是相通的。

希望通过本文可以使你对DBC文件有一个深刻的了解,并且应用于工作中!

dbf文件怎么创建_DBC文件到底是个啥相关推荐

  1. python读取nc文件转成img_使用python的netCDF4库读取.nc文件 和 创建.nc文件[转]

    使用python netCDF4库读取.nc文件 和 创建.nc文件 1. 介绍 .nc(network Common Data Format)文件是气象上常用的数据格式,python上读取.nc使用 ...

  2. oracle 创建日志文件,oracle创建日志文件

    一团网资讯 一团资讯 > oracle > oracle创建日志文件 oracle创建日志文件 2018-04-14 15:39:48     发布者:来源网络 创建日志文件的语法如下: ...

  3. hadoop HDFS的文件夹创建、文件上传、文件下载、文件夹删除,文件更名、文件详细信息、文件类型判断(文件夹或者文件)

    摘要: 本篇文章主要介绍的是hadoop hdfs的基础api的使用.包括Windows端依赖配置,Maven依赖配置.最后就是进行实际的操作,包括:获取远程hadoop hdfs连接,并对其进行的一 ...

  4. Visual C# 资源文件编程--创建资源文件

    资源文件顾名思义就是存放资源的文件.资源文件在程序设计中有着自身独特的优势,他独立于源程序,这样资源文件就可以被多个程序使用.同时在程序设计的时候,有时出于安全或者其他方面因素的考虑,把重要东西存放在 ...

  5. hdf5文件和csv的区别_使用HDF5文件并创建CSV文件

    hdf5文件和csv的区别 In my last article, I discussed the steps to download NASA data from GES DISC. The dat ...

  6. ASP.NET——C#文件夹创建与文件存在判断

    比较简单,但是很实用.网上找了找分享给大家. if(Directory.Exists(Server.MapPath("~/upimg/hufu")) == false)//如果不存 ...

  7. html中如何插入pdf文件,如何创建PDF文件

    如何新建PDF格式文件大多数人所接触到的PDF格式文件,大多是其他格式转换而来的,转换成PDF是为了它的安全.兼容.打英传输方便.也因为大多数软件可转换成PDF,如办公软件或各类设计软件.为现时印刷的 ...

  8. python读xml文件生成.h头文件_Python创建xml文件示例

    Python创建xml文件示例 这里有新鲜出炉的 Python 入门,程序狗速度看过来! Python 编程语言 Python 是一种面向对象.解释型计算机程序设计语言,由 Guido van Ros ...

  9. java 创建新文件_Java创建新文件

    创建文件是一种非常常见的IO操作,在这一小节中我们将学习如何在java中创建文件的几个方法. 在java中创建文件有三种流行的方法,下面将一个一个地来学习. 方法一:使用File.createNewF ...

最新文章

  1. 解决vue中绝对定位或固定定位在底部的按钮随键盘移动的问题
  2. 做女程序员是一种什么样的体验?
  3. python序列模式的关联算法_关联算法
  4. 淡定!不要因为纳入了高考和二级考试甚至极个别小学课程就盲目夸大Python!...
  5. tar:归档中找不到 tar: 由于前次错误,将以上次的错误状态退出
  6. era5数据内容说明_mysql数据库自带主从配置
  7. 关于linux中文输入法
  8. 博弈论1(正则型博弈)
  9. linux模拟器使用教程,Ubuntu多机种游戏模拟器Mednafen教程
  10. 用什么软件来画软件的架构图?
  11. 计算机新建里没有word,电脑鼠标右键没有新建Word选项怎么办?
  12. jmeter上传文件踩坑指南
  13. 六年如逆旅,我亦是行人:一个顾问的六年安全从业经历
  14. idea 2019.2顶部菜单栏隐藏的恢复办法
  15. 如果要用运营的姿势,发支付宝红包
  16. 融跃教育登陆湖南卫视!揭秘融跃是个什么样机构!CFA/FRM/ACCA
  17. Alpha 测试与 Beta 测试:有什么区别?
  18. 人力资源后台管理系统之合同—— 电子签章功能
  19. openfoam变热物性参数的设置【转载】
  20. 数据结构 第2讲 算法复杂性

热门文章

  1. 构建自己的PHP框架(MVC)
  2. Android 最火高速开发框架AndroidAnnotations使用具体解释
  3. H - A Shooting Game
  4. listen()函数中的SOMAXCONN含义
  5. Android APK反编译详解 .
  6. POJ1979(DFS)
  7. 全局光照模型与Rendering Equation(全局光照的最为基础的核心理论) .
  8. Scp远程批量执行命令
  9. 在修改css特效时,需要注意的问题。(对寄存的影响,引用的位置)
  10. 呉服屋 2011/03/24早会文章