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