通过simulink 将CAN TRACE 进行回放
或者通过采集到数据进行数据回放和按需进行逆向计算
1、首先获取得到一般的blf 报文log文件,报文的log文件的不同格式可用CANalyzer 进行格式转换和时间上的切割
那么我们即得到一段blf 报文的log文件
2、将blf读入到MATLAB
2.1使用到的是blfread 函数
cantrace=blfread("replayCANTrace.blf");
读取进来发现是一个cell数组,主要是这个log文件同时记录了多个channel 的报文,而我们单次分析只针对一个 channel 甚至一个报文。
2.2所以需要进行单一channel提取,只获取cell中第一个元素的报文,注意cell数组是1 based
cantracefinal = cantrace{1};
2.3获取报文的开始 和结束时间
startTime = seconds(cantracefinal.Time(1));
stopTime = seconds(cantracefinal.Time(end));
2.4 定义 0.01 秒的仿真时间步,并根据该时间步对 startTime
和 stopTime
的值进行舍入
Ts = 0.01;
startTime = round(startTime, 2);
stopTime = round(stopTime, 2);
2.5 将报文转换为与 CAN Replay 模块兼容的格式,并将它们保存到一个单独的文件中。
canMsgs = canMessageReplayBlockStruct(cantracefinal);
save cantraceReplay.mat canMsgs
经过上面的处理,我们就可以得到了一个cantraceReplay.mat 文件,加载mat文件后
我们得到一个名叫 canMsgs的结构体,这个结构体形式可以被simulink的 vehicle network 模块接受。
3、进行simulink 模型搭建
3.1较简单直接的方法:、
仿真设置:
拖入CAN Replay 模块
File: 游览选择上面生成的mat文件
Variable Name: 选择mat文件对应的结构体名字
Reply to: Output port
这样进行仿真,则实现具体报文的回放,当然也可以对报文数值后续的计算
或者作为模型信号输入