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

news/2025/3/9 8:34:13/

文章目录

  • 一、实例
    • 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.ppmy.cn/news/294914.html

相关文章

问题总结!常用插件Pytest的测试用例的一些问题

目录 前言: 失败重跑 Pytest-rerunfailures 用例执行顺序 Pytest-ordering 重复执行 Pytest-repeat 多重断言 Pytest-assume 前言: Pytest是Python中的一个流行的测试框架,它提供了许多功能强大的插件来支持自动化测试。 失败重跑 Pyt…

利用powershell脚本进行内网渗透

powershell知识点 ps1是powershell脚本的拓展名,就相当于cmd的.bat脚本,但是他更加强大。 获取版本信息 get-host #查看powershell的版本信息$psversiontable #查看powershell的版本信息执行策略 PowerShell 执行策略是一项安全功能,用于控…

Jetpack Compose 中安全地消耗Flow

Jetpack Compose 中安全地消耗Flow 以 Lifecycle 为周期的方式收集流是在 Android 上收集流的推荐方式。如果您正在使用 Jetpack Compose 构建 Android 应用程序,则使用 collectAsStateWithLifecycle API 可以在 Lifecycle 为周期的方式下从您的 UI 中收集流。 co…

keepalived配置日志与防火墙

日志配置 sed -i s/KEEPALIVED_OPTIONS"-D"/KEEPALIVED_OPTIONS"-D -d -S 0"/g /etc/sysconfig/keepalived echo local0.* /var/log/keepalived.log >> /etc/rsyslog.conf systemctl restart rsyslog systemctl restart keepalived防火墙放通 …

防火墙命令

防火墙命令:https://blog.csdn.net/calm_programmer/article/details/124194093 1、查看防火墙的状态 (dead代表关闭 running代表已经开启):systemctl status firewalld 2、查看防火墙所有开放的端口:firewall-cmd --list-ports 3、开启防火墙:systemctl start firewalld 4、开…

防火墙的优势主要有哪些

随着商业世界的大部分继续数字化,一些虚拟主机提供商需要注意保护他们的系统免受外部威胁。保护系统免受外部威胁的一种方法是使用防火墙。但是,随着时代的变化,我们保护业务的方法也应该随之改变。下一代防火墙是最新的数字保护,…

用正则表达式找出日志中的ip地址

了解IPv4的规则 1、任何一个1位或2位数字,即0-99 2、任何一个以1开头的3位数字,即100-199 3、任何一个以2开头、第2位数字是0-4之间的3位数字,即200-249 4、任何一个以25开头,第3位数字在0-5之间的3位数字,即250-255 …

防火墙中配置FTP

[colorGreen][size12]要求:外网充许访问内网中的FTP服务。考虑:将内网地址NAT为外网可以访问的地址; FTP服务一般使用TCP21端口进行主机链接; FTP分为PASV与PORT两种方式,即被动模式与主动模式。在PASV下,当…