🍅 Trace logging
文件是我们分析问题的重要数据,我之前也说过,CANoe
的分析工具很多,什么data
,graphics
等,但是日常工作中分析问题用的最多的最方便的还是Trace
.
🍅 但是对对局进行在线回放的时候,不是把直接选了文件就可以回放的,还需要对文件进行必要的过滤
🍅 全网对这个知识点感觉都是在做笔记,没有结合CAPL和实际工程项目进行阐述,但是我觉得这这是十分有必要的
🍅 演示软硬件环境 Win10 x64 ; CANoe 11 SP2 x64
1️⃣ 先创建工程,然后创建一个logging block,我们先录制一段logging文件
2️⃣ 按下‘t ’开始录制,差不多录制了有 3分钟 ,再按‘t’停止录制
1️⃣ 上面我们已经录制了logging ,那么我们看下怎么使用这个logging 来分析问题
2️⃣ 通过打到offline mode
,然后将文件拖到选择框中,然后按Start
按钮,也会很快加载完毕,那么费那么大事,和直接拖到Trace
中有啥区别呢
offline mode
对话框,可以选择多个文件同时回放step
按钮没,后面还有个时间输入框,什么意思呢,就是,如果我不想一下子全部读完,我向先读5ms的数据,看完了,我再按下step
,它就又加载5s的数据。懂了吧,就是根据你设置的时间,每按一次step,就加载多少的数据1️⃣ 如下图,Replay Block
是一个节点,这里我们把其它节点都屏蔽掉,创建一个Replay Block
节点
2️⃣ 这里我们直接选择logging文件,其它先不用配置
3️⃣ 直接Start ,我们看下Run了 156s, Trace就停止了
Start Option
不要勾选 Start replay on measurement start
开始
按键才行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;
};
}
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
End |
🍅 有需要演示中所用demo工程的,可以关注下方公众号网盘自取啦,感谢阅读。
- 🚩要有最朴素的生活,最遥远的梦想,即使明天天寒地冻,路遥马亡!
- 🚩 有微信的小伙伴可以关注下浪哥车载诊断,一个行业内小小圈子,群里有
网盘资料
,源码
,还有各路大神
闲时交流交流技术,聊聊工作机会啥的。
- 🚩如果这篇博客对你有帮助,请 “点赞” “评论”“收藏”一键三连 哦!码字不易,大家的支持就是我坚持下去的动力。