.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中直接使用。