前言
得益于計(jì)算機(jī)的發(fā)明及高速發(fā)展,21世紀(jì)是充滿智能、科技、便捷的世紀(jì)。無人駕駛、人工智能、物聯(lián)網(wǎng),這些概念已耳熟能詳,而它們背后則是利用編程實(shí)現(xiàn)的復(fù)雜邏輯。作為新時代的我們,生活已經(jīng)和“編程“密不可分了,例如常見的C、C++、Python、Java等編程語言。Vector公司與時俱進(jìn),在CANape這款強(qiáng)大的測量和標(biāo)定工具里,采用專門的編程語言——CASL(Calculation and Scripting Language),方便汽車工程師進(jìn)行數(shù)據(jù)分析和開發(fā)。今天我們就來聊聊這位強(qiáng)大又低調(diào)的選手,并和它做個朋友!
CASL的語法與C編程語言非常相似(但也有不同處:CANape不使用指針),允許開發(fā)人員集成自己的C代碼或Simulink模型。所以說,大家在使用之前基礎(chǔ)的C語言編程知識還是要掌握的~為了方便使用,CANape提供了智能感知輸入、代碼塊和各種內(nèi)置函數(shù)組。
圖1智能感知輸入
在CASL中,主要運(yùn)用函數(shù)和腳本,來解決各種不同的任務(wù)。從簡單的計(jì)算,例如,添加信號,直至CANape的自動化。
(Tips: CASL與編程語言CAPL可不一樣哦,后者是在CANoe和CANalvzer環(huán)境中使用的。CAPL是一種面向事件的編程語言,即程序節(jié)點(diǎn)用于指定事件,并在何時執(zhí)行以及反應(yīng)。而CASL是一種信號導(dǎo)向的語言。)
基本概念
1)What Are Functions
在測量過程中,函數(shù)被同步處理,主要用于實(shí)時測量或者對于加載測量文件的各種計(jì)算和應(yīng)用。例如,函數(shù)可以是數(shù)學(xué)公式或程序代碼,其中變量代表信號或參數(shù)。
通常有在線和離線兩種使用場景。
▲Online applications(在實(shí)時測量過程中)
》測量虛擬信號計(jì)算
》允許對外接設(shè)備讀寫
▲Offline applications(訪問現(xiàn)有的測量文件)
》測量文件虛擬信號計(jì)算
》執(zhí)行數(shù)據(jù)挖掘
圖2虛擬函數(shù)使用場景
下面我們來看看函數(shù)的語法結(jié)構(gòu):
圖3函數(shù)語法結(jié)構(gòu)
當(dāng)一個函數(shù)被調(diào)用時,參數(shù)可以被傳遞給函數(shù)。參數(shù)通常作為引用傳遞給函數(shù),因此既可用于輸入,也可用于輸出。
除了通過參數(shù)傳遞從函數(shù)發(fā)出結(jié)果外,還可以使用返回控制結(jié)構(gòu)(return也是關(guān)鍵字)的路徑。默認(rèn)情況下,返回double類型的值,字段或向量(數(shù)組)不允許作為返回值。
CANape對自身預(yù)定義和用戶定義函數(shù)進(jìn)行了區(qū)分,稱為庫函數(shù)和工程函數(shù)。
圖4函數(shù)分類
2)What Are Scripts
腳本是程序代碼的一部分,可在編輯器窗口中編寫,并在調(diào)用時順序處理。腳本用于自動化或控制CANape中的聯(lián)合活動,例如測量和其他系統(tǒng)相關(guān)序列的開始和停止,它獨(dú)立于測量運(yùn)行。它們也可以用來調(diào)用在Microsoft Visual Studio或MATLAB/Simulink中生成的外部模型。
圖5腳本示例
此外,可以在CANape運(yùn)行時,使用命令行選項(xiàng)控制腳本行為。
兩者區(qū)別:
1.流程優(yōu)先級不同。腳本以較低進(jìn)程優(yōu)先級執(zhí)行,相對于測量是異步運(yùn)行的。另一方面,函數(shù)以高進(jìn)程優(yōu)先級執(zhí)行,并與測量同步執(zhí)行。與函數(shù)相比,腳本具有更廣泛的預(yù)定義函數(shù)組,如附加文件和腳本函數(shù)、Flash函數(shù)、診斷和數(shù)據(jù)挖掘函數(shù)。
2.與腳本不同,函數(shù)不能使用斷點(diǎn)進(jìn)行調(diào)試,因?yàn)樗鼈兙哂懈邇?yōu)先級。不過我們可以使用以下命令在Write窗口中輸出調(diào)試信息Write()、Writef()、Print()或Printf()。
3.腳本不需要函數(shù)頭和函數(shù)體。程序代碼可以簡單地直接寫入編輯器,然后按編碼順序處理。
4.函數(shù)必須是函數(shù)編輯器導(dǎo)出格式(*.cne)或者是ASCII文本格式(*.txt);腳本必須為腳本格式(*.scr or *.cns).
5.函數(shù)可以被保存到工作目錄中的CANape.ini配置文件中,但腳本文件被保存為獨(dú)立文件。
說了這么多,我們?nèi)绾尉庉嬆兀?/p>
如何編輯
全局變量、函數(shù)、腳本均可在CANape的函數(shù)編輯器中創(chuàng)建、編輯和編譯。函數(shù)編輯器主要分為樹視圖、列表視圖、編輯器窗口、消息窗口,可以在CANape中直接打開。
圖6函數(shù)編輯器
變量類型:變量是特定類型值的占位符。變量可以在腳本和函數(shù)中聲明和定義,主要分為全局變量和局部變量。
全局變量是CANape配置中的所有函數(shù)和腳本都可以使用的特殊數(shù)據(jù)對象,局部變量僅在各自的函數(shù)或腳本中有效。
(Tips:全局變量是靜態(tài)的。它們在兩個測量之間以及加載項(xiàng)目之后保留它們的值。當(dāng)保存配置或項(xiàng)目時,它們的當(dāng)前值保存在參數(shù)文件中,并在加載項(xiàng)目時重新加載。)
參數(shù)總是作為通過引用傳遞給函數(shù),可以使用具有相同作用var和double前綴來修飾。
圖7相同作用前綴
關(guān)于數(shù)據(jù)類型就不做贅述了,大家自行百度啦。
接下來重點(diǎn)介紹一些實(shí)用小技巧:
使用頻率較多的簡單語句:
>測量過程開始/停止:Start();Stop();
>測量文件信號導(dǎo)入:FILE1.CCPsim.ampl;
>測量和標(biāo)定:x = CCPsim.ampl;
CCPsim.ampl = x;
>發(fā)送報文:CAN1.SendMessage(0x1a1,0xff,0x7f);
>延時(等待)3秒:Sleep(3000);
>測量緩存區(qū)或文件中對象信號值的數(shù)量:sizeof();
圖8數(shù)量獲取
>所選對象特定的測量值進(jìn)行讀寫訪問:mbuffer[ ];(常與sizeof結(jié)合使用)
圖9讀寫特定值
>輸出:print(); write();
圖10常見輸出格式
可以從一個函數(shù)中調(diào)用另一個函數(shù):
圖11函數(shù)調(diào)用函數(shù)
從一個腳本中調(diào)用另一個函數(shù):
圖12腳本調(diào)用函數(shù)
從一個腳本中調(diào)用另一個腳本:
圖13腳本調(diào)用腳本
正確終止函數(shù)和腳本:
如果參數(shù)達(dá)到了某個值,則可以使用控制結(jié)構(gòu)cancel來終止函數(shù)或腳本。如果在函數(shù)中使用了cancel命令,該函數(shù)將在沒有返回值的情況下終止。如果在子函數(shù)或腳本中使用了cancel命令,則腳本將立即終止。
例如下圖,如果在調(diào)用的對話框中選擇[Yes](返回值為0),腳本將終止。
圖14終止腳本
全局變量初始化:
可以在腳本運(yùn)行時調(diào)用,以每次自動初始化全局變量的值。
圖15初始化腳本
以上可能是一些常見的例子,由于編程語句體量龐大,工程師們需要根據(jù)功能需求來選擇語句。在CANape中右鍵可以導(dǎo)入自動的庫函數(shù),根據(jù)功能分類,對于不熟悉語句,鼠標(biāo)懸停后按F1,可以彈出help文檔,其中會顯示使用例子。
圖16庫函數(shù)
圖17萬能help文檔
在我們編寫程序前,我們需要考慮以下5個步驟:
1.需要用程序的主要任務(wù)2.決定如何以及何時執(zhí)行程序3.開發(fā)合適的代碼4.編譯5.測試。
編程世界很大,謹(jǐn)此拋磚引玉。小編領(lǐng)進(jìn)門,修行還是看個人。
古人云,工欲善其事,必先利其器;北匯信息作為Vector中國的合作伙伴,始終專注于汽車電子領(lǐng)域的新技術(shù)和新產(chǎn)品,為整車廠和零部件企業(yè)提供完整的研發(fā)、測試解決方案,為工程師在汽車領(lǐng)域提供“趁手裝備“!
發(fā)布評論請先 登錄
相關(guān)推薦
評論