CAPL将Timer的使用编程为延迟

时间:2015-05-27 06:34:01

标签: can-bus capl

我一直在写一个CAPL脚本,它会在一定的延迟后在每个通道上发送消息(2个没有)。我想使用 SetTimer() mstimer :: isRunning 函数生成以下延迟。 我可以使用setTimer函数,但我不知道如何使用 mstimer :: isRunning 。 代码如下所示:

    Variables{
          message * temp = {DLC=8};
          mstimer timer1;
    }
    on timer timer1{
        //Do nothing
    }
    onstart{

    for(noofChannel=1;noofChannel<=2;noofChannel++){
        settimer(timer1,100);
        temp.CAN = noofChannel;
        temp.ID = 0xAA;
        While (mstimer::isrunning)==0 // I need to write this right.
        { //wait for timer to expire}
        Output(temp);

    }

3 个答案:

答案 0 :(得分:1)

而不是mstimer::isrunning使用isTimerActive()方法。 如果计时器正在运行,isTimerActive()将返回1,如果计时器已过期,则返回0。 所以你的代码看起来像:

on start{

    for(noofChannel=1;noofChannel<=2;noofChannel++){
        settimer(timer1,100);
        temp.CAN = noofChannel;
        temp.ID = 0xAA;
        While (isTimerActive(timer1) == 1)  
        { //wait for timer to expire}
        }
        Output(temp);

      }
    }

但我不建议这样做。您可以通过on start

输出第二条消息,而不是在onTimer中循环
on start{
            temp.CAN = 1;
            temp.ID = 0xAA;
            Output(temp);
            settimer(timer1,100);
        }

on timer timer1{
    temp.CAN = 2;
    Output(temp);
}

如果你想保持它是通用的,即不限制为2个通道,你可以取一个变量并在计时器中递增它。

答案 1 :(得分:0)

我向Vector询问了同样的问题,他们的答案如下: “msTimer.isRunning”给出了Timer的状态,无论计时器是否运行 可用性如下所述:

      on timer myTimer
      {
         write("Running Status %d",myTimer.isRunning());
      }

“timeToElapse()”函数也可用于以下情况。 语法:

      timer t;
      setTimer(t,5);
      write("Time to elapse: %d",timeToElapse(t)); // Writes 5

答案 2 :(得分:-1)

ListDatabasesIterable