手把手教用matlab做無人駕駛(十六)--matlab/simulink 高級應用

1.首先,介紹一下matlab/simulink中把模塊封裝爲庫函數

通過以下建立Library

如下是我的庫內容,保存庫名字爲mathlib:

 

然後建立一個模型,打開mathlib.slx模塊,把這個模塊加入模型中,建立如下模型,仿真即可。

如果想改這個模型,打開拖動會出現:Attempt to modify link 'untitled1/Subsystem'. Disable this link to make changes locally in the model or open the library to make the changes directly in the library block.這怎麼辦呢?其實這個是可以改的,只要在模塊上使用Ctrl+L就會調用庫函數:

然後右鍵Open in New Tab,修改保存即可,我這裏把裏面的k=1修改爲4保存,運行結果如下:

 

如果想把庫函數添加到simulink庫中,只需要建立文件

function blkStruct=slblocks
Browser.Library='mathlib';
Browser.Name='mathlib';
blkStruct.Browser=Browser;

然後通關過設置路徑把剛纔的路徑的文件包含進去。

然後將此文件夾添加進MATLAB路徑並刷新Library,即可看到自定義模塊庫,如下,我的mathlib

到這裏,關於庫的應用就講解完了。

現在講解一下matlab2014年才加入的simulink function 函數的應用,相信大家對這個模塊應用的比較少,其實這個模型用的好可以爲我們搭建複雜的模型時簡化線路有好處,在User-Defined Functions中

 

新建simulink模型如下,我只是在simulink function乘以gain=4,這就通過caller 調用函數即可(通過函數名稱):

到這裏,可能有的問不在同一級怎麼調,這個很好辦,這裏只給出搭建的模型,細節不詳細說了。

同時這個也可以用function函數中調用

到這裏simulink function 函數就講完了。

這裏講一下stateflow怎麼嵌入已有的c代碼運行

首先建立一個fun.m函數轉換爲c代碼

 

然後命令中coder:

 

這裏轉換代碼過程不多講,自己搜索一下就有很多文檔,最後就是到這裏:

然後保存代碼,出現包:

 

解壓這個fun_pkg包:

 

這裏,也給出我自己總結的simulink生成代碼的注意細節,怎麼能夠生成簡潔的代碼以及佔用RAM最小:

Matlab/Simulink生成代碼注意事項

  1. Solver的設置爲Type:fixed-step、Solver:discrete、fixed-step size:0.01s
  2. Code Generation:(1):Report中兩個勾選,生成代碼可以看。
  1. :快速原型代碼(grt.tlc) simulinnk coder生成的代碼,產品代碼 (ert.tlc) Embedded coder,選擇ert.tlc代碼就簡潔了。

3.數據管理生成代碼:通過在Model Explore的Base Workspace中設置信號線,並且設置store class:ExportedGlobal,

4.捆綁信號,在線上點擊Properties中signal name打勾:

 

  1. k也改掉,

 

代碼即可以出現我們這種形式:

 

 

保存數據指令:save('caokaifa.mat')

保存爲.m文件:Simulink.saveVars('caokaifa.m')

 

現在點擊模塊右鍵Model Advisor

 

  1. 默認函數是模塊名字_step,如下:

 

更改模塊名字:

右鍵,Block Parameters中勾選Treat as atomic unit:

 

 

 

 

然後再裏面設置函數名和保存到那裏:

 

 

引用不同的參數使用Variant Model

 

  1. Software in the loop,等效性測試

生成代碼封裝成function函數,然後通過software in the loop測試,測試樣本足夠多。

首先,在配置裏面Verification中Advanced parameters中選擇Create block:SIL

  1. 先打開命令窗口打開模型,然後用slvnvmakeharness('test')打開測試環境
  2. 代碼code generation /interface中庫的替換也會提高效率
  3. 代碼的定點化
  4. 重用數據,可以使用Analysis/Refactor Model/Identify Modeling Clones
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章