【CANoe】CAPL如何检测周期性报文

news2024/11/28 7:50:17

文章目录

  • 一、实例
    • 1、新建工程
    • 2、增加两个 Module
    • 3、选择在线模式(Online Mode)+仿真总线(Simulated Bus)
    • 4、配置CAPL Test Module
      • test.can代码如下:
    • 5、配置CAN IG(发送周期报文0x101)
    • 6、测试结果
  • 二、核心代码
  • 三、CAPL函数详解截图
  • 参考:

一、实例

以下实例可以检测0x101这个周期报文,0x101周期为30ms,检测时间为300ms。检测的周期在20ms-40ms都算通过。

1、新建工程

在这里插入图片描述

2、增加两个 Module

在这里插入图片描述

3、选择在线模式(Online Mode)+仿真总线(Simulated Bus)

在这里插入图片描述

4、配置CAPL Test Module

在这里插入图片描述

test.can代码如下:

/*@!Encoding:936*/
includes
{
  
}


variables
{
  dword gCycCheckId; /*周期性检查0x101报文*/
}

//MIN_CYCLE_TIME:最小周期时间常量
//MAX_CYCLE_TIME:最大周期时间常量
//TIMEOUT:定义测试等待时间常量
CycleCheckMsg101(long MIN_CYCLE_TIME,long MAX_CYCLE_TIME,long TIMEOUT)
{
  float  lCycMinCycleTime;//声明最小周期时间
  float  lCycMaxCycleTime;//声明最小周期时间
  float lQueryResultProbeMin;//声明最小测量间隔时间
  float lQueryResultProbeMax;//声明最大测量间隔时间
  float lQueryResultProbeAvg;//声明平均测量间隔时间

  char lbuffer[100];        //声明一个数组

  lCycMinCycleTime=MIN_CYCLE_TIME;//最小周期时间赋值
  lCycMaxCycleTime=MAX_CYCLE_TIME;//最大周期时间赋值

  //开始观察待测报文
  //gCycCheckId=ChkStart_MsgAbsCycleTimeViolation(MCUR_NM,lCycMinCycleTime,lCycMaxCycleTime);//MCUR_NM为待测帧【导入DBC后,可直接选择这帧】,lCycMinCycleTime为最小周期时间,lCycMaxCycleTime为最大时间周期【可在CAPL中查看函数的详细解释】
  gCycCheckId=ChkStart_MsgAbsCycleTimeViolation(0x101,lCycMinCycleTime,lCycMaxCycleTime);//0x101为待测帧ID,lCycMinCycleTime为最小周期时间,lCycMaxCycleTime为最大时间周期【可在CAPL中查看函数的详细解释】

  //函数调用
  TestAddCondition(gCycCheckId);//条件设置函数
  testWaitForTimeout(TIMEOUT);//等待指示函数
  
  //【下边的代码可以不用】
  lQueryResultProbeMin=ChkQuery_StatProbeIntervalMin(gCycCheckId);//统计最小时间
  lQueryResultProbeMax=ChkQuery_StatProbeIntervalMax(gCycCheckId);//统计最大时间
  lQueryResultProbeAvg=ChkQuery_StatProbeIntervalAvg(gCycCheckId);//统计平均时间

  //统计异常次数
  if(ChkQuery_NumEvents(gCycCheckId)>0)
  { 
    //打印报告
     snprintf(lbuffer,elcount(lbuffer),"Valid values %.0fms - %.0fms",lCycMinCycleTime,lCycMaxCycleTime);
     TestStepFail(" ",lbuffer);
    //
    snprintf(lbuffer,elcount(lbuffer),"Min cycle time: %.0fms",lQueryResultProbeMin);
    TestStepFail(" ",lbuffer);
    //
    snprintf(lbuffer,elcount(lbuffer),"Max cycle time: %.0fms",lQueryResultProbeMax);
    TestStepFail(" ",lbuffer);
    //
    snprintf(lbuffer,elcount(lbuffer),"Avg cycle time: %.0fms",lQueryResultProbeAvg);
    TestStepFail(" ",lbuffer);

  }
  else
  {
    snprintf(lbuffer,elcount(lbuffer),"Valid values %.0fms - %.0fms",lCycMinCycleTime,lCycMaxCycleTime);
    TestStepPass(" ",lbuffer);
    snprintf(lbuffer,elcount(lbuffer),"Min cycle time: %.0fms",lQueryResultProbeMin);
    TestStepPass(" ",lbuffer);
    snprintf(lbuffer,elcount(lbuffer),"Max cycle time: %.0fms",lQueryResultProbeMax);
    TestStepPass(" ",lbuffer);
    snprintf(lbuffer,elcount(lbuffer),"Avg cycle time: %.0fms",lQueryResultProbeAvg);
    TestStepPass(" ",lbuffer);
  }

}


