版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
CANoe入門Stepbystep系列(一)基礎(chǔ)應(yīng)用CANoe是Vector公司的針對(duì)汽車電子行業(yè)的總線分析工具,現(xiàn)在我用CANoe7o6版本進(jìn)行介紹,其他版本功能基本差不多。硬件我使用的是CANcaseXL1,CANoe軟件的安裝很簡(jiǎn)單,先裝驅(qū)動(dòng),再裝軟件。安裝完成,插上USB,連接硬件,這樣在控制面板中,VectorHardware進(jìn)行查看通過查看信息可知,CANcaseXL中的兩個(gè)piggy,一個(gè)是251(高速CAN),一個(gè)是7269(LIN),此外常用的還有1054(低速CAN,或者稱容錯(cuò)CAN),因?yàn)镃ANcaseXL中只能支持兩路通訊,這樣piggy可以自由組合2,硬件連接正常,打開CANoe軟件File->NewConfiguration可以選擇新建工程的模版,我們這里選擇CAN_500kBaud。ten,這樣新建了波特率為500KCAN工程,可以File->SaveConfiguration,進(jìn)行保存3,接下來就要使用CANdb++Editor工具對(duì)總線網(wǎng)絡(luò)節(jié)點(diǎn),消息,信號(hào),進(jìn)行定義了。點(diǎn)擊工具欄的這個(gè)圖標(biāo),或者開始菜單中找這個(gè)工具啟動(dòng)啟動(dòng)后,F(xiàn)ile-〉CreateDatabase,選擇CANTemplate.dbc,選擇目錄及文件名,進(jìn)行保存右鍵Networknodes—>New,進(jìn)行網(wǎng)絡(luò)節(jié)點(diǎn)的定義,這里只需要填寫Name即可,例如:Node_A然后添加Node_B,完成后如下圖,這樣在Networknodes目錄下面添加出來兩個(gè)節(jié)點(diǎn)節(jié)點(diǎn)添加完成后,下一步添加CAN消息,右鍵Messages-〉New,這是需要定義名稱,ID,DLC等信息,如下:然后在Transmitters頁(yè)面,點(diǎn)擊Add按鈕,添加Node_A為發(fā)送節(jié)點(diǎn),意思就是說,此消息是從Node_A節(jié)點(diǎn)發(fā)送出來的其實(shí)還有一種方法就是,此時(shí)暫時(shí)不定義發(fā)送節(jié)點(diǎn),然后直接以拖曳的方式拖曳到發(fā)送節(jié)點(diǎn)上,功能上是一樣的有了消息,消息里攜帶的東西自然是信號(hào)咯,那末我們開始創(chuàng)建一個(gè)信號(hào)右鍵Signals—>New,填寫如下信息信號(hào)固然要放到消息中咯,切換到Messages頁(yè)面,Add我們剛剛建立的Message_A,固然和上面一樣,采用拖曳的方式從Signal至ijMessage中建立關(guān)聯(lián)也是可以的。上面信息中Intel模式和Motorola格式的區(qū)別如下:用0和1來表示開關(guān)信號(hào)狀態(tài)似乎還不是很直觀,我們可以使用on和off來表示就好了,于是View->ValueTables,右鍵空白處-〉New,鍵入如下信息:定義好了之后,還需要跟信號(hào)進(jìn)行關(guān)聯(lián)。右鍵需要關(guān)聯(lián)的信號(hào)一>EditSignal,ValueTable中關(guān)聯(lián)剛才建立的那個(gè)ValueTalbe項(xiàng)這樣一個(gè)信號(hào)就完成為了,此外還需要加一個(gè)類似的信號(hào),可以點(diǎn)擊Signal根目錄,在右邊選擇Signal復(fù)制,及粘貼,然后雙擊復(fù)制好的Signal后,進(jìn)行一些編輯,然后用上面方法關(guān)聯(lián)Message即可快速建立第二個(gè)信號(hào)了,是不是很方便繼續(xù)添加第三個(gè)信號(hào),Indicator_A,跟上面一樣,但是我這個(gè)信號(hào)想放在Message的第二個(gè)字節(jié)的位置,怎么辦?其實(shí)很簡(jiǎn)單,有兩種方法:第一種,右鍵已經(jīng)關(guān)聯(lián)好的,即在Message目錄下的信號(hào),Editmappedsignal,在彈出的對(duì)話框中的Startbit中填8,這樣就這個(gè)信號(hào)就跑到該消息的第二個(gè)字節(jié)中了。第二種方法,右鍵該消息-〉EditMessage,在Layout頁(yè)面中,拖動(dòng)信號(hào)的色塊進(jìn)行挪移以上Message_A消息及消息下所定義已經(jīng)定義完成如法炮制此外一個(gè)消息Message_B,完成后如下圖.下面創(chuàng)建環(huán)境變量,右鍵Environmentvariables陸續(xù)把其他環(huán)境變量加好,Indicator的Access屬性為Write哦,加完如下:數(shù)據(jù)庫(kù)的定義這款基本上就0K了。保存后關(guān)閉CANdb++Editor,回到CANoe主程序中。請(qǐng)?jiān)贑onfiguration—>Options->ConfigurationSettings->ChannelUsage設(shè)置使用的通訊通道,因?yàn)檫@個(gè)只需要1路CAN,其他都設(shè)置為0就可以。點(diǎn)這個(gè)選項(xiàng)頁(yè)面可浮現(xiàn)SimulateSetup界面右鍵Databases-)Add,把剛剛創(chuàng)建好的dbc給加載進(jìn)來,之后再連線上右鍵-〉InsertNetworkNode結(jié)果如下:右鍵這個(gè)ECU模塊->Configuration,在NetworkNode選擇Node_A,完成,然后添力口Node_B完成后如下圖,這樣dbc與CANoe的關(guān)聯(lián)就好了。4,界面設(shè)計(jì)網(wǎng)絡(luò)及相應(yīng)的關(guān)系設(shè)置好之后,應(yīng)該設(shè)計(jì)界面了,一個(gè)良好的界面可以直觀的顯示及控制各種信號(hào)。界面設(shè)計(jì)工具有兩種:一種是PanelDesigner,新的界面設(shè)計(jì)工具,此外一種是PanelEditor是老的界面設(shè)計(jì)工具,無論采用何種工具設(shè)計(jì)的界面,都可以和CANoe很好的兼容,沒有問題?下面我們先用第一種界面設(shè)計(jì)工具來完成界面的設(shè)計(jì)點(diǎn)擊工具欄的這個(gè)圖標(biāo)或者File-〉OpenPanelDesigner,打開界面編輯器,界面如下:保存一下該界面,起名為Pariel_A,一個(gè)空的界面上可以放置右上邊若干組件。放置好之后,選中界面上的組件的時(shí)候,右下側(cè)回顯示當(dāng)前選中的組件的屬性,可以更改相應(yīng)的大小位置等,但最重要的是Symbol屬性,這里要說一下,每一個(gè)界面組件也都需要與CANoe關(guān)聯(lián),否則單純的界面是沒有任何意義的,關(guān)聯(lián)主要是信號(hào)和環(huán)境變量,在Symbol屬性的SymbolFilter屬性中可以進(jìn)行選擇,我們這里關(guān)聯(lián)的是環(huán)境變量,所以選擇EnvironmentVariable,然后再點(diǎn)擊上面的Symbol屬性,然后在彈出的頁(yè)面中選擇相應(yīng)關(guān)聯(lián)的變量完成后可以按同樣的方法設(shè)計(jì)Panel_B,也可以SaveAs的方法快速建立同樣的Panel但是與環(huán)境變量的關(guān)聯(lián)和界面的文字需要進(jìn)行微調(diào)。這樣兩個(gè)Panel都已完成。也已經(jīng)建立了與CANoe之間的關(guān)聯(lián)。5,CAPL編程所有的前期準(zhǔn)備工作和組裝工作都已完成,現(xiàn)在需要編寫程序使整個(gè)系統(tǒng)有機(jī)的運(yùn)行起來?;氐紺ANoe的SimulationSetup界面,然后點(diǎn)擊Node_A模塊的,像鉛筆一樣的圖標(biāo),填寫程序名稱,這里Node_A,然后打開編程界面,完成以下程序.然后完成Node_B程序。小技巧:如果背不出具體的消息名稱,信號(hào)名稱或者環(huán)境變量,可以右鍵程序空白處,你會(huì)得到意外的驚喜,試試看。OK大功告成6,運(yùn)行現(xiàn)在點(diǎn)擊工具欄,運(yùn)行程序.注意:這里表示實(shí)際的網(wǎng)絡(luò),所有的消息是發(fā)送到物理的網(wǎng)絡(luò)上的,如果只是驗(yàn)證程序,設(shè)置成這樣就可以了。完整運(yùn)行結(jié)果如下:就是這樣,一步一步的,我們完成為了第一個(gè)完整的CANoe應(yīng)用工程,雖然這只是入門第一步/旦整個(gè)CANoe的開辟流程基本涵蓋,如果能跑出上面的運(yùn)行結(jié)果,依然能夠給我們不少的驚喜。我們需要這樣的驚喜,因?yàn)檫@是我們繼續(xù)前行的動(dòng)力。CANoe入門Stepbystep系列(二)CAPL編程CAPL就是CommunicationApplicationProgrammingLaguage的縮寫,CAPL類似于C語言的語法,因此所有的語法請(qǐng)參考C語言教程,這里不在這里進(jìn)行詳述,關(guān)于C語言,毫無疑問的,首先推薦大家看譚浩強(qiáng)老師的書,經(jīng)典中的經(jīng)典,看完這本C語言應(yīng)該沒問題了.CAPL在CANoe中起到重要的作用,他將所有的部份聯(lián)系起來(請(qǐng)看下圖)現(xiàn)在我們賦予上一節(jié)的基礎(chǔ)上,來著重介紹CAPL編程。CAPL語法是C語言的,又有一些C++的特性,this指針,事件等,對(duì)于事件的理解可以學(xué)習(xí)任意一種面對(duì)對(duì)象語言,首推C#.NET,可以參考我的博客學(xué)習(xí),固然這個(gè)似乎比CAPL本身更加難,事件也更加多,但這并不妨礙對(duì)事件的理解,其中的事件類型如下圖:下面來幾個(gè)小例子匡助理解來個(gè)CANoe版本的helloworld!來興奮一小下吧,開整~在打開CANoe,新建個(gè)工程,在SimulationSetup中加個(gè)Networknode,點(diǎn)鉛筆,忘了嗎,上一節(jié)剛講過,右鍵Start->New,鍵入如下代碼編譯后,關(guān)閉CAPLBrowero運(yùn)行CANoe工程,結(jié)果如下,哇塞成功咯,好有成就感啊。這個(gè)例子似乎跟CAN通訊沒啥太大關(guān)系啊,好,我們接下來再做一個(gè)例子運(yùn)行結(jié)果如下,按鍵盤b鍵,將發(fā)送一個(gè)CAN消息,連die是啥都不知道的同學(xué),推薦先學(xué)習(xí)一下CAN基礎(chǔ)知識(shí),推薦瑞薩公司的《CAN入門書》,講的非常的好。運(yùn)行剛剛的那個(gè)例子你會(huì)發(fā)現(xiàn),按一下b,只發(fā)送一條消息、,但在實(shí)際應(yīng)用中CAN消息都是循環(huán)連續(xù)發(fā)送的,我們要對(duì)剛剛的程序進(jìn)行一些修改。完成這樣的功能。程序如下:variables(message0x400msgA={dlc=l};mstimertimerA;intconditionA=0;jonkey'az(conditionA=IconditionA;if(conditionA==1){setTimer(timerA,200);?ontimertimerAif(conditionA==l){setTimer(timerA,200);msgAobyte(O)=msgA.byte(O)—1;output(msgA);)運(yùn)行結(jié)果如下:按A鍵,Timer啟動(dòng),發(fā)送消息接下來我們一起來看總結(jié)一下CAPL編程的要點(diǎn):CAPL編程的學(xué)習(xí),需要通過不斷在實(shí)踐中的積累,此外別無他法,以上真真兒的只是入門,如果你真心看過,不如你真心寫過.CANoe入門Stepbystep系列(三)簡(jiǎn)單例子的剖析最好的學(xué)習(xí)方式是什么?摹仿。有人會(huì)問,那不是山寨么?但是我認(rèn)為,那是摹仿的初級(jí)階段,當(dāng)把別人最好的設(shè)計(jì)已經(jīng)融化到自己的血液里,變成自己的東西,而靈便運(yùn)用的時(shí)候,才是真正高級(jí)階段。正所謂畫虎畫皮難畫骨。但初級(jí)階段仍然是必須經(jīng)歷的過程,他會(huì)使你在達(dá)到高級(jí)階段的過程中少走不少?gòu)澛罚旅嫖覀儊磉~出這一步。先研究一下別人的簡(jiǎn)單例子。最好的例子莫過于Vector本身的Demo了,這個(gè)在安裝完CANoe之后就會(huì)被自動(dòng)安裝。先看最簡(jiǎn)單的一個(gè),名字叫Easy,但并不簡(jiǎn)單哦,比我們之前介紹的所有的東西都整合再一起了,很簡(jiǎn)單,但很全面,但是假如你說,這個(gè)我自己也可以徹底自己寫出來(并非僅僅是看懂哦),那末我可以肯定的說,在工作中,你徹底可以勝任普通的任務(wù)要求哦?,剩下的只是工作量的問題了,但我相信到現(xiàn)在為止,你們不少人,都無法寫出這樣的程序,所以我建議你們把這個(gè)程序好好的研究明白,這點(diǎn)很重要。廢話不多說,上圖,下面是打開運(yùn)行后的界面.通過面板可以控制,及顯示不少動(dòng)畫效果,做的非常的漂亮。在其余的窗體也將主要的數(shù)據(jù)以圖表等表現(xiàn)方式呈現(xiàn)出來。我們先看一下DBC的內(nèi)容吧Signals:EngineSpeed車速信息Flashlight雙跳燈HeadLight大燈EngineSpeed車速信息Flashlight雙跳燈HeadLight大燈OnOff引擎狀態(tài)OnOffMessages:Enginestate引擎狀態(tài):包含的信號(hào)有OnOff,EngineSpeedLightState燈光狀態(tài):包含的信號(hào)有Flashlight,HeadLightNetworknodes:Display 顯示節(jié)點(diǎn),接收所有消息Engine 引擎節(jié)點(diǎn),發(fā)送Enginestate消息Light 燈光節(jié)點(diǎn),發(fā)送LightState消息Environmentvariables:環(huán)境變量,普通與界面的組件相關(guān)聯(lián),這樣就實(shí)現(xiàn)了圖形化界面的控制與顯示,下面就是關(guān)聯(lián)的界面組件EnvEngineSpeedDspMeterEnvEngineSpeedDspTextEnvEngineSpeedEntryEnvEngineStateDspEnvEngineStateSwitchEnvHazardLightsSwitchEnvHeadLightswitchEnvLightDsp注意一下信號(hào)的信息:Definition頁(yè)面的,Init。Vai的輸入框使能了,之前是灰色的狀態(tài),為什么呢?點(diǎn)擊一下藍(lán)色的帶下劃線的連接,彈出窗臺(tái)如下:意思是說這個(gè)值的設(shè)置,必須要定義的屬性才干有效,之前向來沒有提到信號(hào)的屬性,這次還是第一次遇到哦。個(gè)人理解信號(hào)屬性是表明信號(hào)的特點(diǎn)的一系列參數(shù),固然消息和節(jié)點(diǎn)也都有對(duì)應(yīng)的屬性,為了更加詳細(xì)的了解這個(gè)屬性,我們求助于匡助。哦,明白了,原來是用來初始化數(shù)據(jù)的哦。其實(shí)在Definition表示的是物理值,都要轉(zhuǎn)換成Raw值保存到GenSigStartValue屬性中,在屬性的創(chuàng)建我們之前也沒有提到過,這里講一下,請(qǐng)?jiān)贑ANdb++Editor菜單中,View->AttributeDefinitions右鍵,New,填寫好信息即可。屬性暗地里跟行為是密切相關(guān)的,甚至跟底層dll,其他的一些屬性請(qǐng)參考Help文檔,固然重要的屬性我們也會(huì)跟大家在后面提到。dbc還有一些細(xì)節(jié),就是接受的消息的定義,之間也沒介紹過,例如Display節(jié)點(diǎn)只接收消息,那末你就應(yīng)該在節(jié)點(diǎn)的屬性上進(jìn)行配置,方法是右擊節(jié)點(diǎn)然后點(diǎn)EditNode,在MappedRxSig.中就可以定義接收的信號(hào)了,Add…其實(shí)不定義接收消息也是可以的,但會(huì)在File-)Consistencycheck的檢查中中顯示出無接收節(jié)點(diǎn)等的報(bào)警。例如前面第一講例子的dbc的檢查如下:再看一下CAPL程序。engine.can程序如下:variablesonenvvarEnvEngineStateSwitch 〃當(dāng)撥動(dòng)開關(guān)的時(shí)候,會(huì)更改發(fā)動(dòng)機(jī)發(fā)出的信號(hào){$Enginestate::OnOff=@this;〃注意信號(hào)和環(huán)境變量直接賦值時(shí)的符號(hào),信號(hào)用$,環(huán)境變量用@if(@this)$EngineState::EngineSpeed=@EnvEngineSpeedEntry;else$EngineState::EngineSpeed=0;jonenvvarEnvEngineSpeedEntry〃當(dāng)挪移車速滑條時(shí),會(huì)更改發(fā)動(dòng)機(jī)發(fā)出的信號(hào)iif(@EnvEngineStateSwitch)($Enginestate::EngineSpeed=@this;onstart 〃程序開始運(yùn)行的時(shí)候,將調(diào)用所有的環(huán)境變量的事件{CallAIIOnEnvVar(); //callallenvvarproceduresofthismodeland//thusconsidertheSTARTVALUESofallenvironment//variablesfor://—initializationofallmessagevariables//-startingofanytimers//-sendingmessages(output)withstartvalues)lightocan的程序如下:variablesimsTimertFlashLightFrequency;〃定義閃燈定時(shí)器constintgFlashLightFrequency=500;〃定義閃燈頻率,初始化為500msintgHazardLightsStatus=0; 〃定義危(wei)險(xiǎn)燈信號(hào)intgDebugCounterTX=0; 〃用于調(diào)試,記錄TX報(bào)文個(gè)數(shù)intgDebugCounterTXRQ=0;〃用于調(diào)試,記錄TXRQ報(bào)文個(gè)數(shù)intgDebugCounterRX=0; 〃用于調(diào)試,記錄RX報(bào)文個(gè)數(shù)}onenvvarEnvHeadLightSwitch 〃大燈開關(guān)狀態(tài)更改時(shí),更新燈光消息的信號(hào)//assignEVvaluetothemessagesignal$LightState::Headlight=@this;)CallAIIOnEnvVar();CallAIIOnEnvVar();//callallenvvarproceduresofthismodeland//thusconsidertheSTARTVALUESofallenvironment//variablesfor://—startingof//—initializationofallmessagevariables//—sendingmessages(output)withstartvalues//—startingofanytimersanytimerssetWriteDbgLevel(0); //setDbgLevel=1togetmoreinformationinWrite—Window)onmessageLightState〃調(diào)試用,打印相關(guān)信息{if(this.dir==TX){gDebugCounterTX++;if(gDebugCounterTX==10)(writeDbgLevel(l,z,LightStateTXreceivedbynode%NODE_NAME%”);gDebugCounterTX=0;j)if(thisodir==TXREQUEST){gDebugCounterTXRQ++;if(gDebugCounterTXRQ==10){writeDbgLevel(1,"LightStateTXREQUESTreceivedbynode%NODE_NAME%〃);gDebugCounterTXRQ=0;})if(this.dir==RX){gDebugCounterRX++;if(gDebugCounterRX==10)iwriteDbgLevelCl/'Error:LightStateRXreceivedbynode%NODE_NAME%“);gDebugCounterRX=0;onenvVarEnvHazardLightsSwitch〃危(wei)險(xiǎn)警示燈開關(guān)變化時(shí),更新燈光消息的閃燈信號(hào)(if(@this){gHazardLightsStatus=1;setTimer(tFlashLightFrequency, gFlashLightFrequency);elsecancelTimer(tFlashLightFrequency);gHazardLightsStatus=0;}$Lightstate::Flashlight=gHazardLightsStatus;}ontimertFlashLightFrequency 〃危(wei)險(xiǎn)報(bào)警燈間隔閃爍的控制{gHazar
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 會(huì)計(jì)類畢業(yè)實(shí)習(xí)報(bào)告范文錦集六篇
- 下學(xué)期工作學(xué)習(xí)計(jì)劃合集八篇
- DB12T 472-2012 貴金屬與珠寶玉石飾品 標(biāo)識(shí)
- 業(yè)務(wù)員工作心得體會(huì)
- 三國(guó)演義讀書筆記及啟發(fā)范文
- 個(gè)人籃球訓(xùn)練計(jì)劃書(12篇)
- 課件高血壓教學(xué)課件
- 探究實(shí)驗(yàn)設(shè)計(jì)之二氧化碳性質(zhì)的探究
- 慢性持續(xù)期哮喘患者的治療和管理
- 高等數(shù)學(xué)教程 試卷3-答案
- 《員工心理健康》課件
- 微型站消防站課件培訓(xùn)
- 北京市豐臺(tái)區(qū)2023-2024學(xué)年七年級(jí)上學(xué)期期末數(shù)學(xué)試題
- 計(jì)算思維與程序設(shè)計(jì)
- 主題漫展策劃方案
- 小學(xué)生自主學(xué)習(xí)能力培養(yǎng)及教師指導(dǎo)策略
- 財(cái)務(wù)管理的數(shù)字化轉(zhuǎn)型實(shí)施方案
- 線上廚藝大賽投票方案
- 家長(zhǎng)課程:怎樣提升孩子的自護(hù)技能
- 奧緯咨詢-2023京東營(yíng)銷策略洞察報(bào)告
- 人工智能在醫(yī)療領(lǐng)域的應(yīng)用課件
評(píng)論
0/150
提交評(píng)論