劉 輝,韓 梅,胡 清,王 穎
(陜西汽車集團有限責任公司技術中心,陜西 西安 710200)
CANoe (CAN Open Environment) 是德國Vector公司推出的一款用于總線網絡開發、測試和分析的專業工具,在汽車電子行業應用廣泛。Matlab/Simulink是美國MathWorks公司發布的一種可視化設計工具,它提供了一個動態系統建模、仿真和綜合分析的集成環境,廣泛應用于復雜控制過程和數字信號處理的仿真和設計。CANoe/Matlab聯合仿真結合了CANoe完善的總線分析能力和Matlab/Simulink強大的圖形化建模能力,使總線網絡中各節點的控制算法得到準確描述,極大地提高了各控制單元通信功能的開發和驗證效率。
本文基于CANoe/Matlab聯合仿真工具,對純電動汽車上下電控制過程進行仿真測試,驗證控制過程的可行性和準確性。
Matlab版本的不同,與之相匹配的C編譯器也有所不同,這會影響動態鏈接庫dll的生成。因此,在CANoe/Matlab接口軟件安裝前首先應安裝與所選Matlab版本相匹配的編譯器,本文選擇Matlab2012b,并選用VisualC++6.0進行編譯。同時所選CANoe為7.2版本。
CANoe/Matlab接口軟件的存儲路徑:(CANOE DEMOS)Demo_AddOnMatlab,運行Vector_AddOn_Matlab_Interface_V300.exe文件,其安裝路徑是默認的,安裝完成后,Matlab/Simulink的模塊庫中會自動生成Vector CANoe的功能模塊。
在Matlab/Simulink中建立控制單元模型,CANoe中對簡單的節點功能可以通過CAPL(CAN Access Programming Language)編程來實現,Matlab/Simulink可以看作是CANoe中CAPL功能的擴展,它可以通過圖形化的方式描述復雜的控制過程。Matlab/Simulink的Vector CANoe模塊庫提供了多種輸入接口和與其對應的輸出接口,這些接口模塊是實現CANoe和Simulink聯合仿真的關鍵,CANoe的環境變量、系統變量、總線信號都可以通過這些輸入輸出模塊與Simulink模型進行數據交互。本文中所用到的整車上下電流程如圖1中所示。
一般情況下,Simulink模型中控制單元的主體部分是相對獨立的,輸入輸出模塊在Vector CANoe模塊庫中選取,這些輸入輸出模塊可以直接關聯CANoe中加載的數據庫文件或系統變量,如圖2所示。

圖1 整車上下電流程

圖2 關聯數據庫文件
CANoe/Matlab聯合仿真提供了3種仿真模式:離線模式(Offline Mode)、同步模式 (Synchronized Mode)與硬件在環模式 (Hardware-In-The-Loop)。
離線模式是在Matlab/Simulink環境下運行的一種非實時仿真,是以Matlab的時鐘為基準的,仿真的開始和結束都由Matlab控制。一般完全的虛擬仿真可以采用這種模式。
同步模式也是在Matlab/Simulink環境下運行的,但它的運行是以CANoe的時鐘為基準的,CANoe總線中可以是完全虛擬的節點,也可以接入真實節點。離線模式和同步模式仿真時都需要在Simulink模型中添加“Simulation Step”模塊并選擇對應的模式,這兩種仿真模式一般用于設計的早期階段。
硬件在環模式是在CANoe環境下運行的一種實時仿真。一般運行復雜的模型或進行殘余總線仿真時建議采用這種模式。
利用CANdb++->Editor創建數據庫文件,按照網絡通信協議中定義的各信號參數編輯信號列表,然后對信號與報文、報文與節點之間的從屬關系進行配置,硬線輸入輸出信號在環境變量中定義。將創建好的數據庫文件導入到CANoe/Simulation Setup中,如圖3所示。建議創建數據庫文件時選擇“Vector_IL_Basic Template.dbc”模板。
仿真過程中可能需要對某些信號進行直接顯示以便觀測,也可能需要將外界的某些變量值輸入到總線網絡中。使用CANoe的Panel Designer功能,可以根據仿真需要創建友好的人機交互界面。