testcase TC1() 
{
    
  CycleCheckMsg101(20,40,300);//检测0x101周期报文
          
  if(ChkQuery_NumEvents(gCycCheckId)==0)
  {
    TestStepPass("【1】 ","检测0x101报文周期=30ms");
  }
  else
  {
    TestStepFail("【1】 ","检测0x101报文周期=30ms");
  }
  ChkControl_Destroy(gCycCheckId);//销毁事件	
	
}

void MainTest ()
{
  startLogging();
  TC1() ;
  stopLogging();  
}

5、配置CAN IG(发送周期报文0x101)

在这里插入图片描述

6、测试结果

在这里插入图片描述
在这里插入图片描述

二、核心代码

CycleCheckMsg101(20,40,300);//检测0x101周期报文
gCycCheckId=ChkStart_MsgAbsCycleTimeViolation(MCUR_NM,lCycMinCycleTime,lCycMaxCycleTime);//MCUR_NM为待测帧【导入DBC后,可直接选择这帧】,lCycMinCycleTime为最小周期时间,lCycMaxCycleTime为最大时间周期【可在CAPL中查看函数的详细解释】
//gCycCheckId=ChkStart_MsgAbsCycleTimeViolation(0x101,lCycMinCycleTime,lCycMaxCycleTime);//0x101为待测帧ID,lCycMinCycleTime为最小周期时间,lCycMaxCycleTime为最大时间周期【可在CAPL中查看函数的详细解释】
TestAddCondition(gCycCheckId);//条件设置函数
testWaitForTimeout(TIMEOUT);//等待指示函数
if(ChkQuery_NumEvents(gCycCheckId)>0) //统计异常次数
ChkControl_Destroy(gCycCheckId);//销毁事件	

三、CAPL函数详解截图

在这里插入图片描述在这里插入图片描述

参考:

https://blog.csdn.net/LOVE135149/article/details/123249201

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/628723.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

浅谈这些年如何被MDK, IAR, GCC和厂家SDK版本兼容性“蹂躏”, 一代版本一代坑

原创文章,转载请注明出处:https://www.armbbs.cn/forum.php?modviewthread&tid119562 版本迭代是嵌入式开发永久的痛,这么多年不知道浪费了多少时间在版本迭代上。 部分系统组件还好点,有个LTS长期支持版,而厂家…

侧信道攻击:SPA / DPA

参考资料:Cryptographic Engineering, by Cetin Kaya Ko, Editor Springer. 文章目录 Side-Channel AnalysisTiming AnalysisSample Power AnalysisDifferential Power Analysis其他攻击 对抗方法 Side-Channel Analysis 对于密码算法的攻击手段,往往是…

【LoRaWAN】单播与组播multicast调试记录

