前言:
上一篇文章詳細學習瞭如何通過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快捷鍵,子模塊及其功能代碼就生成了,如下: