基于CANoe的CAN總線設(shè)計(jì)基礎(chǔ)與簡例_第1頁
基于CANoe的CAN總線設(shè)計(jì)基礎(chǔ)與簡例_第2頁
基于CANoe的CAN總線設(shè)計(jì)基礎(chǔ)與簡例_第3頁
基于CANoe的CAN總線設(shè)計(jì)基礎(chǔ)與簡例_第4頁
基于CANoe的CAN總線設(shè)計(jì)基礎(chǔ)與簡例_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、基于CANoe的CAN總線設(shè)計(jì)基礎(chǔ)與簡例CANoe概述 CANoe是德國Vecto:公司開發(fā)的一套通用的CAN總線系統(tǒng)的開發(fā)、測試和分析工具。CANoe的主要組成部分和各自功能為:l CANdb+編輯器:用CANdb+編輯器可以創(chuàng)建或編輯數(shù)據(jù)庫文件(*.dbc)。數(shù)據(jù)庫文件中包括了CANoe所用到的信號的信息,這當(dāng)中包括了報(bào)文和信號的網(wǎng)絡(luò)節(jié)點(diǎn)和符號名稱,以及環(huán)境變量等信息。l CAPL瀏覽器:利用CAPL瀏覽器可以創(chuàng)建用于測量和模擬面板的CAPL程序。因?yàn)閿?shù)據(jù)庫的應(yīng)用,在編程時可以使用直觀的報(bào)文和信號的名稱,而不必使用二進(jìn)制代碼的報(bào)文頭和數(shù)據(jù)。l CANoe主程序:用于測量和模擬CAN系統(tǒng)。通

2、過File/Database菜單,可以在主程序中關(guān)聯(lián)一個或多個數(shù)據(jù)庫。l 面板編輯器:通過面板編輯器可以創(chuàng)建面板。面板的作用是作為用戶和在CANoe里的模擬面板里被模擬的網(wǎng)絡(luò)節(jié)點(diǎn)的I/O接口。除了標(biāo)準(zhǔn)按鈕和開關(guān),在面板編輯器中也可使用位圖作為顯示和控制器件??梢允褂萌我獾奈粓D編輯軟件創(chuàng)建合適的位圖,然后用十面板編輯器。任何顯示和控制兀件都要和數(shù)據(jù)庫中的環(huán)境變量關(guān)聯(lián)好,這樣CAPL程序可以在CANoe主程序中讀寫顯示和控制兀件。使用CANoe進(jìn)行開發(fā)的三個階段使用CANoe的開發(fā)過程可以分為3個階段:第一個階段是利用數(shù)字仿真進(jìn)行網(wǎng)絡(luò)需求分析和設(shè)計(jì)階段。該階段首先要定義網(wǎng)絡(luò)里的通訊需求,包括:需要

3、幾個節(jié)點(diǎn);在網(wǎng)絡(luò)中要發(fā)送多少個報(bào)文;數(shù)據(jù)從哪個節(jié)點(diǎn)傳輸?shù)侥膫€節(jié)點(diǎn);每個報(bào)文的具體組成;有哪些外部的輸入輸出。然后,利用網(wǎng)絡(luò)數(shù)據(jù)庫工具CANdb+建立起CAN通訊數(shù)據(jù)庫。接下來,建立網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),選擇總線的波特率,定義節(jié)點(diǎn)的網(wǎng)絡(luò)行為,使用CANoe建立各個網(wǎng)絡(luò)節(jié)點(diǎn)的模型,并通過仿真來預(yù)估在設(shè)定波特率情況下的總線負(fù)載和延遲。通過第一個階段的仿真可以檢驗(yàn)各個節(jié)點(diǎn)功能的完善性和網(wǎng)絡(luò)的合理性,也可以監(jiān)控網(wǎng)絡(luò)負(fù)載和延遲。第一階段如圖3-3所示。圖3-3完全數(shù)字仿真第二個階段是節(jié)點(diǎn)實(shí)現(xiàn)和半物理仿真階段。第一個階段結(jié)束后,我們能夠得到一個完整的系統(tǒng)功能模型。接下來,可以開發(fā)真實(shí)的控制器節(jié)點(diǎn),并利用總線接口與C

4、ANoe上剩余的虛擬節(jié)點(diǎn)相連接,來測試真實(shí)節(jié)點(diǎn)的功能,如通信、糾錯。對于并行開發(fā)的節(jié)點(diǎn),就可以不受其它節(jié)點(diǎn)開發(fā)步驟的影響。第二階段如圖3-4所示。圖3-4半物理仿真第三個階段是全系統(tǒng)集成階段。開發(fā)的最終階段將逐步把所有的虛擬節(jié)點(diǎn)用真實(shí)的節(jié)點(diǎn)來替代,此時,CANoe只是觀察分析的工具了。在這個過程中,整個系統(tǒng)包括各個功能節(jié)點(diǎn)都能詳細(xì)的檢查到。由于利用功能模塊取代真實(shí)的網(wǎng)絡(luò)節(jié)點(diǎn)能減少錯誤的發(fā)生,因此通過這兩種狀態(tài)的切換能檢查其功能的完善性。第三階段如圖3-5所示。圖3-5完全物理網(wǎng)絡(luò)3.3面板的設(shè)計(jì)面板編輯器用于創(chuàng)建圖形面板。在圖形面板中可以在模擬測量的過程中方便地改變離散或是連續(xù)的環(huán)境變量的值。

