matlab GUI与Simulink数据传输

Simulink模型搭建

  1. 搭建模型
    在这里插入图片描述

  2. 设置Scope中数据的存储(变量名为ScopeData,存储格式为Array)
    在这里插入图片描述

  3. 设置完成后,运行该模型,Scope的图像数据保存至ScopeData变量中。

matlab GUI界面搭建

  1. 在matlab命令行窗口中输入“guide”,进入GUI搭建界面
    在这里插入图片描述
  2. 搭建GUI界面
    在这里插入图片描述

两者间的通信

Simulink模型与GUI界面之间实现如下功能:

  1. 在GUI界面中的可编辑文本中填入正弦函数的幅值和偏移量;
  2. 点击GUI界面中的“仿真”按钮时,实现如下功能:
    a. 从GUI界面向Simulink模型的数据传输:将在GUI界面中填入的幅值和偏移量数据分别传输给Simulink中Sine Wave模块的Amplitude和Bias参数;
    b. 从workspace向Simulink模型的数据传输:将保存的Scope模块的图像数据传输给GUI界面的坐标区并显示

为实现上述功能,编写GUI界面中“仿真”按钮的回调函数

% A = '1';
% B = '2';
% load_system('SineDisplay');  %载入 SineDisplay.slx 模型(不需要这行代码)

% A = get(handles.Amplitude,'string');  %获取填入的幅值
Amplitude = findobj('tag','Amplitude');  % 解决问题:此类型的变量不支持使用点进行索引
A = get(Amplitude,'string');
% B = get(handles.Bias,'string');       %获取填入的偏移
Bias = findobj('tag','Bias');  % 解决问题:此类型的变量不支持使用点进行索引
B = get(Bias,'string');
set_param('SineDisplay/Sine Wave','Amplitude',A);  %设置Simulink模块中的幅值参数
set_param('SineDisplay/Sine Wave','Bias',B);       %设置Simulink模块中的偏移参数
options = simset('SrcWorkspace','current'); %设置仿真空间
sim('SineDisplay',[],options);              %第一个参数为模型名,第二个参数为模型开始和结束时间组成的向量([]表示按照模型设置的运行时间,第三个参数为仿真空间) 
% axes(handles.SineAxes);                     %将handles.SineAxes设置为当前坐标系
SineAxes = findobj('tag','SineAxes');  % 解决问题:此类型的变量不支持使用点进行索引
axes(SineAxes);
plot(ScopeData(:,1),ScopeData(:,2));        %利用Scope的图形数据绘制图形
grid on

运行GUI界面,得到如下结果:
在这里插入图片描述

使用步骤

  1. 打开matlab,进入到文件所在路径下;

在这里插入图片描述

  1. 双击运行 simulink 模型文件:SineDisplay.slx;
  2. 双击运行 GUI 文件:SineFunc.fig;
  3. 在 SineFunc.fig 中设置“幅值”和“偏移”,点击“仿真”,在左侧即可显示 sin 函数的图像。

