Vector - CAPL - 定时器函数和使用

定时器在C语言中的使用我想学习过C编程的都不会陌生,它能够提供延时,完成等待一定的时间;它也可以实现多线程的操作,并行实行某些软件功能。那在CAPL中,定时器又能做哪些工作呢?又是怎么使用的呢?今天我们就一起来看下。

timer&msTimer

在CAPL中主要的定时器有毫秒定时器和秒定时器,他们分别是Timer和msTimer。对于计时器类型的变量,最长时间为2147483647 s(=596523.23h),对于msTimer类型的变量最长时间是2147483647ms(=2147483647s=596,52h);我们常定义在variables中,如下:

variables
{
  timer timer1;
  msTimer mstimer2;
  message 0x100 msg1;
  message 0x101 msg2;
}

on timer timer1
{
  output(msg1);
  write("执行timer1内部内容,发送0x100报文");
}

on timer mstimer2
{
  output(msg2);
  write("执行mstimer2内部内容,发送0x101报文");
}

setTimer

功能CAPL中的定时器精度取决于所使用的的硬件,一般精度为一毫秒;

msTimer的最大值为:2147483647 ms=2147483648 s=596,52h。

from 2:计时器的最大值为2147483647 s=596523.23h

from 3:计时器的UI大致为2147483647秒+214783647ns ~ 2147483649秒

t:上面在variables中定时的毫秒计时器或秒定时器

duration:设置定时器时间为duration,时间为毫秒或者秒

durationSec:起始时间

durationNanoSec:终止时间

variables {
  msTimer t1;
  Timer t23;
}

on key F1 {
  setTimer(t1, 200); // set timer t1 to 200 ms
}

on key F2 {
  setTimer (t23, 2); // set timer t23 to 2 sec
}

on key F3 {
  setTimer (t23, 0, 1250*1000 ); // set timer t23 to 1.250 milliseconds
}

on timer t1 {
  write("F1 was pressed 200ms ago");
}

on timer t23 {
  write("F2 was pressed 2 sec ago or F3 1250000 nsec ago");
}

setTimerCyclic

功能:设置一个循环计时器,循环调用定时器

t:毫秒定时器或秒定时器(timer&msTimer),在variables中定义的定时器

firstDuration:启动定时器起始时间

period:计时器在到期时重新启动的时间,周期时间以毫秒为单位

periodInNs:计时器在到期时重新启动的时间,,周期时间以纳秒为单位

variables {
  msTimer timer1;
  Timer t23;
  message 0x100 msg1;
}
on timer timer1
{
  output(msg1);
  write("执行timer1内部内容,发送0x100报文");
}
void send_msg1()
{
    //以周期为20ms的周期发送0x100
    setTimerCyclic(timer1, 20)
}
void send_msg2()
{
    //等待100ms后以周期为20ms的周期发送0x100
    setTimerCyclic(timer1, 100,20)
}

cancelTimer

功能:停止正在激活的定时器

t:毫秒定时器或秒定时器(timer&msTimer),在variables中定义的定时器

variables {
  msTimer timer1;
  Timer t23;
  message 0x100 msg1;
}
on timer timer1
{
  output(msg1);
  write("执行timer1内部内容,发送0x100报文");
}
void send_msg1()
{
    //以周期为20ms的周期发送0x100
    setTimerCyclic(timer1, 20)
}
void send_msg2()
{
    //等待100ms后以周期为20ms的周期发送0x100
    setTimerCyclic(timer1, 100,20)
}
void stop_msg()
{
    //停止周期发送报文0x100
    cancelTimer(timer1);
}

timetoelapse

功能:计时器超时并调用事件过程之前所需的时间

返回一个值,该值指示在调用计时器事件过程之前还要经过多少时间。对于Form 1,时间值以秒为单位返回;对于Form 2,时间值以毫秒为单位返回。如果计时器未激活,则返回-1;计时器事件过程本身也是如此。

t:毫秒定时器或秒定时器(timer&msTimer),在variables中定义的定时器

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

isTimerActive

功能:返回值指示特定计时器是否处于活动状态,在调用setTimer函数和调用ontimer事件过程之间就是这种情况。

t:毫秒定时器或秒定时器(timer&msTimer),在variables中定义的定时器;

返回值:如果计时器激活状态则为1;否则为0。0也在计时器事件过程中返回。

timer t;
write("Active? %d", isTimerActive(t)); // writes 0
setTimer(t, 5);
write("Active? %d", isTimerActive(t)); // writes 1

以上是CAPL相关定时器的所有常用函数,欢迎大家评论区交流!!!

  • 7
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

车载网络测试

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值