【MATLAB App Designer】实例:调用simulink模型并打包为独立程序
【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模型并打包为独立程序相关推荐
- 汽车各档爬坡度曲线matlab,基于MATLAB App Designer的汽车爬坡能力建模与仿真
1. 引言 汽车常常需要在不同区域的不同道路上行驶,尤其在山区道路上,坡陡路窄,汽车必须具有一定的爬坡能力,爬坡能力通常由最大爬坡度来衡量,最大爬坡度是汽车动力性能的重要指标之一.为此开展了基于MAT ...
- MATLAB App Designer GUI开发从0到1(二)
文章目录 前言 一.开关以及旋钮 1. 左上角:旋钮 2.右上角:90度仪表 3.左下角:分档开关 4.右下角:开关 5.对旋钮微调 二.画图 1. 普通画图 2.添加小组件 三.回调函数 简单的回调 ...
- matlab app designer使用心得
matlab app designer使用心得 最近导师让我在simulink仿真的基础上整一个仿真软件,然后就发现现在matlab已经把之前的GUIDE升级成了app designer,一番摸索踩坑 ...
- 在Matlab上用API调用chatgpt模型
在这个快节奏的数字时代 深度学习技术正逐渐成为大家的热门话题 如果你也是一名程序员或者科研工作者 那么你一定听说过GPT模型 是一种非常流行的自然语言处理模型 各大平台都已经接入了ChatGpt模型 ...
- 《MATLAB App Designer从入门到实践》随书源代码
GUIDE已经被MATLAB抛弃了,你还不知道吗?App Designer才是发展的方向 目前市面上MATLAB GUI编程的书籍琳琅满目,但大多数是基于GUIDE开发的,MATLAB从2016年开始 ...
- MATLAB App Designer入门实战(一)
最近也是在研究MATLAB App Designer,开这样的一个系列主要是为了记录我在研究App Designer时遇到的一部分问题的解决,和一部分有趣的想法,每一篇文章会展示如何将一个项目mlap ...
- 基于MATLAB APP Designer 和 Python 的音视频剪辑
简介 本软件是基于 MATLAB APP Designer 和 Python 联合编制的一款简易音视频剪辑软件,可以拿来练手MATLAB APP Designer.面向对象编程.假期空闲时和同学一起自 ...
- Matlab App Designer编译打包exe后读取文件路径问题
首先,标题略长-- 其次,当你看到这个长长的标题并点进来的时候:bro,恭喜你终于找到了一个行之有效的解决方案! ~好了,下面我们言归正传. 关于MATLAB App Designer自身的介绍不是此 ...
- Matlab App Designer 学习笔记
提示:本文的学习视频来自B站小刘老师的教程 链接:https://www.bilibili.com/video/BV16f4y147x9?from=search&seid=2070258926 ...
最新文章
- 惊呆,一条sql竟然让oracle奔溃了
- SpringMVC中的数据校验
- linux fedora卸载vmware16命令
- LGOJ P3919【模板】可持久化数组(可持久化线段树/平衡树)
- react 设计模式与最佳实践
- 孙丕恕离开浪潮 仪器厂历时60年成为服务器龙头企业
- docker 买了腾讯服务器后的学习
- python子进程关闭fd_gpg –passphrase-fd无法使用python 3子进程
- MaxCompute 图计算用户手册(上)
- 权威可信 | 华为云云测通过中国电子技术标准院软件测试工具能力评价
- 如何有效的为Windows XP减肥
- 剑指offer:2.二维数组的查找(Java版)
- 不定积分24个基本公式整理
- 电子技术基础(三)__第5章 之逻辑门符号
- 计算机基础与office应用教程,计算机基础与Office 2010实用教程
- 10 Kafka集群与运维
- 最近看到需要去学习的点(持续记录)
- 我们的指纹是如何形成的,科学家找到主导指纹形成原因
- 华为mate40计算机,华为Mate40兼容欧米多手机电脑,秒变笔电轻办公
- 期权程序化交易接口有哪些?