.CAPL是基于C语言开发的,专门用于CANalyzer和CANoe工具环境,但是CAPL简化了C语言,移除了复杂的指针概念,和一些不常用的关键字。
2.CAPL 脚本是基于事件驱动的,任何事件都有可能触发CAPL脚本的执行,比如,按键事件,定时器事件,执行测试等;如果没有事件发生,那么CAPL程序是“闲置的”。
3.编写CAPL 的IDE叫做 CAPL Browser .
4.字符串数据类型在CAPL中不支持.
5.使用CAPL编写时,小写字母和大写字母是不同的变量,但是CAPL支持的关键字是不区分大小写的,比如 INT a; 和int a;是一样的。
6.CAPL 中Variables中定义的是全局变量
- includes : 非事件,引用.cin和dll文件的功能块
- 数据类型float和double都是占8个字节
- 整形可以是十进制和十六进制
- 浮点数可以是十进制数,或者科学计数法
- 字符常量 是用单引号,括起来的一个字符
- 确保字符串数组定义时的大小总是字符串长度 + 1,因为结束符\0也占用一个字符
- CAPL支持使用ASCII字符集
- 如果已经定义过了一个字符串数组,不可以直接给它赋值的,
- 可行的一种方法,是通过CAPL自带的字符串操作函数实现
7.Message使用
message是CAPL独有的数据类型,可以用来仿真,改写,创建报文等,是CANoe 仿真测试的比较核心内容
例子:
/*标准帧*/
message 0xA m1; //用消息id声明can消息 十六进制
message 100 m2; //用消息id声明can消息 十进制
message EngineData m3; //用总线上加载的dbc数据库(EngineData)里消息名称声明can消息
message 0x100 msg1={DLC=8}; //定义消息数据长度
/*扩展帧*/
message 100x msg1; //消息id后面加x,表示扩展帧 十进制
message 0x123456x msg2; //消息id后面加x,表示扩展帧 十六进制
message * msg1; //“ * ” 表示声明一条任何ID的报文(不确定报文ID) 用于存储CAN信息
message * msg1 = { DLC = 8};
/*报文发送至总线上*/
message * msg1;
msg1.dlc = 8;
message.ID = 0x100;
output(msg1); //报文发送至总线上必须要有ID
8.定时器使用
CAPL提供两种定时器: 毫秒计时器(msTimer) 和 秒计时器(timer),必须再全局变量中定义定时器
-
使用一个定时器分一下三个步骤:
- 声明一个计时器变量
- 在事件过程(preStart 除外)或用户定义的函数中预先设置计时器
- 为该计时器定义一个on timer 事件
例子:
/*@!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
}
9.testcase使用
testcase是CAPL语法独有的一种语法模块,常见的调用testcase 的方法有两种 ,一种是XML TestModule
,另一种是CAPL TestModule
10.on key使用
CAPL中键盘事件的定义是基于
On key 'key value'
{
}
的格式来定义的,注意Key value是在单引号中的。
11.必须的工具栏:
- Output :开发的时候,编译可以实时发现脚本的错误信息
- Symbols: 在CANoe中加载的DBC,CDD文件的元素,定义的系统变量等都可以直接这里找的到,随用随查看
- CALP Functions:CAPL内置了很多自己专用的函数,不需要include任何文件,可以在CAPL中直接使用。