CAPL是CAN匯流排訪問編程語言,在汽車電子開發中運行十分廣泛,類似C語言,同時是基於事件建模的語言,事件類型包含三種:

  • 匯流排事件
  • 屬性事件
  • 時間時間

CAPL時間類型可以從一張表格清楚表示,圖片素材來源網路

1. 和時間相關用法

on timer myTimer //表示對myTimer設定的時間到反應

msTimer myTimer; //聲明瞭一個ms定時器,定時單位是毫秒

timer myTimer; //聲明瞭一個以秒為單位的定時器;

定時器設置:

setTimer(myTimer,20); //將定時器設置為20ms,並啟動myTimer函數裏的動作一次

setTimerCyclic(myTimer,1); //設置定時器myTimer為一個1s為週期的循環定時器;

cancelTimer(myTimer); //停止定時器myTimer

需要執行該時間時間的函數寫法:

myTimer
{
tester.dlc =8;
tester.byte(0) = 0x02;
tester.byte(1) = 0x10;
tester.byte(2) = 0x03;
tester.byte(3) = 0x00;
tester.byte(4) = 0x00;
tester.byte(5) = 0x00;
tester.byte(6) = 0x00;
tester.byte(7) = 0x00;
output(tester);
}

2. 消息鍵盤事件

on message 0x7E0 //監測到0x7E0報文的反應

on message UDSReqeust // 對UDSRequest反應

on message CAN1.123 // 對CAN1通道收到報文123的反應

on message * //對所有消息的反應

on message 0x7E0-0x7E8 //對0x7E0-0x7E8 之間報文的反應

on key『F』 // 按鍵盤F時觸發動作

on key Ctrl-F1 //按Ctrl+F1 觸發動作

對於以上兩種事件類型是常用到的功能,能滿足絕大部分需求。

3. CAPL中數據類型

無符號

  1. byte (1個位元組)
  2. word (2個位元組)
  3. dword(4個位元組)

有符號

  1. int (2個位元組)
  2. long (4個位元組)

浮點型

  1. float
  2. double

4. 消息的申明

message 0x7E0 i14229_extend;

如果鍵盤時間出發送報文

on key a
{
i14229_extend.dlc = 8; //表示長度
i14229_extend.byte(0) = 0x02; //第0個
i14229_extend.byte(1) = 0x10;
i14229_extend.byte(2) = 0x03;
i14229_extend.byte(3) = 00;
i14229_extend.byte(4) = 00;
i14229_extend.byte(5) = 00;
i14229_extend.byte(6) = 00;
i14229_extend.byte(7) = 00;
output(i14229_extend); //發送該報文
}

如果接收到則作出反應並發出另一幀

on message 0x7E8
{
//extend session
if((this.BYTE(1) == 0x50) || (this.BYTE(2) == 0x03))
{
i14229_seca.dlc = 8;
i14229_seca.byte(0) = 0x02;
i14229_seca.byte(1) = 0x27;
i14229_seca.byte(2) = 0x01;
i14229_seca.byte(3) = 00;
i14229_seca.byte(4) = 00;
i14229_seca.byte(5) = 00;
i14229_seca.byte(6) = 00;
i14229_seca.byte(7) = 00;
output(i14229_seca);
}
}

5. CAPL完整結構

通常可由三部分組成

  1. 定義全局變數
  2. 事件過程
  3. 自定義函數塊

推薦閱讀:
相關文章