圖3 加載數據庫的仿真界面
CANoe的CAPL編程功能可以準確地描述節點在總線上的動作。在CANoe/Matlab聯合仿真中,目標節點的控制過程由Simulink模型來實現,但對一些必要的底層觸發條件或不同節點之間信號的關聯關系則需要通過CAPL編程來實現,如圖4所示,本次仿真過程中,BMS的充電狀態需要設置為鍵盤事件觸發發送。

圖4 CAPL程序編輯界面
開始仿真之前,還需對Simulink模型的求解器參數進行配置,如果要用到硬件在環模式仿真,還需要對代碼生成參數進行配置。
離線模式仿真和同步模式仿真都需要在Matlab/Simulink環境下運行,仿真模式由“Simulation Step”模塊控制。仿真的啟動和結束由Matlab/Simulink控制,仿真啟動時會自動關聯到CANoe,在CANoe的Trace窗口即可觀察到總線數據。離線模式仿真是以Matlab為主體的,CANoe默認工作在Simulation Bus模式;同步模式是以CANoe為主體的,CANoe的工作模式Simulation Bus或Real Bus是根據CANoe的實際仿真方式來設置的。
硬件在環模式的仿真需要在CANoe環境下運行。首先需要在Matlab/Simulink環境下編譯目標節點的Simulink模型,生成面向CANoe的DLL文件,模型編譯前需要選擇好合適的編譯器并且要將當前的工作路徑設置為模型所在的文件夾。編譯完成后生成的DLL文件和配置文件會自動保存到xxx_cn_rtw/Release文件夾下。如圖5所示,將生成的dll文件、ini文件和創建好的mdl文件導入到CANoe的目標節點中,根據實際需求對CANoe的配置參數進行設置。
完成上述聯合仿真的準備工作后,即可以在Matlab或CANoe內運行仿真。

圖5 加載DLL文件
在Matlab/Simulink中啟動仿真,通過CANoe/Panel面板上鑰匙開關、擋位狀態的切換和鍵盤觸發BMS充電狀態的切換,觀測整車狀態值的變化是否符合設定要求。圖6和圖7分別是離線模式和同步模式下的仿真Trace界面。

圖6 Matlab/Simulink環境下離線模式仿真

圖7 Matlab/Simulink環境下同步模式仿真
由仿真運行結果可知,相同的輸入條件下離線模式和同步模式的仿真結果是相同的。需要注意的是,當CANoe選擇Real Mode時,同步模式仿真只能在真實總線條件下運行。
使用硬件在環模式進行整車上高壓流程的仿真,當整車狀態滿足:鑰匙開關key=3(Start擋)、擋位信號Shift=3(空擋)、充電狀態Charge=0(未充電)條件時,則整車應進入預充電狀態Vehicle_Status=4,如圖8所示。
整車進入預充電狀態后,檢測電池狀態BatStatus、電池電壓BatVol、電機狀態MotStatus、電機電壓MotVol是否滿足設定要求 (此過程由CAPL程序執行,并輸出上電指令Vehicle_UpPower=1,表示整車上高壓完成,已進入準備就緒狀態),此時通過Panel面板控制擋位信號Shift=2(倒擋)或Shift=4(前進擋),則整車應進入正常運行狀態Vehicle_Status=8。仿真結果如圖9所示,與模型控制策略完全符合。

圖8 整車上高壓流程仿真界面1

圖9 整車上高壓流程仿真界面2
CANoe/Matlab聯合仿真結合了CANoe和Matlab各自的優勢,既可以進行完全的虛擬仿真,也可以進行硬件在環仿真。從仿真結果可以看出,3種聯合仿真模式對純電動汽車上下電控制過程的驗證是可行的,得出的仿真結果具有較好的一致性,CANoe與Matlab聯合仿真能夠滿足控制單元開發過程中應用層協議和控制策略的測試與驗證需求,能極大地提高開發周期和效率。