5、面板編輯器既可以單獨(dú)啟動也可以從CANoe主程序中啟動,從CANoe主程序中啟動時,和主程序中關(guān)聯(lián)的數(shù)據(jù)庫會自動關(guān)聯(lián)到面板編輯器中。表3-1為所有控制面板的元件一覽。所有放在面板上的元件稱為“控件”?!翱丶笨煞譃榭刂圃惋@示元件,控制元件(如開關(guān),按鈕等)用于改變環(huán)境變量的值,顯示元件用于顯示環(huán)境變量的值(如報(bào)警燈等)。對于不同類型的環(huán)境變量有特定的元件可用,如對于離散的變量可用開關(guān)和顯示燈等,對于連續(xù)的變量可用滑塊,對于字符串型的環(huán)境變量可用文字輸入框。除此之外,還可以放入靜態(tài)的和環(huán)境變量無關(guān)的元件,如作為背景的位圖,用于說明的文字等。所有的“控件”(顯示和控制元件)必須和數(shù)據(jù)庫中的一個

6、環(huán)境變量或信號相關(guān)聯(lián)。3.4 CAPL編程3.4.1 CAPL簡介CANoe的通用性、易用性很大程度上是因?yàn)橛脩艨梢詫ANoe進(jìn)行編程。CAPL是CAN Access Programming Language的縮寫。CAPL是一種類C語言的程序語言。利用CAPL可以在單個的應(yīng)用中對CANoe進(jìn)行編程。在網(wǎng)絡(luò)節(jié)點(diǎn)的開發(fā)過程中,往往會出現(xiàn)其他網(wǎng)絡(luò)節(jié)點(diǎn)還不可用的問題,為了模擬系統(tǒng)環(huán)境,這些網(wǎng)絡(luò)節(jié)點(diǎn)的數(shù)據(jù)流要通過CAPL的編程來模擬,CAPL節(jié)點(diǎn)作為功能塊插入到數(shù)據(jù)流圖中。CAPL的輸入是事件發(fā)生器,CAPL可以對報(bào)文,定時器以及鍵盤輸入做出反應(yīng),所以CANoe可以用來監(jiān)控和檢測特殊的問題,如CAN

7、oe可以對發(fā)布到總線的特定報(bào)文做出反應(yīng),然后可以調(diào)用戶自定義的分析和測試函數(shù)。CAPL同樣也可為控制器的開發(fā)模擬總線環(huán)境,通過CAPL,對怎樣的事件做出怎樣的反應(yīng)可以完全由用戶來定義決定。因?yàn)镃ANoe有兩個硬件接口,通過CAPL的編程也可以實(shí)現(xiàn)網(wǎng)關(guān)的功能。必須要注意的是,在測試設(shè)置面板中插入的CAPL塊能產(chǎn)生報(bào)文,但是不能發(fā)布到真實(shí)總線中去,如果要向總線發(fā)布報(bào)文,必須把CAPL塊插入到模擬設(shè)置面板中。在CAPL編程中應(yīng)盡量引用數(shù)據(jù)庫中的報(bào)文,這樣做對于提高開發(fā)效率非常有用,例如,如果要改變某條報(bào)文的優(yōu)先級,只需改變數(shù)據(jù)庫中這條報(bào)文的識別碼,然后重新編譯CAPL程序即可實(shí)現(xiàn),否則要在CAPL中

8、去改變每個用到這條報(bào)文的地方,非常繁瑣而且容易出錯。3.4.2 CAPL數(shù)據(jù)類型一、CAPL數(shù)據(jù)類型如下表所示二、數(shù)據(jù)定義變量定義int i;message 0x123 HiRain;message MotorData Vector;三、關(guān)鍵字thisthis代表觸發(fā)事件的對象on message 100 byte byte_0;byte_0 = this.byte(0);/將ID為100的報(bào)文的信號byte的值送變量byte_0,this指ID為100的報(bào)文.on envVar Switch int val;val = getvalue(this);得到環(huán)境變量Switch的值送val,th

9、is指Switch.3.4.3 CAPL Broswer3.4.3 CAPL事件1、消息事件 on message123 /對消息123(dec)反應(yīng) on message 0x123 /對消息123(hex)反應(yīng) on message MotorData /對消息MotorData(符號名字)反應(yīng) on message CAN1.123 /對CAN 通道1收到消息123反應(yīng) on message* /對所有消息反應(yīng) on message 100-200 /對100-200間消息反應(yīng)2、鍵盤事件 on key 0x20 /按空格鍵反應(yīng) on key F1 /按F1鍵反應(yīng) on key Ctrl

