文章目录
- 一、实例
- 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