【MATLAB App Designer】调用simulink模型并打包为独立程序

本人第一次写文章,如有纰漏还请指出,望海涵。
本人等级不够,标签都加不了qwq,大家点点赞哈。


文章目录

  • 【MATLAB App Designer】调用simulink模型并打包为独立程序
  • 前言&目标
  • 一、Simulink模型部分
    • 1.1 搭建simulink模型
    • 1.2 编辑模型变量
  • 二、AppDesigner部分
    • 2.1 一些常用语法
    • 2.2 调用.slx模并取出数据
  • 三、打包独立桌面App
    • 3.1 下载安装MinGW-w64
    • 3.2 下载runtime运行环境
    • 3.3 打包为独立程序

前言&目标

App Designer是Mathworks继GUIDE后推出的用于构建 MATLAB 应用程序的环境。它进一步简化了布置用户界面可视组件的过程。
本人使用的是R2021b版本,其AppDesigner的资源比较丰富;

本文将参考官方例程:Deploy an App Designer Simulation with Simulink Compiler并结合常用模块,分享学习经验;
https://ww2.mathworks.cn/help/slcompiler/ug/deploy-a-simulation-with-simulink-compiler.html
输入以下命令打开例程,它会在系统默认文件保存路径生成:

openExample('simulinkcompiler/DeployingASimulationAppUsingSimulinkCompilerExample')

请将文件夹移动至无空格纯英文路径下,运行时需要允许通过防火墙启动目标exe。
本文的目标包括:
按钮、坐标区、编辑字段(数值)、微调器等控件的使用;
学习创建simulink模型.slx文件并与app交互数据;
完成独立桌面应用的打包与运行;


一、Simulink模型部分

在这个例子中,我们使用质量弹簧阻尼系统。系统将:质量(m)、弹簧刚度(k)、阻尼(b)和初始位置(x0)参数化;系统的输入是外力;系统的输出是物体位置与速度。使用快速加速模式进行运行(需要编译)。

1.1 搭建simulink模型

按照物理含义或者公式建立模型,双击空白处键入模块名称即可快速放置,也可以在Model Library寻找与搜索;
注意,需要将输入/输出端口设置为inport/outport,不要用to workspace模块,后者会显著降低运行时间(也可能编译不过);
为了节约空间方便引索,在模型设置 / 数据导入/导出(data import/export)中,将格式设为带有时间的结构体Structure with time;只勾选输出y(之后在这里取数据)、单一仿真输出out即可;

由于使用的是快速加速模式,对模型还有一些额外要求(有些小伙伴发现还是不能打包slx模型),可以参考官方帮助文档:快速加速模式的限制;例如代数环(比如一些循环迭代、负反馈)就不能生成代码,需要先想办法进行消除;

1.2 编辑模型变量

我们希望在App内能对模块的一些参数进行设置,,在.slx模型文件里只需要在需要控制模块参数处直接输入一个变量名(该例程是m、k、b、x0)或其公式;
如果是单纯的输入一个值或是简单曲线可以使用constant模块,同样将其值设为模型变量,注意将采样时间设为inf保证其可持续;
在模型内填好变量名后模型红色高亮表示错误,这样编译无法通过(其实不打包而只进行普通仿真的话已经可以调用了),这时需要在建模选项卡中选择模型资源管理器Model Explore,在Model Workspace下新建MATLAB变量Variables(“田”字状符号);

二、AppDesigner部分

打开文件夹下.mlapp文件,该例程实现了包括外部输入信号、仿真时失能所有控件、读取数据、启动simulink快速加速模式仿真、返回数据并绘图等功能。
Ctrl+I 自动对齐
Ctrl+R 注释
Ctrl+T 取消注释

AppDesigner的基础控件部分可以在B站学习(免费):
【MATLAB App Designer】基础教程Matlab GUI界面设计
【Matlab Gui界面设计】MATLAB App Designer高级教程

2.1 一些常用语法

添加startupFcn启动回调函数(设计视图右键空白处/回调),App启动时应当启动simulink以支付加载库的一次性成本,在启动回调中填入:

start_simulink;

对于模型的外部输入信号,我们只需要定义两列向量(第一列时间tv,第二列输入信号值uv,给出取值变化的关键点即可)就可以通过ExternalInput()方法输入到模型;如果模型有一个有多种选项的外部输入信号,则应当定义一个函数返回两列向量的矩阵,通过if或switch去选择;下面给出switch用法,具体代码请参考例程:

