一、背景介绍
在利用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界面。这种方法不仅增强了用户与应用之间的交互体验,还提高了数据分析和模型验证的效率。
具有以下优点:
-
直观的用户界面:通过App Designer构建的GUI界面,用户可以直观地看到各种控件和参数设置,无需深入了解Simulink模型的内部结构,即可轻松进行仿真参数的调整。
-
实时反馈:仿真结果能够实时显示在GUI界面上,用户可以迅速看到参数变化对模型输出的影响,从而快速进行迭代和优化。
-
提高开发效率:利用Matlab和Simulink的集成功能,可以简化开发流程,减少代码编写和调试的工作量,提高开发效率。
-
增强用户体验:通过GUI界面与Simulink模型的交互,用户可以更加便捷地进行模型仿真和数据分析,获得更加流畅和丰富的交互体验。
-
可扩展性和可维护性: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