2 Simulink代碼生成的基本概念
2.1 代碼生成工具
MATLAB/Simulink中一共提供三個代碼生成的工具:
- MATLAB Coder
- Simulink Coder
- Embedded Coder
從名字能看出來,MATLAB Coder用于m腳本生成C/C++代碼;而Simulink Coder用于模型、Stateflow等生成C/C++代碼;而 Embedded Coder是上述兩者的集成,同時擴展了在嵌入式開發中必不可少的特性 。
也正是Embedded Coder提供了針對MATLAB Coder和Simulink Coder的配置選項和代碼優化選項,從而 精細控制生成代碼的函數、數據和接口 。這可以提高代碼的執行效率和可讀性,利于代碼的集成。
所以文章介紹的以Embedded Coder為主。
關于這三個代碼生成工具的更多介紹,可以查看資源庫中的“臨時資源分享”文件夾下的 tA21 。資源庫的獲取可以在《autoMBD原創技術文章合集》中找到。
2.2 Simulink生成應用代碼
MathWorks官方一直強調,使用 Simulink生成應用代碼(Application Code) ,而不是其他代碼(雖然利用硬件支持包可以生成底層驅動等代碼)。
何為應用代碼?簡單的可以認為應用代碼是執行算法的程序,可以參考開源項目AMBD-MC中的FOC核心算法模型:
FOC核心算法模型 - From autoMBD
在MBD代碼生成中,它應該部分或全部具有以下接口:
- 一個被主程序調用的接口(必須);
- 與其他模塊交換數據的接口;
- 與底層I/O驅動交換數據的接口;
- 數據的記錄接口(即log,用于調試);
- 軟件庫調用接口。
上圖中的FOC核心算法模型中,包含了上述的前三種接口。這些接口用于代碼集成時的函數調用、數據交換、代碼調試等(代碼集成的過程可以參考《文章合集》第十七篇)。
2.3 有接口的模型如何仿真
如上圖FOC核心算法模型所示,該模型有很多Input和Output接口,這些接口表明對該模型仿真需要接收外部數據,同時需要將運算結果輸出到外部。
這種模型的仿真有兩種方式:
- 模型引用(Model Reference)
- 數據導入/導出(Data Import/Export)
模型引用 ,即使用Simulink模型庫中的Model或Subsystem Reference模塊來實現數據的輸入和輸出,這意味著需要額外的一個上層模型(Top Model)來提供輸入數據和接受輸出數據。 善用模型引用可以提高模型算法開發的獨立性、重用性 ,在《文章合集》第十六篇中,實現PIL測試就是使用的這個方法。
這兩個模塊位于下圖所示的位置:
模型引用模塊 - From autoMBD
特別注意,Model和Subsystem Refence模塊都能實現模型引用,但它們是有區別的:
- Subsystem Refence引用的是子系統模型,而Model引用的是普通模型;
- Model模塊可以用于PIL和SIL測試,而Subsystem Refence不行;
- 它們在生成代碼的處理方式有區別,Subsystem Refence在生成代碼時,與模型中的子系統沒有區別,但Model不能當作模型中的子系統,它是一個獨立的模型。
而使用數據導入/導出的方式不需要新建Top模型,但需要準備 具有時間序列格式的輸入數據 ,將其導入到MATLAB工作區中;而輸出數據會直接生成在MATLAB工作區中。
時間序列數據如下圖所示:
時間序列數據 - From autoMBD
創建時間序列數據可以使用如下語句:
ts = timeseries(rand(5,1));
將模型與MATLAB工作區的時間序列數據連接在一起的方法如下圖所示。在Input框中輸入變量名即可連接輸入;圖中下面的選項可以配置Output輸出數據的格式,仿真完成后輸出數據會保存在MATLAB工作區。
Data Import/Export - From autoMBD
2.4 模型生成代碼的基本要求
一個模型要能生成嵌入式代碼,至少需要滿足以下兩個要求:
- Simulink求解器設置為定步長;
- 選擇代碼生成的系統目標文件ert.tlc。
設置模型求解器的步長的方法如下圖所示。求解器的其他配置可以保持默認,也可以根據實際需求修改。
設置求解器定步長 - From autoMBD
系統目標文件ert.tlc描述了模型如何生成代碼完整方法和流程,由MathWorks開發,可以在MATLAB的安裝目錄中找到該文件。
但該文件只是模型生成代碼的一部分,它的背后隱藏了大量關于模型生成代碼的細節。完整的ert.tlc文件用戶是不可見的。
選擇代碼生成的系統目標文件ert.tlc的方法如下圖所示。
設置代碼生成目標文件**ert.tlc - From autoMBD
點擊“Browse”可以看到很多不同類型的系統目標文件(如下圖所示),這些目標文件適用于不同的應用場景。對應嵌入式開發,選擇ert.tlc即可(ert的全稱為Embedded Real Time)。
不同類型的系統目標文件 - From autoMBD
滿足定步長和系統目標文件的條件,模型就能生成嵌入式代碼了。
-
嵌入式系統
+關注
關注
41文章
3664瀏覽量
130847 -
MATLAB仿真
+關注
關注
4文章
176瀏覽量
20277 -
MBD
+關注
關注
0文章
26瀏覽量
9139 -
simulink仿真
+關注
關注
0文章
75瀏覽量
8720 -
FOC算法
+關注
關注
1文章
22瀏覽量
9829
發布評論請先 登錄
用simulink自動生成C代碼
通過一個簡單的Simulink模型生成代碼
手把手教你SIMULINK代碼生成
Simulink模型架構的設計資料分享
Simulink 自動代碼生成原理分享
MathWorks推出新款代碼生成工具Simulink
MBD的Simulink使用技巧:詳解代碼生成中的模型與代碼(2)

simulink自動生成ROS代碼

評論