10、-F12 /按Ctrl + F12鍵反應(yīng) on key PageUP /按PageUp鍵反應(yīng)on key Home /按Home鍵反應(yīng) on key * /按所有鍵反應(yīng)on key a/對按鍵a反應(yīng)on key /對空格反應(yīng)3、時間事件定時器聲明 msTimer myTimer; /將myTimer 申明ms為單位的變量 timer myTimer; /將myTimer 申明s為單位的變量定時器函數(shù) setTimer(myTimer,20); /將定時值設(shè)定為20ms,并啟動 cancelTimer(myTimer); /停止定時器myTimer定時器事件 on timer myTimer /

11、對myTimer 設(shè)定的時間到反應(yīng)4、環(huán)境變量事件環(huán)境變量函數(shù) getValue() /獲取環(huán)境變量的值 putValue() /設(shè)置環(huán)境變量的值環(huán)境變量事件 on envVar XXX5、輸出文本W(wǎng)riteWindow write函數(shù)int h=100;char ch=a;char s1008=“hundred”;write(“Hundred as a number:%d,%x”,h,h);write(“Hundred as a string:%s”,s100);write(“The square root of two is %6.4g”,sqrt(2.0);3.4.4 CAPL響應(yīng)1、對

12、的報(bào)文響應(yīng)on message 0x64if(this.byte(2)=0xFF)write(“Third byte of the message is invalid”);on message MotorDataif(this.temperature.phys>=150)write(“Warning: critical temperature”);2、對鍵盤響應(yīng)on key a message MotorData mMoDa;mMoDa.temperature.phys=60;mMoDa.speed.phys=4300;output(mMoDa);on key b message 10

13、0 m100= dlc=1;m100.byte(0)=0x0B;output(m100);3、定時器處理Variablesmessage 0x555 msg1 = dlc=1;msTimer timer1;on startsetTimer(timer1,100);on timer timer1setTimer(timer1,100);msg1.byte(0)=msg1.byte(0)+1;output(msg1);4、環(huán)境變量的處理on envVar evSwitchmessage MotorData msg;msg.bsSwitch = getValue(this);output(msg);

14、3.5 CANoe數(shù)據(jù)庫在一個聯(lián)網(wǎng)的總線系統(tǒng)上的所有數(shù)據(jù)和它們之間的相互關(guān)系,通常都存儲在一個集中數(shù)據(jù)庫中,CANoe提供一個數(shù)據(jù)庫編輯器,在這里可以隨意的創(chuàng)建和更改數(shù)據(jù)庫中的信息。由數(shù)據(jù)庫編輯器創(chuàng)建的數(shù)據(jù)庫可以被各個程序和工具調(diào)用,如圖3-6所示。數(shù)據(jù)庫中的兩個對象之間可以通過關(guān)聯(lián)建立聯(lián)系。例如,將一個信號和一個報(bào)文關(guān)聯(lián),就可以決定在哪條報(bào)文中發(fā)送這條信號,可能的關(guān)聯(lián)關(guān)系見表3-2。表3-2數(shù)據(jù)庫中可關(guān)聯(lián)的對象圖3-6數(shù)據(jù)庫和其他應(yīng)用下面對CANoe中的數(shù)據(jù)庫中的各種對象做一下簡要說明:整車即整車上的網(wǎng)絡(luò)系統(tǒng),可能包括一個以上的總線網(wǎng)絡(luò),相互之間由網(wǎng)關(guān)進(jìn)行連接。網(wǎng)絡(luò):通常包括多個控制單元,控

15、制單元被連接到同一個總線上,通過總線交換信息??刂茊卧嚎刂茊卧窃诰W(wǎng)絡(luò)中分布的執(zhí)行單元。控制單元通過屬于它的網(wǎng)絡(luò)節(jié)點(diǎn)和網(wǎng)絡(luò)交換信息。一個控制單元可以包括多個網(wǎng)絡(luò)節(jié)點(diǎn)。環(huán)境變量也被指派到不同的控制單元。因?yàn)榭刂茊卧诰W(wǎng)絡(luò)中不是獨(dú)立的,在CANoe測試運(yùn)行的時候不能改變控制單元的名稱和描述。環(huán)境變量:CANoe提供環(huán)境變量來模擬網(wǎng)絡(luò)節(jié)點(diǎn)針對功能總線做出的反應(yīng)。環(huán)境變量由系統(tǒng)環(huán)境中的事件和狀態(tài)來描述,如外界壓力,溫度,開工位置等。通過用戶定義的控制面板可以隨意地更改環(huán)境變量,也即改變系統(tǒng)環(huán)境中的狀態(tài)。在CAPL中對于環(huán)境變量變化做出反應(yīng)的事件可用“on envVar”語句來描述。GetValue(

16、)語句和putValue()語句用來讀和寫環(huán)境變量。環(huán)境變量由以下系統(tǒng)參數(shù)來定義,l 符號化的名稱l 數(shù)據(jù)類型,包括整型,字符串,浮點(diǎn)型,數(shù)據(jù)型等l 修改權(quán),包括無限制,只讀(傳感器型),可寫(執(zhí)行元件型),特定控制器可讀寫等l 單位,機(jī)環(huán)境變量的物理單位l 最大最小值l 長度l 注釋網(wǎng)絡(luò)節(jié)點(diǎn):網(wǎng)絡(luò)節(jié)點(diǎn)是控制單元和網(wǎng)絡(luò)交換數(shù)據(jù)的接口,控制單元通過網(wǎng)絡(luò)節(jié)點(diǎn)從網(wǎng)絡(luò)收發(fā)信息。網(wǎng)絡(luò)節(jié)點(diǎn)由以下系統(tǒng)參數(shù)來定義l 符號化的網(wǎng)絡(luò)節(jié)點(diǎn)名稱l 地址節(jié)點(diǎn)組:多個網(wǎng)絡(luò)節(jié)點(diǎn)可以組成節(jié)點(diǎn)組,例如,網(wǎng)絡(luò)上所有同一家制造商提供的節(jié)點(diǎn)可以組成一個節(jié)點(diǎn)組。節(jié)點(diǎn)組也可用來構(gòu)建網(wǎng)絡(luò)的變種,所有車型變種都會用到的節(jié)點(diǎn)可以組成一個節(jié)點(diǎn)組

