添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

事件类型种类

CAPL 脚本是一件基于事件驱动的类c语言。
新建一个test.can。在工具栏 -> Filter 可以根据总线类型,选择出需要的事件类型,除了 system 和 Value Objects 是必须的,其它的都是可选的。我这路因为总线是基于flexray和can的,我就选择了flexray,can 和diagnostics
. 在这里插入图片描述

System

Value Objects

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:ms
  timer timer2; // define timer2 unit:s
on start
  setTimer(timer1,1000); // initialize timer to run for 100 msec
  setTimer(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的信息。
在这里插入图片描述

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。如下如所示 ![在这里插入图片描述](https://img-blog.csdnimg.cn/2020... 首先:用SetTimer开启定时器 //设置定时器更新界面 SetTimer(0, 1000, NULL); //1000为时间间隔 其次:在这里设置响应消息(不然会进不去OnTimer函数对应第一个问题) BEGIN_MESSAGE_MAP(CFIRADlg, CDialogEx) ON_WM_TIMER() END_ME