写在前
在学会制作一个DBC文件之前,首先应该花一些时间去了解CAN(控制器局域网)总线,再学会看懂表格的CAN协议(DBC文件解析)。知道这些专业名词代表什么,比如关于一帧报文的信号描述是什么,排列的方式是intel还是motorola,起始字节,起始位,信号长度,精度,偏移量,物理值等等。
☑️参考博客
CAN总线通信详解 (超详细配34张高清图) - 艾格北峰的文章 - 知乎
DBC格式解析
关于DBC文件的格式解析
进入正题
☑️本文参考博客
从零开始学习CANoe(二)—— CANdb++ 创建 dbc文件-CSDN博客
【DBC专题】-1-如何使用CANdb++ Editor创建并制作一个DBC - 汽车电子Autosar的文章 - 知乎
1 启动“CANdb++ Editor”
打开CANoe,点工具栏的Tools,选择第一个CANdb++ Editor。
打开CANdb++ Editor后的默认界面是灰色的:
2 创建一个新的DBC
-
点击
File-Create Database
创建一个CAN数据库文件:
-
选择
CANoeTemplate.dbc
模板,点击OK后,在弹出的保存对话框中存为.dbc
格式,自命名保存。
然后就看到新建的dbc:
3 添加报文:创建CAN网络当中的Message消息
这里Message(消息)可以称之为Frame(帧),也可称之为CAN
ID,其用来表示CAN的标识符。一个CAN网络当中往往存在多个Message,但CAN网络中Message的CAN
ID必须是唯一的,即每个CAN ID在一个CAN网络中只能使用一次。
这是我的动力CAN.xlsx文件,一共92行,13种不同报文ID。下面我要根据这个表格制作我的dbc文件。
本文以第一个报文VCU1为例,添加Messages。
3.1 在Messages下单击左键新建(New)一帧
、
3.2 修改Messages信息(右侧)
注意:目前只用管Definition选项,其他的先不管。
注意:由于添加的VCU1的ID是 0x180128D0,超出了标准范围报错,所以选择Type为CAN Extended.
还可以在Comment
中添加详细描述:
修改完后应用-确认,就可以在Messages下和右侧看到我创建的第一帧VCU1:
4 添加信号:创建Message消息中Signals信号
我们知道一帧报文下可以带有好几个不同的signal信号,比如VCU1带了12个。我需要创建12个Signal信号。
4.1 同理,在Signal下单击左键新建(New)一个
4.2 修改Signal信息
同样可以添加详细描述:
修改完后应用-确认,就可以在Signals下和右侧看到我创建的第一个名为cod_tcu_u8GearSts
的信号:
后续添加剩下11个信号(此处重复步骤,省略,哈哈哈)。可以看到创建好后Signals的如下:
5 关联报文和信号:Messages下添加对应的Signals
此时的Messages和Signals并没有关联起来,比如VCU1下面没有添加这12个信号。
5.1 关联方式1(手动添加)
双击VCU1,在Signals界面下选择Add
把所有的信号都添加上(特别注意,按顺序添加,会影响Layout)
5.2 关联方式2(建议)
直接将对应的信号按住鼠标左键不放,拖拽到对应的Message下,即可关联成功。
6 ⭐遇到问题(已解决)
6.1 问题描述
原始表格的DBC中cod_tcu_u8TcuEnModeReq
信号起始位从7开始,可是我制作的VCU1的信号发现起始位变成了8不是7开始。
6.2 解决方法
方法1:直接双击错误的地方8,弹框的Startbit[Bit]更改为7:
方法2:打开Message的Layout发现起始位从8开始,直接拖动它从7开始。
最后检查一下,和表格的起始位和长度是对应的,就可以了。
修改后的:
7 创建效果图
我这里仅仅创建了一帧VCU1的报文,并关联了它的信号。可以在Messages-VCU1中点开Layout看它的布局(8*8矩阵)。这是按intel排列方式,不同颜色代表不同的信号。
小结
本文完成了已知DBC报文表格情况下,学会在CANdb++ Editor中创建并制作一个DBC,创建好的test3demo_0304.dbc下次可以直接双击打开了。
后续还有一些节点,接收点没有实操,等我学了再说。
最后,用一句诗形容我的学习心态:纸上得来终觉浅,绝知此事要躬行。