1

我有一个控制 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*/
   }
}

但这会使独木舟崩溃。我已经用 setTimer() 函数尝试过这样的事情,但问题是一样的。我怎样才能产生这种延迟?

4

3 回答 3

3

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

variables
{
  msTimer myTimer;
}

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

on timer myTimer
{
  // your code
}

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

于 2017-12-15T14:44:00.280 回答
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;
}
于 2017-12-15T18:12:11.190 回答
0

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

于 2021-07-18T10:57:51.180 回答