首页 > 其他分享 >Matlab之App Designer simulink模型调用及仿真结果显示在GUI界面上

Matlab之App Designer simulink模型调用及仿真结果显示在GUI界面上

时间:2024-10-30 19:18:39浏览次数:3  
标签:simulink Designer App GUI Label UIFigure app

一、背景介绍

在利用Matlab App Designer成功构建出直观的用户图形界面(GUI)后,我们可以采用代码调用Simulink模型,实现模型的调用与执行,并将分析结果实时反馈至GUI界面上。这一做法极大地增强了用户与应用之间的交互体验。本文将以案例讲解的方式,详细阐述如何通过Matlab App Designer开发的程序来调用、运行Simulink模型,并高效地将模型分析成果展示在GUI界面中,从而为用户提供更加流畅和丰富的交互过程。

二、介绍如何采用Matlab之App Designer 实现simulink模型调用,并将仿真结果显示在GUI界面上

1、首先按照《Matlab之App Designer数据导入simulink并进行仿真》建立App Designer程序及simulink模型,并打开simulink_input_app.mlapp程序进入代码视图,并打开simulink_input.slx模型,如下图所示:

simulink_input_app.mlapp程序进入代码视图

simulink_input.slx模型

2、对simulink_input.slx模型进行修改,添加2个simout(to Workspace)模块,将弹簧总压缩量simout模块名称修改为L_t,将输出的弹簧力simout模块名称修改为F,将simulink仿真的数据传递至工作区,如下图所示。

3、为了实现在Matlab App Designer中调用Simulink模型,并将仿真结果实时展示在GUI界面上,我们需要打开simulink_input_app.mlapp项目,并进入其程序代码视图进行代码编写。首先要设计GUI界面,以便能够直观地展示仿真输出曲线。具体来说,先在App Designer的设计视图中拖入一个坐标区控件,这是展示仿真结果的关键元素。接着,我们对该坐标区进行个性化设置,将其名称修改为“弹簧压缩量-力”,以便清晰地反映其所展示的内容。同时,我们还将横坐标的标签修改为“弹簧压缩量/mm”,纵坐标的标签修改为“弹簧力/N”,以确保用户能够准确理解坐标轴所代表的含义。经过上述设置后,我们的GUI界面将能够清晰地展示弹簧压缩量与弹簧力之间的关系曲线,为用户提供了直观且易于理解的仿真结果展示方式。下图展示了完成这些设置后的GUI界面效果:

4、进入代码视图,进行代码编写,如下图所示。

         out=sim('simulink_input.slx');%调用simulink_input.slx模型并进行运行
         KF=F.data(1:5,:);%调取simulink分析的弹簧力F的数据
         KL_t=L_t.data(1:5,:);%调取simulink分析的弹簧力F的数据
         plot(app.UIAxes,KL_t,KF,'b-')

5、点击运行simulink_input_app.mlapp程序,然后点击“参数导入及分析”按钮,即可显示调用simulink模型分析的弹簧压缩量-力的结果。如下图所示。

6、利用Matlab App Designer构建用户图形界面(GUI),并采用代码调用Simulink模型,实现模型的调用与执行,并将分析结果实时反馈至GUI界面的代码如下。

