??最近畢業設計需要用到AVL Cruise與Simulink進行聯合仿真,分析汽車模型的經濟性。下面介紹一下我所知的AVL Cruise與Simulink聯合仿真的幾種方式,它們各自的優缺點,以及DLL方式聯合仿真的具體配置過程。我這里用的MATLAB軟件版本是2021a,Cruise軟件版本是2019.2,電腦操作系統是Windows11。
這是一個目錄0.0
- 1.AVL Cruise與Simulink聯合仿真的不同方式及各自優缺點
- 1.1MATLAB DLL方式
- 1.2MATLAB API方式
- 2.DLL聯合仿真MATLAB配置過程
- 2.1在MATLAB里安裝編譯器
- 2.2在MATLAB中安裝DLL的必要文件并設置編譯器
- 3 AVL Cruise和MATLAB DLL聯合仿真時快速生成Simulink模型的方法
- 4.Simulink編譯DLL文件
- 5.聯合仿真
1.AVL Cruise與Simulink聯合仿真的不同方式及各自優缺點
1.1MATLAB DLL方式
該方式是先把SImulink中建立的模型編譯成一個DLL文件,之后把這個文件內嵌到Cruise軟件中作為一個模塊,并進行仿真的方法。
優點:因為是內嵌到Cruise軟件中了,因此運行時不需要調用Simulink,運行速度非常快,且是由Simulink模型編譯生成的dll文件,在Cruise軟件里看不到具體的模型是如何搭建的,比較保密,不會泄露控制模型信息。
缺點:同樣是因為內嵌到Cruise軟件中了,因此運行時無法實時查看模型內部的參數,不適用于調試Simulink控制模型,因為改一點模型就需要編譯一次dll文件,且無法有效的定位模型中出錯的地方。
1.2MATLAB API方式
該方式是Cruise在前臺,處于主要地位,聯合仿真時打開對應的Simulink模型,由Cruise向Simulink發送必要的參數以及指令,在Simulink中完成計算后把結果返回到Cruise中,繼續進行下一步。該方法和DLL方法的優缺點正好反過來了。
優點:可以實時查看Simulink模型中的參數變化,便于調試,更改模型后不需要重新編譯dll文件就能進行聯合仿真。
缺點:沒有內嵌到Cruise模型中,運行時需要實時調用Simulink,因此運行速度極慢無比,且必須要拿到Simulink控制模型源文件才能進行聯合仿真,容易泄露信息。
2.DLL聯合仿真MATLAB配置過程
2.1在MATLAB里安裝編譯器
- 編譯dll文件是需要編譯器的,我的MATLAB版本沒有自帶編譯器,因此需要外部安裝一個,這里我選擇了TDM-GCC-64編譯器,該安裝包我已經上傳到了CSDN資源庫,可以從這里下載。下載完成后進行安裝,這里因為我的電腦操作系統就是64位的,因此安裝的版本選擇了64位的:
期間安裝程序會自動去網上下載必要的安裝文件,因為可能是外網,因此下載速度會很慢,如果安裝失敗,建議換個網絡后重新安裝。 - 在計算機處右鍵單擊,選擇屬性按鈕:
- 點擊高級系統設置:
- 在彈出的窗口中選擇環境變量:
- 點擊系統變量下的新建按鈕:
- 在彈出框中,變量名處輸入
MW_MINGW64_LOC
,變量值處輸入剛剛TDM-GCC-64的安裝路徑C:\TDM-GCC-64
,之后點擊確定:
可以看到系統變量里已經有了剛剛加入的環境變量,注意查看此處顯示的環境變量名和值是否為MW_MINGW64_LOC
和安裝目錄。
2.2在MATLAB中安裝DLL的必要文件并設置編譯器
- 先把MATLAB軟件的當前目錄展開至Cruise軟件安裝目錄下的AVL\R2019.2\CRUISE\matlab\Install_DLL文件夾,并雙擊打開Install.m文件,如下圖所示:
- 打開后點擊運行按鈕,結果如下圖所示:
- 在下方的輸入框中輸入
mex -setup
后按回車: - 提示如下圖所示,代表已經成功的為C語言編譯選擇了編譯器:
3 AVL Cruise和MATLAB DLL聯合仿真時快速生成Simulink模型的方法
-
在Cruise軟件里拖入MATLAB DLL模型后,進行數據總線連接,這里輸入信號連接了Cockpit里的Velocity信號,輸出信號連接了Engine里的Desired Torque信號,如下圖所示:
-
雙擊MATLAB DLL模塊,打開設置菜單,切換到Description of Data Bus選項卡,并點擊下方的update按鈕:
-
可以看到這里更新了連接到MATLAB DLL模塊的信號,雙擊每個信號中Unit的空白處,對該信號進行必要的設置,比如設置單位等:
-
點擊下拉框,可以選擇對應的項目和單位,比如這里選擇Velocity,km/h,并點擊OK完成設置:
-
依次設置完每個信號的單位,點擊最下方的Create mdl-File,即可創建含有對應輸入輸出信號的Simulink模型:
-
該模型保存在Cruise模型根目錄下的userdata文件夾中,其中這個后綴為.mdl的文件就是剛剛生成的Simulink模型文件:
4.Simulink編譯DLL文件
對生成的SImulink文件進行必要的建模之后,就開始進行編譯DLL文件的準備工作,具體如下所示:
- 點擊SImulink模型中最上面的APPS,再點擊SImulink Coder打開編譯器,如果紅色框處沒有SImulink Coder,那么就點擊右側的下拉框,在里面尋找SImulink Coder并點擊打開:
- 點擊Settings:
- 在Slover選項卡中按標紅所示的參數進行設置:
- 在Data Import/Export選項卡中,設置Format為Array:
- Code Generation選項卡中按如下圖所示進行配置:
- 完成上述設置后,點擊Build按鈕進行編譯DLL文件:
- 左下角顯示Ready并且沒有報錯后即完成了DLL文件的編譯:
5.聯合仿真
- 在Cruise軟件中打開DLL模塊,點擊圖中所畫的按鈕,選擇之前上一步編譯Simulink文件得到的后綴名為.dll的文件,點擊OK并確定,即完成了DLL模塊的配置。
- 保持頁面在Sub-System 001頁面的情況下,點擊上方的options并選擇Layout,設置編譯平臺為Win64,并點擊OK確定。
- 切換到計算中心,點擊開始計算按鈕,即可開始運行設定好的仿真任務,實現聯合仿真。