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