当前位置:网站首页>CANoe的数据回放(Replay Block),还是要结合CAPL脚本才能说的明白
CANoe的数据回放(Replay Block),还是要结合CAPL脚本才能说的明白
2022-07-06 09:03:00 【蚂蚁小兵】
相关文章
前言
Trace logging
文件是我们分析问题的重要数据,我之前也说过,CANoe
的分析工具很多,什么data
,graphics
等,但是日常工作中分析问题用的最多的最方便的还是Trace
.但是对对局进行在线回放的时候,不是把直接选了文件就可以回放的,还需要对文件进行必要的过滤
全网对这个知识点感觉都是在做笔记,没有结合CAPL和实际工程项目进行阐述,但是我觉得这这是十分有必要的
演示软硬件环境 Win10 x64 ; CANoe 11 SP2 x64
目录
先录制一段Trace备用
1️⃣ 先创建工程,然后创建一个logging block,我们先录制一段logging文件
- 这里选择按键触发开始录制
- 录制文件格式选择blf格式,这种格式要比ASC格式节省内存
2️⃣ 按下‘t ’开始录制,差不多录制了有 3分钟 ,再按‘t’停止录制
offline mode加载logging文件分析`trace(快速模式)
1️⃣ 上面我们已经录制了logging ,那么我们看下怎么使用这个logging 来分析问题
- 方法一:直接按住文件拖进Trace 里面,很快就加载完毕了,最方便快捷,推荐用法
2️⃣ 通过打到offline mode
,然后将文件拖到选择框中,然后按Start
按钮,也会很快加载完毕,那么费那么大事,和直接拖到Trace
中有啥区别呢
- 通过
offline mode
对话框,可以选择多个文件同时回放 - 看到那个
step
按钮没,后面还有个时间输入框,什么意思呢,就是,如果我不想一下子全部读完,我向先读5ms的数据,看完了,我再按下step
,它就又加载5s的数据。懂了吧,就是根据你设置的时间,每按一次step,就加载多少的数据 - 时间框默认单位事ms ,你可以写h, m, s, 来表示小时,分钟,秒,比如1s,你可以 写1s
数据回放(Replay Block)(慢速模式)
默认配置,Run 了CANoe 就触发Replay Block
1️⃣ 如下图,Replay Block
是一个节点,这里我们把其它节点都屏蔽掉,创建一个Replay Block
节点
2️⃣ 这里我们直接选择logging文件,其它先不用配置
3️⃣ 直接Start ,我们看下Run了 156s, Trace就停止了
- 上面为什么156s就停了,因为我们录制Trcae 就 156s ,当你回放的时候,时间戳是从零开始的。
- 而且默认选择的是logging文件只回放一次,可以选择循环回放的
手动触发Replay Block
Start Option
不要勾选Start replay on measurement start
- 想要触发Replay ,需要点击
开始
按键才行
按键触发Replay Block
重复回放Replay
- 重复回放Replay
过滤通道(Channel Mapping)
- 下图是基于真实ECU,双CAN通道测试的一段Trace截图,回放选择两个通道
、
- 下图是基于真实ECU,双CAN通道测试的一段Trace截图,回放统统选择CAN1通道
RX/TX过滤(CAN Option)
- 以CAN总线为例,其它总线参考help文档
- 不管录制Trace时,各个节点时RX还是TX;回放的Trace 都是TX
- 如果勾选RX message ,只有真实节点的数据被回放,也就是说录制Trace时的 TX 节点数据被过滤掉了
- 如果勾选TX message ,实节点和仿真节点的数据都会被回放,也就是TX message 就是回放所有数据了
CAPL脚本触发Replay
- 下面脚本是控制Replay 开始,停止的几个函数,在实际工程项目中,基本上都是通过CAPL脚本控制
Replay
来完成测试任务的
/*@!Encoding:936*/
variables
{
char replayName[32] = "ReplayBlock 1";
}
on key 'b'
{
replayStart( replayName);
writeReplayState( replayName);
}
on key 'e'
{
replayStop( replayName);
writeReplayState( replayName);
}
on key 's'
{
replaySuspend( replayName);
writeReplayState( replayName);
}
on key 'r'
{
replayResume( replayName);
writeReplayState( replayName);
}
void writeReplayState( char name[])
{
switch ( replayState( name))
{
case 0:
write( "Replay Block %s is stopped", replayName);
break;
case 1:
write( "Replay Block %s is running", replayName);
break;
case 2:
write( "Replay Block %s is suspended", replayName);
break;
default:
write( "Error: Replay Block %s has an unknown state!", replayName);
break;
};
}
数据回放过程中的节点过滤
- 实际项目中,拿到的不管是车辆测试跑回来的数据也好,还是台架测试的数据,都需要经过数据清洗才能用来回放和分析的,而上面介绍的功能根本不够用,甚至很少用的
- 车辆测试跑回来的数据肯定会包含目标ECU的,回放过程,我们要踢掉目标ECU的数据,这里方法大致有两种常用,
- 一种是如果是ASC格式的数据(blf也可以转为ASC),是可以通过脚本(Python /c++等)对该文件进行清洗,具体项目具体实现了
- 另一种就是回放报文的时候,再录制一份报文,在录制的时候添加过滤节点,下面代码演示下这中方式
1, 如下图,我们创建Logging Block
并且加入 Event Filter
2, 如下图,这个Trace总共就两个节点(Light和Engine),那我们就把Engine节点数据过滤掉
3, 如下图,我们配置下logging的触发方式,因为为了统一Replay Block 和 Logging Block的同时进行和停止,我们写一点CAPL脚本控制下时序,其实这也是实际工程项目中的一般做法(这里简化代码,讲述核心逻辑)
4, 如下图,通过按键‘h’
/*@!Encoding:936*/
variables
{
char replayName[32] = "ReplayBlock 1";
char loggingName[32] = "Logging";
msTimer ReplayState ;
}
on timer ReplayState
{
if(replayState(replayName) == 0)//replay结束
{
stopLogging(loggingName);//停止logging
}
else
{
setTimer(ReplayState,100); //100ms
}
}
on key 'h'
{
replayStart( replayName); //开始回放
setTimer(ReplayState,100); //100ms
startLogging(loggingName); //开始录制
}
5, Run起工程后,按下按键‘h’,然后等待Run完毕,看到录制的logging -2022xxx文件.直接拖到Trace中,看到我们把Engine节点报文都过滤掉了,然后这个报文,才可以用于我们的Replay Block
Logging File 类型转换
- blf 文件格式,占用内存小但是无法用txt打开,也就无法用脚本去解析
- asc 文件格式,占用内存大,但是可以用txt直接打开,然后根据需求去对文件某些节点数据做删除或者其它更改等
- CANoe中可以直接将logging文件进行格式转换
End |
总结
有需要演示中所用demo工程的,可以关注下方公众号网盘自取啦,感谢阅读。
- 要有最朴素的生活,最遥远的梦想,即使明天天寒地冻,路遥马亡!
- 有微信的小伙伴可以关注下浪哥车载诊断,一个行业内小小圈子,群里有
网盘资料
,源码
,还有各路大神
闲时交流交流技术,聊聊工作机会啥的。- 如果这篇博客对你有帮助,请 “点赞” “评论”“收藏”一键三连 哦!码字不易,大家的支持就是我坚持下去的动力。
边栏推荐
- The order of include header files and the difference between double quotation marks "and angle brackets < >
- 大学C语言入门到底怎么学才可以走捷径
- Redis' bitmap
- Redis core configuration
- [deep learning] semantic segmentation: thesis reading (neurips 2021) maskformer: per pixel classification is not all you need
- Withdrawal of wechat applet (enterprise payment to change)
- MapReduce instance (IX): reduce end join
- [Yu Yue education] Wuhan University of science and technology securities investment reference
- 英雄联盟轮播图自动轮播
- Redis cluster
猜你喜欢
Workflow - activiti7 environment setup
Design and implementation of online snack sales system based on b/s (attached: source code paper SQL file)
《ASP.NET Core 6框架揭秘》样章发布[200页/5章]
MapReduce instance (VIII): Map end join
【深度學習】語義分割-源代碼匯總
51单片机进修的一些感悟
Activiti7工作流的使用
[deep learning] semantic segmentation: thesis reading (neurips 2021) maskformer: per pixel classification is not all you need
Redis之Lua脚本
[Yu Yue education] Wuhan University of science and technology securities investment reference
随机推荐
Counter attack of noodles: redis asked 52 questions in a series, with detailed pictures and pictures. Now the interview is stable
单片机如何从上电复位执行到main函数?
DCDC power ripple test
[Yu Yue education] reference materials of power electronics technology of Jiangxi University of science and technology
嵌入式开发中的防御性C语言编程
面渣逆袭:Redis连环五十二问,图文详解,这下面试稳了
Master slave replication of redis
Redis' bitmap
Hero League rotation map automatic rotation
Several ways of MySQL database optimization (pen interview must ask)
What are the models of data modeling
Global and Chinese market for annunciator panels 2022-2028: Research Report on technology, participants, trends, market size and share
MapReduce working mechanism
CAP理论
Global and Chinese market of linear regulators 2022-2028: Research Report on technology, participants, trends, market size and share
Full stack development of quartz distributed timed task scheduling cluster
A wave of open source notebooks is coming
Global and Chinese market of bank smart cards 2022-2028: Research Report on technology, participants, trends, market size and share
一大波開源小抄來襲
Yarn organizational structure