编辑推荐: |
本文主要介绍了如何制作DBC文件相关内容。希望对你的学习有帮助。
本文来自于微信公众号嵌入式老林,由火龙果软件Linda编辑,推荐。 |
|
一、DBC介绍
1.1 什么是DBC
全称:Database CAN,CAN网络的数据库文件,定义了CAN网络的节点、消息、信号的所有细节,包括每个节点会发送哪些消息和接收哪些消息,每个消息里面包含哪些信号,每个信号位于消息的哪个位置,信号值有哪些,每个值代表的含义是什么,等等
1.2 DBC的作用
1,可以将CAN网络中数据解析成具体的报文(Message)和信号(Signal),可直接看到对应信号的值,方便分析。
2,在进行Autosar配置时,有DBC文件的话,可通过导入DBC文件去配置,这样会减少很多手动配置,更高效
举个例子,假设没有加载DBC,那么看到的CAN消息就是一串数据,这一串数据中对应的信号值是多少,需要自己手动解析。但是有了DBC的话,把DBC加载进去,工具就会自动帮你解析好了,可以直接看到这串数据中每个信号的值是多少

二、如何制作DBC
DBC制作的工具有很多,如CANdb++、CANoe、python 脚本、文本编辑工具或其它第三方工具。Python脚本需要自己编写脚本,或者网上找开源的;DBC文件可通过文本编辑工具打开,高手可通过文本编辑工具去制作DBC文件,但需要懂得里面的语法。本文介绍CANdb++如何制作DBC
制作DBC的推荐步骤:
1、新建一个CAN数据库文件
2、创建信号要用到的数值表Value Tables
3、创建信号Signals,关联该信号的数值表
4、创建报文Messages
5、创建网络节点Network nodes
6、将信号、报文及网络节点进行关联链接
7、创建或导入自定义属性,并进行修改
8、一致性检查
接触到的项目,有要支持CAN的,也有要支持CAN FD的,下面以制作CAN FD扩展帧为例
关于CANdb++的安装,此处不再介绍了,下载下来,直接next安装即可,遇到问题网上查一下。实在解决不了也可私信。
2.1 新建一个CAN数据库文件
打开CANdb++软件:

在CANdb++中,选择“File” > “Create Database”,然后选择一个模板并保存,这里选择CAN_FD模板

点击ok,命名,保存即可

创建完数据库的效果

2.2 创建数值表Value Tables
数值表的创建,主要是用来表示信号值的,避免信号值意义不明确,一般固定的枚举值才需要创建,如:ON/OFF;如果信号的值是不确定的,则不需要创建,也没法创建,比如计数器
点击工具栏“View”下的“Value Tables”,然后右键点击空白部分,选择“New”新建value
table

对value table进行命名,值描述定义,comment可不加,目前也是灰色的,无法加,暂时不知道啥原因

大部分情况,客户是不会给DBC文件的,会给通信矩阵。客户给的需求,CAN通信矩阵部分截图

按照CAN通信矩阵一个个添加即可

添加完后的效果:
2.3 创建信号Signals
创建信号有2种方式:
1,直接在Singals上面右键,New即可。
2,在Singals对应界面的空白处,右键,New

根据通信矩阵中对于该信号的定义进行设置,并关联对应的数值表,点击确定即完成了信号的创建,依次完成剩余信号的创建工作。可以继续New新建,也可以Copy/Paste前面建好的信号,再双击进行修改完成创建,当其他信号的内容和已创建好的很相似就可以复制/粘贴前面建好的信号,这样会更快。
Name:信号名称
length:信号长度,这里的单位是bit
Byte Order:分为Intel、Motorola两种,一般是Motorola,具体看客户需求
Value Type:值类型,是有符号的,无符号的,还是浮点型等,
Factor:因子,系数,和offset配合使用,用于原始值和物理值的转换,后面介绍。
Offset:偏移量
Minimum,Maximum:最小值,最大值
Value Table:数值表,就是之前创建的,引用对应信号的数值表即可

