本文研究Simulink模型中调用Matlab函数的方法。

文章目录

  • 1 Matlab Function模块
  • 2 建模与代码生成
  • 3 Matlab Function中的数据管理
    • 3.1 关联Signal对象
    • 3.2 建立函数内的参数
  • 4 Matlab Function生成代码的限制
  • 5 Matlab Function的使用心得
    • 5.1 Matlab Function中打断点
    • 5.2 通过脚本输出数据
  • 6 总结

1 Matlab Function模块

在Simulink中建模的时候,有时会发现自己想要的功能很难通过Simulink中常规的模块和子系统实现,但是通过Matlab函数却可以很容易地实现。

根据博主工作经验,认为在以下情况比较适合用Matlab而不是Simulink实现:

  • for循环或while循环较多
  • 结构体定义较复杂,例如结构体嵌套结构体
  • 想要调用Matlab的某个工具箱函数
  • 习惯写代码而不是搭模型

针对以上问题,可以在Simulink中使用Matlab Function模块,然后在模块内写Matlab代码。从而实现了通过Simulink模型调用Matlab函数。

2 建模与代码生成

本章节通过勾股定理的例子,演示Matlab Function模块的建模。

1)打开Simulink,拖出一个Matlab Function模块。双击模块进入,可以看到里面已经有一个名为fcn的函数定义。

2)将函数修改为下图的勾股定理计算。

在c = gougu(a,b)这个Matlab函数中,a,b相当于子系统的输入,c相当于子系统的输出。

3)点击右上角的Edit Data,可以编辑输入输出的属性。这里把输入输出的数据类型都改为single。相当于Simulink子系统中的Inport和Outport的类型一样。

4)保存关闭函数编辑窗口,在模型中添加输入的常数和disp模块,然后运行模型,观察输出结果。注意,由于在函数里定义了输入输出的数据类型,外面的信号接口要输入single型常数。

5)为验证代码生成,将输入端替换成Inport,输出端替换成Outport并配置好代码生成(可参照https://blog.csdn.net/u013288925/article/details/104851546)。

6)Ctrl + B生成代码。在生成的step函数中就实现了勾股定理的C代码。

3 Matlab Function中的数据管理

3.1 关联Signal对象

在Edit Data中,可以配置输入输出关联数据字典中的Signal对象。
1)在Ports and Data Manager中勾选Data must resolve to signal object。

2)在Matlab工作空间中新建一个Signal对象,并将类型和StorageClass配置如下。

3)Ctrl + B生成代码。可以看到c变量定义到了data.c中。

3.2 建立函数内的参数

1)在Ports and Data Manager中中点击Add–>Data新建一个参数。

2)将参数的Name改为d,Scope改为Parameter,Type改为single。

3)在Matlab工作空间中新建一个常量d=single(0.1)。

4)把Matlab Function中的代码中改为开根号后乘以d。

5)Ctrl + B生成代码。从代码中可以看出,step函数把参数d内联进去了。

4 Matlab Function生成代码的限制

Matlab Function生成代码的限制很多,譬如不支持动态内存分配、不支持元胞数组等。

另外,也有很多matlab函数和工具包也不能生成代码,具体可以参照Matlab Function中右上角的帮助文件。

5 Matlab Function的使用心得

博主比较擅长写Matlab脚本,所以对Matlab Function的使用还是很顺手的。下面是博主工作中的一些心得体会,可以帮助自己方便地使用这个模块。

5.1 Matlab Function中打断点

仿真用的模型中如果用到了Matlab Function模块,就可以在里面打断点调试。譬如下面的模块,博主在for循环内打了个断点。

然后运行整个Simulink模型,模型就会在第一个仿真步长停下来,并停在断点处。

这时就能看到断点前的每一个变量的数值了。

另外,也可以先仿真到某一个时间点,再打断点进入Matlab Function。这样就可以看到该时刻Matlab Function内部的情况了。

5.2 通过脚本输出数据

在Matlab Function中也可以写一些和生成代码无关的脚本,用于输出数据或是画图。例如下图中,在计算完y的数值后,通过fopen函数把数值写道文件里面。

这样的方式可以非常灵活地实时打印数据,而不用弄一大堆Scope模块去观察仿真数据。

6 总结

Matlab Function模块的使用可以让Simulink集成Matlab函数,需要根据自身项目特点灵活使用是用Matlab还是Simulink模块编写控制算法。

>>返回个人博客总目录

