Matlab App Designer 【05】Appdesigner和Simulink实时交互

摘要:simulink的数据实时显示在appdesigner上,matlab2024a版本更新的appdesigner这部分功能已经集成,如果更新到2024a了,可直接自带的功能.

注:仅记录学习,如有侵权,联系删除。

  • 1、所写内容只是个人理解,如有错误,还请包涵
  • 2、所用主题为slandarer提供的墨滴模板
  • 3、CSDN:勉为其难免免
  • 4、微信公众号:飘散在人间的一缕青丝

一、Simulink

  为了简单介绍,simulink里面只放Sine Wave、Scope、Out三个模块。

simulink模型

  右键模型空白处,模型属性,设置initfcn初始化函数和startfcn函数

设置回调函数

二、Appdesigner

  非常简单的示意,只有一个坐标区控件。

三、画图函数

  函数名和你在simulinl里面设置的函数名要保持一致,关键地方就是拿到数值,当前时间和坐标区。然后画图。

function PlotOnApp(varargin)
% varargin = (block,eventdata) 输入的两个参数是模块和事件

rto1 = get_param('sineexample/Out1','RuntimeObject');

% 获取界面中的绘图句柄
all_tag_objects = findall(0, '-property', 'tag');
all_tags = get(all_tag_objects, 'tag');

[tf, idx] = ismember('UIAxes', all_tags);% 找到坐标区
if tf
    app_plot = all_tag_objects(idx);
end

XData = get_param('sineexample','SimulationTime');%获取当前simulink运行时间
YData = rto1.InputPort(1).Data;

plot(app_plot,XData,YData,'.','Color','r');
hold(app_plot, 'on' );

end

四、运行示意

  直接运行simulink模型,即可看到app里面会实时显示sine波形。

五、其余案例

  参考案例

  自己在参考案例上修改了一部分,下面贴出代码。

整体界面

  主要功能代码

  startupFcn

            clc;
            movegui(app.UIFigure,'center');% 整个APP居中
            app.Out1.Tag = 'Out1';         % 设置输出1的标签
            app.Out2.Tag = 'Out2';         % 设置输出2的标签
            app.UIAxes.Tag = 'UIAxes';     % 设置坐标系的标签
            set(app.UIAxes,'Fontname', 'Times New Roman','FontSize',12);
            app.RunButton.Enable = "off";
            app.GainValueEditField.Value = 1;
            app.ConstantValueEditField.Value = 2;
            app.Stop.Enable = "off";

            %% 设置颜色
            colorlist = [242,161,167;
                         125,198,155;
                         155,215,243;
                         251,221,211;
                         252,230,207;
                         213,234,217;
                         216,238,251;
                         220,215,235]/255;
            app.SelectSimulinkModelPanel.BackgroundColor = colorlist(1,:);
            app.InputstoSimulinkModelPanel.BackgroundColor = colorlist(2,:);
            app.OutputsfromSimulinkModelPanel.BackgroundColor = colorlist(3,:);
            app.ControlPanel.BackgroundColor = colorlist(4,:);
            app.PlotPanel.BackgroundColor = colorlist(5,:);
            app.UIFigure.Color = colorlist(6,:);

  SelectButtonPushed

            [app.filename, app.filepath] = uigetfile({'*.slx'});
            if isequal(app.filename,0) || isequal(app.filepath,0)
                msgbox('User selected Cancel')
            else
                app.EditField.Value = fullfile(app.filepath,app.filename);
            end
            app.RunButton.Enable = 'on';

  RunButtonPushed

            cla(app.UIAxes);% 每次运行前先清空坐标区控件
            % 把变量分配到工作区 Simulink里面的Gain和Constant模块的数值是从外部给的
            assignin('base','gainVal',app.GainValueEditField.Value);       %
            assignin('base','constantVal',app.ConstantValueEditField.Value);
            simulinkModel = app.filename;
            simulinkModel = extractBefore(simulinkModel,'.');
            app.clickcounts = app.clickcounts+1;
            if app.clickcounts == 1
                disp('########## Opening Simulink-Modell ##########');
                fprintf('Simulink-Modell: %s.slx\n', simulinkModel)
            end
            open_system(simulinkModel);
            if strcmp(app.RunButton.Text,"Run")
                set_param(simulinkModel,'SimulationCommand','start');
                app.RunButton.Text = "Pause";
                app.RunButton.BackgroundColor = [240,207,234]/255;
            elseif strcmp(app.RunButton.Text,"Pause")
                set_param(simulinkModel,'SimulationCommand','pause');
                app.RunButton.Text = "Continue";
                app.RunButton.BackgroundColor = [155,220,252]/255;
            elseif strcmp(app.RunButton.Text,"Continue")
                set_param(simulinkModel,'SimulationCommand','continue');
                app.RunButton.Text = "Running";
                app.RunButton.BackgroundColor = [202,200,239]/255;
                app.RunButton.Enable = "off";
            end
            app.Stop.Enable = "on";

  StopButtonPushed

            cla(app.UIAxes);
            simulinkModel = app.filename;
            simulinkModel = extractBefore(simulinkModel,'.');
            set_param(simulinkModel,'SimulationCommand','stop');

            app.RunButton.Text = "Run";
            app.Stop.Enable = "off";

六、免费下载链接

  公众号:飘散在人间的一缕青丝 后台回复:实时交互

]

  • 7
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

勉为其难免免

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值