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

您所在的位置:网站首页 simulink打开没有菜单栏 dbc文件编写及在simulink中CAN pack、CAN unPack 模块的运用

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

2024-06-06 06:19| 来源: 网络整理| 查看: 265

一、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



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3