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

这篇具有很好参考价值的文章主要介绍了【MATLAB App Designer】实例:调用simulink模型并打包为独立程序。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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



前言&目标

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即可;
【MATLAB App Designer】实例:调用simulink模型并打包为独立程序
由于使用的是快速加速模式,对模型还有一些额外要求(有些小伙伴发现还是不能打包slx模型),可以参考官方帮助文档:快速加速模式的限制;例如代数环(比如一些循环迭代、负反馈)就不能生成代码,需要先想办法进行消除;

1.2 编辑模型变量

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

二、AppDesigner部分

打开文件夹下.mlapp文件,该例程实现了包括外部输入信号、仿真时失能所有控件、读取数据、启动simulink快速加速模式仿真、返回数据并绘图等功能。
Ctrl+I 自动对齐
Ctrl+R 注释
Ctrl+T 取消注释
【MATLAB App Designer】实例:调用simulink模型并打包为独立程序
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】'
		【赋值语句】;
	otherwise
		error('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:
【MATLAB App Designer】实例:调用simulink模型并打包为独立程序

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,但文件体积小(我更推荐这种方法):
【MATLAB App Designer】实例:调用simulink模型并打包为独立程序
点击Package,耐心等待即可;打开输出文件夹:
【MATLAB App Designer】实例:调用simulink模型并打包为独立程序
另外,打包模型时建议先对官方例程进行尝试,确认环境正常后再去尝试对自己的模型打包;
最后,安装时务必建空白文件夹!!!来安装软件,避免卸载后其他重要资料被删除。文章来源地址https://www.toymoban.com/news/detail-446152.html

到了这里,关于【MATLAB App Designer】实例:调用simulink模型并打包为独立程序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于小波技术进行图像融合(Matlab App Designer实现)

    目录 1 背景 2 理论基础 2.1 小波变换 2.2 基于小波变换的图像融合 3 Matlab App Designer实现  4 实验图像素材(可共享) 图像融合,指通过对同一目标或同一场景用不同的传感器(或用同一传感器采用不同的方式)进行图像采集得到多幅图像,对这些图像进行合成往往能够保持多

    2024年02月06日
    浏览(48)
  • MATLAB - 机器人逆运动学设计器(Inverse Kinematics Designer APP)

          通过逆运动学设计器,您可以为 URDF 机器人模型设计逆运动学求解器。您可以调整逆运动学求解器并添加约束条件,以实现所需的行为。使用该程序,您可以 从 URDF 文件或 MATLAB 工作区导入 URDF 机器人模型。 调整逆运动学求解器和约束条件。 创建关节配置并导出航点

    2024年04月14日
    浏览(31)
  • 【研发日记】Matlab/Simulink技能解锁(六)——六种Simulink模型架构

    文章目录 前言 串行架构 并行架构 环形架构 星形架构 嵌套架构 Stateflow架构 分析和应用 总结         见《【研发日记】Matlab/Simulink技能解锁(一)——在Simulink编辑窗口Debug》         见《【研发日记】Matlab/Simulink技能解锁(二)——在Function编辑窗口Debug》         见

    2024年04月15日
    浏览(44)
  • Blazor OIDC 单点登录授权实例5 - 独立SSR App (net8 webapp ) 端授权

    目录: OpenID 与 OAuth2 基础知识 Blazor wasm Google 登录 Blazor wasm Gitee 码云登录 Blazor OIDC 单点登录授权实例1-建立和配置IDS身份验证服务 Blazor OIDC 单点登录授权实例2-登录信息组件wasm Blazor OIDC 单点登录授权实例3-服务端管理组件 Blazor OIDC 单点登录授权实例4 - 部署服务端/独立WASM端授

    2024年02月19日
    浏览(43)
  • MATLAB 之 Simulink 操作基础和系统仿真模型的建立

    Simulink 是 MATLAB 的重要组成部分既适用于线性系统,也适用于非线性系统,既适用于连续系统,也适用于离散系统和连续与离散混合系统。既适用于定常系统,也适用于时变系统。 1.1 Simulink 的启动 在安装 MATLAB 的过程中。若选中了 Simulink 组件,则在 MATLAB 安装完成后,Simul

    2024年02月08日
    浏览(37)
  • 在Matlab/Simulink搭建卡尔曼kalman模块化模型

           Kalman滤波是一种利用线性系统状态方程,通过系统输入输出观测数据,对系统状态进行最优估计的算法。算法优点在于计算量小,能够利用前一时刻的状态或可能的测量值来得到当前时刻下状态的最优估计。观测数据中包括系统中的噪声和干扰的影响,所以最优估计

    2024年02月08日
    浏览(48)
  • IsolarAB导出arxml到Matlab/Simulink生成模型并配置内存分区

    本文以一个简单的示例说明如何通过Isolar设计的SWC arxml导入到simulink中生成模型,并指定simulink生成的代码带内存分区信息。本文创建的SWC叫做ECAS_Sensor_SWC, 主要作用是对传感器信号进行处理和传递给后级SWC使用。 对IsolarAB AUTOSAR_Platform/BaseTypes(定义位于PlatformBase_Types.arxml)下面

    2024年04月09日
    浏览(48)
  • uniapp打包app,调用相机功能时在真机调试可以,打包成app之后不行

    在打包成app之后报如图所示错误: 解决: 在app模块配置勾选上相机这一项,如图: 这是主要针对上面这个报错的,当然还有一下情况比较类似,就是相机功能在真机调试下可以,打包之后就不行了。我总结了如下几点: 1. 代码中的sourceType要配置为相机和相册: camera为相机

    2024年02月12日
    浏览(51)
  • MATLAB/ SIMULINK模型在环MIL测试工具,自动化模型测试工具,自动生成测试报告

    MATLAB/ SIMULINK模型在环MIL测试工具,自动化模型测试工具,自动生成测试报告。 软件纯自己编写,经过长时间测试,包教会。 使用简单,可以参考如下截图。 ID:972000 677200256038 悦潮风尚

    2024年02月16日
    浏览(55)
  • 【电路效应】信号处理和通信系统模型中的模拟电路效应研究(Simulink&Matlab代码实现)

    目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码、Simulink仿真实现 在信号处理和通信系统模型中,模拟电路效应研究是指考虑到实际电路的特性对信号进行建模和分析的过程。模拟电路效应可以包括各种电路元件和组件的非线性、延迟、失真等特性对信号传输和处

    2024年02月16日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包