classdef simulink_input_app < matlab.apps.AppBase

    % Properties that correspond to app components
    properties (Access = public)
        UIFigure           matlab.ui.Figure
        Label              matlab.ui.control.Label
        AppLabel           matlab.ui.control.Label
        Button_2           matlab.ui.control.Button
        L1EditField        matlab.ui.control.NumericEditField
        mmEditFieldLabel   matlab.ui.control.Label
        KEditField         matlab.ui.control.NumericEditField
        NmmEditFieldLabel  matlab.ui.control.Label
        UIAxes             matlab.ui.control.UIAxes
    end

    % Callbacks that handle component events
    methods (Access = private)

        % Button pushed function: Button_2
        function Button_2Pushed(app, event)
         app.Label.Text='';
         K=app.KEditField.Value;
         L=app.L1EditField.Value;
         assignin('base','K',K);
         assignin('base','L',L);
         out=sim('simulink_input.slx');%调用simulink_input.slx模型并进行运行
         KF=F.data(1:5,:);%调取simulink分析的弹簧力F的数据
         KL_t=L_t.data(1:5,:);%调取simulink分析的弹簧力F的数据
         plot(app.UIAxes,KL_t,KF,'b-')
         app.Label.Text='分析完成';
        end
    end

    % Component initialization
    methods (Access = private)

        % Create UIFigure and components
        function createComponents(app)

            % Create UIFigure and hide until all components are created
            app.UIFigure = uifigure('Visible', 'off');
            app.UIFigure.Color = [0.302 0.7451 0.9333];
            app.UIFigure.Position = [100 100 640 480];
            app.UIFigure.Name = 'UI Figure';

            % Create UIAxes
            app.UIAxes = uiaxes(app.UIFigure);
            title(app.UIAxes, '弹簧压缩量-力')
            xlabel(app.UIAxes, '弹簧压缩量/mm')
            ylabel(app.UIAxes, '弹簧力/N')
            zlabel(app.UIAxes, 'Z')
            app.UIAxes.FontWeight = 'bold';
            app.UIAxes.Position = [144 94 313 185];

            % Create NmmEditFieldLabel
            app.NmmEditFieldLabel = uilabel(app.UIFigure);
            app.NmmEditFieldLabel.HorizontalAlignment = 'right';
            app.NmmEditFieldLabel.Position = [18 299 93 22];
            app.NmmEditFieldLabel.Text = '弹簧刚度(N/mm)';

            % Create KEditField
            app.KEditField = uieditfield(app.UIFigure, 'numeric');
            app.KEditField.Position = [126 299 100 22];
            app.KEditField.Value = 20;

            % Create mmEditFieldLabel
            app.mmEditFieldLabel = uilabel(app.UIFigure);
            app.mmEditFieldLabel.HorizontalAlignment = 'right';
            app.mmEditFieldLabel.Position = [306 299 93 22];
            app.mmEditFieldLabel.Text = '弹簧预压值(mm)';

            % Create L1EditField
            app.L1EditField = uieditfield(app.UIFigure, 'numeric');
            app.L1EditField.Position = [414 299 100 22];
            app.L1EditField.Value = 5;

            % Create Button_2
            app.Button_2 = uibutton(app.UIFigure, 'push');
            app.Button_2.ButtonPushedFcn = createCallbackFcn(app, @Button_2Pushed, true);
            app.Button_2.BackgroundColor = [0 1 1];
            app.Button_2.FontColor = [0.149 0.149 0.149];
            app.Button_2.Position = [72 39 100 24];
            app.Button_2.Text = '参数导入及分析';

            % Create AppLabel
            app.AppLabel = uilabel(app.UIFigure);
            app.AppLabel.BackgroundColor = [0 1 1];
            app.AppLabel.FontName = '微软雅黑';
            app.AppLabel.FontSize = 16;
            app.AppLabel.FontWeight = 'bold';
            app.AppLabel.Position = [276 424 119 23];
            app.AppLabel.Text = '弹簧力分析App';

            % Create Label
            app.Label = uilabel(app.UIFigure);
            app.Label.BackgroundColor = [0 1 1];
            app.Label.FontName = '微软雅黑';
            app.Label.FontSize = 16;
            app.Label.FontWeight = 'bold';
            app.Label.Position = [285 40 114 23];
            app.Label.Text = '';

            % Show the figure after all components are created
            app.UIFigure.Visible = 'on';
        end
    end

    % App creation and deletion
    methods (Access = public)

        % Construct app
        function app = simulink_input_app

            % Create UIFigure and components
            createComponents(app)

            % Register the app with App Designer
            registerApp(app, app.UIFigure)

            if nargout == 0
                clear app
            end
        end

        % Code that executes before app deletion
        function delete(app)

            % Delete UIFigure when app is deleted
            delete(app.UIFigure)
        end
    end
end

三、总结

本文介绍了一种高效的方法,即通过Matlab的App Designer工具构建用户图形界面(GUI),并调用Simulink模型进行仿真分析,实时将仿真结果反馈至GUI界面。这种方法不仅增强了用户与应用之间的交互体验,还提高了数据分析和模型验证的效率。

具有以下优点

  1. 直观的用户界面:通过App Designer构建的GUI界面,用户可以直观地看到各种控件和参数设置,无需深入了解Simulink模型的内部结构,即可轻松进行仿真参数的调整。

  2. 实时反馈:仿真结果能够实时显示在GUI界面上,用户可以迅速看到参数变化对模型输出的影响,从而快速进行迭代和优化。

  3. 提高开发效率:利用Matlab和Simulink的集成功能,可以简化开发流程,减少代码编写和调试的工作量,提高开发效率。

  4. 增强用户体验:通过GUI界面与Simulink模型的交互,用户可以更加便捷地进行模型仿真和数据分析,获得更加流畅和丰富的交互体验。

  5. 可扩展性和可维护性:App Designer和Simulink的集成使得应用程序具有更好的可扩展性和可维护性。用户可以根据需求轻松添加新的功能或修改现有功能,而无需对整个系统进行大规模的重构。