17、,這個節(jié)點(diǎn)組和網(wǎng)絡(luò)的所有變種相關(guān)聯(lián),選裝的網(wǎng)絡(luò)節(jié)點(diǎn)再單獨(dú)和網(wǎng)絡(luò)關(guān)聯(lián)。報(bào)文:即在總線上傳遞的報(bào)文信息,由以下系統(tǒng)參數(shù)定義,l 符號化的報(bào)文名稱l 識別位(CAN ID),在一個網(wǎng)絡(luò)中必須統(tǒng)一分配,不能重復(fù)使用l 字節(jié)數(shù)l 傳遞類型l 循環(huán)時間(如果報(bào)文被周期性的發(fā)送)l 網(wǎng)絡(luò)節(jié)點(diǎn),即發(fā)送這條報(bào)文的網(wǎng)絡(luò)節(jié)點(diǎn)l 報(bào)文信號l 注釋信號:l 信號是信息的最小單元,由以下系統(tǒng)參數(shù)定義l 符號化信號名稱l 信號長度l 格式l 數(shù)據(jù)類型l 系數(shù),基準(zhǔn)和物理單位?!霸贾怠笔蔷W(wǎng)絡(luò)上傳遞的實(shí)際數(shù)據(jù),“物理值”是真實(shí)反應(yīng)的物理量大小(如速度,轉(zhuǎn)速,溫度等)。信號轉(zhuǎn)換公式用于把原始值轉(zhuǎn)換成物理值:物理值(原始值

18、15;系數(shù))基準(zhǔn)。l 初始值。用物理值來定義。l 最大和最小值。用物理值來定義。l 單位。物理量的單位。l 注釋3.6 CANoe主窗口設(shè)計(jì)CANoe主程序中包括以下窗口:a.模擬設(shè)置窗口模擬設(shè)置窗口中圖形化顯示被模擬的總線和網(wǎng)絡(luò)節(jié)點(diǎn)。在模擬設(shè)置窗口中,模擬總線用紅線來表示,真實(shí)總線用黑線來表示。它們之間通過PC卡連接在一起。如圖3-7所示。圖3-7仿真設(shè)置窗口b.測量設(shè)置窗口測量設(shè)置窗口中顯示數(shù)據(jù)流的示意圖,包括數(shù)據(jù)源,基本功能塊,熱點(diǎn),數(shù)據(jù)接受器等。在在線模式下CAN卡作為數(shù)據(jù)源,記錄總線上的報(bào)文并把它們發(fā)到CANoe。測量窗口下的數(shù)據(jù)流是有方向的,總是從左邊的連接符號(連到模擬設(shè)置窗口)

19、流向右邊的評價窗口。測量設(shè)置窗口例子如圖2-6所示。圖3-8測量配置窗口c.跟蹤窗口所有到達(dá)跟蹤塊的輸入的數(shù)據(jù)都以文本形式在跟蹤窗口中顯示。圖3-9顯示了跟蹤窗口的一個例子。圖3-9跟蹤窗口D.圖形窗口圖形窗口用來顯示信號隨時間的變化。如果使用了數(shù)據(jù)庫,信號的值可以直接作為物理變量顯示在圖形窗口上,如發(fā)動機(jī)轉(zhuǎn)速可以直接以“轉(zhuǎn)/分”的單位顯示。e.寫窗口寫窗口在CANoe中有兩個作用:第一,測量過程中的重要系統(tǒng)信息在這顯示,如:測量開始和結(jié)束的時間,預(yù)設(shè)的波特率,記錄功能的觸發(fā),測量結(jié)束后的統(tǒng)計(jì)報(bào)告等。第二,在CAPL編程中用了“write()”語句輸出的信息都在這顯示。f.數(shù)據(jù)窗口數(shù)據(jù)窗口中顯

