定时器在capl语法中,是一种数据类型,有下面两种方式定义(秒和毫秒)
-
timer
- timer based on seconds
-
msTimer
- timer based on milliseconds
有两个定时器函数:
-
setTimer()
:启动定时器
void setTimer(msTimer t, long duration); // form 1
void setTimer(timer t, long duration); // form 2-
-
cancelTimer()
: 停止定时器
void cancelTimer(msTimer t);
void cancelTimer(timer t);
如上图所示方法,创建两个定时器:
实现功能 on start的时候,启动timer1(1000ms) 和 timer2(10s),1000ms之后触发timer1,打印信息,然后再次重置timer1时间,10s时间到了之后触发timer2打印信息,并取消timer1
variables
char timeBuffer[30];
mstimer timer1;
timer timer2;
on start
setTimer(timer1,1000);
setTimer(timer2,10);
on timer timer1
getLocalTimeString(timeBuffer);
write("%s:timer1 time out",timeBuffer);
setTimer(timer1,1000);
on timer timer2
getLocalTimeString(timeBuffer);
write("%s:timer2 time out",timeBuffer);
cancelTimer(timer1);
输出结果可见每1s,打印一次time1的信息,10s之后打印timer2的信息。

alert(3);
这是事件循环机制,因为js是单线程的,是基于事件循环的。而setTimeout函数是异步的,异步的事件会加入一个队列,会等到当前同步的任务执行完毕后,再执行setTimeout队列的任务。所以,通过设置任务在延迟0毫秒后执行,就能改变任务执行的先后顺序,延迟该任务发生,改变它所调用的函数的优先级,使之异步执行。
1. 下面这段代码,是不会实时获取到输入框里面的内容的。
1. CAPL概述
1.1、CAPL语言特性
CAPL(Communication Access Programming Laguage)语言是类C语言,语法其实与C语言很相似,但同时又包含了一些C++的特性,如this指针、事件等;
应用于Vector CAN工具节点的编程,是基于事件建模的语言;
可以使用write()函数进行调试,用于将调试信息输出到CANoe的write窗口上;
通过output()函数进行指定报文的发送;
通常是通过环境变量事件与CANoe面板进行关联,实现交互;
提供调用dll文
上面的示例通过按键s事件触发,如果不想要这种方式,可以通过on start事件触发,可以实现程序启动即触发定时器。由上面可以看出,on signal事件是只要信号值发生改变时都会触发包括信号从无到有的那一次,也即只第一次发送也会触发,因为这种情况下相当天信号从0变为1。简介:output()函数用于往CAN总线上发送CAN报文,入参为message结构体,发送前需要定义所有相关的参数,比如报文ID,报文dlc,data中各个有效字节的内容等等。上面的示例则可以更简洁的完成一些周期性的操作。
**最近一段时间有几个同行小伙伴问我如何利用CAPL语言开发出ECU与ECU之间的交互通信?**
汽车行业的小伙伴都知道,ECU与ECU之间是通过CAN/LIN线信号交互的,从一个ECU端到另一个ECU之间是经过网关转发,基本链路就是
ECU---GW(网关)---ECU。如下如所示
; //1000为时间间隔
其次:在这里设置响应消息(不然会进不去OnTimer函数对应第一个问题)
BEGIN_MESSAGE_MAP(CFIRADlg, CDialogEx)
ON_WM_TIMER()
END_ME