CAPL语法介绍-(I)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

CAPL語法介紹(I)研發處電動車與驗證工程專案郭俐君分機:04-7811222#2373信箱:lckuo@artc.org.tw目錄•CAPL簡介•CAPL語法使用•建立Message•建立事件觸發–MessageEvent–KeyboardEvent(Next)–SystemEvent(Next)–Timers(Next)CAPL簡介(1/7)•CAPL全名為CANAccessProgrammingLanguage–一種專用於CANalyzer以及CANoe軟體PC開發的程式語言–架構在C語言上的程式語言,因此在語法及概念上CAPL的語法與C語言類似–CAPL瀏覽器在進行編譯時,可一次僅編譯一個檔案,不與其他檔案進行連結,因此除錯較為容易。–CAPL事件一旦被觸發,對應的CAPL程式便開始執行,事件與事件間採用分散式的運作模式,彼此並無一定的循序關聯性。CAPL事件CAPL程式運作在特定時間執行事件程序使用者鍵入某鍵時執行收到某訊息時執行timerexpiresKeypressMessagereceivedFig:CAPL事件觸發型語言示意圖CAPL簡介(2/7)–採用樹狀的架構來觸發事件與編譯•根據觸發的項目樹狀地往下進行事件的觸發•CAPL瀏覽器針對不同的觸發事件分列了不同的項目,可根據不同的項目進行新增,呼叫的方式也僅需要透過函式間的呼叫,e.g.Timer觸發採用SetTimer()來進行呼叫SystemCAPLtreeKeyboardCANMessagePreStartStartStopMeasurement………TimerTimerTimerOutput,write…Fig:CAPL樹狀架構圖CAPL簡介--開啟編輯視窗(3/7)•如何開啟CAPL編輯視窗–CAPL瀏覽器的開啟方式為在CANoe的SimulationSetup視窗內針對欲編輯的ECU,連續點擊鉛筆圖案–第一次編輯則會出現開啟的.can檔的畫面,若要新增一個CAPL檔,則直接於檔名處新增*.can的檔案名稱及選擇儲存位置,往後該ECU便會以此*.can檔進行CAPL語言的執行觸發及動作。開啟完成後,便會跳出CAPL編輯視窗。12CAPL簡介--編輯視窗架構(4/7)•EVENTSwindow(事件視窗):–系統的事件(system-specificevent),系統本身該有的動作,如:系統、CAN控制器、錯誤訊框(ErrorFrame);–使用者定義的事件(User-definedevent),由使用者控制當出現何種情形時進行事件的觸發及動作,如:CAN訊息、時序(Timer)、鍵盤、環境、函數。•EVENTPROCEDUREwindow(事件程序視窗):–在事件程序視窗的撰寫前,須先到事件視窗(EVENTS)新增要編寫的事件項目•例如:編寫接收message時的動作程序–1.先到事件視窗內CANmessage的項目按右鍵新增(New)一個onmessage的事件程序–2.在EVENTPROCEDURE視窗中會出現onmessage,在onmessage後NewMessage處選擇MessageformDatabase。•GLOBALVARIAVLESwindow(總體參數視窗):–該ECU會使用到的參數皆在此視窗內進行設定,包含初始值的設定以及參數的宣告。•針對特定Message進行初始值的設定,以及各訊號內所填入的初始值。•針對時序的使用也須在此視窗內進行宣告,宣告為msTimer或是Timer的變數型態,在總體參數設定的名稱須與Timer內設定的名稱相符CAPL簡介--編輯視窗架構(5/7)•範例:編寫接收message時的動作程序Step2:在EVENTPROCEDURE視窗中會出現onmessage,在onmessage後NewMessage處直接按右鍵從database選擇MessageformDatabase。Step1:在事件視窗內CANmessage的項目按右鍵新增(New)一個onmessage的事件程序使用database中的名稱,非參數欄位中設定的名稱!!CAPL簡介--編輯視窗架構(6/7)•COMPILERwindow(編譯視窗):–在CAPL程式編輯後,點擊compiler/compilerall鍵,或按F9,若成功編譯完成會出現compiled的訊息,若編譯出現錯誤則會在此視窗內提醒。–ps.Compilerall會將所有CAPL的程式進行編譯。CompilerAllCompilerCAPL簡介--程式顏色定義(7/7)•CAPL語法所標示的顏色定義whiteonblackbackgroundTextSelectionblackTextpurpleStringblackOperatorblackNumberblueKeyworddarkblueIntrinsicfunctiongreenCommentblueCAPLfunctionColorCAPLCodeType目錄•CAPL簡介•CAPL語法使用•建立Message•建立事件觸發–MessageEvent–KeyboardEvent–SystemEvent–TimersCAPL語法使用--簡介(1/15)•CAPL(全名CANAccessProgrammingLanguage)–與現行的Cprogramming類似,但仍有些微不同,不同之處表列於附件一中的表格內。–語法不同但功能類似的fn.,如下:–Notation–Comments•/*Thisisacomment.*/•//CAPLalsoacceptstheC++comment.SimilarstringformattingparametersusedwriteprintfSimilarstringformattingparametersusedSprintfsprintfsizeofhasnoexactequivalentelCountsizeofNotesCAPLFunctionCFunction“0x”接在數字前面,表示為16進位Msg.data=0x35;”x”接在messageID後時,表示為extendedidentifier(29-bitidentifier)message101xmsg;MeaningNotationCAPL語法使用--命名(2/15)–命名規範•合理的命名–sum–number_of_units–J5x7–_sysflag•不合理的命名––CAPL對大小寫的認定皆同•因此以下三個名稱皆代表同一參數–input_1–Input_1–INPUT_1//變數名稱不可以數字開頭3Times//空白不可辨識numberofunits//’$’為不可辨識的字元sum$value//不可使用預設的關鍵字intCommentsNameCAPL語法使用--關鍵字(3/15)–關鍵字–資料型態staticconstforcasestructenumifchartypedefexternintContinueuniongotolongdefaultwhileswitchreturnfloatelseDoubledobreakSupportedvolatileshortsignedunsignedregistersizeofautoNotsupportedsigned16bitintegerintunsigned8bitbyteBytesigned32bitlongintegerlongunsigned16bitwordwordsigned64bit1singleprecisionfloatingpointfloatunsigned32bitdoubleworddwordatimerwithsecondresolutionatimerwithmillisecondresolutionacommunicationmessagesingleprecisionfloatingpointcharacterDescriptiontimermsTimermessagedoublecharDataType------------signed64bitunsigned8bitUnsigned/SignedSizeNote:Floatsignalsdefinedinthedatabaseare32bitsCAPL語法使用--宣告(4/15)–宣告•範例•Localvariablesarestatic•Initial–allnumericvariables=0–allstring-typevariables=nullcharletter_a=“a”;//使用使用使用使用””雙引號表示字元雙引號表示字元雙引號表示字元雙引號表示字元intnumber_days_in_year=365;//參數初始值設定參數初始值設定參數初始值設定參數初始值設定messagewake-upXXX;//訊號命名訊號命名訊號命名訊號命名timerone_second;//計時器命名計時器命名計時器命名計時器命名intj,k=2;doublex=33.7;charp;VoidmyFunc(){bytevalue=10;//static;calledoncewrite(“value=%d”,value);…Value=35;}VoidmyFunc(){bytevalue;//variabledeclarationsintx,y;value=10;//variableinitializationsx=0;y=5;//Maincodeofthefunction…}可變動宣告靜態宣告CAPL語法使用--矩陣(5/15)–Typecasting•將一個資料形態轉為另一個資料型態–Arrays•CAPL支援的型態intsum;sum=1.6+1.7;//sum=(int)3.3=3Sum=(int)1.6+(int)1.7;//sum=1+1=2intsample_data[10]={100,300,500,600};//剩餘後面6個array自動填0one-dimensionalarraysintM[4][5]={{10,5,-3,17,82},{9,0,0,8,-7},{32,20,1,0,14},{0,0,8,7,6},};multi-dimensionalarraysCharalphabet[27]=“ABCDEFGHIJKLMNOPQRSTUVWXYZ”;//包含”\0”共27個charcharacterarraysintsample_data[4]={100,300,500,600};integerarrays範例類型Note:elCount()取得array的elementsinti,j;for(j=0;jelCount(array);j++)for(i=);ielCount(array[j];i++)CAPL語法使用--Operators(6/15)–Operators•ArithmeticOperatorsy=--xSetxtoyafterx-1--integer_variable_1Decreasesinteger_variable_1by1ValueisusedafterdecrementisappliedPrefixDecrement--y=x--Setxtoybeforex-1integer_variable_1--Decreasesinteger_variable_1by1ValueisusedbeforedecrementisappliedPostfixDecrement--y=++xSetxtoyafterx+1++integer_variable_1Increasesinteger_variable_1by1ValueisusedafterincrementisappliedPrefixIncrement++y=x++Setxtoybeforex+1integer_variable_1++

1 / 37
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功