dbc文件编写及在simulink中CAN pack、CAN unPack 模块的运用

一、DBC文件

1. 1 DBC文件描述

DBC文件是一种用于描述CAN总线上的信号和消息的格式。它被广泛应用于汽车、航空航天、工业自动化等领域。DBC文件定义了总线上的数据如何传输、信号如何解析以及信号的结构和内容。
DBC文件描述了在CAN网络上有哪些报文信息,这些报文又携带了哪些信号信息,报文从哪个网络节点发出的,又是哪个节点接收的。在下面讲到的CANdb++ DBC文件编写中,我们可以清晰的对这些信息进行编辑。这些信息通常由开发所需的技术文档或协议规定,对于复杂CAN网络数据通信,DBC文件一般根据CAN通信矩阵来进行定义。

1.2 CAN通信矩阵

我们知道,CAN总线(ISO11898)标准只规定了物理层和数据链路层,至于应用层需要用户自定义。
CAN通信物理层的形式主要分为开环总线和闭环总线。其中开环总线用在低速通信上,适用于远距离通讯。闭环总线用在高速通信上,适用于近距离通信。物理层通讯网络由硬件接受设备和传输介质组成,主要包括Host、CAN控制器和CAN收发器以及传输电平信号的双绞线。
数据链路层规定了CAN通信机制以及CAN通信帧的种类和结构。包括CAN协议所规定的多主机通信、报文优先级判定的仲裁机制、寻址机制。通信帧则分为5种。数据帧、远程帧、错误帧、过载帧、帧间隔。CAN通信矩阵便是通过这些通信帧中预留的空白段,定义想要传输信息的ID、数据。
不同的应用领域使用不同的应用层标准,这通常是根据所设计的零部件功能决定的。
CAN通信矩阵文档定义的字段包括但不限于以下内容:
在这里插入图片描述

在这里插入图片描述

信号名称:一般是以发送节点的名字开头,“_”后面是具体指代的内容。如BMS_GeneralStatus。
信号长度:该信号的长度,单位是bit,位。
精度/偏移量:描述信号值如何转变成信号物理值。比如精度是2,偏移量是5,那么信号的真实物理值 = 信号值 * 2 + 5。
物理值范围:经过物理值转换后的最大最小值。
一般主机厂会给零部件供应商提供完整的CAN通讯矩阵,在做CAN通信相关控制软件开发时,则依据CAN通信矩阵编写DBC文件。

在DBC文件中,我们常需要定义这些字段信息:
信号名称(Signal Name):一般是以发送节点的名字开头,“_”后面是具体指代的内容。
信号长度(Bit Length):该信号的长度,单位是bit。
字节顺序(Byte Order):有Intel和Motorola两种格式。
起始位:(start_bit):这个范围一般是0-64,表示siganl在64bit里面最低有效位,有时候的起始位也表示在起始字节里面的最低有效位。
起始字节(start_byte):signal的最低有效位所在的字节。
数据类型(value Type):可选Signed、Unsigned、Float、Double类型。

二、 DBC文件编写

我们使用 CANdb++工具来创建DBC文件。

2.1 CANdb++下载安装

1. 首先打开vector的官方网站 ,版本CANdb++ Admin.J1939 3.0 SP27下载链接:
https://www.vector.com/cn/zh/download/?tx_vectorproducts_productdownloaddetail[download]=18883&tx_vectorproducts_productdownloaddetail[action]=show&tx_vectorproducts_productdownloaddetail[controller]=Productdownload&cHash=e255ee95d4bd75774f940696f31a4d89
2. 安装后打开时提示缺少文件Cdbstat.dll
https://download.csdn.net/download/weixin_40531919/88642337
进行下载,下载后放在C:\Windows\SysWOW64文件夹下即可正常使用。

2.2 创建DBC文件

1. 打开CANdb++,在菜单栏File - Create Database新建一个DBC文件。
在这里插入图片描述

2. 选择CAN模板并保存文件。
在这里插入图片描述

3. 新建一个名为test的dbc文件,界面如下所示,接下来定义CAN报文及信号。
在这里插入图片描述

图中
Networks代表当前的CAN网络结构,由ECUs、Environment variables、Network nodes、Messages和Signals组成;

电子控制单元(ECU)可由多个构成,每个网络节点都有一个相应的控制单元,信息通过网络节点与其他控制单元交换;

环境变量(Environment variables)定义为网络节点的输入输出变量,在cand++数据模型中,环境变量被分配给控制单元;

