整理的CAPL详细内容

CAPL(Communication Access Programming Language)是Vector公司的CANoe编程语言,类似于C语言,用于仿真节点和模块。CAPL的特点包括函数重载、事件驱动编程等,可用于仿真事件报文、定时器事件、信号事件等。CAPL程序由头文件、全局变量、事件处理和自定义函数组成。事件处理中,系统事件如preStart、start等在特定时刻执行,消息事件如on message则在接收到特定报文时触发。此外,CAPL支持键盘事件、定时器事件,以及环境和系统变量事件,实现与CANoe的交互和自动化测试。CAPL的变量包括全局和局部,常量可以是整型、浮点数、字符等,并提供了丰富的运算符。

注:大部分内容来自全网可见渠道!!

CAPL

 capl简介

CAPL(Communication Access Programming Laguage)语言它是Vector公司专门为CANoe开发环境设计的编程语言,在语法和概念上与C语言类似。借助CAPL,用户可以编写程序并应用到网络的各个节点上。

CAPL是类C语言,语法其实与C语言很相似,但同时又包含了一些C++的特性,CAPL语言针对的主要是一些复杂状态情况下的一些输入输出的编写,如果简单的话,我们直接绑定信号就可以了。但是如果我们信号需要转变,或者说进行一些运算,然后再输出的话,我们的CAPL就会派上用场。

应用于Vector CAN工具节点的编程,是基于事件建模的语言;可以使用write()函数进行调试,用于将调试信息输出到CANoe的write窗口上;通过output()函数进行指定报文的发送;通常是通过环境变量事件与CANoe面板进行关联,实现交互;

例如,模拟远程启动空调系统时,需要检查引擎状态等,仅使用数据库和仿真面板还远远不够。这时CANoe就需要使用自带的CAPL通过编程来实现对应的功能。CAPL既能够通过编程实现节点的仿真,也可以在数据分析、测试等方面发挥很大的作用,通过与外界系统的交互,实现仿真、诊断和测试的自动化。

 CAPL用途

CAPL是CANoe的灵魂,因为毕竟是任何的硬件软件才是控制硬件的核心,然后使用CANoe可以满足仿真分析测试诊断的各种复杂要求。CAPL主要用途有以下几点:

(1)使用易于理解的编程语言来仿真节点或模块;

(2)仿真事件报文、周期报文或者附加条件的重复报文;

(3)使用PC键盘模拟操作按钮等人工操作事件;

(4)仿真节点的定时或网络事件;

(5)仿真多个时间事件,每个事件有自己的特定行为;

(6)仿真普通操作、诊断或生产操作;

(7)仿真物理参数或报文的变化;

(8)生成错误帧,评估模块和网络软件处理机制;

(9)仿真模块或网络错误来评估相关的防错机制;

(10)提供网络测试、诊断等功能测试库函数。

第一个就是用便于理解的语言来仿真节点或模块,这就是我们的CAPL语言的就是简单之处。

第二个就是仿真事件报文周期或者附加条件的重复报文。这个也比较好理解,就是我们本身CAPL就为了总线通讯编程语言,总线里面肯定有一些报文或者周期报文或者说报文相关的一些属性,这时候我们就可以很方便地来添加。

第三个就是我们可以通过 Pc按键来模拟人工操作事件,这样的话就大大减少我们一些外设对采集方面的要求,我们直接通过按键来触发我们ECU里面的一些动作就可以了,就不用外设直接接到ECU里面,然后通过外设来操作我们的ECU仿真ECU。

第四个就是我们仿真节点的定时换网络事件,这也它是针对总线的总线,肯定是有网络事件的,所以我们开发里面有一些针对网络事件的函数,可以轻松做出来。

第五个就是仿真多个时间事件,每个事件都有自己的特定行为,这就是我们CAPL就是基于事件来处理一些或者说产生一些事件。

第六个就是仿真普通操作诊断和生产操作,操作就比较好仿真,按键也可以仿真,或者说我们通过报文输入也可以仿真,诊断我们也就CAPL里面有很多诊断函数,通过自动的输入诊断指令,也可以达到我们仿真的目的。

第七个就是仿真物理参数或者报文的变化,物理参数主要是一些电压电流什么的,因为它一般上都会转移到电压或电流,我们 CAPL也会通过采集我们硬件里面的电压信号,来输出我们的报文,或者说来使报文产生变化。

