总览
- 事件类型种类
-
- System
- Value Objects
- CAN
- Diagnostic
- Flexray
- 测量系统事件(on start)
- 键盘响应事件(on key )
- 定时器(on timer)
事件类型种类
CAPL 脚本是一件基于事件驱动的类c语言。
新建一个test.can。在工具栏 -> Filter 可以根据总线类型,选择出需要的事件类型,除了 system 和 Value Objects 是必须的,其它的都是可选的。我这路因为总线是基于flexray和can的,我就选择了flexray,can 和diagnostics
.
System
Value Objects
CAN
Diagnostic
Flexray
测量系统事件(on start)
这四个事件分别在工程开始和结束的时候分别调用
- on preStart :程序仅用于初始化变量、在写窗口中显示消息和从文件中读取数据。性都是可用的。但是不可以在总线上使用output()类似的输出函数。
- on preStop:功能可以用来执行一些在测量停止生效之前必须完成的最终动作。
- 这四个事件被执行的先后顺序是 on preStart ,on start,on preStop,on stopMeasurement
新建一个can文件,创建四个事件,然后执行 run ,stop
在write输出窗口可以看到四个事件被执行的顺序。
键盘响应事件(on key )
CAPL对键盘的26个字母(区分大小写),和10个数字,以及下图的特殊键都能响应。
新建 test.can 如下图创建了一些 onkey
输出结果:
定时器(on timer)
定时器在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
/*@!Encoding:ASCII*/
variables
{
char timeBuffer[30];mstimer timer1; // define timer1 unit:mstimer timer2; // define timer2 unit:s
}
on start
{
setTimer(timer1,1000); // initialize timer to run for 100 msecsetTimer(timer2,10); // initialize timer to run for 100 s
}
on timer timer1
{
getLocalTimeString(timeBuffer);write("%s:timer1 time out",timeBuffer);setTimer(timer1,1000); // reset timer
}
on timer timer2
{
getLocalTimeString(timeBuffer);write("%s:timer2 time out",timeBuffer);cancelTimer(timer1); // cancel timer
}
输出结果可见每1s,打印一次time1的信息,10s之后打印timer2的信息。