
歡迎關注我的微信公眾號【新能源動力電池與BMS】,頭條號:【阿Q在江湖】;所有文章資料會在公眾號首發。
本文已同步錄制視頻講解:Simulink代碼生成之模型配置_視頻教程 - 知乎。
PS:前段時間,傳出美國禁用一些高校使用正版Matlab軟件,有些人說是否有可替代的軟件?Python替代Matlab軟件m語言編寫的部分功能似乎問題不大,不過Simulink呢?似乎還沒有可替代的吧?
Simulink是Matlab中非常獨特而重要的一個建模工具,能夠通過圖形化模塊快速建模并仿真,同時可自動生成C代碼,下載到硬件中,使得復雜系統的算法仿真與開發變的非常高效(比如汽車行業、航空航天都已廣泛使用Simulink建模仿真與開發)。要生成嵌入式C代碼需要提前將模型進行一些參數配置。下面列舉模型配置的一些步驟。
必須配置項
1. 打開模型參數配置面板(Configuration parameters)

在菜單欄打開上圖圖標或者快捷鍵Ctrl+E,打開模型配置參數面板。
2. 解算器設置(Solver)

? 解算器類型(Type):
路徑:Solver-->>Solver options-->>Type
默認是變步長(Variable-step),需要設置為固定步長(Fixed-step)。因為嵌入式代碼是要下載到硬件中實時執行,硬件的時鐘源都是晶振提供的穩定時鐘源,所以解算器必須采用固定步長。
? 解算器算法選擇(Solver):
路徑:Solver-->> Solver options -->> Solver
這里選擇discrete算法
? 步長(Fixed-step size):
路徑:Solver-->>Additional options-->> Fixed-step size
根據需要一般要選擇一個固定數值,其單位為秒。步長是相鄰兩個采樣點之間的時間間隔,相當于模型中算法的最小單位調用周期。這里選擇0.1,即100ms采樣一次。
3. Code Generation


? 系統目標文件(Target selection)
路徑:Code Generation-->>Target selection-->> System Target file
這里一般選擇與嵌入式相關的系統目標文件,如ert.tlc;如果選擇autosar.tlc,那么會生成符合autosar接口標準的車規級代碼。
? 編譯過程(Build process)
路徑:Code Generation-->> Build process
因為我們只為了看生成的C代碼,這里勾選generate code only
4. 硬件設備選擇(Device vendor)

路徑:Hardware Implementation -->>Device vendor/ Device type
這里選擇的是你要將代碼下載到的硬件MCU/DSP的型號。
優化項
1. 信號與參數(Signal and Parameters)

路徑:Optimization -->> Signal and Parameters-->>Code generation
勾選Inline invariant signals.提高生成的C代碼可讀性,將模型常量直接代入,如果不勾選則是變量代替。根據實際情況確定是否要勾選。
2. 代碼打包文件

路徑:Code Generation -->> Code Placement-->>Code Packaging
控件選擇Compact,這樣打包生成的C代碼文件數量少而緊湊一些。
3. State-flow優化配置

本案例沒有使用State-flow展示,但是狀態機的應用是很廣泛的。
路徑:Optimization -->> Stateflow-->>Code generation
勾選兩項,是將代碼的整數換算成位運算,提高計算效率。比如BMS很多狀態機都是位運算。
模型案例

生成C代碼

菜單欄找到代碼生成圖標點擊(或快捷鍵Ctrl+B)

生成的C代碼主函數分為三部分結構,初始化函數、rt_onestep被定時中斷調用(即本模型的算法函數)、終止函數。

上圖為模型算法函數,中斷定時調用。
總結
以上列舉了Simulink自動生成嵌入式代碼幾個基礎的必要配置以及一些優化代碼的方法。當然生成的C代碼與手寫的相比,可讀性還是比較差的,其實還有一些方法設置可以改善生成代碼的可讀性,留待下次再分享。以上僅供參考。
本文已同步錄制視頻講解:Simulink代碼生成之模型配置_視頻教程 - 知乎。
歡迎關注我的微信公眾號/知乎專欄:【新能源動力電池與BMS】,頭條號:【阿Q在江湖】