Simulink代码生成: 调用Matlab函数相关推荐

  1. C/C++ VS中调用matlab函数的方法

    C/C++ VS中调用matlab函数的方法 [尊重原创,转载请注明出处] http://blog.csdn.net/guyuealian/article/details/73743654 Matla ...

  2. c 调用matlab文件路径,C/C++下调用matlab函数操作说明

    1.matlab的安装 连接:http://pan.baidu.com/s/1qXuF7aO 安装32位版本的matlab(在目录下bin文件夹中有两个文件夹,选择win32文件夹下的setup进行安 ...

  3. opencv通过dll调用matlab函数,图片作为参数

    [blog 项目实战派]opencv通过dll调用matlab函数,图片作为参数                   前文介绍了如何"csharp通过dll调用opencv函数,图片作为参数 ...

  4. (VS)c++调用matlab函数

    1.matlab封装matlab函数 (1)方法一 1.输入 mex -setup 回车,然后点击选择 mex -setup C++: 2.输入 mbuild -setup 回车,然后点击选择 mex ...

  5. 一文读懂如何用python调用matlab函数(windows环境)

    第一步配置环境: 要安装引擎 API,请在操作系统提示符下执行以下命令,其中 matlabroot 是 MATLAB 文件夹的路径.您可能需要管理员权限才能执行这些命令.或者,使用在非默认位置安装用于 ...

  6. 超详细基于Qt平台实现C/C++调用Matlab函数全流程

    超详细基于Qt平台实现C/C++调用Matlab函数全流程 1. 基本调用方式介绍 2. 环境配置 3. 将Matlab程序写成函数形式 4. Matlab配置C编译器,将.m文件转换成动态链接库 4 ...

  7. c# 调matlab传字符串_c#调用matlab函数(混合编程)

    第 2 部分 实战练习(自己做的) 2.1 c# 调用 matlab 函数 matlab 版本 2009b , c# 版本 vs2008. 2.1.1 matlab 函数编译成 dll 文件 ( 1 ...

  8. vc只能调用matlab子函数,VC调用matlab函数

    最近在学习matlab,先试一个VC调用matlab函数的简单例子 用的是VC++6.0,matlab7.8也就是matlabR2009 首先在matlab下设置环境 >> mbuild ...

  9. C++ MATLAB 混合编程——VS项目调用MATLAB函数

    引言 MATLAB无疑是一款强大的矩阵运算与数据分析软件,内部集成了众多函数.如果在C++编程时可以调用相关的函数将对我们的数据分析研究带来极大的方便.这里就总结一下如何在VS工程中调用MATLAB函 ...

最新文章

  1. Linux内核实验作业四
  2. 十步完全理解 SQL
  3. 武汉工程大学计算机学院吴云韬,吴兴隆-武汉工程大学计算机科学与工程学院...
  4. Mobile and MID opportunities in APAC
  5. leetcode python3 简单题108. Convert Sorted Array to Binary Search Tree
  6. 新手linux安装vasp_史上最简单的VASP安装教程-非虚拟机
  7. 群同态和群同构的区别_顾沛《抽象代数》1.4群的同态与同构习题解答
  8. NameNode作用
  9. electron 微信扫码登录(第三方登录)
  10. 6.20thingworx之bug记录
  11. U大师U盘装系统——启动U盘制作(V1.2.0版)
  12. CodeForces - 1129C Morse Code
  13. 小强IT游记之大连行
  14. 基于jsp+ssm的驾校预约管理系统-计算机毕业设计
  15. 中国电信SMGP接口
  16. 基于移动终端的数字果园管理系统
  17. 串口通信-STM32的USART串口通讯程序
  18. 大一学生Web课程设计 红酒美食主题网页制作(HTML+CSS+JavaScript)
  19. linux下vi文本编辑命令(例:~/.bashrc)
  20. 纯CSS3实现人物太空步动画

热门文章

  1. HTTP中request详解
  2. 携程手机版机票数据添加代理
  3. 昆仑通态MCGS与3台西门子V20变频器通讯程序 3台变频器通讯,可靠稳定
  4. 用turtle画红色小汽车
  5. 微信小程序入门六: WebSocket应用
  6. Uniapp实现微信群聊头像|九宫格合并图片
  7. 从第一代到第五代,App加固技术详解
  8. Linux 系统的安装
  9. Spring Cloud Gateway内置过滤器实战——AddResponseHeader过滤器工厂
  10. Apache Mina实例