网络节点(Network nodes)代表控制单元与CAN总线的接口。报文收发的起始与目的地。
消息(Messages)即报文,由不同的信号构成;

信号(Signals),根据CAN数据矩阵所定义的各种数据;

通常只需要定义Messages和Signals便可以进行报文的接收与发送。

4. 创建Signals,创建方法: 右键 --> New
在这里插入图片描述

5. 根据CAN数据矩阵定义创建Signals,更改信号名称,长度,字节顺序,数据类型。
在这里插入图片描述

6. 创建Messages,创建方法: 右键 --> New
在这里插入图片描述

Messages依然来自于CAN数据矩阵,定义好名称,ID,DLC后,将该报文包含的信号添加进来。

7. 添加Signals到Messages,选中创建的Messages,依次点击new-Signals-Add,在弹出的选项框中选择要添加的信号,点击ok,添加完毕点击确定。
在这里插入图片描述
同时也可在Transmitters中配置对应的发送该报文的网络节点,也可不配置。

三、在simulink中完成CAN消息收发

DBC文件建立好之后,我们可以在simulink中使用CANPack模块和CAN unPack模块加载dbc文件完成CAN报文信息的收发。

3.1 CANPack模块配置

在simulink中键入CAN Pack,选择CAN Pack模块,进行模块配置。
数据输入方式(Data is input as)选择CANdb specified signals;
CANdb file选择加载建好的.dbc文件,选中相应的Message list,然后对应Signal就会自动出现的下方列表中,同时在模块的外边也会出现这些Signal的In端口,在这些端口上直接插入要赋给Signal的值,如图所示。
在这里插入图片描述

3.2 CAN unPack模块配置

使用CAN Unpack模块,可以把接收到的Message解析成具体的Signal,模块配置方式与上述CAN Pack模块相同,具体操作方法和配置成功后的效果如下:
在这里插入图片描述

3.3 仿真运行

添加几个常数作为信号输入,在解包模块显示结果如下:
在这里插入图片描述
需要注意的是,这里使用的signal长度均为8位,当一个signal的信号长度超过32bit时,CANPack和CAN unPack不支持模型代码生成,且在仿真时不会报错。可以将超过32位的信号拆解成多个信号输入,如这里的Challenge信号原本是一个64位的信号,这里将其拆解成了每8位作为一个信号输入。

四、参考

1. CAN通信矩阵理解点击 https://blog.csdn.net/qq_39593577/article/details/123813598
2. Cdbstat.dll文件下载点击 https://download.csdn.net/download/weixin_40531919/88642337
3. 本文DBC示例文件下载点击 https://download.csdn.net/download/weixin_40531919/88640558

  • 11
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
DBC文件是一种用于描述CAN总线通信的数据库文件。它包含了CAN网络所有的节点、消息、信号和信号的物理值等信息。 首先,在编写DBC文件之前,我们需要了解CAN网络的节点和消息的结构。每个节点代表一个ECU(电子控制单元),而每个消息代表节点之间的通信。每个消息可以包含一个或多个信号,信号则是消息传输的数据。 编写DBC文件的步骤如下: 1. 定义网络节点:首先要定义CAN网络的所有节点。节点定义包括节点名称、节点地址和节点类型等信息。 2. 定义消息:在定义消息之前,需要确定每个消息的发送者和接收者。消息定义包括消息ID、发送者节点、接收者节点和消息方向等信息。 3. 定义信号:在定义信号之前,需要确定每个信号所属的消息。信号定义包括信号名称、信号长度、信号的物理值范围、单位和解析方式等信息。 4. 编写节点的属性:节点属性包括节点的位速率、节点的发送延迟和接收延迟等信息。 5. 定义环境变量:环境变量用于定义网络可能出现的条件和事件,比如温度、时间等。环境变量可以为信号定义提供条件判断。 6. 定义节点之间的消息关系:在DBC文件,可以定义节点之间的消息关系,比如哪个节点发送了哪个消息,哪个节点接收了哪个消息。 编写DBC文件时,还需要注意以下几点: 1. 使用合适的编辑器:DBC文件通常使用文本格式进行编写,可以使用特定的DBC编辑器或文本编辑器进行编写。 2. 使用规范的命名规则:节点、消息和信号的命名应该遵循一定的命名规范,以保证文件的可读性和可维护性。 3. 注意格式和语法:DBC文件有其特定的格式和语法要求,必须严格遵守。可以参考相关的文件格式规范进行编写。 通过以上步骤和注意点,我们可以编写出符合规范的、描述CAN总线通信的DBC文件

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

橘蓝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值