第八个就是生成错误帧评估模块和网络软件处理机制。这个也比较好理解,就是我们开发里面有很多针对总线的一些故障处理,出故障产生的函数,通过这些函数来模拟故障,来评价我们的 ECU软件的网络管理软件。

第九个就是仿真模块或网络错误来评估相关的防错机制,其实跟第八相似原理都是通过故障注入的模式来仿真,或者说来测试我们的ECU对这些故障产生了一些防错和处理。

第十个就是提供网络测试诊断等测试款函数,这就是我们CAPL最强大的地方,它有完备的库函数,它的库函数针对总线的各个方面,所以我们才能很方便地上手来测试或者仿真我们的ECU等等,

 CAPL特点

CAPL类似C语言,与C语言在语法和结构上有很多相同之处,但

也有一些其特殊的地方(主要表现在函数声明和调用)。

(1)未定义返回类型,默认为void类型;

(2)像C++一样允许空的参数列表;

(3)像C++一样允许函数重载;

(4)参数检测与C++中一样;

(5)CAPL提供一些自带的库函数;

(6)CAPL编译时不对自带的关键字和自带的函数名做区分。

CAPL页面简介

File菜单主要用于对代码文件的操作,具体内容如下表

Home功能区: 提供CAPL编译常用功能,包括代码编译以及编译等操作

Filter功能区: 管理CAPL函数库,可在函数浏览器中屏蔽掉不需要的函数库

Debug功能区: 提供CAPL编程常用功能,包括代码编译以及变异操作等

Layout功能区:设置各子窗口的显示模式

编辑区的左侧部分是一个导航区,用户可以便捷地查看各种变量、事件、函数的声明和定义,单击这些对象,可以快速跳转到编辑区对应的代码段。编辑区为一个文本编辑器,是用户编写代码的区域。

CAPL注释,变量,常量,运算符

注释规则:

CAPL语言的语法与C语言基本相同

注释

//(单行注释)放置在需要注释的语句之前,注释单行

/*(多行注释)注释起始符,其后的内容被注释

*/注释结束符,结束由/*开始的注释

事件过程

分号  语句结束符

大括号

变量:

  1. 变量名、函数名和数组名可以由字母和数字和下划线组成,但是首字母不能是数字。
  2. 使用CAPL编写时,一定要记住,对于用户定义的变量,小写字母和大写字母是不同的变量。
  3. 但是CAPL支持的关键字是不区分大小写的,比如 INT a; 和int a;是一样的
  4. 关键字不能用来命名变量或函数。CAPL使用C编程中保留的关键字语言。但是,CAPL不支持一些常见的C关键字。
  5. 不能将CAPL的函数名和对象名用作变量
  6. 变量名的字符长度最好不要超过32个编译系统只能识别前32个字符)

变量名最好具有易读性,见名知意

简单来看变量的声明定义以及规则也不多,类似与c语言里的规则。虽然函数名和对象名不属于关键字,CAPL也不允许将它们用作变量名,因为使用同一个名称用作函数名和变量名会把编译器搞糊涂。

比如abs,它是CAPL的一个库函数,用来返回参数的绝对值,如果在程序中同时定义了一个abs变量,这时编译器无法有效辨别,编译将无法通过。

对于有效性,主要是指变量名的字符长度最好不要超过32个,编

译系统只能识别前32个字符,也就是说,前32个字符相同的两个不同变量将被编译系统认为是同一个变量。对于易读性,主要是指在CAPL编程中提倡使用有一定含义的变量名,能做到“见名知意”。如果变量表示ECU的供电电压,可以将其命名为voltage_of_power或VoltageOfPower,而不要将其命名为i或者po。

必须强调的是,与C语言不同,CAPL语言中为了用户使用的方便灵活,编译器不区分CAPL自带的关键字和函数名的大小写,例如DWORD、dword和Dword在代码中使用效果一样,所以用户定义变量时也需要避免此类情况。

这里需要指出的是,以上命名规则同样适用于函数名、数组名、结构体等。

全局变量与局部变量

在CAPL中,全局变量需要被声明在variables部分,同时可以使用直接赋值方法进行初始化。如果没有初始化,编译器会执行自动初始化,默认值为0。全局变量的作用域包括整个CAPL文件以及与此文件有链接的其他CAPL文件。

与C语言不同,局部变量在CAPL中总是被静态的创建。这意味着初始化值在程序体启动时执行,当再次进入程序时,局部变量被假定是上一次跳出程序时的值。局部变量的作用域,仅限于当前函数体范围

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值