• CANoe的数据回放(Replay Block),还是要结合CAPL脚本才能说的明白


    📙 相关文章

    在这里插入图片描述


    📘前言

    • 🍅 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中有啥区别呢

    1. 通过offline mode 对话框,可以选择多个文件同时回放
    2. 看到那个step 按钮没,后面还有个时间输入框,什么意思呢,就是,如果我不想一下子全部读完,我向先读5ms的数据,看完了,我再按下step ,它就又加载5s的数据。懂了吧,就是根据你设置的时间,每按一次step,就加载多少的数据
    3. 时间框默认单位事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;
    };
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50

    📙 数据回放过程中的节点过滤

    • 实际项目中,拿到的不管是车辆测试跑回来的数据也好,还是台架测试的数据,都需要经过数据清洗才能用来回放和分析的,而上面介绍的功能根本不够用,甚至很少用的
    • 车辆测试跑回来的数据肯定会包含目标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); //开始录制
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    5, Run起工程后,按下按键‘h’,然后等待Run完毕,看到录制的logging -2022xxx文件.直接拖到Trace中,看到我们把Engine节点报文都过滤掉了,然后这个报文,才可以用于我们的Replay Block

    在这里插入图片描述


    📙 Logging File 类型转换

    • blf 文件格式,占用内存小但是无法用txt打开,也就无法用脚本去解析
    • asc 文件格式,占用内存大,但是可以用txt直接打开,然后根据需求去对文件某些节点数据做删除或者其它更改等
    • CANoe中可以直接将logging文件进行格式转换

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    End

    🌎总结

    23

    请添加图片描述

    🍅 有需要演示中所用demo工程的,可以关注下方公众号网盘自取啦,感谢阅读。

    7

    • 🚩要有最朴素的生活,最遥远的梦想,即使明天天寒地冻,路遥马亡!

    • 🚩 有微信的小伙伴可以关注下浪哥车载诊断,一个行业内小小圈子,群里有网盘资料源码还有各路大神 闲时交流交流技术,聊聊工作机会啥的。

    • 🚩如果这篇博客对你有帮助,请 “点赞” “评论”“收藏”一键三连 哦!码字不易,大家的支持就是我坚持下去的动力。
      18
  • 相关阅读:
    如何裁剪音频文件?裁剪音频的方法有什么?
    -角谷猜想-
    cad怎么转换成黑白的pdf图纸?分享3个常用的软件!
    asyncawait和promise的区别
    2)采样数学表示
    java基于ssm+vue的考研信息查询系统 elementui
    机器人C++库(3)Robotics Library 例程一
    servlet中doGet方法无法读取body中的数据
    windows qemu安装飞腾Aarch64 操作系统 亲测
    计算机竞赛 深度学习YOLOv5车辆颜色识别检测 - python opencv
  • 原文地址:https://blog.csdn.net/qq_34414530/article/details/125442369