注:大部分内容来自全网可见渠道!!
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语言基本相同:
注释
//(单行注释)放置在需要注释的语句之前,注释单行
/*(多行注释)注释起始符,其后的内容被注释
*/注释结束符,结束由/*开始的注释
事件过程
分号 语句结束符
大括号
变量:
- 变量名、函数名和数组名可以由字母和数字和下划线组成,但是首字母不能是数字。
- 使用CAPL编写时,一定要记住,对于用户定义的变量,小写字母和大写字母是不同的变量。
- 但是CAPL支持的关键字是不区分大小写的,比如 INT a; 和int a;是一样的
- 关键字不能用来命名变量或函数。CAPL使用C编程中保留的关键字语言。但是,CAPL不支持一些常见的C关键字。
- 不能将CAPL的函数名和对象名用作变量
- 变量名的字符长度最好不要超过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中总是被静态的创建。这意味着初始化值在程序体启动时执行,当再次进入程序时,局部变量被假定是上一次跳出程序时的值。局部变量的作用域,仅限于当前函数体范围

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

6415

被折叠的 条评论
为什么被折叠?



