分享

如何制作DBC文件

 zhouhualibrary 2022-11-02 发布于新加坡
DBC文件在CAN网络的设计和测试中起着非常重要的作用,通过DBC,可以把CAN网络中大量的数据解析成直观的消息和信号,方便用户分析
DBC
什么是DBC
Database CAN,CAN网络的数据库文件,定义了CAN网络的节点、消息、信号的所有细节,包括每个节点会发送哪些消息和接收哪些消息,每个消息里里包含哪些信号,每个信号位于消息的哪个位置,值有哪些,每个值代表的含义是什么,等等
DBC的用途是什么
节点之间发送和接收CAN消息时,只会是一串数据,更细点可以说是一串字节数,再细点本质上是一串0和1的二进制数,这一串0和1的数据,不管是对于发送的人,还是接收的人,都很难了解是什么意思?
那怎么办?
我们用CANoe中带不带DBC做对比
如何在CANoe的某个CAN通道配置DBC呢?
首先我们创建一个CAN网络,Simulation -> Simulation Setup -> 右击选择System View -> 出现右侧的Networks区域 -> 右击Networks选择Add -> 添加网络通道,CAN或者Eth都可以
图片
然后在创建好的CAN网络的Databases下右击选择Add一个DBC文件即可
图片
我们先看不配置DBC的
对于发送者来说,由于没有DBC,只能根据can message的id来声明消息
由于没有DBC,发送此消息前必须定义好消息的长度dlc,同时计算信号值所在的字节的值
发送完再在trace window上看一下是什么样
在trace窗口中只能看到message id和value,对于分析人员来说,还必须根据需求查看这条消息的哪些位表示哪个信号,哪个值表示信号什么状态
不管是发送者还是接收者,没有DBC实现CAN通讯非常的麻烦
如果配置了DBC
在capl中如果想声明一条can message,不仅可以用id,还可以用DBC中定义的message name
capl中自动就会根据你输入的内容检索出所有的message了
图片
由于DBC上已经定义好了消息的长度还有信号,所以我们只需要对信号赋值即可
发送完在trace窗口查看
你可以很明显的看出这条消息是什么,里面有哪些信号,信号值是多少
所以你现在应该知道DBC的用途是什么了吧
图片
在capl中可以通过DBC文件数据库来引用里面定义好的消息,像消息id、长度或每一位都不需要自己定义,因为DBC中已经定义好了
当CANoe根据capl中声明的消息发送数据时,也是按照DBC中定义好的去发送
而trace中显示出来的消息数据,也是用DBC解析出来后显示在trace窗口
如何制作DBC
在学习如何制作DBC文件之前,我们有必要从使用者的角度思考:节点-CAN消息-信号三者之间的关系
ECU是面向信号的,当应用层功能改变时,触发信号值发生改变,信号值的改变会使得所在的CAN消息从某个节点发出
当然,CAN消息的循环时间到达时也会发出消息。发出的CAN消息是以广播的形式发送给其他所有节点ECU
但并不是所有的ECU都会接收并处理,每个ECU除了设计好了发送的消息,还设计了接收的消息,根据接收到的消息的id来判断,这是不是我想要的
既然ECU是面向信号的,我们可以从定义信号开始
比如CAN消息:EngineState,它有两个信号:OnOff、EngineSpeed
OnOff表示Engine状态,1 == on,0 == off
所以我们定义信号时还必须把“1 == on, 0 == off”这样一种关系定义进去
通过Value Tables
现在从头开始
我们用Vector的CANdb++ Editor工具来创建DBC文件
首先打开CANdb
在电脑上或CANoe工程上
图片
电脑上
CANoe工程
选择模板
点击File -> Create Database
图片
这里我们选择CANoeTemplate.dbc
然后保存文件到某个路径下
新建Value Table
还记得上面讲的,从信号开始吗?信号有可能有多个值,且每个值代表了什么含义,这些也需要表示出来,我们通过在Value Tables中创建这种关系
点击View -> Value Tables,打开Value Tables,然后右击选择New,把相关信息填好
图片
图片
最后点击OK确定
创建信号
信号的值列表创建好以后,就可以创建信号了
点击View -> Overview切回主页
在左侧Signals上右击,选择New
图片
Name
信号名称
Length
信号长度,这里的单位是bit
Byte Order
分为Intel、Motorola
Intel是把消息数据以小端的形式(数据由低位放置),信号从低到高排列
Motorola是把消息数据以大端的形式(数据由高位放置),信号从高位排列
图片
Inter
图片
Motorola
图片
这张图一目了然
Init Value
默认值,就是当你没有赋值时,就会赋值默认值
Value Table
把之前新建的用于这个信号的value table放进来
其他的几列不需要设置
图片
Messages在新建message时会把这个信号添加进来
Receivers在新建message时会设置它的Receiver
Value Descriptions在设置信号的value table时就会显示到这里,所以你现在能明白value table什么意思了吗?其实就是描述信号值的内容
Comment是备注,随你高兴填不填
这里有个Attributes,message和network node里也有,在这里先讲掉,后续不再赘述
Attributes就是对象的属性,这里就是信号的属性,用处是什么呢?
比如说可以定义它的发送类型SendType,是Cycle还是OnChange,这样交互层可以通过获取它来选择发送方式(这是我猜的)
当然capl中也可以获取属性值
图片
capl貌似无法获取信号的属性,不知道为什么
创建Message
点击左侧的Messages,右击选择New
图片
Name
消息名称
Type
消息类型,是标准帧还是扩展帧
ID
消息id,消息id是CAN网络里的真正的id,不是像Name一样人为随意定义的
为什么?
因为message id也是会转换成数据和data一起发送的,所以必须正确,不然接收者无法接收的
DLC
消息长度
Cycle Time
消息循环时间
除了这些,还要添加所有的信号
图片
如此添加的信号是按照顺序一个挨着一个排列的(Intel/Motorola)
如果你想调整Startbit位置,可以在Layout里拖动
图片
Transmitters和Receivers可以在Network nodes里添加
创建Network node
点击左侧的Network nodes,右击选择New
图片
Name
节点名称
Address
节点是有地址的,比如0x005F,这是车辆里真实的地址,不是像Name人为随意写的
还要添加所有的从这个节点发出去的消息
图片
如果有需要接收的消息,也可以添加进来
图片
但是很奇怪的是,只能添加消息所属的信号,不知道为什么

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多