使用CANoe搭建CAN網關

原文鏈接:https://blog.csdn.net/easychang/article/details/51933941

使用CANoe搭建CAN網關

Vector公司的CANoe是一款強大的總線仿真工具,通過CANoe搭建出來的總線模型可以模擬真實的汽車總線,並且通過CAPL語言可以對節點上的ECU進行編程。這樣不僅能夠模擬總線上的報文發送,還可以模擬ECU的內部邏輯,理論上可以完全模擬出CAN總線系統。下面介紹一下如何通過CANoe搭建一個CAN網關。

 

        假設最簡單的情況,CAN網絡具有3個節點,如下所示。控制器B在接到A發送的報文後,要加以處理,然後再發送給控制器C。這裏控制器A和控制器B位於CAN1網絡,控制器B和控制器C位於CAN2網絡,也就是說控制器B是網關。

 

 

        在CANoe界面中搭建總線拓撲結構。這裏的ECU2就是我們的CAN網關。

 

 

CAN1網絡

 

 

CAN2網絡

 

爲了讓ECU2能夠接收到一些CAN報文,首先對ECU1進行編程,讓其週期性發送報文。點擊ECU1上的鉛筆圖標,進入編程界面,添加on start和timer事件。On start事件的目的是在ECU1開始上電時設置定時器timer和一些初始值。在timer定時器觸發事件裏,讀取CAN dbc的報文併發送,同時再次給timer設置觸發定時。如下圖所示,這裏從dbc裏定義了兩個報文,分別包含電壓電流和車速信息。我設置了一個面板,用來調節這些值,一旦面板上的值有所變化,就會改變dbc中的環境變量。Timer觸發中斷裏所要做的就是讀取這些環境變量的值,更新報文內容然後發送。

 

 

給ECU1編程好後,就要對關鍵的網關ECU進行編程了。這裏設想最簡單的方式,及ECU2對收到的報文不加以任何處理,直接發送到CAN2網絡上去。代碼如下,這裏其實只要添加一個on message CAN1的事件,就是凡是收到CAN1消息都會觸發的事件。代碼所做的事情就是先判斷是否是收到的消息(而不是發送的),如果是,就直接發送到CAN2通道上。CAPL的變量設置很有意思,在聲明CAN報文變量時就可以指定是哪個通道,這樣調用output函數時就會直接發送到該通道上。如果在聲明時沒有指定通道,則可以在變量的channel屬性中賦值。

 

 

當一切設置完畢後,就是運行了。CANoe可以支持真實總線仿真,就是總線上會真實發送報文,或者模擬總線仿真,只在電腦上運行。經測試如果勾選真實總線,而總線上面沒有對應的接收節點或是終端電阻,CANoe會報錯。所以我們選擇模擬總線仿真。運行時trace窗口截圖如下。大功告成!可以看大CAN1、CAN2上都有數據,CAN2是隻有ECU2從CAN1上收到數據時纔會觸發發送的,ECU2將ECU1發來的數據計算後,返回給ECU3一個計算結果,這樣降低了ECU3的負載率。J~

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章