20、示信號的值,信號即CAN報(bào)文中的一個數(shù)據(jù)段,如發(fā)動機(jī)控制器發(fā)出的CAN報(bào)文中的某一段表示發(fā)動機(jī)轉(zhuǎn)速。如果用了數(shù)據(jù)庫功能,那么在數(shù)據(jù)窗口中的數(shù)據(jù)可以以物理變量的形式顯示,如發(fā)動機(jī)轉(zhuǎn)速可以以“轉(zhuǎn)/分”的單位顯示。在數(shù)據(jù)窗口中被顯示的信號要預(yù)先定義好。g.統(tǒng)計(jì)窗口統(tǒng)計(jì)窗口總可以顯示總線上報(bào)文之間的平均間隔時間,也可顯示每秒總線上的報(bào)文數(shù)量。同時還可以后臺統(tǒng)計(jì)所有活動的總線,其結(jié)果可以顯示在寫窗口中,也可以儲存下來。f.總線統(tǒng)計(jì)窗口顯示如總線負(fù)載率,峰值負(fù)載,錯誤幀等統(tǒng)計(jì)信息,如圖3-10所示圖3-10總線統(tǒng)計(jì)窗口第四章燈光控制系統(tǒng)仿真4.1 通信數(shù)據(jù)庫的建立4.1.1概述進(jìn)行CAN 網(wǎng)絡(luò)系統(tǒng)的開發(fā),

21、開發(fā)人員首先需求做的是系統(tǒng)功能的定義,即定義該網(wǎng)絡(luò)系統(tǒng)通信對象,根據(jù)通信特點(diǎn)選擇所需要的網(wǎng)絡(luò)類型,以及選擇網(wǎng)絡(luò)的屬性(例如波特率);同時需要考慮網(wǎng)絡(luò)里的通信需求:即所需要的節(jié)點(diǎn)數(shù)目,所需要發(fā)送報(bào)文(Message)的數(shù)量及ID 等;定義報(bào)文的收發(fā)節(jié)點(diǎn),即每個報(bào)文是從哪個節(jié)點(diǎn)(源節(jié)點(diǎn))傳送至哪個節(jié)點(diǎn)(目標(biāo)節(jié)點(diǎn));每個報(bào)文所包含的具體信號(Signal);定義每個信號的數(shù)據(jù)類型和對應(yīng)真實(shí)物理值之間的轉(zhuǎn)換方式,以及信號在報(bào)文的數(shù)據(jù)場中的地址分配等等。在上述定義過程中,可使用Vector 公司的網(wǎng)絡(luò)數(shù)據(jù)庫工具CANdb+,創(chuàng)建和管理前述分布式網(wǎng)絡(luò)定義和通信數(shù)據(jù),能檢查出概念定義的一些錯誤并及時改正,同

22、時可以幫助工程設(shè)計(jì)人員對網(wǎng)絡(luò)進(jìn)行優(yōu)化。另外,在CANdb+中,還可以加上環(huán)境變量來描述外部的輸入輸出。本文只進(jìn)行燈光控制系統(tǒng)的仿真設(shè)計(jì),不考慮其它因素,因此通信數(shù)據(jù)庫比較簡單。在CANoe中工具選擇CANdb+數(shù)據(jù)庫編輯器,新建一個數(shù)據(jù)庫,命名為Vehicle_light。4.1.2報(bào)文的建立報(bào)文即網(wǎng)絡(luò)節(jié)點(diǎn)發(fā)送的一幀數(shù)據(jù)信息,在CANoe中主要定義標(biāo)識符和數(shù)據(jù)位,其他部分由CANoe根據(jù)CAN協(xié)議來完成。對報(bào)文進(jìn)行命名時要注意統(tǒng)一規(guī)范并且要便于理解,如全部以“m”開頭,代表這是“Message”,燈光控制器發(fā)送的第一條報(bào)文為“mLight_1”,第二條為“mLight_2”,儀表控制器發(fā)送的第

