除了testwaitfortimeout()之外,CAPL中的延迟功能

时间:2017-12-13 23:21:48

标签: capl canoe

我有一个控制GPIB电源的CAPL测试节点。该CAPL生成每3 ms修改一次的信号。我的CAPL看起来像这样:

...
testcase wavGenerator()
{
   GPIBWrite(myDevice, "VOLT", voltValue);
   testwaitfortimeout(3);
   ...
}

问题是这个testwaitfortimeout()函数在测试报告中生成一个注释,因为我为每个测试用例使用这个函数2000/3000次,所以我以一个巨大的测试报告结束。

我尝试过实现一个函数来生成"延迟"像waitfortimeout()那样,这样:

void delay(int ms)
{
   float refTime;
   refTime = timeNowFloat();
   while(timeNowFloat() < (refTime + ms*100))
   {
      /* Wait to reach expected time*/
   }
}

但这会导致CANoe崩溃。我用setTimer()函数试过这样的东西,但问题是一样的。我怎样才能产生这种延迟?

3 个答案:

答案 0 :(得分:2)

一个想法可能是使用计时器:

variables
{
  msTimer myTimer;
}

testcase wavGenerator()
{
  GPIBWrite(myDevice, "VOLT", voltValue);
  setTimer(myTimer, 3);
}

on timer myTimer
{
  // your code
}

或者,您始终可以创建自定义样式表(XSLT),从报告中过滤对testwaitfortimeout的所有调用。

答案 1 :(得分:0)

我找到了一种解决方法,使用计时器,EnvVar和函数testWaitForEnvVar()

on timer tDelay
{
  @EnvDelayFunct = 1;
}

void delay(int ms)
{
  int a;
  write("Wait for %i ms", ms); 
  setTimer(tDelay, ms);
  a = testWaitForEnvVar(EnvDelayFunct, 0);
  @EnvDelayFunct = 0;
}

答案 2 :(得分:0)

您可以使用测试报告过滤选项过滤掉延迟的评论,并取消对事件的恢复