前言:CAPL—Test编程中的对象,是一个比较复杂的概念,对象的作用是作为Test特定函数的参数。来执行特定的功能(这是比较复杂的一个概念,下文会慢慢讲解)。
注意:因为翻译的问题,有些中文资料称为 测试对象,有些称为测试条件。大家要明白都是指一个东西。
1:对象是如何来的?
目前我所知道的是,对象是通过特定的函数返回值得到的,也就是调用特定的一些函数,该函数的返回值为对象。以下清单的函数返回值都是对象。
序号 | 函数 |
1 | dword ChkStart_MsgAbsCycleTimeViolation(被检测帧在DBC文件中的名称,最小时间,最大时间) |
2 | dword ChkStart_InconsistentDLC(被检测帧在DBC文件中的名称,回调函数名(注:可选参数)) |
3 | dword ChkStart_UndefineMessageReceive(回调函数名) |
4 | dword ChkStart_MsgSignalValueInval(回调函数名) |
目前为止,我所知道的放回值为对象的函数就这些。
从结构上和命名方式上总结:
1:返回值类型都是dword类型。
2:函数名称都是 ChkStart_定义的名称(名称确定了该函数的性质)
3:返回的对象,可以赋值给一个dword类型的参数
2:对象如何使用
看以下代码
const dword CheckTime=1000;
dword gCycCheckId=0;
gCycCheckId = ChkStart_MsgAbsCycleTimeViolation(BCM_2,45,55);
testWaitForTimeout(CheckTime);
ChkControl_Destroy(gCycCheckId); //销毁测试事件
可以看出,这段代码的作用在于,检查一条名称为BCM_2的报文,的周期是不是在45ms-55ms之间。测试时间为1000ms。
仔细看代码,就会发现问题所在,CAPL也是类 C语言,如果严格按照C中的定义执行,
gCycCheckId = ChkStart_MsgAbsCycleTimeViolation(BCM_2,45,55);到这行时,调用完毕后,
返回到testWaitForTimeout(CheckTime);这一条语句,等待1000ms,然后执行最后一条销毁测试对象/有些。
发现了没?这里怎么和我们想实现的功能不一致,我们这段代码的本意是想,测试1000ms内,报文的周期是否满足条件。
但是事实上,这段代码确实是实现了上述描述的1000ms内,持续检测的能力。
那就只能说明一个问题,那就是
gCycCheckId = ChkStart_MsgAbsCycleTimeViolation(BCM_2,45,55)和下面一条语句
testWaitForTimeout(CheckTime);存在大约1000ms左右的共同运行
这就说明了,CAPL为了满足测试中工作中的要求,返回值为对象的函数,可以与其他语句(指它后续的语句)并行执行。
小结:暂时我们不需要了解CAPL到底是如何执行这种同时并行的,只需要记住,它就能实现这种功能即可。
3:对象为什么需要,执行删除操作
上面代码中:存在一条语句 ChkControl_Destroy(gCycCheckId); //销毁测试事件
不过不执行销毁操作会怎么样?
const dword CheckTime=1000;
dword gCycCheckId=0;
gCycCheckId = ChkStart_MsgAbsCycleTimeViolation(BCM_2,45,55);
testWaitForTimeout(CheckTime);
gCycCheckId = ChkStart_MsgAbsCycleTimeViolation(IHU_3,45,55);
如上,将代码最后一行的销毁语句,改为在执行一遍IHU_3报文的周期。 这样就会覆盖掉之前检测的结果。
如果仅仅是覆盖,还不是最大的问题。
这就又延伸出,另外一个问题了,测试中,我们知道ChkStart_MsgAbsCycleTimeViolation函数是返回一个对象,对象数值>0。
那么我们如何通过这个对象,来确定是不是出现周期不符合要求的情况。并且,通常情况下我们还需要了解,测试时间段内,一共出现了多少帧不符合要求的情况,或者我们需要知道最大的周期,和最小的周期具体的值是多少?
这就要用到相关的查询函数了。
序号 | 函数 |
1 | long ChkQuery_NumEvents(事件对象)。函数的返回值是检测周期内,不符合要求事件的数量。事件对象必须在函数调用前,就已经被创建。 |
2 | double ChkQuery_StatProbelIntervalAVG(事件对象)查询平均周期时间 |
3 | double ChkQuery_StatProbelIntervalMin事件对象)查询最小周期时间 |
4 | double ChkQuery_StatProbelIntervalMax事件对象)查询最小周期时间 |
故测试中如果不Destory事件对象,就会占用资源,导致脚本运行速度变慢。
4:通过“事件对象作为参数”控制检测的运行,
开始,和结束销毁。存在以下几个函数,这类函数是统称为检测控制函数(check Control CAPL Function)。
函数 | 描述 |
ChkControl_Start | 用于开始或继续检测事件 |
ChkControl_Stop | 用于停止检测事件 |
ChkControl_Reset | 用于初始化检测事件状态 |
ChkControl_Destory | 用于销毁检测事件对象 |
ChkControl_SetCallback | 用于设置检测事件对象的回调函数 |