前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Matlab】在 CAN 通信中使用 DBC 文件(车辆网络工具箱)

【Matlab】在 CAN 通信中使用 DBC 文件(车辆网络工具箱)

作者头像
DevFrank
发布2024-07-24 14:55:21
1040
发布2024-07-24 14:55:21
举报
文章被收录于专栏:C++开发学习交流

打开 DBC 文件

使用 canDatabase 打开文件 demoVNT_CANdbFiles.dbc,这个文件是官方示例给出的,也可以用自己的DBC文件。接下来我们主要用到 EngineMsg 这个报文:

在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
db = canDatabase("demoVNT_CANdbFiles.dbc")

matlab读取dbc如下:

在这里插入图片描述
在这里插入图片描述

检查 Messages 属性,可以查看该文件定义的所有报文的名称(与CANoe的一致):

代码语言:javascript
复制
db.Messages
在这里插入图片描述
在这里插入图片描述

查看报文信息

使用 messageInfo 查看报文 EngineMsg 的信息,包括标识符、数据长度和信号列表。

代码语言:javascript
复制
messageInfo(db, "EngineMsg")
在这里插入图片描述
在这里插入图片描述

查看信号信息

使用 signalInfo 查看报文 EngineMsg 中信号 EngineRPM 的信息,包括用于将原始信号转换为物理值的类型、字节顺序、大小和系数等。

代码语言:javascript
复制
signalInfo(db, "EngineMsg", "EngineRPM")
在这里插入图片描述
在这里插入图片描述

使用数据库定义创建报文

通过指定要应用的DBC和报文名称来创建新报文。此报文中的 CAN 信号除了以原始数据字节表示外,还以工程单位来表示。

代码语言:javascript
复制
msgEngineInfo = canMessage(db, 'EngineMsg')
在这里插入图片描述
在这里插入图片描述

此外,canMessage 还可以创建指定ID的报文:

在这里插入图片描述
在这里插入图片描述

查看新报文信号信息

查看新报文的信号值,并可以直接对这些信号进行写入和读取,以打包和解包报文中的数据。

代码语言:javascript
复制
msgEngineInfo.Signals

初始值如下:

在这里插入图片描述
在这里插入图片描述

更改信号信息

直接写入信号以更改其值。可以看到Data处的改动:

代码语言:javascript
复制
msgEngineInfo.Signals.EngineRPM = 5500.25
在这里插入图片描述
在这里插入图片描述

读回当前信号值:

代码语言:javascript
复制
msgEngineInfo.Signals
在这里插入图片描述
在这里插入图片描述

当直接写入信号时,它会自动转换并使用数据库定义打包到报文数据(十进制-十六进制)中。下面再写入VehicleSpeedData

代码语言:javascript
复制
msgEngineInfo.Signals.VehicleSpeed = 70.81
在这里插入图片描述
在这里插入图片描述

查看当前信号:

代码语言:javascript
复制
msgEngineInfo.Signals
在这里插入图片描述
在这里插入图片描述

接收具有数据库信息的报文

将数据库连接到 CAN 通道,该通道接收报文以自动将数据库定义应用于传入报文。数据库仅解析已定义的报文。其他报文则以其原始形式接收。

代码语言:javascript
复制
rxCh = canChannel("MathWorks", "Virtual 1", 2);
rxCh.Database = db
在这里插入图片描述
在这里插入图片描述

接收报文

启动通道,生成一些报文流(随机),然后通过报文解码来接收报文。并查看接收到的报文的前几行。

代码语言:javascript
复制
start(rxCh);
generateMsgsDb();
rxMsg = receive(rxCh, Inf, "OutputFormat", "timetable");
rxMsg(1:15, :)
在这里插入图片描述
在这里插入图片描述

停止接收通道并将其从工作区中清除。

代码语言:javascript
复制
stop(rxCh);
clear rxCh

检查收到的报文

检查收到的报文并用DBC解码:

代码语言:javascript
复制
rxMsg(1, :)
在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
rxMsg.Signals{1}
在这里插入图片描述
在这里插入图片描述

提取指定报文的所有实例

提取报文 的所有实例,并查看此特定报文的前几个实例。

代码语言:javascript
复制
allMsgEngine = rxMsg(strcmpi('EngineMsg', rxMsg.Name), :);
allMsgEngine(1:15, :)
在这里插入图片描述
在这里插入图片描述

绘制物理信号值(报文解析)

使用 canSignalTimetable 将报文中的信号数据重新打包为一个信号时间表,并查看信号时间表的前几行。

代码语言:javascript
复制
signalTimetable = canSignalTimetable(rxMsg, 'EngineMsg');
signalTimetable(1:15, :)
在这里插入图片描述
在这里插入图片描述

绘制信号随时间变化的曲线:

代码语言:javascript
复制
plot(signalTimetable.Time, signalTimetable.VehicleSpeed)
title('Vehicle Speed from EngineMsg', 'FontWeight', 'bold')
xlabel('Timestamp')
ylabel('Vehicle Speed')
在这里插入图片描述
在这里插入图片描述

此外,可以在工作区任意修改报文或信号量的值。

在这里插入图片描述
在这里插入图片描述

关闭 DBC 文件

从工作区中清除 DBC 文件的变量,关闭对该 DBC 文件的访问。

代码语言:javascript
复制
clear db

以上。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-07-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 打开 DBC 文件
  • 查看报文信息
  • 查看信号信息
  • 使用数据库定义创建报文
  • 查看新报文信号信息
  • 更改信号信息
  • 接收具有数据库信息的报文
  • 接收报文
  • 检查收到的报文
  • 提取指定报文的所有实例
  • 绘制物理信号值(报文解析)
  • 关闭 DBC 文件
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档