23、一條為“mMeter_1”等,有的控制器在目前雖然只發(fā)一條報(bào)文,但是為了以后擴(kuò)展方便,應(yīng)同樣加上編號。接下來在同一網(wǎng)絡(luò)中對信息進(jìn)行標(biāo)識符分配,因?yàn)樵贑AN通訊中標(biāo)識符直接決定了報(bào)文的優(yōu)先級,所以對于標(biāo)識符的分配非常重要,對于比較緊急的情況報(bào)文應(yīng)具有較高的優(yōu)先級。中因本文只需要定義一條報(bào)文,所以標(biāo)識就沒有什么意義了,定義報(bào)文ID為0x01。在數(shù)據(jù)庫左側(cè)樹目錄中選擇message項(xiàng),右擊選擇new彈出報(bào)文定義對話框,在對話框中可以定義報(bào)文的名稱、ID、幀類型等。如圖4-1所示圖4-1 創(chuàng)建報(bào)文4.1.3信號的建立信號即報(bào)文中的某一段,代表某一個物理量或信號,是CAN中信息傳遞的最小單位。同樣對于信

24、號的命名要注意同樣規(guī)范和便于理解,例如以“jinguang”代近光燈信號,以“Bwudeng”代表后節(jié)點(diǎn)霧燈信號。對于數(shù)值量來說,所表示數(shù)值的范圍和需要的精度決定了系數(shù)和基準(zhǔn),如轉(zhuǎn)速信號,如果要精確到0.125轉(zhuǎn)/分,就以0.125為系數(shù),精度越高,表示同樣范圍的數(shù)據(jù)就需要占用更多的數(shù)據(jù)位。如發(fā)動機(jī)轉(zhuǎn)速,以0.125為系數(shù),占用16位(2個字節(jié)),可以表達(dá)最大為8191.875轉(zhuǎn)/分的轉(zhuǎn)速,如果要表示負(fù)的量,如冷卻液溫度等,就把需要表達(dá)的最低值定為基準(zhǔn),如-40,CANdb+Editor中可以自動根據(jù)基準(zhǔn)值和參數(shù)以及信號所占的位數(shù)來計(jì)算信號的最大值和最小值。對于開關(guān)量,只占用一位,在值定義里說

25、明含義,如“0”代表關(guān),“1”代表開。在數(shù)據(jù)庫左側(cè)樹目錄中選擇Singel項(xiàng),右擊選擇new彈出信號定義對話框,在對話框中可以定義信號的名稱、位索引類型、值類型、物理單位,系數(shù)、偏移量等。如圖4-2所示圖4-2創(chuàng)建信號本文定義的和燈光通訊相關(guān)的信號如表4-1所示。表4-1 定義的信號定義好報(bào)文和信號后還要將報(bào)文和信號進(jìn)行關(guān)聯(lián),報(bào)文與信號關(guān)聯(lián)有多種方式,可以在定義報(bào)文時直接加入關(guān)聯(lián)的信號,或在定義信號時加入關(guān)聯(lián)的報(bào)文,還可以在數(shù)據(jù)庫左側(cè)樹目錄中直接選擇一個信號按住左鍵拖到要關(guān)聯(lián)的報(bào)文下,報(bào)文和信號進(jìn)行關(guān)聯(lián)時,需要確定信號在報(bào)文中的起始位置,可能值為063。在CANoe中將信號和報(bào)文關(guān)聯(lián)完畢后,在

26、報(bào)文屬性的Layout窗口中可以非常直觀地看到信號在報(bào)文中的分布情況,如圖4-3所示,一幀報(bào)文的8個字節(jié)64位以表格的形式被直觀地表達(dá)出來,在這個表格中,可以看到64位的每一位各被什么信號占用,每個信號占用的位的長度和起始終止位置。4.1.4環(huán)境變量的建立環(huán)境變量的命名也需要注意規(guī)范和便于理解,如以“SW1”代表開關(guān)1的控制型環(huán)境變量,“Ljinguang”代表近光燈顯示型環(huán)境變量。這樣的統(tǒng)一命名對于后期的使用非常有利。在數(shù)據(jù)庫左側(cè)樹目錄中選擇Environment項(xiàng),右擊選擇new彈出環(huán)境變量定義對話框,在對話框中可以環(huán)境變量的名稱、值類型、最大值,最小值等。如圖4-3所示圖4-3 環(huán)境變量

27、的定義本項(xiàng)目中建立的環(huán)境變量清單如表4-2所示:表4-2 定義的環(huán)境變量4.2建立虛擬節(jié)點(diǎn)對于一個和CANoe相連的真實(shí)網(wǎng)絡(luò)來說,所有CANoe發(fā)出的報(bào)文信號都是從CANoe的CAN(CANcaseXL)卡發(fā)出的,但是在CANoe軟件內(nèi)部,不同的報(bào)文信號是由不同的虛擬節(jié)點(diǎn)發(fā)出來的,為了仿真燈光控制系統(tǒng),需要在CANoe軟件里創(chuàng)建各個節(jié)點(diǎn)。接下來就要在CANoe的Simulation Setup窗口中構(gòu)建虛擬網(wǎng)絡(luò),包括各個被模擬的節(jié)點(diǎn)。完成純數(shù)字仿真Simulation Setup窗口初始界面如圖4-4所示圖4-4Simulation Setup初始界面圖中的方框代表一個總線系統(tǒng),紅線代表虛擬的

