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生成代碼注意事項
- Solver的設置爲Type:fixed-step、Solver:discrete、fixed-step size:0.01s
- Code Generation:(1):Report中兩個勾選,生成代碼可以看。
- :快速原型代碼(grt.tlc) simulinnk coder生成的代碼,產品代碼 (ert.tlc) Embedded coder,選擇ert.tlc代碼就簡潔了。
3.數據管理生成代碼:通過在Model Explore的Base Workspace中設置信號線,並且設置store class:ExportedGlobal,
4.捆綁信號,在線上點擊Properties中signal name打勾:
- k也改掉,
代碼即可以出現我們這種形式:
保存數據指令:save('caokaifa.mat')
保存爲.m文件:Simulink.saveVars('caokaifa.m')
現在點擊模塊右鍵Model Advisor
- 默認函數是模塊名字_step,如下:
更改模塊名字:
右鍵,Block Parameters中勾選Treat as atomic unit:
然後再裏面設置函數名和保存到那裏:
引用不同的參數使用Variant Model
- Software in the loop,等效性測試
生成代碼封裝成function函數,然後通過software in the loop測試,測試樣本足夠多。
首先,在配置裏面Verification中Advanced parameters中選擇Create block:SIL
- 先打開命令窗口打開模型,然後用slvnvmakeharness('test')打開測試環境
- 代碼code generation /interface中庫的替換也會提高效率
- 代碼的定點化
- 重用數據,可以使用Analysis/Refactor Model/Identify Modeling Clones