CAPL語法介紹 (I)
研發處 電動車與驗證工程專案
郭俐君
分機:04-7811222# 2373
信箱: lckuo@artc.org.tw
目錄
• CAPL簡介
• CAPL語法使用
• 建立Message
• 建立事件觸發
– Message Event
– Keyboard Event (Next)
– System Event (Next)
– Timers (Next)
CAPL簡介 (1/7)
• CAPL全名為CAN Access Programming Language
– 一種專用於CANalyzer以及CANoe軟體PC開發的程式語言
– 架構在C語言上的程式語言,因此在語法及概念上CAPL的語法與
C語言類似
– CAPL瀏覽器在進行編譯時,可一次僅編譯一個檔案,不與其他檔
案進行連結,因此除錯較為容易。
– CAPL事件一旦被觸發,對應的CAPL程式便開始執行,事件與事
件間採用分散式的運作模式,彼此並無一定的循序關聯性。
timer expires
Key press
Message received
CAPL事件
CAPL程式
運作
在特定時間 執
行事件程序
使用者鍵入
某鍵時執行
收到某訊息
時執行
Fig:CAPL事件觸發型語言示意圖
CAPL簡介 (2/7)
– 採用樹狀的架構來觸發事件與編譯
• 根據觸發的項目樹狀地往下進行事件的觸發
• CAPL瀏覽器針對不同的觸發事件分列了不同的項目,可根據不同的
項目進行新增,呼叫的方式也僅需要透過函式間的呼叫,e.g. Timer觸
發採用SetTimer()來進行呼叫
CAPL tree
CAN
Message
System
Keyboard
…
…
Timer
Stop
Measurement
Start
PreStart
Timer
…
Timer
Output, write …
Fig:CAPL樹狀架構圖
CAPL簡介--開啟編輯視窗 (3/7)
• 如何開啟CAPL編輯視窗
1
– CAPL瀏覽器的開啟方式為在
CANoe的Simulation Setup視窗
內針對欲編輯的ECU,連續點
擊鉛筆圖案
– 第一次編輯則會出現開啟的.can
檔的畫面,若要新增一個CAPL
檔,則直接於檔名處新增*.can
的檔案名稱及選擇儲存位置,往
後該ECU便會以此*.can檔進行
CAPL語言的執行觸發及動作。
開啟完成後,便會跳出CAPL編
輯視窗。
2
CAPL簡介--編輯視窗架構 (4/7)
• GLOBAL VARIAVLES window
(總體參數視窗):
– 該ECU會使用到的參數皆在此視
窗內進行設定,包含初始值的設
定以及參數的宣告。
• 針對特定Message進行初始值的
設定,以及各訊號內所填入的初
始值。
• 針對時序的使用也須在此視窗內
進行宣告,宣告為msTimer或是
Timer的變數型態,在總體參數
設定的名稱須與Timer內設定的
名稱相符
• EVENTS window (事件視窗):
– 系統的事件(system-specific
event),系統本身該有的動作,
如:系統、CAN控制器、錯誤訊框
(ErrorFrame);
– 使用者定義的事件(User-defined
event),由使用者控制當出現何種
情形時進行事件的觸發及動作,
如:CAN訊息、時序(Timer)、鍵
盤、環境、函數。
• EVENT PROCEDURE window (事件程序視
窗):
– 在事件程序視窗的撰寫前,須先到事件視窗
(EVENTS)新增要編寫的事件項目
• 例如:編寫接收message時的動作程序
– 1.先到事件視窗內CAN message的項目按右
鍵新增(New)一個on message的事件程序
– 2.在EVENT PROCEDURE視窗中會出現on
message,在on message後
處選擇Message form Database。
CAPL簡介--編輯視窗架構 (5/7)
• 範例:編寫接收message時的動作程序
使用database中的
名稱,非參數欄位中
設定的名稱!!
Step 2:在EVENT PROCEDURE
視窗中會出現on message,在
on message後
處直接按右鍵從database選擇
Message form Database。
Step1:在事件視窗內CAN message的項目按
右鍵新增(New)一個on message的事件程序
CAPL簡介--編輯視窗架構 (6/7)
Compiler
All
Compiler
• COMPILER window (編譯視窗):
– 在CAPL程式編輯後,點擊compiler / compiler all鍵,或
按F9,若成功編譯完成會出現compiled的訊息,若編譯出
現錯誤則會在此視窗內提醒。
– ps. Compiler all會將所有CAPL的程式進行編譯。