本文主要记录 【LoRaWAN】单播与组播multicast调试过程的问题 2023.06.09 📋 个人简介 💖 作者简介:大家好,我是喜欢记录零碎知识点的小菜鸟。😎📝 个人主页:[欢迎访问我的 Ethernet_Comm 博客…

甘孜州文化旅游产品市场营销策略研究_kaic

甘孜州文化旅游产品市场营销策略研究 摘要: 近年来,随着文化旅游的兴起,越来越多的旅游者渴望精神层面的满足,获得新奇的文化体验,而我国文化旅游仍处于单层次的观赏旅游。本文研究背景包括对旅游行业的背景介绍&#…

【HTML】form标签

<form> 标签用于创建 HTML 表单&#xff0c;它是用于收集用户输入的重要元素。表单可以包含各种输入字段、按钮和其他交互元素&#xff0c;用于向服务器发送用户输入数据。 下面是一个简单的 <form> 标签的示例&#xff1a; <form action"/submit-form&q…

Spring高级装配--条件化的bean

目录 条件化创建bean的例子 使用 解析 条件化创建bean的例子 希望一个或多个bean只有在应用的类路径下包含特定的库时创建希望某个bean只有当另外某个特定的bean也声明之后才会创建要求某个特定的环境变量设置之后&#xff0c;才会创建某个bean在Spring 4之前&#xff0c;很…

【乐观锁与悲观锁】—— 每天一点小知识

&#x1f4a7; 乐观锁与悲观锁 \color{#FF1493}{乐观锁与悲观锁} 乐观锁与悲观锁&#x1f4a7; &#x1f337; 仰望天空&#xff0c;妳我亦是行人.✨ &#x1f984; 个人主页——微风撞见云的博客&#x1f390; &#x1f433; 《数据结构与算法》专栏的文章图文并茂&…

2023-06-09:什么是Redis事务?原理是什么?

2023-06-09&#xff1a;什么是Redis事务&#xff1f;原理是什么&#xff1f; 答案2023-06-09&#xff1a; Redis中的事务是以一组命令的形式出现的&#xff0c;这些命令被认为是最小的执行单位。事务可以保证在一个单独独立的隔离操作中执行所有命令&#xff0c;而且所有命令…

linuxOPS基础_linux ACL访问控制

问题&#xff1a;我们学过的所有者身份包含哪些&#xff1f; 答案:ugo,属主&#xff0c;属组&#xff0c;其他。 问题&#xff1a;我们学过的文件权限包含哪些&#xff1f; 答案&#xff1a;rwx&#xff0c;读写执行&#xff0c;特殊s,t ​ ACL&#xff0c;是 Access Contro…

java变量

基本数据类型介绍 基本的数据类型: 整数类型&#xff1a;byte、short、int、long 定义long类型的变量&#xff0c;赋值时需要以"l"或"L"作为后缀。 Java程序中变量通常声明为int型&#xff0c;除非不足以表示较大的数&#xff0c;才使用long。 Java的整…

移动开发行业,就业及毕业,再到无业,夜夜无眠~

近期听得最多的一个消息就是&#xff1a;“今年太不好找工作了” 这是粉丝朋友发来的感叹&#xff0c;三个星期内没有找到工作&#xff0c;在我朋友圈中算短的了&#xff0c;还有不少朋友已经失业快半年了&#xff0c;情况都和这个类似。 是移动互联网市场变了吗&#xff1f; …

字符串是否相等案例s1==s3?

下列代码的运行结果是&#xff1f; public class test { public static void main(String[] args) { String s1 "abc"; String s2 "ab"; String s3 s2 "c"; System.out.println(s1 s3); } } /** C…

【linux】信号的保存和递达处理

上节我们了解到了预备&#xff08;信号是什么&#xff0c;信号的基础知识&#xff09;再到信号的产生&#xff08;四种方式&#xff09;。今天我们了解信号的保存。信号产生&#xff0c;进程不一定立马就去处理&#xff0c;而是等合适的时间去处理&#xff0c;那么在这段时间内…

[Java基础]面向对象

目录 1、对象和类 2、类之间的关系 3、引用 4、对象的创建和使用 5、构造函数/构造方法 6、内存解析 在这篇文章中&#xff0c;我们将学习面向对象的思想&#xff0c;并学习如何使用面向对象思想编程。在学习面向对象编程之前&#xff0c;我们先了解一下编程语言的发展&a…

Win安装Node.js Npm

1、在使用之前&#xff0c;先类掌握3个东西&#xff0c;明白它们是用来干什么的&#xff1a; npm: nodejs 下的包管理器。 webpack: 它主要用途是通过CommonJS 的语法把所有浏览器端需要发布的静态资源作相应的准备&#xff0c;比如资源的合并和打包。 vue-cli: 用户生成Vue工…

HNU-操作系统OS-作业4(37-40章)

OS_homework_4 这份文件是OS_homework_4 by计科2102 梅炳寅 202108010206 文档设置了目录,可以通过目录快速跳转至答案部分。 第37章 运行程序wolf/OS-homework/file-disks/disk.py 解释一些参数 -G可以查看可视化内容-c可以计算结果。-a 提供待访问的数组-S 将寻道速率改…

深度学习训练营之优化器对比

深度学习训练营之优化器对比 原文链接环境介绍前置工作设置GPU 数据处理导入数据数据集处理数据集可视化 模型构造模型训练结果可视化 原文链接 &#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f366; 参考文章&#xff1a;365天深度学习训练营…

deque(简单介绍一下)

deque的基本情况&#xff1a; 简单的来说deque是一个双头队列。且两边的尺寸可以动态收缩或者扩张。 其底层实现相当复杂&#xff0c;而且效率并不高。大多数时候都不会使用。 deque诞生的原因是vector和list的优缺点不可分割。 正好复习一下vector和list的优缺点。 vector的…

手机抓包fiddler配置及使用教程

本文基于Fiddler4讲解基本使用 fiddler抓包原理 注意&#xff1a;Fiddler 是以代理web服务器的形式工作的&#xff0c;它使用代理地址:127.0.0.1&#xff0c;端口:8888。当Fiddler退出的时候它会自动注销&#xff0c;这样就不会影响别的 程序。不过如果Fiddler非正常退出&…

学校热水供应系统方案

学校热水供应系统是现代化校园建设的重要组成部分。一套高效、可靠、安全、环保的热水供应系统&#xff0c;不仅能够满足学生、教职工的日常生活需求&#xff0c;也能提高学校形象和竞争力。 在设计学校热水供应系统方案时&#xff0c;需要考虑以下几个方面&#xff1a; 一、热…