摘 要:文章介紹基于CANoe環(huán)境,來模擬控制器與ECU控制單元在can總線上的數(shù)據(jù)通信過程。
關(guān)鍵詞:can總線;信號;消息;環(huán)境變量
1 引言
CAN,全稱為“Controller Area Network”,即控制器局域網(wǎng),是國際上應(yīng)用最廣泛的現(xiàn)場總線之一,在自動化領(lǐng)域的應(yīng)用非常廣泛,其特點是結(jié)構(gòu)簡單、成本低,但速度高、實時性和可靠性好。
CANoe是德國Vector公司開發(fā)的一款功能非常強大的CAN總線開發(fā)測試軟件,可以實現(xiàn)真實總線的實時監(jiān)控,半實物仿真和全虛擬總線的仿真。它包含CAN網(wǎng)絡(luò)數(shù)據(jù)庫編輯器CANdb++,虛擬節(jié)點CANPL語言編程,用戶自定義面板組件 Panel Generator以及一些集成的調(diào)試監(jiān)控組件,能滿足各種開發(fā)測試的需要。本文將介紹如何基于這些工具模擬CAN總線的數(shù)據(jù)通信,實現(xiàn)特定的一些功能。
2 CAN總線數(shù)據(jù)庫的設(shè)計
CANdb++是CANoe內(nèi)置的工具,用來描述CAN總線的一些對象,這些對象包括:(1)CAN節(jié)點。具體包括CAN總線網(wǎng)絡(luò)中所有節(jié)點的名稱以及通信ID。(2)信號signal。信號signal代表一種類型的變量,一般用消息中的一位或者幾位來表示。一般包含的主要信息有:startbit,即開始位;length,即這個變量的長度是多少位的。除此之外還有最大值最小值的設(shè)置等等。(3)消息Message。Message的實質(zhì)就是在CAN總線上通信的數(shù)據(jù)幀,一個Message包含的主要信息有:ID,表明這個數(shù)據(jù)幀是從哪個節(jié)點發(fā)出的;DLC,也就是數(shù)據(jù)幀的長度,即多少個字節(jié)(Byte);信號signal,一個消息一般含有一個或多個信號。(4)環(huán)境變量(environment variables)。環(huán)境變量是信號的另一個身份,用以在CANPL編程和Panel面板時進行變量綁定。
在使用CANdb++之前,首先需要在CANoe中建立一個CAN總線的節(jié)點網(wǎng)絡(luò)。將兩個虛擬節(jié)點分別命名為CAB和ECU,用來表示控制器單元和ECU單元。如圖1所示。
圖1
打開CANdb++,建立數(shù)據(jù)庫。其中重要的幾個項目是Environment variables,network nodes,Message和Signals。在CANdb++的左側(cè)欄可以查看。
首先建立兩個節(jié)點,分別為cab_node和ECU_node,然后建立兩個Message,分別表示CAB發(fā)給ECU的消息和ECU發(fā)給CAB的消息。根據(jù)我們實際采集的通信數(shù)據(jù),將兩個Message的ID分別設(shè)置為0x2A4和0x2A5(16進制),DLC設(shè)置為3,表示每個消息長度為3個字節(jié)。
然后再建立所需要的信號。根據(jù)需要,建立了5個信號,并將這5個信號都綁定到CAB_to_ECU這個消息上,每個信號長度為1bit,即都只占用CAB_to_ECU這個消息的1位。具體是第幾位根據(jù)采集的實際通信數(shù)據(jù)經(jīng)過分析可以得到,并做相應(yīng)的設(shè)置。最終建好的數(shù)據(jù)庫如圖2所示。
3 基于 Panel Desinger的界面設(shè)計
在CANoe的主界面中點擊file->open Panel Desinger即可打開Panel Designer組件。Panel Designer是一個很簡單易學(xué)的工具,通過拖拽控件和屬性設(shè)置即可完成界面的設(shè)計和變量的綁定。
ToolBox是各種常用的顯示控件,包括有按鈕,指示燈開關(guān),復(fù)選框,文本框,靜態(tài)文本等等。
通過拖拽ToolBox里的指示燈和靜態(tài)文本控件,我們建立一個如圖3所示的界面。
圖3
界面完成后,需要在Properties中進行一些設(shè)置。Display Only屬性表示是否只顯示,在這里可以設(shè)置為true,指示燈不需要進行操作,只需要讀取變量進行顯示;State Count 設(shè)置為2,表示只有兩個狀態(tài);Switch Value設(shè)置為0:1,表示指示燈只有0或1的取值;Symbol Filter設(shè)置為Environment Variables,然后點擊Symbol,會出現(xiàn)一個列表,一一綁定到數(shù)據(jù)庫中相應(yīng)的環(huán)境變量。完成之后點擊保存,保存好的文件為.xvp格式的文件。類似地設(shè)置CAB端的界面,并將所有控件與數(shù)據(jù)庫中相應(yīng)的環(huán)境變量綁定。
4 基于CANPL編程語言進行通信模擬
CANPL全稱為CAN Access Programming Language,是一種類C語言的編程語言,語法與C語言基本相同,不同的是,它是一種面向事件的編程語言,有自己特定的程序結(jié)構(gòu)。
CANPL的事件語句大體上分為三種,即總線事件,鍵盤事件,時間事件。
總線事件:on message Message{……} 表示接受到指定消息時執(zhí)行。
鍵盤事件:on key 'a'表示按鍵盤'a'時反應(yīng)。
時間事件:timer Mytimer 將Mytimer申明為以秒為單位的定時器;setTimer(Mytimer,20)表示將定時器設(shè)置為20秒間隔,并啟動。
通過編寫CANPL程序,實現(xiàn)CAB和ECU雙節(jié)點的數(shù)據(jù)通信,在Canoe的Trace版面下可以查看模擬過程中的實時數(shù)據(jù)。最終數(shù)據(jù)如圖4。
參考文獻
[1]史久根.CAN現(xiàn)場總線系統(tǒng)設(shè)計技術(shù),2004年.
[2]陳覺曉,孫澤昌.基于canoe的實時can總線數(shù)據(jù)紀錄軟件的設(shè)計方法[J].測控技術(shù),2006 vol25(2):45-47.
[3]CANoe Manual Verion 52.[R].Germany:Vector InformatikGmbH,2005.
作者簡介:徐雨晨(1990-),男,安徽省合肥市,同濟大學(xué)軟件工程專業(yè),碩士,研究方向:多媒體與虛擬現(xiàn)實。