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