报错问题

  • 现象:直接用A = get(handles.Amplitude,'string'); %获取填入的幅值获取句柄变量时,运行.m文件可正常运行,而直接打开.fig文件时会报 “此类型的变量不支持使用点进行索引” 的错误
  • 解决方法:先找到这个句柄对象,再进行赋值
    Amplitude = findobj('tag','Amplitude');  % 解决问题:此类型的变量不支持使用点进行索引
    A = get(Amplitude,'string');
    

  • 以上操作使用的 matlab 版本为 2018a;
  • 获取Simulink模型中模块的参数名:
 get_param('SineDisplay/Sine Wave','objectparameters');
  • 运行GUI界面时,Simulink模型必须在 打开状态
  • 本文对应的全套文件已上传至资源中,如果感兴趣,可以去下载运行。
  • 9
    点赞
  • 113
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
MatlabGUI调用Simulink编译成可执行的exe文件的解决方法-GUIDE_fig.fig 我(们)曾经N次遇到过这样的提问: “为什么GUI里如果使用sim, simset等函数时,就不能编译成可执行的exe文件发布呢?” 我们也解释过很多次,原因是Matlab的compiler不支持sim等与simulink相关的函数,同样,比如说神经网络相关的函数也不支持。 然而,GUISimulink混合编程,是可以编译成可执行exe文件的,使用Matlab自带的RTbuilder工具箱函数编译即可。 使用的方法是:先使用RTW把simulink编译成exe文件,然后与GUI一起编译(GUI可以和exe文件一起编译的) 当然,这个时候请特别注意:不需要在GUI里使用sim函数了,流程是这样的: 1:设计GUI回调函数的时候,把GUI传递的参数传递给Simulink时,不要直接使用simset等函数,而是把参数写到一个mat文件里,比如: x = [0.2 handles.In1 handles.In2]'; save Input.mat x 2:设计Simulink模型的时候,记得让simulink从mat文件里读取参数(就是刚刚GUI写入的参数),同样,输出参数也写到mat文件里,(如output.mat), 比如: Matlab57.jpg Matlab GUI调用Simulink,编译成可执行的exe文件的解决方法 3:在GUI回调函数里,不要直接使用sim命令,而是直接调用exe文件(simulink模型编译 好的exe文件) !SL_model.exe 4:如果要在GUI上面显示参数,直接读取output.mat文件即可: load Output.mat set)) guidata 现在大家对整个流程应该熟悉了吧? 也就是Matlab GUISimulink设计的程序,照样可以编译成exe文件发布... 附件里为用到的.m, ,fig和mdl文件,下载试一下如下命令: GUIDE_fig.fig Matlab GUI调用Simulink,编译成可执行的exe文件的解决方法 GUIDE_fig.m Matlab GUI调用Simulink,编译成可执行的exe文件的解决方法 SL_model.mdl Matlab GUI调用Simulink,编译成可执行的exe文件的解决方法 x = [0 0 0]'; save Input.mat x rtwbuild mcc -m GUIDE_fig.m -a SL_model.exe 注明:以上文件均来自Mathworks公司提供,Matlab中文论坛翻译整理。
### 回答1: MATLAB GUISimulink 可以通过调用 Simulink 模型来连接。在 GUI 中,可以使用 MATLAB 函数调用 Simulink 模型运行,并在 GUI 中显示模拟结果。另外,还可以在 Simulink 模型中使用 MATLAB 函数来控制 GUI 的显示和操作。这需要在 Simulink 模型中添加 MATLAB 函数节点,并在其中编写相应的 MATLAB 代码。 ### 回答2: Matlab GUISimulink是两种不同的编程工具,但它们可以互相连接,实现数据的交互和控制的传递。 Matlab GUI是通过编写GUI程序实现与用户的交互,用户可以通过GUI界面对数据进行输入、输出等操作,因此Matlab GUI主要是面对数据的处理和展示。 而Simulink则是一种基于块图的建模和仿真工具,可以用于各种系统的建模和控制设计,在设计中包括各种控制模块的搭建、信号的传递、仿真和数据分析等功能。 在Matlab中,可以使用Matlab GUISimulink之间的接口完成数据的交互,通过创建Matlab GUI界面上的按钮或菜单项,在响应用户操作时,可以通过调用Simulink模型进行模拟仿真或控制设计等操作。 具体地说,在Matlab GUI中,可以通过如下步骤实现与Simulink的连接: 1. 创建GUI程序,设定按钮或菜单项的回调函数; 2. 在回调函数中,使用Simulink的接口函数,如sim命令或Simulink模块set_param函数,来实现模型的仿真或控制设计等操作; 3. 在处理完数据后,将结果返回给Matlab GUI界面,通过界面控件的显示或消息对话框进行展示。 具体地,在回调函数中,可以使用如下代码与Simulink进行连接: % 导入Simulink模型并启动仿真 model = 'my_model'; load_system(model); set_param(model, 'SimulationCommand', 'start'); % 获取仿真结果 data = sim(model); % 显示结果到Matlab GUI界面 set(handles.result_display, 'String', num2str(data)); 此外,也可以使用Matlab自带的Simulink模块,如Simulink模块、Scope等,在GUI界面上拖拽相应块图并进行连线,来完成数据的传递和控制设计。同时也可以使用可视化建模工具Stateflow进行状态机控制和事件驱动模型的设计。 总体而言,在Matlab中,通过GUISimulink的连接,可以实现数据的交互和控制的传递,为系统建模和控制设计提供了更加便捷而强大的工具。 ### 回答3: MATLAB GUISimulinkMATLAB中两个强大的工具。其中,MATLAB GUI提供了用户友好且易于使用的图形用户界面,使用户可以创建各种自定义应用程序,而Simulink则是MATLAB中一种功能强大的工具,提供了建模、仿真和分析动态系统的功能。正因为如此,将MATLAB GUISimulink结合起来,可以帮助用户创建更加复杂的系统,并且可以更直观地展示出来。 首先,我们需要在MATLAB GUI中使用MATLAB函数来创建Simulink模型,在Simulink模型中间生成从MATLAB GUI的用户界面中传入的数据。这样,在Simulink中模拟所有系统变量后,我们可以继续将结果传递回MATLAB GUI中进行处理。 在MATLAB GUI中,可以使用按钮、文本框和滑块等控件来获取用户输入的数据。然后,我们可以使用MATLAB命令来获取这些数据并将其传递到Simulink模型中。一旦这些数据被Simulink模型所读取并处理后,在MATLAB中就可以将结果展示给用户。 此外,我们还可以使用Simulink Callback Blocks 来获取有关 Simulink 模型的输出。这些输出可以用来更新 MATLAB GUI 中的图表、绘图和其他控件,以反映模型的输出信息。 总之,将MATLAB GUISimulink结合起来,可以帮助用户创建复杂的动态系统,并且可以在MATLAB GUI中提供更直观的界面来展示结果。它也可以在应用方面提供帮助,例如控制系统或图像处理应用程序。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值