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