目录
工程背景
工程目的
报文发送情况
工程实现
工程步骤概述
1 测试方法分析
1-1 检测报文周期
1-2 检测报文长度DLC
1-3 功能测试
1-4 检测未定义报文
2 添加Test Module
2-1创建测试环境
2-2 插入CAPL Test Module
3 CAPL编写测试用例
3-1 测试模块入口函数MainTest
3-2 CAPL测试用例——检测报文周期
3-3 CAPL测试用例——检测报文长度DLC
3-4 CAPL测试用例——检测未定义报文undefined msg
3-5 CAPL测试用例——功能测试
4 工程运行测试
5 故障注入
5-1 系统变量控制报文发送
5-2 IG节点发送自定义报文
6 测试报告
工程背景本工程主要目的是: 基于第3个仿真工程, 熟悉CANoe的报文测试功能。
工程目的本工程将围绕CAN总线中的报文,在Test Module中实现测试功能。主要包括:
检测周期性报文的周期检测报文的长度检查网络中是否有未定义的报文简单的功能测试:通过修改相关系统变量的数值,模拟真实测试环境的操作,最后检验总线上的信号数值的改变。生成测试报告 报文发送情况第3个仿真工程报文发送与接收情况如下:
报文的相关属性整理如下表:
报文中的信号属性如下表:
本章实例基于第12章的仿真工程,为了便于区别,需要将原工程的文件夹复制并 名为Vehicle_System_Simulation_Test, 工程名称也另存为Vehicle_System_CAN_Test.cfg, 在该工程文件夹下创建一个名为Testmodul的文件夹,用于存放相关的测试代码。
接下来,将在此基础上添加测试模块及故障注入面板等。
工程包括以下几个关键步骤:
测试方法分析添加Test Module,CAPL测试用例编写,运行工程,运行测试用例。故障注入,运行测试用例。查看测试报告。 1 测试方法分析本工程的目的是分别测试不同报文的发送周期、报文长度DLC;功能测试(检测信号值是否在期望的数值范围内 );未定义报文。
1-1 检测报文周期检测报文周期的方法是划定某一段特定的时间,选取该时间段中第一条待测报文作为起始时间戳,观察此待测报文后续重复的时间间隔。
TSL函数——检测函数
检测函数1:
ChkStart_MsgAbsCycleTimeViolation ( Message aObservedMessage,duration aMinCycleTime, duration aMaxCycleTime)
函数功能:观察总线周期性报文aObservedMessage的每次出现,如果该报文的间隔不符合规范要求,则会触发一个代表异常出现的特殊事件。
返回值:>0,返回一个IDaCheckedId,即观察待测报文的事件;=0报错。
TSL函数——状态报告函数
状态报告函数1:long ChKQuery_NumEvents(dword aCheckId)
函数功能:查询该时间段内异常出现的特殊事件的个数
状态报告函数2:double ChkQuery_StatProbeIntervalAvg(dword aCheckId)
返回该时间段内,该报文的平均周期间隔时间
状态报告函数3: double ChkQuery_StatProbeIntervalMin(dword aCheckId)
返回该时间段内,该报文的最小周期间隔时间
状态报告函数4: double ChkQuery_StatProbeIntervalMax(dword aCheckId)
返回该时间段内,该报文的最大周期间隔时间
TSL函数——检测控制函数
检测控制函数1: long ChkControl_Destroy(Check aCheckId)
用于测试结束时,销毁该事件对象aCheckId,释放资源。返回0操作成功,0:返回一个事件对象aCheckId;=0报错
1-3 功能测试功能测试用过CAPL程序逻辑来设置某信号的数值,然后使用ChkStart_MsgSignalValueInvalid函数来检测信号值是否在期望的数值范围内。
dword ChkStart_MsgSignalValueInvalid (Signal aObservedSignal,double aMinValue, double aMaxValue, Callback aCallback)
函数参数:待测信号,必须是定在DBC中的信号,最小信号值,最大信号值,回调CAPL函数名,可选。
返回值:返回一个事件对象aCheckId,即检测未定义报文的事件
1-4 检测未定义报文检测函数:dword ChkStart_UndefinedMessageReceived (char [] CaplCallback)
作用:观察当前总线上是否有未定义的报文
返回值:>0:返回一个事件对象aCheckId,即待观测报文的事件;=0报错。
状态报告函数:long ChkQuery_EventMessageId (dword aCheckId)
作用:返回触发该事件的报文的MessageId
返回值:>0返回触发该事件的报文ID;0) {//统计异常次数//打印报告snprintf(lbuffer,elCount(lbuffer),"Valid values %.0fms - %.0fms",aCycMinCycleTime,aCycMaxCycleTime);testStepFail("",lbuffer);snprintf(lbuffer,elCount(lbuffer),"Average cycle time: %dms",lQueryResultProbeAvg);testStepFail("",lbuffer);snprintf(lbuffer,elCount(lbuffer),"Min cycle time: %dms",lQueryResultProbeMin);testStepFail("",lbuffer);snprintf(lbuffer,elCount(lbuffer),"Average cycle time: %dms",lQueryResultProbeMax);testStepFail("",lbuffer); } else {snprintf(lbuffer,elCount(lbuffer),"Valid values %.0fms - %.0fms",aCycMinCycleTime,aCycMaxCycleTime);testStepPass("",lbuffer);snprintf(lbuffer,elCount(lbuffer),"Average cycle time: %dms",lQueryResultProbeAvg);testStepPass("",lbuffer);snprintf(lbuffer,elCount(lbuffer),"Min cycle time: %dms",lQueryResultProbeMin);testStepPass("",lbuffer);snprintf(lbuffer,elCount(lbuffer),"Average cycle time: %dms",lQueryResultProbeMax);testStepPass("",lbuffer); } ChkControl_Destroy(gCycCheckId);//销毁事件 }//TC1:Check Cycle time of msg EngineDatatestcase CheckMsgEngineData(){ float lCycMinCycleTime;//