【问题标题】:Delay function in CAPL apart from testwaitfortimeout()除了 testwaitfortimeout() 之外,CAPL 中的延迟函数
【发布时间】:2021-07-18 18:57:51
【问题描述】:

我有一个控制 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() 函数尝试过这样的事情,但问题是一样的。我怎样才能产生这种延迟?

【问题讨论】:

    标签: capl canoe


    【解决方案1】:

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

    variables
    {
      msTimer myTimer;
    }
    
    testcase wavGenerator()
    {
      GPIBWrite(myDevice, "VOLT", voltValue);
      setTimer(myTimer, 3);
    }
    
    on timer myTimer
    {
      // your code
    }
    

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

    【讨论】:

      【解决方案2】:

      我找到了解决这个问题的方法,使用计时器、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;
      }
      

      【讨论】:

      • 在 CAPL 节点中不允许 testWaitForEnvVar
      【解决方案3】:

      您可以使用测试报告过滤器选项过滤掉延迟的 cmets 并取消勾选 resume on events

      【讨论】:

        猜你喜欢
        • 2022-06-19
        • 2018-09-08
        • 1970-01-01
        • 2014-02-18
        • 1970-01-01
        • 2020-11-13
        • 2011-05-19
        • 1970-01-01
        • 2019-11-01
        相关资源
        最近更新 更多