综上所述,通过Matlab的App Designer调用Simulink模型,并将仿真结果显示在GUI界面上,不仅可以提高开发效率和用户体验,还可以增强应用程序的可扩展性和可维护性。这种方法为工程师和研究人员提供了一种强大的工具,用于进行复杂的仿真分析和数据可视化。

标签:simulink,Designer,App,GUI,Label,UIFigure,app
From: https://blog.csdn.net/m0_59012156/article/details/143311859

相关文章

  • macOS Sequoia 15.1 发布下载,Apple 智能准备就绪
    macOSSequoia15.1(24B83)正式版ISO、IPSW、PKG下载iPhone镜像、Safari浏览器重大更新和AppleIntelligence等众多全新功能令Mac使用体验再升级请访问原文链接:https://sysin.org/blog/macOS-Sequoia/查看最新版。原创作品,转载请保留出处。作者主页:sysin.org......
  • WPF重写了ListView的ItemsPanel,改用WrapPanel做容器。不能自动换行问题
    直接上正确代码:1<ListViewx:Name="lv_product"HorizontalContentAlignment="Stretch"ItemsSource="{BindingProducts}"2ScrollViewer.HorizontalScrollBarVisibility="Disabled"ScrollViewer.VerticalScrollB......
  • SpringBoot安卓开发的水果商城app (案例分析)-附源码
    摘  要在移动互联网的快速发展背景下,手机应用已成为人们生活中不可或缺的一部分。水果商城App作为电商领域的重要应用之一,为用户提供便捷的购物体验和丰富的商品选择。本研究旨在基于Android平台开发水果商城App,结合SpringBoot框架和Mysql数据库,以实现功能强大、操作简......
  • 风力发电电网系统的simulink建模与仿真
    1.课题概述风力发电电网系统的simulink建模与仿真。                                      2.系统仿真结果    3.核心程序与模型版本:MATLAB2022a  4.系统原理简介4.1风力发电原理与风机数学模型       风......
  • 一个圈圈APP助力企业破解困局
    一个圈圈公司是一家专注去平台中心化、分布式经营的移动互联网数字技术SaaS技术公司,为企业商户数字化转型升级赋能并提供整套解决方案。旗下开发的一个圈圈APP,是一款创新且融合多元化模型为一体的移动端工具,可赋能加持全球各行各业企业商户数字化转型升级,帮助企业商户提升经营......
  • (开题报告)django+vue小红书App论文+源码
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容选题背景关于django和vue在社交类App开发中的应用研究,现有研究主要集中在电商、在线教育等领域。专门针对构建类似小红书App这种以用户分享、社区......
  • APP如何提升关键词排名?
    提升关键词排名是ASO(AppStoreOptimization)策略中的关键环节,以下是一些有效的方法来提高App在应用商店中的关键词排名:1.**关键词研究**:  -使用专业的ASO工具进行关键词研究,找出与你的App相关且搜索量高的关键词。  -分析竞争对手的关键词策略,找出他们排名靠前的......
  • 基于node.js+vue基于Android的“养身坊”APP的设计后(开题+程序+论文)计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容选题背景随着人们生活水平的提高和健康意识的增强,养生保健逐渐成为大众关注的热点。然而,市面上的养生信息繁杂,质量参差不齐,缺乏一个系统化、专业化的平台来提供科学......
  • 微信小程序比APP有什么优势和劣势
    微信小程序与APP相比,具有以下优势和劣势:优势无需下载安装:用户可以直接在微信中使用小程序,无需下载和安装,节省了手机空间和流量。即用即走:小程序使用后即可关闭,不会占用后台资源,用户体验更加流畅。开发成本低:相对于APP,小程序的开发成本更低,维护也更加简便。推广成本低:......
  • 基于uniapp小程序的个人健康管理系统附带文章源码部署视频讲解等
    文章目录前言详细视频演示具体实现截图核心技术介绍小程序框架Uniapp前端框架Vue持久层框架MyBaits为什么选择我代码参考数据库参考测试用例参考源码获取前言......