尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

MATLAB——读取MDF/MF4文件和BLF文件

MATLAB——读取MDF/MF4文件和BLF文件 一、读取MDF/MF4文件1.1 从 *.mdf 文件中读取所有数据mdfObj mdf(CANape.mdf); % 打开*.mdf/*.mf4文件 data1 read(mdfObj); % 读取所有可用的数据 mdfds mdfDatastore({CANape1.MF4,CANape2.MF4,CANape3.MF4}); % 打开一个文件夹下的多个文件 data2 readall(mdfds); % 读取数据存储中的所有数据1.2 从指定的通道列表读取所有数据通过channelList( )函数读取数据的信号名、信号所在的组号、信号组样本量等信息。mdfObj mdf(CANape.mdf); % 打开*.mdf/*.mf4文件 chanList channelList(mdfObj); % 通道列表 data0 read(mdfObj,chanList(1:3,:)); % 读取通道列表中的前3个信号 data1 read(mdfObj,1,Counter_B4); % 根据组号和信号名读取指定信号数据 data2 read(mdfObj,1,{Channel1,Channel2}); % 读取多个信号数据1.3 基于指定的索引值读取一定范围内的数据mdfObj mdf(CANape.mdf); % 打开*.mdf/*.mf4文件 data1 read(mdfObj,1,mdfObj.ChannelNames{1},1,10); % 按索引读取数据子集 data2 read(mdfObj,1,mdfObj.ChannelNames{1},5); % 按索引读取特定数据值 data3 read(mdfObj,1,{Channel1,Channel2},1,10); % 按索引读取特定信号1.4 基于指定的时间值读取一定范围内的数据mdfObj mdf(CANape.mdf); % 打开*.mdf/*.mf4文件 data1 read(mdfObj,1,mdfObj.ChannelNames{1},seconds(0.50),seconds(0.60)); % 按时间读取数据子集 data2 read(mdfObj,1,mdfObj.ChannelNames{1},seconds(0.55)); % 按时间读取特定数据值 data3 read(mdfObj,1,{Channel1,Channel2},seconds(5.5),seconds(7.3)); % 读取特定信号数据1.5 其他读取方式mdfObj mdf(CANape.mdf); data1 read(mdfObj,1,Channel1,1,10,OutputFormat,timetable); % 输出格式默认为时间表 data2 read(mdfObj,1,Channel1,1,10,OutputFormat,timeseries); % 输出时序数据 [data3,time3] read(mdfObj,1,Channel1,1,10,OutputFormat,vector); % 输出向量数据1.6 信号可视化2019版本及以上mdfVisualize(CANape.mdf);1.7 查看文件信息mdfObj mdf(CANape.mdf); % 打开*.mdf/*.mf4文件 mdfObj.Creator % 查看文件创建详细信息 mdfObj.ChannelGroup(1) % 查看通道组详细信息 mdfObj.ChannelGroup(2) % MDF文件中的数据存储在通道组中包含的通道中。 mdfObj.ChannelGroup(1).Channel(1) % 查看通道详细信息,通道组内存储了每个通道的详细信息。 mdfObj.ChannelNames % 快速访问通道名称 mdfObj.ChannelNames{1} % 通过 ChannelNames 属性可以快速访问以查找各个通道组中的特定通道。1.8 MATLAB自带Demo脚本文件ReadingDataFromMDFFilesExample.m数据文件CANape.MF4%% Reading Data from MDF Files % This example shows you how to read channel data from an MDF file. %% 打开 MDF 文件 % 在从 MDF 文件读取通道数据之前使用 mdf 命令开启对该文件的访问权限。 m mdf(CANape.MF4) %% 指定要读取的数据 % read 命令用于从 MDF % 文件中检索数据它有几种不同的使用方式。它需要两个主要参数。一个是要从中读取数据的通道组的数值索引。另一个是要读取的通道组中通道的名称。有关这些项的信息可从 % MDF 文件中获得。 m.ChannelGroup(1) m.ChannelNames{1} %% 按索引读取数据子集 % 要按索引只读取数据的一个子集请将索引范围作为 read 命令的输入。 data read(m, 1, m.ChannelNames{1}, 1, 10) %% 按索引读取特定数据值 % 提供单个数值索引参数将检索在该索引处的数据值。 data read(m, 1, m.ChannelNames{1}, 5) %% 按时间读取数据子集 % 要按时间读取数据的一个子集请将持续时间参数作为 read 命令的输入。 data read(m, 1, m.ChannelNames{1}, seconds(0.50), seconds(0.60)) %% 按时间读取特定数据值 % 提供单个持续时间将检索在该时间戳处或最接近于该时间戳处的数据值。 data read(m, 1, m.ChannelNames{1}, seconds(0.55)) %% 输出格式默认为时间表 % read 命令的默认输出格式是时间表。可以使用 OutputFormat 参数来控制此选项。 data read(m, 1, Triangle, 1, 10, OutputFormat, timetable) %% 输出时序数据 % 如果需要使用时序作为输出则可以为 read 命令指定 OutputFormat。当将数据作为时序输出时一次只能读取一个通道。 data read(m, 1, Triangle, 1, 10, OutputFormat, timeseries) %% 输出向量数据 % read 命令的输出也可以指定为向量。将数据作为向量输出时一次只能读取一个通道。 [data, time] read(m, 1, Triangle, 1, 10, OutputFormat, vector) %% 读取整个通道组 % 要在单个调用中快速读取整个通道组中的数据不需要为 read 命令指定其他参数。 data read(m, 1, m.ChannelNames{1}); %% % Copyright 2012 The MathWorks, Inc.二、读取BLF文件2.1 常用函数canDatabase( )创建一个DBC文件对象用于解析BLF文件数据blfinfo( )获取BLF文件信息blfread( )读取BLF文件数据canSignalTimetable( )将读出来的BLF文件数据转换成timetable格式2.2 举个栗子CanDB canDatabase(PowerTrain_BLF.dbc); % 创建DBC文件用于解析报文的数据结构文件是MATLAB自带的 binf blfinfo(Logging_BLF.blf); % 获取BLF文件确定数据在哪路CAN通道上 binf.ChannelList % 查看通道列表 BLFData blfread(Logging_BLF.blf,2,Database,CanDB); % 读取指定CAN通道中的报文数据2代表通道序号Database是定义好的DBC数据对象如果选错了通道那么无法解析报文名和信号名 signalTimetable1 canSignalTimetable(BLFdata,ABSdata); % 获取指定报文的timetable格式的数据参考【1】MATLAB官方帮助文档。
返回列表