手把手教用matlab做无人驾驶(十六)--matlab/simulink 高级应用

1.首先,介绍一下matlab/simulink中把模块封装为库函数

通过以下建立Library

手把手教用matlab做无人驾驶(十六)--matlab/simulink 高级应用_第1张图片

如下是我的库内容,保存库名字为mathlib:

手把手教用matlab做无人驾驶(十六)--matlab/simulink 高级应用_第2张图片

手把手教用matlab做无人驾驶(十六)--matlab/simulink 高级应用_第3张图片

 

然后建立一个模型,打开mathlib.slx模块,把这个模块加入模型中,建立如下模型,仿真即可。

手把手教用matlab做无人驾驶(十六)--matlab/simulink 高级应用_第4张图片

如果想改这个模型,打开拖动会出现: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就会调用库函数:

手把手教用matlab做无人驾驶(十六)--matlab/simulink 高级应用_第5张图片

然后右键Open in New Tab,修改保存即可,我这里把里面的k=1修改为4保存,运行结果如下:手把手教用matlab做无人驾驶(十六)--matlab/simulink 高级应用_第6张图片

手把手教用matlab做无人驾驶(十六)--matlab/simulink 高级应用_第7张图片

 

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

手把手教用matlab做无人驾驶(十六)--matlab/simulink 高级应用_第8张图片

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

然后通关过设置路径把刚才的路径的文件包含进去。手把手教用matlab做无人驾驶(十六)--matlab/simulink 高级应用_第9张图片

然后将此文件夹添加进MATLAB路径并刷新Library,即可看到自定义模块库,如下,我的mathlib

手把手教用matlab做无人驾驶(十六)--matlab/simulink 高级应用_第10张图片

到这里,关于库的应用就讲解完了。

现在讲解一下matlab2014年才加入的simulink function 函数的应用,相信大家对这个模块应用的比较少,其实这个模型用的好可以为我们搭建复杂的模型时简化线路有好处,在User-Defined Functions中

 

手把手教用matlab做无人驾驶(十六)--matlab/simulink 高级应用_第11张图片

新建simulink模型如下,我只是在simulink function乘以gain=4,这就通过caller 调用函数即可(通过函数名称):

手把手教用matlab做无人驾驶(十六)--matlab/simulink 高级应用_第12张图片

到这里,可能有的问不在同一级怎么调,这个很好办,这里只给出搭建的模型,细节不详细说了。

手把手教用matlab做无人驾驶(十六)--matlab/simulink 高级应用_第13张图片手把手教用matlab做无人驾驶(十六)--matlab/simulink 高级应用_第14张图片

同时这个也可以用function函数中调用

手把手教用matlab做无人驾驶(十六)--matlab/simulink 高级应用_第15张图片

手把手教用matlab做无人驾驶(十六)--matlab/simulink 高级应用_第16张图片

到这里simulink function 函数就讲完了。

这里讲一下stateflow怎么嵌入已有的c代码运行

首先建立一个fun.m函数转换为c代码

 

手把手教用matlab做无人驾驶(十六)--matlab/simulink 高级应用_第17张图片

然后命令中coder:

手把手教用matlab做无人驾驶(十六)--matlab/simulink 高级应用_第18张图片

 

这里转换代码过程不多讲,自己搜索一下就有很多文档,最后就是到这里:

手把手教用matlab做无人驾驶(十六)--matlab/simulink 高级应用_第19张图片

然后保存代码,出现包:

手把手教用matlab做无人驾驶(十六)--matlab/simulink 高级应用_第20张图片

 

解压这个fun_pkg包:

手把手教用matlab做无人驾驶(十六)--matlab/simulink 高级应用_第21张图片

 

这里,也给出我自己总结的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打勾:

手把手教用matlab做无人驾驶(十六)--matlab/simulink 高级应用_第22张图片

手把手教用matlab做无人驾驶(十六)--matlab/simulink 高级应用_第23张图片

 

  1. k也改掉,

 

代码即可以出手把手教用matlab做无人驾驶(十六)--matlab/simulink 高级应用_第24张图片现我们这种形式:

手把手教用matlab做无人驾驶(十六)--matlab/simulink 高级应用_第25张图片

 

 

保存数据指令:save('caokaifa.mat')

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

 

现在点击模块右键Model Advisor

 

  1. 默认函数是模块名字_step,如下:
  2. 手把手教用matlab做无人驾驶(十六)--matlab/simulink 高级应用_第26张图片

 

更改模块名字:

右键,Block Parameters中勾选Treat as atomic unit:

 

手把手教用matlab做无人驾驶(十六)--matlab/simulink 高级应用_第27张图片

 

 

 

然后再里面设置函数名和保存到那里:

 

手把手教用matlab做无人驾驶(十六)--matlab/simulink 高级应用_第28张图片

 

引用不同的参数使用Variant Model

手把手教用matlab做无人驾驶(十六)--matlab/simulink 高级应用_第29张图片

 

  1. Software in the loop,等效性测试

生成代码封装成function函数,然后通过software in the loop测试,测试样本足够多。

首先,在配置里面Verification中Advanced parameters中选择Create block:SIL

手把手教用matlab做无人驾驶(十六)--matlab/simulink 高级应用_第30张图片

  1. 先打开命令窗口打开模型,然后用slvnvmakeharness('test')打开测试环境
  2. 代码code generation /interface中库的替换也会提高效率
  3. 代码的定点化
  4. 重用数据,可以使用Analysis/Refactor Model/Identify Modeling Clones

你可能感兴趣的:(matlab,simulink,stateflow)