switch 【判断选项】case '【选项str】'【赋值语句】;otherwiseerror('invalid input signal type');
end

再添加完控件后,我们只需要编写其完成的操作(其余部分自动生成),右键按钮:回调 / 添加 ButtonPushed回调函数… 或:在组件浏览器中找到 回调 并添加…;对开关而言则是 SwitchChanged回调;进入代码区,添加功能;
考虑到App打包的软件后不能再通过MATLAB命令行进行调试,如果程序出错很麻烦,我们引入try catch来将这个错误抛出来供我们判断,在每个回调函数处以如下结构重写:

try【执行回调函数操作】;
catch ME%如果没能执行操作则弹出错误对话框errordlg(ME.message);
end

2.2 调用.slx模并取出数据

在按钮回调函数中为模型创建Simulink.SimulationInput()输入对象,并通过.setModelParameters()方法设置模型仿真参数:

%创建模型输入
simInp = Simulink.SimulationInput('【模型名】');
simInp = simInp.setVariable('【模型变量】',app.【控件】.Value);
%设置仿真时间 要求使用字符串
stopTimeStr = num2str(app.StopTimeSpinner.Value);
simInp = simInp.setModelParameter('StopTime', stopTimeStr);
%模型外部输入信号
simInp.ExternalInput = 【信号】;       %两列
%配置输入启动快速加速模式 调试时可注释掉
simInp = simulink.compiler.configureForDeployment(simInp);
%执行并取出结果
simOut = sim(simInp);
t = simOut.y.time;
yp = simOut.y.signals(【端口序号】).values;
%指定坐标区域绘图
plot(app.【绘图坐标区UIAxes】, t, yp);

有些仿真往往执行时间很长,为了防止在仿真途中误触,还应当在动作开始和结尾之间失能控件(例程使用的方法),或使用进度条遮挡;


三、打包独立桌面App

在AppDesigner下设计工具选项卡中,点击共享即可打包。有MATLAB、Web、桌面三种App可选,可以添加作者、封面、简介等信息,平常使用时不打包也可以,这里以打包为独立桌面应用程序为例。
可以参考MATLAB上APP Designer如何导出exe:

3.1 下载安装MinGW-w64

MATLAB&Simulink打包时需要用到第三方编译器,如VS2019、VS2017或MinGW-w64,其中MinGW推荐使用6.3版本(我的电脑上已经有8.1但是检测不到)(如果有正版账号可以直接在MATLAB附加资源里下载~~,但我显然没有~~ )。
安装路径不要有空格或中文,安装教程可以参考某度经验:
MATLAB如何安装配置MinGW-w64 C/C++编译器
链接直达,在File选项卡下找(建议科学上网,在线安装往往会失败):
https://sourceforge.net/projects/mingw-w64/
csdn下载MinGW-w64 6.3
下载离线安装包后设置好环境变量MW_MINGW64_LOC,其值为解压安装路径,然后打开MATLAB在命令行输入:

setenv('MW_MINGW64_LOC', '【路径】')
mex -setup                      %检查编译器安装

3.2 下载runtime运行环境

具体操作步骤可以参考:
离线下载runtime后,matlab无法识别runtime的问题(matlab2019a)
MATLAB打包的程序需要runtime运行环境,它可以在与程序一起打包(超过1个G)之后直接使用,也可以不一起打包,在别人电脑上有安装此环境后使用;首先查询版本,之后下载runtime文件压缩包,在命令行中输入:

version
compiler.runtime.download       %我发现可以直接下载 不用挂VPN

下载完成后命令行会返回一串文字,下载的.zip不要解压,在MATLAB界面主页选项卡的预设下,把MATLAB Compiler设置好安装路径;最后在命令行输入如下指令查询:

mcr      %返回runtime版本及路径

3.3 打包为独立程序

点击AppDesigner的共享按钮,选择独立的桌面程序,填写好必要信息并进行设置:其中PACKAGING OPTIONS选择是否一同打包环境,from web则需要自己安装runtime,但文件体积小(我更推荐这种方法):

点击Package,耐心等待即可;打开输出文件夹:

另外,打包模型时建议先对官方例程进行尝试,确认环境正常后再去尝试对自己的模型打包;
最后,安装时务必建空白文件夹!!!来安装软件,避免卸载后其他重要资料被删除。