28、總線,黑線代表實(shí)際的總線,CANoe提供的CAN卡(CANcaseXL)是虛擬總線和實(shí)際總線之間的接口。右鍵點(diǎn)擊這兩條線,出現(xiàn)如圖4-5所示界面:圖4-5 加入網(wǎng)絡(luò)節(jié)點(diǎn)Insert network node可以在總線上加入一個網(wǎng)絡(luò)節(jié)點(diǎn);Insert test module可以在總線上加入一個測試模塊;Insert generator block可以在總線上加入一個發(fā)生器(可以不用capl語言就可以在總線上發(fā)出想傳送的信息);Insert interactive generator block可以在總線上加入一個內(nèi)部發(fā)生器(可以在用measurement監(jiān)測的時候就能對設(shè)定的動作進(jìn)行操作,發(fā)出信

29、息);Insert replay block CAN可以在總線上加入一個重放模塊,只需在其中設(shè)置measurement中的log保存下來的*.asc文件進(jìn)行播放,就可以立即模擬出剛才總線上報(bào)文發(fā)送的情況;Switch all blocks to simulation即把所有總線上的模塊立即與總線相連;Switch all blocks to real-time mode即把所有總線上的模塊立即與總線斷開。在Simulation Setup中加入以下的虛擬網(wǎng)絡(luò)節(jié)點(diǎn):Main主控制器Front前車燈控制器Back后車燈控制器虛擬節(jié)點(diǎn)建立設(shè)置完畢后,還要將上一章中建立的數(shù)據(jù)庫和此Simulation

30、 Setup總線關(guān)聯(lián),在右側(cè)樹狀圖右鍵點(diǎn)擊Databases,出現(xiàn)如圖4-6所示界面:圖4-6 加入數(shù)據(jù)庫點(diǎn)擊ADD可加入數(shù)據(jù)庫,如Vehicle_Light.dbc。完成后的Simulation Setup如圖4-7所示。圖4-7 完成的模擬設(shè)置窗口4.3創(chuàng)建面板面板編輯器中創(chuàng)建的面板是人機(jī)交互的界面,通過面板可以以直觀的方式讓CANoe按操作者的意圖發(fā)送出相應(yīng)的CAN報(bào)文 4.3.1建立控制面板在CANoe工具中選擇Panel editor,然后在面板上添加開關(guān)和燈,設(shè)計(jì)控制面板如圖4-8所示:圖4-8 控制面板開關(guān)用于輸入控制值,燈根據(jù)開關(guān)狀態(tài)亮滅。面板上的控件都要和相應(yīng)的環(huán)境變量相關(guān)聯(lián)

31、, 選擇一控件右擊配置,打開環(huán)境變量配置對話框如圖4-9所示。設(shè)置關(guān)聯(lián)的環(huán)境變量。對于顯示燈除了和相關(guān)的顯示環(huán)境變量關(guān)聯(lián)外,還需要指定對應(yīng)的位圖,位圖上有開關(guān)的不同狀態(tài)的顯示,設(shè)置和位圖如圖4-10所示。圖4-9開關(guān)型環(huán)境變量的配置圖4-10顯示燈設(shè)置完成面板設(shè)計(jì)后需要將設(shè)計(jì)的面板加到CANoe中,在CANoe中選擇PanelConfigure panels,打開添加對話框,如圖4-11所示。單擊add可以添加面板,display顯示選擇的面板,display all顯示所有面板。圖4-11 添加面板4.4 CAPL編程界面完成后,CANoe還不能根據(jù)對界面操作發(fā)出CAN報(bào)文或根據(jù)CAN報(bào)文在

32、模擬面板作出相應(yīng)反應(yīng),為了達(dá)到這一目的,還必須進(jìn)行CAPL編程的工作,主控節(jié)點(diǎn)程序框圖如圖4-11所示:否初始化(on Start)設(shè)置循環(huán)發(fā)送間隔時間(timer)開關(guān)狀態(tài)是否改變?根據(jù)開關(guān)狀態(tài)給相應(yīng)信號賦值發(fā)送報(bào)文是否是時間到?圖4-12主控節(jié)點(diǎn)程序流程框圖前后車燈節(jié)點(diǎn)程序流程圖是否接收到報(bào)文?初始化,設(shè)置定時器間隔時間根據(jù)接收的報(bào)文,為顯示燈賦值是否圖4-13前后節(jié)點(diǎn)程序流程框圖接下來以主控節(jié)點(diǎn)和前車燈節(jié)點(diǎn)為例,說明CAPL編程過程。CAPL是類C的編程語言,在編程界面的左側(cè)樹狀圖中分別有變量聲明,系統(tǒng),CAN控制器,報(bào)文,定時器,鍵盤,錯誤幀,環(huán)境變量,函數(shù)等項(xiàng),如圖4-12所示,只需

