CAPL 概述
CAPL 全称为 Communication Access Programming Language,即通信和访问编程语言。它是Vector公司专门为CANoe 开发环境设计的编程语言,在语法和概念上和C语言类似。
CAPL 开发环境
CANoe 自带 CAPL 开发环境 – CAPL Browser。用户可以在CANoe主界面的 Tools 功能区点击 CAPL Browser 图标打开,创建一个新的 CAPL 程序文件。
CAPL 基础
1 数据类型
由于 CAPL 是一门类 C 语言,因此其基本数据类型跟 C 语言比较相似。但也有一些比较特殊的地方。
下面是常用的一些基本数据类型:
数据类型 | 名称 | 注释 |
无符号整型 | byte | unsigned,1个字节 |
word | unsigned,2个字节 | |
dword | unsigned,4个字节 | |
有符号整型 | int | signed,2个字节 |
long | signed,4个字节 | |
int64 | signed,8个字节 | |
浮点型 | float | 单精度,8个字节 |
double | 双精度,8个字节 | |
CAN报文 | message | 报文 |
定时器 | Timer | 秒 |
msTimer | 毫秒 | |
单个字符 | Char | 1个字节 |
其中,报文(CAN/LIN message)是车载网络最基本的构成部分,使用关键字message 来声明变量。当使用 message 声明报文变量时,默认为 CAN 报文变量。当有数据库支撑的时候,一个完整的声明应该包括message ID或message name。
下面是 CAN 报文数据相关信息:
关键字 | 描述 |
CAN | CAN报文传输的逻辑通道 |
ID | CAN报文标识符 |
name | 报文在dbc文件中的名称 |
DIR | 报文传输方向:TX/RX |
RTL | 远程帧标志位:0(数据帧),1(远程帧) |
DLC | 报文的数据长度:有效值范围0~15 |
Byte(x) | 数据字节位:有效值范围0~63(8~63仅适用于CAN-FD) |
示例:
2 程序结构
一个完整的 CAPL 程序由4个部分组成:头文件、全局变量声明、事件处理和自定义函数。
3 头文件
为了增强 CAPL 代码的复用性,CAPL提供了*.cin文件(callback interface file)。用户可以将基本的函数接口按照不同类型,分别定义在各自的*.cin文件中,然后再在不同的*.can文件中包含所需要的*.cin文件,从而形成二层引用结构。同时,也可以在*.cin文件中包含其他*.cin文件,进而形成多层引用结构。
4 全局变量声明
CAPL 跟 C 语言一样,变量的作用域和生命周期仅限于变量声明的函数体(即大括号范围)内。CAPL 在每个程序的开始都提供 了variables 区域给用户声明全局变量。
在此部分声明的全局变量的生命周期从仿真开始持续到仿真结束,其作用域为整个CAPL 文件。
5 事件处理
CANoe 主要是用来对 CAN 通信网络进行建模、仿真、测试和开发的一种工具。作为 CANoe 的辅助语言,CAPL 采用了面向事件的机制来满足这样的需求。
CAPL 针对不同情况,对事件进行了分类。包括:系统事件、CAN 控制器事件、CAN 报文事件、CAN 信号事件、定时事件、键盘事件、错误帧事件、环境变量事件、系统变量事件、诊断事件。
下面整理了一些常用的事件:
6 自定义函数
除系统事件外,CAPL 还支持自定义函数,语法和 C 语言类似。
示例:
代码示例
CAPL的事件函数非常多,也是CAPL语言的关键,这里简单列举几个常用的事件,方便大家参考。
CAN报文事件
定时事件
键盘事件
总结
CAPL 是一款面向事件的类C语言。在学习CAPL的过程中,应该重点关注事件函数。通过事件函数,结合测试用例,编写相关测试脚本,辅助测试。
本文参考资料《CANoe开发从入门到精通》
面向“十四五”,车联网已经进入应用部署的新时期。中国信息通信研究院发布的《车联网白皮书》显示,我国车联网产业跨行业融合带动应用部署模式向纵深发展,车联网产业在“车—路—云—网—图”各方面均呈现良好发展势头。梆梆安全研究院整理车联网检测系列文章,希望在促进汽车、交通等传统产业转型升级,以及促进形成数字经济发展的新产业集聚方面起到积极作用。未来,梆梆安全将筑牢通信安全、数据安全和网络安全基础底座,推进车联网产业迈入应用部署的新时期。