0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

MBD的Simulink使用技巧:Simulink代碼生成的基本概念(1)

冬至子 ? 來源:autoMBD ? 作者:autoMBD ? 2023-07-13 15:11 ? 次閱讀

2 Simulink代碼生成的基本概念

2.1 代碼生成工具

MATLAB/Simulink中一共提供三個(gè)代碼生成的工具:

  • MATLAB Coder
  • Simulink Coder
  • Embedded Coder

從名字能看出來,MATLAB Coder用于m腳本生成C/C++代碼;而Simulink Coder用于模型、Stateflow等生成C/C++代碼;而 Embedded Coder是上述兩者的集成,同時(shí)擴(kuò)展了在嵌入式開發(fā)中必不可少的特性 。

也正是Embedded Coder提供了針對(duì)MATLAB Coder和Simulink Coder的配置選項(xiàng)和代碼優(yōu)化選項(xiàng),從而 精細(xì)控制生成代碼的函數(shù)、數(shù)據(jù)和接口 。這可以提高代碼的執(zhí)行效率和可讀性,利于代碼的集成。

所以文章介紹的以Embedded Coder為主。

關(guān)于這三個(gè)代碼生成工具的更多介紹,可以查看資源庫中的“臨時(shí)資源分享”文件夾下的 tA21 。資源庫的獲取可以在《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í)行算法的程序,可以參考開源項(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)試);
  • 軟件庫調(diào)用接口。

上圖中的FOC核心算法模型中,包含了上述的前三種接口。這些接口用于代碼集成時(shí)的函數(shù)調(diào)用、數(shù)據(jù)交換、代碼調(diào)試等(代碼集成的過程可以參考《文章合集》第十七篇)。

2.3 有接口的模型如何仿真

如上圖FOC核心算法模型所示,該模型有很多Input和Output接口,這些接口表明對(duì)該模型仿真需要接收外部數(shù)據(jù),同時(shí)需要將運(yùn)算結(jié)果輸出到外部。

這種模型的仿真有兩種方式:

  • 模型引用(Model Reference)
  • 數(shù)據(jù)導(dǎo)入/導(dǎo)出(Data Import/Export)

模型引用 ,即使用Simulink模型庫中的Model或Subsystem Reference模塊來實(shí)現(xiàn)數(shù)據(jù)的輸入和輸出,這意味著需要額外的一個(gè)上層模型(Top Model)來提供輸入數(shù)據(jù)和接受輸出數(shù)據(jù)。 善用模型引用可以提高模型算法開發(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)沒有區(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ù)可以使用如下語句:

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開發(fā),可以在MATLAB的安裝目錄中找到該文件。

但該文件只是模型生成代碼的一部分,它的背后隱藏了大量關(guān)于模型生成代碼的細(xì)節(jié)。完整的ert.tlc文件用戶是不可見的。

選擇代碼生成的系統(tǒng)目標(biāo)文件ert.tlc的方法如下圖所示。

圖片

設(shè)置代碼生成目標(biāo)文件**ert.tlc - From autoMBD

點(diǎn)擊“Browse”可以看到很多不同類型的系統(tǒng)目標(biāo)文件(如下圖所示),這些目標(biāo)文件適用于不同的應(yīng)用場(chǎng)景。對(duì)應(yīng)嵌入式開發(fā),選擇ert.tlc即可(ert的全稱為Embedded Real Time)。

圖片

不同類型的系統(tǒng)目標(biāo)文件 - From autoMBD