【MATLAB App Designer】实例:调用simulink模型并打包为独立程序相关推荐

  1. 汽车各档爬坡度曲线matlab,基于MATLAB App Designer的汽车爬坡能力建模与仿真

    1. 引言 汽车常常需要在不同区域的不同道路上行驶,尤其在山区道路上,坡陡路窄,汽车必须具有一定的爬坡能力,爬坡能力通常由最大爬坡度来衡量,最大爬坡度是汽车动力性能的重要指标之一.为此开展了基于MAT ...

  2. MATLAB App Designer GUI开发从0到1(二)

    文章目录 前言 一.开关以及旋钮 1. 左上角:旋钮 2.右上角:90度仪表 3.左下角:分档开关 4.右下角:开关 5.对旋钮微调 二.画图 1. 普通画图 2.添加小组件 三.回调函数 简单的回调 ...

  3. matlab app designer使用心得

    matlab app designer使用心得 最近导师让我在simulink仿真的基础上整一个仿真软件,然后就发现现在matlab已经把之前的GUIDE升级成了app designer,一番摸索踩坑 ...

  4. 在Matlab上用API调用chatgpt模型

    在这个快节奏的数字时代 深度学习技术正逐渐成为大家的热门话题 如果你也是一名程序员或者科研工作者 那么你一定听说过GPT模型 是一种非常流行的自然语言处理模型 各大平台都已经接入了ChatGpt模型 ...

  5. 《MATLAB App Designer从入门到实践》随书源代码

    GUIDE已经被MATLAB抛弃了,你还不知道吗?App Designer才是发展的方向 目前市面上MATLAB GUI编程的书籍琳琅满目,但大多数是基于GUIDE开发的,MATLAB从2016年开始 ...

  6. MATLAB App Designer入门实战(一)

    最近也是在研究MATLAB App Designer,开这样的一个系列主要是为了记录我在研究App Designer时遇到的一部分问题的解决,和一部分有趣的想法,每一篇文章会展示如何将一个项目mlap ...

  7. 基于MATLAB APP Designer 和 Python 的音视频剪辑

    简介 本软件是基于 MATLAB APP Designer 和 Python 联合编制的一款简易音视频剪辑软件,可以拿来练手MATLAB APP Designer.面向对象编程.假期空闲时和同学一起自 ...

  8. Matlab App Designer编译打包exe后读取文件路径问题

    首先,标题略长-- 其次,当你看到这个长长的标题并点进来的时候:bro,恭喜你终于找到了一个行之有效的解决方案! ~好了,下面我们言归正传. 关于MATLAB App Designer自身的介绍不是此 ...

  9. Matlab App Designer 学习笔记

    提示:本文的学习视频来自B站小刘老师的教程 链接:https://www.bilibili.com/video/BV16f4y147x9?from=search&seid=2070258926 ...

最新文章

  1. 惊呆,一条sql竟然让oracle奔溃了
  2. SpringMVC中的数据校验
  3. linux fedora卸载vmware16命令
  4. LGOJ P3919【模板】可持久化数组(可持久化线段树/平衡树)
  5. react 设计模式与最佳实践
  6. 孙丕恕离开浪潮 仪器厂历时60年成为服务器龙头企业
  7. docker 买了腾讯服务器后的学习
  8. python子进程关闭fd_gpg –passphrase-fd无法使用python 3子进程
  9. MaxCompute 图计算用户手册(上)
  10. 权威可信 | 华为云云测通过中国电子技术标准院软件测试工具能力评价
  11. 如何有效的为Windows XP减肥
  12. 剑指offer:2.二维数组的查找(Java版)
  13. 不定积分24个基本公式整理
  14. 电子技术基础(三)__第5章 之逻辑门符号
  15. 计算机基础与office应用教程,计算机基础与Office 2010实用教程
  16. 10 Kafka集群与运维
  17. 最近看到需要去学习的点(持续记录)
  18. 我们的指纹是如何形成的,科学家找到主导指纹形成原因
  19. 华为mate40计算机,华为Mate40兼容欧米多手机电脑,秒变笔电轻办公
  20. 期权程序化交易接口有哪些?

热门文章

  1. PJSIP协议栈在Linux下通信测试
  2. Android Studio连接华为手机流程
  3. 解决浏览器下载文件 中文名字乱码解决
  4. cadence SPB17.4 - CIS数据库字段设计细节
  5. Scrapy使用报错socket.timeout: timed out
  6. 论文学习之综述:《Deep learning》
  7. CKS CKA CKAD 将终端更改为远程桌面
  8. 从SVN上下载项目到启动项目
  9. 高频电子线路——分频网络
  10. Adversarial Examples:Attacks and Defenses for Deep Learning Networks