matlab GUI与Simulink数据传输
Simulink模型搭建
-
搭建模型
-
设置Scope中数据的存储(变量名为ScopeData,存储格式为Array)
-
设置完成后,运行该模型,Scope的图像数据保存至ScopeData变量中。
matlab GUI界面搭建
- 在matlab命令行窗口中输入“guide”,进入GUI搭建界面
- 搭建GUI界面
两者间的通信
Simulink模型与GUI界面之间实现如下功能:
- 在GUI界面中的可编辑文本中填入正弦函数的幅值和偏移量;
- 点击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界面,得到如下结果:
使用步骤
- 打开matlab,进入到文件所在路径下;
- 双击运行 simulink 模型文件:SineDisplay.slx;
- 双击运行 GUI 文件:SineFunc.fig;
- 在 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模型必须在 打开状态;
- 本文对应的全套文件已上传至资源中,如果感兴趣,可以去下载运行。