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

在之前的一篇文章中给大家分享了一些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文件有一个深刻的了解,并且应用于工作中!

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

  1. dbf文件怎么创建_DBC文件到底是个啥

    本文首发自公众号"汽车技术馆" 在之前的一篇文章中给大家分享了一些CAN的基本知识,比如CAN通讯是个啥,CAN通讯的机制以及CAN通讯的帧结构等等,相信读过这篇文章的朋友应该都有 ...

  2. Day19-File操作-创建 删除,文件过滤

    import java.io.File; import java.io.IOException;/**创建功能:*public boolean createNewFile():创建文件 如果存在这样的 ...

  3. c++ 查找文件夹下最新创建的文件_云计算开发总结:搜索Linux文件和文件夹的方法...

    当下,随着Linux在物联网.云技术.超级计算和人工智能等领域扮演关键角色,各种会议和新版本的发布令人应接不暇,Linux将迎来一个激动人心的"云时代".如果你想把握这个风口,现在 ...

  4. pdb文件 PDB文件:每个开发人员都必须知道的 .NET PDB文件到底是什么?

    pdb文件包含了编译后程序指向源代码的位置信息,用于调试的时候定位到源代码,主要是用来方便调试的. 在程序发布为release模式时,建议将 pdb文件删除, 同时,对外发布的时候,也把 pdb删除, ...

  5. 如何优雅的创建__init__.py文件?

    点击关注我哦 一篇文章带你了解如何优雅的创建__init__.py文件 什么是 Python 包? <数据科学家的模块化编程指南>文章中,我们介绍了:Python 包只是一个有组织的 Py ...

  6. java 默认数据库创建路径_无法创建数据库路径文件:/ user / hive /仓库错误

    我有一个3个节点的群集,并且在运行某些HVE查询时遇到以下错误 FAILED:元数据错误:MetaException(消息:无法创建数据库路径文件:/user/hive/warehouse/db_du ...

  7. android 创建隐藏文件夹吗,Android创建隐藏文件可能文件夹

    Android创建隐藏文件或者文件夹 android创建隐藏文件或者文件夹,其实只要在文件名或者文件夹名字前加一个点号即可. 隐藏文件(夹)可直接进行读写. 如果需要去除隐藏,那就是重命名,去除点即可 ...

  8. linux怎么创建牡蛎_文件amp;目录小技巧 | Linux后门系列

    0x01 Linux 目录技巧 我们都知道 Windows 下文件和文件夹命名是有很多规则和限制的,但是可以通过一些程序来绕过限制,今天我们来看看 Linux 有哪些有趣的规则 参考 https:// ...

  9. java file 操作之创建、删除文件及文件夹

    本文章向大家讲解java文件的基本操作,包括java创建文件和文件夹.java删除文件.java获取指定目录的全部文件.java判断指定路径是否为目录以及java搜索指定目录的全部内容等.请看下面实例 ...

最新文章

  1. 2018QBXT刷题游记(15)
  2. FTP搭建网络yum源
  3. php怎么四舍五入,php 四舍五入的三种实现方法
  4. 程序员面试系列——有符号数的溢出
  5. Redis都有哪些监控指标,看完你就懂了!
  6. python 自动上报json信息_python接口自动化5-Json数据处理
  7. AngularJS之页面跳转Route
  8. vue保存页面的值_vue前端页面跳转参数传递及存储
  9. stm32的rxne和idle中断_STM32 HAL CubeMX 串口IDLE接收空闲中断+DMA
  10. 一些编译php时的configure 参数
  11. jquery判断是否隐藏
  12. morphia查询Mongo数据库通过ReadPreference主从数据库查询切换方法
  13. 欢乐时光病毒原码分析
  14. K-Means聚类算法
  15. Word 边框刷使用方法
  16. form表单如何不直接提交?
  17. 金融业XIRR函数的算法思想与实现,java/plsql
  18. 保险知识(一):五大险种入门
  19. iOS 盒子布局之 YogaKit
  20. 1025: 最大字符 C语言

热门文章

  1. python自动生成表格_Python自动整理 Excel 表格
  2. php对接V免签支付教程_【全网首发】最新版影视小程序搭建教程完整版
  3. html前端页面的基本骨架是,web前端入门到实战:css实现的骨架屏方案
  4. java创建链表成绩管理系统_成绩管理系统 链表版
  5. php搜索文件名,window_Windows7内置搜索如何同时搜索文件名与内容,  Win7的搜索功能效果非常强 - phpStudy...
  6. Edge使用手机版切换到电脑模式的方法
  7. 笔记:区分文件头lang=”zh”和lang=”zh-cn”的使用??
  8. matlab安装好 启动总是闪退_在Ubuntu16.04下安装MATLAB2017b
  9. CommandLineRunner 和 ApplicationRunner 的区别
  10. ajax解析json中的对象数组对象,在JQuery中检索json数组后获取json对象Ajax