使用CANdb++创建DBC

  • 摘要
  • 1. 安装软件CANdb++
    • 1.1 软件下载方式
    • 1.2 安装软件
  • 2. 创建DBC文件
    • 2.1 CAN矩阵准备
    • 2.2 创建Template
    • 2.3 添加必要的属性
    • 2.4 添加value tables
    • 2.5 添加signals
    • 2.6 添加messages
    • 2.7 新建节点并添加mapped

摘要

目前汽车电子开发中使用到的DBC文件查看/编辑一般都是使用Vector的软件工具CANdb++,这个工具可以查看*.dbc文件,也可以对此类型文件进行编辑。而要生成DBC文件,首先得有CAN通信矩阵,也即是通常叫的CAN Communication Matrix。这个矩阵一般由整车厂提供,开发人员需要将矩阵中的信号和报文添加到DBC中,以供整个项目开发的需要。
对于DBC的创建,虽然也可以用上一篇文章中讲到的以文本形式编辑DBC,但是那样非常不方便,略微修改参数还行,但是要批量添加信号和报文,则显得不够直观。本节记录下如何根据CAN矩阵,使用Vector的工具CANdb ++来创建DBC文件。

1. 安装软件CANdb++

1.1 软件下载方式

CANdb++可以在Vector官网搜索CANdb++ Editor进行下载,也可以点此处下载
Tips: CANdb++有两个版本,一个就是这里提到的Editor,另一个是Admin,这个版本是要收费的,同时也具有更多的功能。不过,我们通常使用Editor版本基本上就足够了。

1.2 安装软件

  • 点击下载好的*.exe程序开始安装,比如VectorCANdb++Installer_3.1.009.exe
  • 安装过程中如果不需要修改软件安装路径,直接一路next
  • 可在上图界面中修改安装路径,其他选项用默认选项即可
    安装完成后可以看到类似这样的选项

2. 创建DBC文件

2.1 CAN矩阵准备

制作了一个简单的模板CAN矩阵进行演示,此矩阵中包含两个节点IP和GW,两条报文,详细信息如下图:

2.2 创建Template

  • 打开CANdb++,点击菜单栏File->Create Database…
  • 选择CANTemplate,创建并保存一个模板文件到本地路径,路径自行选择。
  • 选择保存路径,并对文件命名,这里命名为demo
  • 创建完成后如下图:

    这是一个空的CAN模板文件,接下来就是把矩阵中描述的信号和报文添加到DBC中

2.3 添加必要的属性

  • 在View->Attribute Definitions中新建全局属性GenMsgCycleTime

    这个属性表示报文的周期值
  • 新建属性GenMsgSendType

    这个属性表示报文的发送类型,周期还是事件型或者还有其他的(比如混合型,此处没写上)

2.4 添加value tables

从矩阵中可以看到每个信号都有对应的coding值,在DBC中是以value table的形式呈现。

  • 在View->Value Tables中进行创建各个信号对应的coding
  • 在打开的界面上直接右键,点击new即可以创建新的value table
  • 在Definition中修改Value Table的名字,可以自行取,一般我们使用比较明显直观的前缀,如Vtsig,表示Value table signal的缩写
  • 在Value Descriptions中添加coding值
  • 然后点击确定就完成了一条value table的创建。
    按照此种方式创建其他信号的value table,完成后如下图形式:
  • 在创建的过程中会遇到提示

    这个是因为软件默认限制符号的字符数为32个字符,有些信号名太长,则会超过此限制。不过这个不影响使用,如果觉得一直提示太烦,可以适当缩短字符名称。

2.5 添加signals

接下来我们看看怎么新建信号(signal)

  • 在此页面对signals选项右键即可开始新建signal
  • 根据矩阵填写信号对应的相关属性,如名称,长度,字节顺序,关联Value Table等等
  • 按此方式完成其他信号的添加,如下图:

    可以看到每个信号前面都有一个×,这个表示该信号没有关联到message中。别急,下一步我们开始创建message。

2.6 添加messages

根据矩阵表,先创建message BCM1。

  • 同创建signal一样,在messages选项上右键开始新建
    填写CAN ID,DLC长度,和Type。我们定义的标准CAN,非扩展类型。关于这个类型属于CAN协议规范中的内容,此处暂不解释。
  • 在signals中关联属于该报文的信号
  • 根据矩阵表中的LSB和MSB调整layout,LSB是小端位置,MSB大端位置。即信号的起始位和结束位。

    直接拖动信号对应的方块到指定位即可。
  • 修改Attributes中message的属性

    然后点击确定,message BCM1就建好了。
  • 同样,按照这个方式新建IP1,建好之后报文内容如下图:

    同之前的信号类似,报文前面也有一个×,这表明该报文还没有关联节点,并且也没有mapped

2.7 新建节点并添加mapped

  • 在network nodes选项上右键开始新建节点GW
  • 在Tx messages中添加BCM1
  • 在Mapped Rx Sig.选项中添加接受信号(即IP1中的信号)
  • 同理,创建节点IP,关联信号和报文,真个DBC文件如下图