关于Intel和Motorola
Motorola:一个数值的最高字节(MSB)存储在内存的最低地址处,而最低字节(LSB)存储在内存的最高地址处。这种存储方式类似于人类阅读和书写数字的方式,即从左到右,高位在前
Intel:类似于小端,高字节存放在高地址,低字节存放在低地址
没有跨字节是看不出来这两种有啥区别的,来看个跨字节的例子:
当然这里只是为了解释这两个的区别,才把一个报文中的两个信号设置成不同的格式,实际项目中一般不会出现这种情况

原始值和物理值介绍:
通俗来讲原始值是总线发的没解析的二进制或16进制,物理值是代码中发送出来的值。
换算公式:
raw_value = (physical_value - Offset) / Factor
physical_value = raw_value * Factor + Offset
举个例子,在VCU和BMS之间需要传递电量显示信息SOC,BMS软件计算出SOC=96.43,其中规定通讯矩阵Offset=0,Factor=0.01,发送总线后的16进制值(原始值)=(96.43-0)/0.01=9643(十进制)=25AB(16进制),总线数据传输可以通过下图所示:

创建好后的信号

2.4 创建报文Messages
创建message和创建信号类似,方法就不多说了,参考创建信号的描述。下面的按照通信矩阵填就行了
Transttmiter这里不填,等后面节点里关联了对应的message,这里就会自动更新
Tx Method和Cycle Time通过修改属性中的值,这里就会自动更新

2.5 创建网络节点Network Nodes
创建网络节点,这个也是根据项目需求来的,此处的节点仅作参考

创建好的网络节点

2.6 关联信号、报文及网络节点
2.6.1 message关联signal
双击对应的message,然后添加message包含的signal就行,如果有很多个signal,可一起选中,一次性添加完
也可以通过拖拽的方式添加进去,就是鼠标左键先点击一下message,然后把signal拖到message右边的空白区即可,自己试一下就知道了,此处不演示拖拽的方式

添加完点击确定即可

2.6.2 message关联到网络节点
方法也是一样的,就是搞清楚message是哪个节点发,哪个节点收就行。注意作为节点接收报文不能通过直接拖拽进行关联
看一个例子:两个节点,一个发,一个收

有个需要注意的点:这里只能双击节点名称才能添加,双击节点名称下面的Tx Messages,Rx Messages,Mapped
Tx Signals,Mapped Rx Signals都无法添加。
而且弹出来的窗口只有Tx Messages,如果要添加此节点接收的报文消息,在Mapped Rx Signals里面添加对应message的signal即可。

2.7 创建或导入属性
2.7.1 自定义属性
在”View”下点击”Attribute Definitions”,右击选择New,按需要可以进行对报文、信号、节点、环境变量等进行属性创建

2.7.2 导入属性
”Attribute Definitions”中的属性也可以通过从其他项目的dbc文件中导入;操作如下:在”File”中选择”Import
Attribute Definitions”,选择要导入的dbc文件,即可将该dbc中的属性定义导入到我们现在的dbc文件中来
导入完属性

2.7.3 修改message的属性
最后再根据通信矩阵表,修改一下message的属性,如这个报文是周期发送的,周期为200ms

改完后,就能看到下面的灰色部分自动更新了

2.7.4 修改start bit
修改一下start bit,也是根据通信矩阵表来修改,可双击message中对应的signal去修改起始位数值,也可双击对应message,进入到layout界面,直接拖动对信号到对应的位置

layout界面

2.8 一致性检查
经过前面的几个步骤其实已经完成数据库文件的创建了。但我们还需要通过一致性检查来确保数据库文件中的对象及内部关系的一致性。操作方法如下:
在”File”中选择”Consistency Check”,此时会在一致性检查窗口中输出检查结果。如下:会有状态信息及对应的说明,以供我们检查出错/警告报警的原因。下面出现一条警告信息,说是这个message没有接收的节点

回到网络节点处检查:

添加后:

再验证一致性就ok了

至此一个DBC文件就创建完成了。
dbc文件描述了在CAN网络上有哪些报文信息;这些报文上又携带了哪些信号信息;该报文是从哪个节点发出,哪个节点进行接收的等信息。所以,我们在进行dbc文件的创建时,主要是完成信号、报文、节点的创建;再对其进行关联即可。 |