33、在分別在相關(guān)欄目中寫入程序即可。變量聲明程序如下:variablesmessage Light Msg1;mstimer timer1;以上程序中,將msg1設(shè)置為信息變量,并且和Vehicle_Light數(shù)據(jù)庫里的信息相關(guān)聯(lián),將timer1設(shè)置為以ms為單位的時間變量。圖4-14CAPL編程System的啟動部分主要進(jìn)行一些初始化的工作,程序如下:on startsettimer(timer1,200);以上程序首先將相關(guān)的報(bào)文信號初始化置零,然后發(fā)出首條初始報(bào)文,根據(jù)設(shè)定的發(fā)送時間間隔設(shè)置時間變量值,最后在write窗口給出提示信息。Timer部分是定時器相關(guān)的設(shè)置,程序如下:on tim

34、er timer1settimer(timer1,200);output(Msg1);以上程序段在time1r定時器到時msg1報(bào)文,并且重新設(shè)時器100ms。Environment部分對環(huán)境變量的改變做出反應(yīng),程序如下:on envVar Szhidongif(getvalue(this)=1)Msg1.zhidong=3;elseMsg1.zhidong=0;output(Msg1);以上程序段在開關(guān)狀態(tài)發(fā)生改變時(通過對控制面板的操作實(shí)現(xiàn)),將根據(jù)開光狀態(tài)對相應(yīng)的報(bào)文里的相關(guān)信號賦值,環(huán)境變量的值是通過getvalue函數(shù)得到的。復(fù)制后CANoe下次發(fā)出此條報(bào)文時,里面的信號的值都已根據(jù)

35、控制面板的變化發(fā)生了相應(yīng)變化。4.5仿真結(jié)果分析按以上步驟建好節(jié)點(diǎn)功能模型和面板后,即可進(jìn)行系統(tǒng)的軟件仿真。首先設(shè)置軟件為仿真模式,在工具欄上選擇開始按鈕即開始仿真。報(bào)文發(fā)送情況如圖4-16所示:圖4-16 數(shù)據(jù)跟蹤窗口仿真過程中總線的負(fù)載和各種統(tǒng)計(jì)數(shù)據(jù)如圖4-17所示圖4-17總線統(tǒng)計(jì)窗口從仿真結(jié)果可以看出報(bào)文發(fā)送情況良好,總線負(fù)載為0.42%,峰值負(fù)載為0.58%第五章 軟件設(shè)計(jì)由于時間關(guān)系,本文不進(jìn)行燈光系統(tǒng)的硬件電路設(shè)計(jì),采用周立功單片機(jī)實(shí)驗(yàn)箱模擬真實(shí)節(jié)點(diǎn)的ECU,采用SJA1000CAN控制器,進(jìn)行系統(tǒng)的軟件設(shè)計(jì),5.1 SJA1000初始化CAN控制器在上電或硬件復(fù)位后必須進(jìn)行初始

36、化操,然后才能進(jìn)行發(fā)送和接收數(shù)據(jù)。SJA1000 CAN控制器的初始化主要設(shè)置以下幾項(xiàng)內(nèi)容:通信方式、濾波方式、驗(yàn)收濾波器設(shè)置、總線定時等。SJA1000初始化流程圖如下:開始初始化工作方式設(shè)為復(fù)位模式設(shè)通信方式為PeliCAN設(shè)驗(yàn)收代碼和驗(yàn)收屏蔽寄存器設(shè)通信波特率輸出控制字清除錯誤代碼寄存器初始化結(jié)束設(shè)濾波工作方式SjA1000初始化程序如下:void SJA1000_Config_Self(void) SJAEntryResetMode(); /進(jìn)入復(fù)位模式WriteSJAReg(REG_CAN_CDR,0xc8); /選擇PeliCAN模式 SetBitMask(REG_CAN_MOD,

37、AFM_BIT); /選擇單濾波模式 WriteSJARegBlock(16,&CAN_Baudrate_Filter_Buffer1,8); /設(shè)置驗(yàn)收代/碼/屏蔽寄存器 WriteSJAReg(REG_CAN_OCR,0x1a);/設(shè)置輸出管腳 SJASetBaudrateStandard(CAN_Baudrate_Filter_Buffer0); /設(shè)置總線定時/器,確定波特率 SJAQuitResetMode();/退出復(fù)位模式5.2 節(jié)點(diǎn)的發(fā)送程序發(fā)送節(jié)點(diǎn)報(bào)文發(fā)送采用周期查詢方式,只要總線空閑就可向總線上發(fā)送報(bào)文,發(fā)送節(jié)點(diǎn)程序流程圖如下: 開始讀狀態(tài)寄存器發(fā)送緩沖區(qū)空閑?寫發(fā)送標(biāo)識符寫發(fā)送數(shù)據(jù)置發(fā)送請求位結(jié)束YN節(jié)點(diǎn)發(fā)送程序如下:Send_Message()while(1)if(ReadSJAReg(REG_CAN_SR)&0x0c)=0x0

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論