中文  |  English
所在位置:市场活动 > 客户案例与技术文章

CAPL编程语言快速入门

前言


提到CAPL,相信各位一定不陌生,它是由Vector公司开发的类似于C语言的面向过程编程语言,是CANoe和CANalyzer中可用的编程语言。CAPL中程序块的执行由事件控制,在专用的编译器中开发和编译,这样可以访问数据库中的所有对象以及系统变量,作为汽车电子工程师,在工作中会经常用到。

CAPL可以在CANoe界面Tools>>CAPL Browser中打开。

图片1.png

图1 CAPL打开方式


CAPL界面由功能区、程序框架浏览树、输出窗口、编辑区、访问区五部分组成。

图片2.png

图2 CAPL界面


顾名思义,程序编辑区就是编写CAPL脚本的区域;程序架构浏览树起目录的作用,可以把编辑区定位到编写的事件或函数类型的语句;输出窗口可以输出编译过程中的事件和使用搜索时定位到的结果;访问区能够访问到CANoe工程加载的数据库中的信号、创建的系统变量以及CAPL函数库中的语句,直接从右侧访问区拖拽到中间编辑区使用(注意:工程创建路径中不能有中文,否则访问不到数据库文件)。

功能区由五部分构成,首先是File菜单栏,与大多数软件相同,它是文件创建、保存、加载、设置等功能区域。

图片3.png

图3 File菜单栏


Home功能区提供了CAPL编译常用功能,包括代码编译、查找、替换、屏蔽、取消屏蔽等功能。

图片4.png

图4 Home功能区


Filter功能区的作用是管理CAPL的函数库,可以在函数访问区中屏蔽掉不需要的函数。

图片5.png

图5 Filter功能区


Debug功能区是调试的区域,提供了一些基本的调试操作,一般情况下不通过debug模式来调试脚本。基本上编译一次,存在错误可以通过Output输出窗口获得错误类型并进行更改。如果脚本编译成功之后,仍然不能满足测试步骤的输出,一般会使用Write窗口进行调试。

图片6.png

图6 Debug功能区


Layout功能区主要是针对CAPL用户的页面展示。例如进行水平分区、垂直分区等操作方便用户进行脚本编写。

图片7.png

图7 Layout功能区



CAPL应用场景



1.节点仿真

关联Simulation Setup中的ECU节点,实现ECU节点仿真和整车网络仿真。

图片8.png

图8 Simulation Setup窗口


2.测试功能

关联Simulation Setup中的Test Module模块或是Test菜单中的Test Setup,结合TSL(Test Service Library,测试服务库)进行测试功能开发。

图片9.png

图9 Test Setup窗口


3.分析功能

关联Measurement Setup窗口功能模块中的Program Node,实现总线过滤、分析功能。

图片10.png

图10 Measurement Setup窗口



CAPL脚本结构



一个完整的CAPL脚本由三部分组成:变量、各种事件和自定义函数。

图片11.png

图11 CAPL的三部分


CAPL的事件类型包含三种:总线事件、属性事件、时间事件。CAPL常用的事件类型如下图所示。

图片12.png

图12 Measurement Setup窗口



CAPL常用函数



下面以CANoe中Easy工程的light.can脚本为例介绍CAPL中的常用函数,该脚本与Panel联用实现转向灯仿真。

图片13.png

图13 声明全局变量


上图是CAPL中的全局变量声明,其中 ‘msTimer’为声明以ms为单位的计时器;‘const int’为声明int类型的常值变量,该变量的值无法改变;‘int’为声明int类型的变量,该类型变量有符号,长度为2字节。

图片14.png

图14 系统事件


‘on start’是系统事件,测量开始执行会触发该事件,也就是点击Start按钮触发。

图片15.png

图15 CAN消息事件


‘on message’是CAN消息事件,接收到指定消息时执行。‘on message LightState’是对名字为LightState的报文反应,除直接使用字符串外,还可以使用报文ID指定触发报文。‘on message 123’是对ID为123(dec)的报文反应;‘on message 0x123’ 是对ID为123(hex)的报文反应;‘on message *’是对所有的报文反应;‘on message 100-200’是对ID为100-200间的报文反应。

图片16.png

图16 系统变量事件


‘on sysvar sysvar’是系统变量事件,指定的系统变量值改变时执行。与之相对应另一个系统变量事件是‘on sysvar_update sysvar’,指定的系统变量值更新时执行。

‘setTimer(msTimer t,long duration)’是设置定时器函数,他有两个输入参数,第一个为声明的定时器变量,第二个是设定的时间。‘cancelTimer(msTimer t)’是取消定时器函数,入参为定时器变量,该函数的作用为取消设定的定时器。

图片17.png

图17 时间事件


‘on timer’为时间事件,定时时间超过时执行,它与设置定时器函数联用。定时器通常应用在实现某个任务循环,在时间事件中写入一个设置定时器函数实现循环。

图片18.png

‘on key’为键盘事件,被指定的键按下时执行。该事件常用于脚本调试。

此外,‘write()’函数在调试脚本中也常使用,该函数基于C语言中的‘printf()’函数,可以将文本消息输出在write窗口中。



总结



北汇信息作为Vector中国的合作伙伴,始终专注于汽车电子领域的新技术和新产品,为整车厂和零部件企业提供完整的研发、测试解决方案,为工程师在汽车领域提供“趁手装备“!

注:图片来自Vector。