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