Simulink學習筆記(三)——Simulink自動代碼生成(二)

前言:

      上一篇文章詳細學習瞭如何通過Simulink建立系統模型,進而生成嵌入式代碼。本文通過實例進一步加深對代碼自動生成的理解和應用。

一、建立系統框圖

        爲了方便起見,在這裏我們實現一個的簡單算法,我們在simulink中建立系統框圖如下所示:


   在生成代碼之前,給k輸入一個數,在命令行輸入k=3,如下所示:


然後配置一些參數,ctrl+E調出Configuration  Parameters,首先設置Solver標籤頁,如下所示:


然後設置Code Generation標籤頁,如下所示:


然後在Report子標籤頁,配置允許生成報告,如下所示:


再按ok,如下:



二、代碼生成

     當參數配置完成以後,我們就可以利用ctrl+B快捷鍵生成代碼:


不巧,產生錯誤了,這個只需要更改一下文件保存路徑就好了,我們將紅框中的路徑更改爲要保存文件的地址,我就放在桌面,如下所示:


重新進入simulink,ctrl+B編譯模型,可以看到算法的基本代碼已經生成了,如下所示:


     但是可以看到,上面生成的代碼比較複雜,無法直接使用到嵌入式系統中去,接下來我們使用Embedded Coder來生成接近我們使用的嵌入式代碼。

三、代碼優化

     我們再次打開代碼配置管理器(ctrl+E),按下圖配置,將系統目標文件更改爲ert.tlc,如下所示:


      再次生成的代碼如下所示,可以看到代碼文件數量明顯減少,算法也慢慢接近我們想看到的:


      但是,生成的代碼名稱都是結構體,看起來略顯複雜,能不能簡單化呢?  

      接下來將使用“數據對象”進行數據管理,讓代碼看起來更簡單化。    

      便於管理,首先將模型文件中所有模塊選中,然後生成子模塊,如下所示:


       子系統的建立,有兩種方法,一種是將模型文件中所有模塊選中,按ctrl+G快捷鍵;一種是將模型文件中所有模塊選中,選擇Diagram->Subsystem & Model Reference ->Create Subsystem from Selection,如下所示:


     在各個信號線上雙擊,添加信號名,x,y和z,如下:


    然後進入Model Explorer:



      添加信號對象和信號名關聯起來,添加MPT Signal的信號對象x,y,z,步驟如下:



   如此重複三遍即可添加MPT Signal的信號對象x,y,z,如下所示:


      添加x,y,z信號對象後,需要關聯信號名,關聯信號名,在信號線上右鍵,點擊Signal Properties…,點擊Signal Properties…後,按下圖勾選Signal name must resolve to Simulink signal object ,讓信號名解析到信號對象上去 ,x,y,z都按如下設置,設置之後圖變爲右邊所示,保存。


我們再按下ctrl+B快捷鍵,生成的代碼如下:


    注意,在MATLAB關閉後,工作空間裏的東西就沒了,爲此我們必須保存workspace裏的環境,在命令窗口輸入save(‘my_dat_data.mat’),這樣我們的工作空間就保存爲了my_dat_data.mat文件,下次運行該模型之前,可以先load(‘my_dat_data.mat’)加載工作空間,恢復環境。還可以使用Simulink.saveVars(‘my_m_data.m’)保存,需要的時候,拖拽進命令行,則直接打開工作空間,如下:


        我們生成的算法,也許在很多地方被調用,這是就需要把我們的算法模塊單獨出來作爲一個子系統,可以把算法單獨放在一個文件中,首先選中算法子模塊,在菜單欄點擊Diagram->Block Parameter (Subsystem ):


彈出如下菜單,設置我們需要的子模塊名稱及文件名稱:



再按下ctrl+B快捷鍵,子模塊及其功能代碼就生成了,如下:



發佈了88 篇原創文章 · 獲贊 490 · 訪問量 47萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章