文章目录
- 前言
- 1、linChangeSchedTable切换调度表
- 2、linStartScheduler开启调度表
- 3、linStopScheduler停止调度表
前言
在LIN调度表Schedule Table文章中,详细介绍了LIN调度表的信息,那么如何在CAPL脚本测试中进行LIN调度表的操作呢?
1、linChangeSchedTable切换调度表
从当前调度表切换到另一个调度表。
通过在 on preStart事件中调用此函数,可以指定从哪个调度表开始。
函数使用时需要注意:
- 如果在启动新的调度表之前多次调用此函数,则只有最近的调用才会起作用。
- 如果没有仿真主节点或没有定义调度表,则此函数将不起作用。
long linChangeSchedTable(dword tableIndex);
long linChangeSchedTable(dword tableIndex, dword slotIndex);
long linChangeSchedTable(dword tableIndex, dword slotIndex, dword onSlotIndex);
参数说明
tableIndex:要切换到的调度表索引。如下图在LDF文件中,有4个调度表,InitTable的索引为0,依次到Table4的索引为3,这样去用。
slotIndex:在新的调度表中要启动的slot。默认值为0。也就是默认从新调度表的第一帧开始启动。
onSlotIndex:在更改到新的调度表之前,当前调度表中要发送的最后一个slot的索引。默认值:-2,表示立即修改。-1表示在到达当前进度表结束时进行更改。
返回值:当前调度表的索引;如果不存在调度表或失败,则返回-1。
2、linStartScheduler开启调度表
从Vector Help文档中翻译来看:该函数启动内部调度程序,该程序开始对最后配置的调度表进行循环遍历。如果这是调度程序第一次启动,则使用第一个找到的调度表,即索引为为0的调度表。没有必要在测试开始之前调用此函数,因为调度器是自动启动的。
怎么去理解呢?以上图为例说明:当使用函数linChangeSchedTable(2)将调度表切换到CollisionResolver2表并停止调度,这个时候如果开启调度表,使用linStartScheduler(),就会执行CollisionResolver2表调度表的报文。如果没有调用linChangeSchedTable函数切换调度表,测试执行时默认使用索引为0的第一个调度表InitTable,这时linStartScheduler()也就开启InitTable调度表。
3、linStopScheduler停止调度表
从Vector Help文档中翻译来看:该函数停止内部调度器。这样就停止了对当前调度表的循环遍历。调度程序可以通过调用linStartScheduler()函数重新启动。
使用时需要注意:
- 在on preStart事件中调用此函数,可防止调度器在测试开始时启动。
- 如果没有仿真主节点或没有定义调度表,则此函数将不起作用用。
测试场景:总线静默4-10s判断ECU是否休眠。
- 唤醒ECU,正常进行LIN调度表的报文通信;
- 调用linStopScheduler();停止调度;
- testwaitfortimeout(10000)等待10s;
- 检查ECU是否休眠。