提到CAPL,相信各位一定不陌生,它是由Vector公司開發的類似于C語言的面向過程編程語言,是CANoe和CANalyzer中可用的編程語言。CAPL中程序塊的執行由事件控制,在專用的編譯器中開發和編譯,這樣可以訪問數據庫中的所有對象以及系統變量,作為汽車電子工程師,在工作中會經常用到。
CAPL可以在CANoe界面Tools>>CAPL Browser中打開。
圖1CAPL打開方式
CAPL界面由功能區、程序框架瀏覽樹、輸出窗口、編輯區、訪問區五部分組成。
圖2CAPL界面
顧名思義,程序編輯區就是編寫CAPL腳本的區域;程序架構瀏覽樹起目錄的作用,可以把編輯區定位到編寫的事件或函數類型的語句;輸出窗口可以輸出編譯過程中的事件和使用搜索時定位到的結果;訪問區能夠訪問到CANoe工程加載的數據庫中的信號、創建的系統變量以及CAPL函數庫中的語句,直接從右側訪問區拖拽到中間編輯區使用(注意:工程創建路徑中不能有中文,否則訪問不到數據庫文件)。
功能區由五部分構成,首先是File菜單欄,與大多數軟件相同,它是文件創建、保存、加載、設置等功能區域。
圖3File菜單欄
Home功能區提供了CAPL編譯常用功能,包括代碼編譯、查找、替換、屏蔽、取消屏蔽等功能。
圖4Home功能區
Filter功能區的作用是管理CAPL的函數庫,可以在函數訪問區中屏蔽掉不需要的函數。
圖5Filter功能區
Debug功能區是調試的區域,提供了一些基本的調試操作,一般情況下不通過debug模式來調試腳本。基本上編譯一次,存在錯誤可以通過Output輸出窗口獲得錯誤類型并進行更改。如果腳本編譯成功之后,仍然不能滿足測試步驟的輸出,一般會使用Write窗口進行調試。
圖6Debug功能區
Layout功能區主要是針對CAPL用戶的頁面展示。例如進行水平分區、垂直分區等操作方便用戶進行腳本編寫。
圖7Layout功能區
CAPL應用場景:
- 節點仿真
關聯Simulation Setup中的ECU節點,實現ECU節點仿真和整車網絡仿真。
圖8SimulationSetup窗口
- 測試功能
關聯Simulation Setup中的Test Module模塊或是Test菜單中的Test Setup,結合TSL(Test Service Library,測試服務庫)進行測試功能開發。
圖9TestSetup窗口
- 分析功能
關聯Measurement Setup窗口功能模塊中的Program Node,實現總線過濾、分析功能。
圖10MeasurementSetup窗口
CAPL腳本結構:
一個完整的CAPL腳本由三部分組成:變量、各種事件和自定義函數。
圖11CAPL的三部分
CAPL的事件類型包含三種:總線事件、屬性事件、時間事件。CAPL常用的事件類型如下圖所示。
圖12MeasurementSetup窗口
CAPL常用函數:
下面以CANoe中Easy工程的light.can腳本為例介紹CAPL中的常用函數,該腳本與Panel聯用實現轉向燈仿真。
圖13聲明全局變量
上圖是CAPL中的全局變量聲明,其中 ‘msTimer’為聲明以ms為單位的計時器;‘const int’為聲明int類型的常值變量,該變量的值無法改變;‘int’為聲明int類型的變量,該類型變量有符號,長度為2字節。
圖14系統事件
‘onstart’是系統事件,測量開始執行會觸發該事件,也就是點擊Start按鈕觸發。
圖15CAN消息事件
‘onmessage’是CAN消息事件,接收到指定消息時執行。‘onmessageLightState’是對名字為LightState的報文反應,除直接使用字符串外,還可以使用報文ID指定觸發報文。‘onmessage123’是對ID為123(dec)的報文反應;‘on message0x123’ 是對ID為123(hex)的報文反應;‘on message*’是對所有的報文反應;‘on message100-200’是對ID為100-200間的報文反應。
圖15系統變量事件
‘onsysvarsysvar’是系統變量事件,指定的系統變量值改變時執行。與之相對應另一個系統變量事件是‘onsysvar_updatesysvar’,指定的系統變量值更新時執行。
‘setTimer(msTimert,longduration)’是設置定時器函數,他有兩個輸入參數,第一個為聲明的定時器變量,第二個是設定的時間。‘cancelTimer(msTimert)’是取消定時器函數,入參為定時器變量,該函數的作用為取消設定的定時器。
圖16時間事件
‘ontimer’為時間事件,定時時間超過時執行,它與設置定時器函數聯用。定時器通常應用在實現某個任務循環,在時間事件中寫入一個設置定時器函數實現循環。
‘onkey’為鍵盤事件,被指定的鍵按下時執行。該事件常用于腳本調試。
此外,‘write()’函數在調試腳本中也常使用,該函數基于C語言中的‘printf()’函數,可以將文本消息輸出在write窗口中。
注:圖片來自Vector。
總結:
北匯信息作為Vector中國的合作伙伴,始終專注于汽車電子領域的新技術和新產品,為整車廠和零部件企業提供完整的研發、測試解決方案,為工程師在汽車領域提供“趁手裝備“!
-
CANoe
+關注
關注
4文章
65瀏覽量
8620
發布評論請先 登錄
相關推薦
評論