当前位置: 代码迷 >> 综合 >> CAPL 脚本中 定时器 ,按键触发事件的使用
  详细解决方案

CAPL 脚本中 定时器 ,按键触发事件的使用

热度:26   发布时间:2023-09-20 14:02:37.0

总览

  • 事件类型种类
    • 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
.CAPL 脚本中 定时器 ,按键触发事件的使用

System

CAPL 脚本中 定时器 ,按键触发事件的使用

Value Objects

CAPL 脚本中 定时器 ,按键触发事件的使用

CAN

CAPL 脚本中 定时器 ,按键触发事件的使用

Diagnostic

CAPL 脚本中 定时器 ,按键触发事件的使用

Flexray

CAPL 脚本中 定时器 ,按键触发事件的使用

测量系统事件(on start)

这四个事件分别在工程开始和结束的时候分别调用

  • on preStart :程序仅用于初始化变量、在写窗口中显示消息和从文件中读取数据。性都是可用的。但是不可以在总线上使用output()类似的输出函数。
  • on preStop:功能可以用来执行一些在测量停止生效之前必须完成的最终动作。
  • 这四个事件被执行的先后顺序是 on preStart ,on start,on preStop,on stopMeasurement

CAPL 脚本中 定时器 ,按键触发事件的使用
新建一个can文件,创建四个事件,然后执行 run ,stop
CAPL 脚本中 定时器 ,按键触发事件的使用
在write输出窗口可以看到四个事件被执行的顺序。
CAPL 脚本中 定时器 ,按键触发事件的使用

键盘响应事件(on key )

CAPL对键盘的26个字母(区分大小写),和10个数字,以及下图的特殊键都能响应。
CAPL 脚本中 定时器 ,按键触发事件的使用
新建 test.can 如下图创建了一些 onkey
CAPL 脚本中 定时器 ,按键触发事件的使用
输出结果:
CAPL 脚本中 定时器 ,按键触发事件的使用

定时器(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的信息。
CAPL 脚本中 定时器 ,按键触发事件的使用