到这里,按照用于演示的CAN矩阵来创建DBC就算完成了。但实际上,真正汽车上使用的DBC中的报文非常多,不仅仅是两个报文,而且每个报文中的信号数量也有多有少。并且网络管理报文以及诊断报文在这个例子中都没有演示,相关的属性也没有添加。报文的发送类型也只演示了周期型的。同时,报文可能还带有信号组或者SecOc的属性,这些都是实际项目中会遇到的,在此处就不展开讲了。
本文只是记录下关于CANdb++如何依照CAN矩阵添加报文和信号,以及Value Table和全局属性等,写得不好的地方还请各大佬批评指正!!!

DBC系列之使用CANdb++创建DBC(2)相关推荐

  1. 使用CANdb++制作dbc文件(小白笔记)

    什么是dbc文件? dbc是Datebase CAN的缩写,是CAN网络的数据库文件,可定义CAN网络的节点(Network node).报文(Message).信号(signal),包括各个节点会发 ...

  2. 关于DBC文件的格式解析(DBC文件系列其二)

    关于DBC文件的格式解析 摘要 1.版本与新符号 2.波特率定义 3.网络节点的定义 4.报文帧的定义 5.信号的定义 6.注解部分 7.属性定义部分 8.数值表部分 小结 摘要 在之前的文章里,我们 ...

  3. 【无标题】关于DBC文件的格式解析(DBC文件系列其二)

    关于DBC文件的格式解析 摘要 1.版本与新符号 2.波特率定义 3.网络节点的定义 4.报文帧的定义 5.信号的定义 6.注解部分 7.属性定义部分 8.数值表部分 小结 摘要 在之前的文章里,我们 ...

  4. 【DBC专题】-7-在DBC中创建一个Signal Group信号组

    目录 1 创建Signal Group信号组​ 2 创建Signal Group信号组前后DBC内容的差异 3 结尾 关键字: CANdb++ Editor CAN Signal SG=Signal ...

  5. Step by Step学习CANoe三大工具链——DBC数据库编辑器(CANdb++ Editor)、面板设计(Panel Designer)和CAPL浏览器(CAPL Browser)

    Step by Step学习CANoe三大工具链--DBC数据库编辑器(CANdb++ Editor).面板设计(Panel Designer)和CAPL浏览器(CAPL Browser).

  6. DBC转Excel;DBC转位定义;Excel转DBC;Excel转位定义;MatrixCreat(四)之工具使用

    工具使用 一.摘要 1.描述 2.关键字 二.什么时候需要使用MatrixCreat工具 三.MatrixCreat转换后效果图 四.MatrixCreat运行环境 五.MatrixCreat使用介绍 ...

  7. Android官方开发文档Training系列课程中文版:创建自定义View之View的创建

    原文地址:http://android.xsoftlab.net/training/custom-views/index.html 引言 Android框架含有大量的View类,这些类用来显示各式各样 ...

  8. 机器学习系列4 使用Python创建Scikit-Learn回归模型

    本文中包含的案例jupyter笔记本可在我的资源中免费下载: 机器学习系列4 使用Python创建Scikit-learn线性回归模型.ipynb 图1 使用Python和Scikit-learn库实 ...

  9. C#表达式目录树系列之5 –动态创建查询表达式

    概要 在项目开发中,根据用户的需求,一般来是,我们的查询表达式是固定的,新的查询需求都要通过代码的修改来实现.而对于不确定的查询条件,固定查询表达式的方式显然是行不通的. 针对固定查询表达式存在的问题 ...

最新文章

  1. Python + Selenium 练习篇 - 获取页面所有邮箱
  2. 十个行为把你变成糟糕的程序员
  3. 网络基础---物理层
  4. WebSocket教程(一)
  5. web安全之信息收集
  6. GB28181协议——摄像机语音对讲
  7. unity球体添加光源_Unity 3D光源-Point Light点光源详解/灯泡、模拟灯光效果教程
  8. 2008年十大最值得关注创业公司
  9. 用c语言输入年份 月份 显示天数,java输入月份,年份,显示对应月份的天数,...
  10. 圆形计算机配置清单,MarForm MMQ 200
  11. mysql源码及内核分析,MySQL · 源码阅读 · Secondary Engine
  12. canvas实现星星闪烁特效
  13. Android模拟器知识以及改造
  14. 配置vimrc时各种出错,第n+1行永远报错:unmatched ' 的解决办法!!!
  15. 真无线蓝牙耳机哪款适合新手?数码发烧友最全盘点,高实用性蓝牙耳机
  16. java:A JNI error has occurred, please check your installation and try again
  17. 【Spark】spark对mysql的操作
  18. 移动软件开发:第一个安卓应用小程序
  19. 为啥大公司只要全栈工程师?
  20. python解决数学建模发电商机组调度问题

热门文章

  1. C#开发之——PictureBox(12.15)
  2. 吴恩达OpenAI基于ChatGPT的Prompt开发教程
  3. H5 架构和原生架构的区别
  4. ubuntu服务器安装和配置FTP服务器以及权限管理
  5. 【平衡车】PID控制原理到底如何理解?建议收藏!
  6. 布袋除尘器过滤风速多少_袋式除尘器过滤风速一般多大
  7. 数据库学习:数据模型
  8. Excel文本处理函数
  9. 常用颜色及其RGB值
  10. java中间件技术有哪些?