滿足定步長(zhǎng)和系統(tǒng)目標(biāo)文件的條件,模型就能生成嵌入式代碼了。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式系統(tǒng)
    +關(guān)注

    關(guān)注

    41

    文章

    3532

    瀏覽量

    128985
  • MATLAB仿真
    +關(guān)注

    關(guān)注

    4

    文章

    175

    瀏覽量

    19876
  • MBD
    MBD
    +關(guān)注

    關(guān)注

    0

    文章

    24

    瀏覽量

    8922
  • simulink仿真
    +關(guān)注

    關(guān)注

    0

    文章

    75

    瀏覽量

    8539
  • FOC算法
    +關(guān)注

    關(guān)注

    1

    文章

    16

    瀏覽量

    9650
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    CCS打開simulink生成的dsp代碼

    simulink生成DSP代碼,并成功下載到板子上后,用CCS選中生成代碼文件確卻不能打開,這是為什么?
    發(fā)表于 10-29 18:33

    Simulink模型生成代碼

    有一定的STM32開發(fā)調(diào)試經(jīng)驗(yàn)和Simulink代碼生成經(jīng)驗(yàn)。關(guān)于Simulink代碼生成可以參
    發(fā)表于 08-11 07:56

    simulink自動(dòng)生成C代碼

    ,也希望可以和更多的人交流simulink/STM32CubeMX聯(lián)合生成STM32串口發(fā)送代碼,Keil編譯下載到單片機(jī),發(fā)送給上位機(jī)顯示1.在CubeMX里設(shè)置好相關(guān)參數(shù)后,在si
    發(fā)表于 08-17 07:17

    通過一個(gè)簡(jiǎn)單的Simulink模型生成代碼

    本文首先通過一個(gè)簡(jiǎn)單的Simulink模型生成代碼,然后將代碼copy到一個(gè)Arduino路徑中去編譯軟件。最后將軟件下載到Arduino Uno中,通過串口輸出
    發(fā)表于 08-18 06:22

    手把手教你SIMULINK代碼生成

    FrancisZhao:專欄文章列表以及一些說明?zhuanlan.zhihu.comFrancisZhao:手把手教你代碼生成(下):SIMULINK代碼
    發(fā)表于 08-18 06:03

    Simulink模型架構(gòu)的設(shè)計(jì)資料分享

    更多精彩干貨分享,請(qǐng)關(guān)注我的個(gè)人微信公眾號(hào):MBD開發(fā)者星球;?1、na_0006: Guidelines for mixed use of Simulink and StateflowID
    發(fā)表于 11-11 06:52

    怎樣使用stm32+simulink進(jìn)行MBD的開發(fā)呢

    怎樣使用stm32+simulink進(jìn)行MBD的開發(fā)呢?有哪些實(shí)驗(yàn)步驟呢?
    發(fā)表于 11-18 06:05

    請(qǐng)問simulink代碼如何生成2020a?

    請(qǐng)問simulink代碼如何生成2020a?
    發(fā)表于 11-22 06:38

    基于Simulink代碼生成過程是怎樣的?

    基于Simulink代碼生成過程是怎樣的?
    發(fā)表于 02-18 07:46

    Simulink 自動(dòng)代碼生成原理分享

    多出來一些目標(biāo)系統(tǒng)可以選擇。自定義目標(biāo)系統(tǒng)是為了讓Simulink生成代碼能根據(jù)用戶的需要,與底層驅(qū)動(dòng)做集成。我們首先需要了解Simulink目標(biāo)編譯的流程,如下圖,
    發(fā)表于 05-31 11:19

    MathWorks推出新款代碼生成工具Simulink

      MathWorks 今日宣布 Simulink 代碼生成工具箱已通過 Embedded Coder 嵌入到 Freescale 的新款 Motor Control Development Toolbox 中。該工具箱包括
    發(fā)表于 04-26 08:39 ?1269次閱讀

    軟件集成:Simulink與STM32聯(lián)合開發(fā)

    有一定的STM32開發(fā)調(diào)試經(jīng)驗(yàn)和Simulink代碼生成經(jīng)驗(yàn)。關(guān)于Simulink代碼生成可以參
    發(fā)表于 12-24 19:13 ?13次下載
    軟件集成:<b class='flag-5'>Simulink</b>與STM32聯(lián)合開發(fā)

    MBDSimulink使用技巧:詳解代碼生成中的模型與代碼(2)

    上一篇文章中提到,生成嵌入式代碼,必須選擇定步長(zhǎng)求解器。實(shí)際中,生成嵌入式代碼幾乎不會(huì)使用Simulink模型庫中的連續(xù)模型,往往需要通過最
    的頭像 發(fā)表于 07-13 15:13 ?4849次閱讀
    <b class='flag-5'>MBD</b>的<b class='flag-5'>Simulink</b>使用技巧:詳解<b class='flag-5'>代碼</b><b class='flag-5'>生成</b>中的模型與<b class='flag-5'>代碼</b>(2)

    利用Simulink自動(dòng)生成STM32串口代碼

    功能:利用Simulink自動(dòng)生成STM32串口代碼,在Keil中編譯后直接下載到主芯片,實(shí)現(xiàn)串口通訊的功能。
    的頭像 發(fā)表于 10-25 17:04 ?1648次閱讀
    利用<b class='flag-5'>Simulink</b>自動(dòng)<b class='flag-5'>生成</b>STM32串口<b class='flag-5'>代碼</b>

    simulink自動(dòng)生成ROS代碼

    當(dāng)我們用simulink完成控制程序的搭建后,我們期望下一次可以直接對(duì)ROS進(jìn)行控制,而不是每次都需要啟動(dòng)matlab和simulink,因此我們可以使用simulink代碼
    的頭像 發(fā)表于 11-15 17:53 ?745次閱讀
    <b class='flag-5'>simulink</b>自動(dòng)<b class='flag-5'>生成</b>ROS<b class='flag-5'>代碼</b>