在capl中,關鍵字具有特殊的含義和用途,因此,不得將關鍵字用作變量或函數的名稱
1.聲明數據類型的關鍵字:可以用不同的關鍵字,聲明或引用不同類型的數據
- byte 聲明一個字節得變量
- word 聲明兩個字節得變量
- dword 聲明四個字節得變量
- int 聲明兩個字節的整數
- long 聲明4個字節的變量
- qword 聲明8個字節的變量
- char 聲明一個字符串
- float 聲明一個浮點數,8個字節
- double 聲明一個浮點數,8個字節
2.定義一個結構體或枚舉類型
struct Data {
int type;
long l;
char name[50];
};
enum State { State_Off = -1, State_On = 1 };
3.聲明消息/信號
1.capl程序要在總線上傳輸的CAN報文是用關鍵字message聲明的
兩種聲明方式:
- 用dbc里的消息名聲明消息
-
message Ignition_on msg_wakeup; 用dbc里的消息名聲明消息
message 0x5f0 msg_wakeup; 用消息id聲明消息
linFrame :capl程序要在lin線上傳輸的lin幀是用關鍵字linFrame聲明的
dbMsg * 聲明一個dbc類型的消息
這里有三種使用方式:
1.如果你想傳入一個dbc里的message名作為形參,可以使用這種方式,調用時直接把dbc里的消息傳進去即可
void function1(dbMsg * dbcmsg)
2.也可以先聲明一個dbc消息,然后用=把dbc里的消息EngineData賦值給它
dbMsg * dbcmsg; dbcmsg = EngineData;
3.還可以用函數lookupMessage函數賦值dbc消息,傳入的字符串是dbc里消息名
dbMsg * dbcmsg;
dbcmsg = lookupMessage("EngineData")
還有dbNode等關鍵字,用來聲明dbc里的其他參數
signal *
這里也提供了一個lookupSignal的方法
signal * dbcsignal;
dbcsignal = lookupSignal("EngineSignal");
serviceSignal *
用來聲明數據庫里SOME/IP服務信號,也有一個lookup的方法
類似的還有很多,比如:serviceSignalData */serviceSignalNumber * /serviceSignalString *
4.聲明診斷服務
diagRequest
diagRequest Door.defaultSessionStart req;
diagResponse
diagResponse Door.defaultSessionStart resp
5.聲明系統變量或計時器
sysvar * :聲明系統變量 類似的還有:sysvarInt */sysvarFloat */sysvarString *等
timer :聲明一個定時器,時間單位為秒 類似的還有:msTimer,聲明毫秒級定時器
timer t_sendmsg;
6.定義一個test case/test function
定義一個test case
testcase mytestcase()
{
}
testfunction :定義一個test function,它能被用在test case或test sequence中
7.其他
this :
在接收CAN對象或系統變量或環境變量的回調事件中,可以用this來指定這個接收的對象
on message 100
{
byte byte_0;
byte_0 = this.byte(0);
$
如果想直接給信號賦值,必須要在信號的前面加一個$符號
$EngineSpeed = 500.0;
.raw :讀取信號的原始值 類似的還有.phys,讀取信號的物理值
EngineMsg.EngineSpeed.raw
if, else, switch, case, default, for, while, continue, break, return都是關鍵字
