matlab gui 循环计算过程实现暂停和继续计算

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab gui 循环计算过程实现暂停和继续计算相关的知识,希望对你有一定的参考价值。

前段时间的一个问题【matlab gui 循环计算过程实现暂停和继续计算】(编号426631696194936852)是题主问的吧?

 

由于度娘弱智又恶心的过滤机制,后续的交流一直不顺畅(我试图通过评论说明多次被删,也看到多次有评论提醒,但打开却看不到),现把代码上传到这里。

 

基本做法是,在进行循环之前,加上以下几句:

fig=gcf; figure(fig);
setappdata(fig,'Disu_Pause',0)
set(fig,'WindowButtonDownFcn','setappdata(gcbf,''Disu_Pause'',~getappdata(gcbf,''Disu_Pause''))');

然后,在每个循环体的最里层的最前面,加上

    % 通过获取自定义的数据Disu_Pause判断是否暂停;关闭窗口则退出
    try
        while true
            if ~getappdata(fig,'Disu_Pause')
                break
            else
                pause(0.01)
            end
        end
    catch me
        return
    end

基本思想:

1、通过自定义窗口的应用数据避免使用全局变量;

2、设置窗口的WindowButtonDownFcn回调函数在点击鼠标时改变应用数据;

3、在每个循环中,如果状态为pause,则利用形式上的死循环进行等待(每次0.01秒,是系统时钟的精度),如果不是状态,则退出等待的循环体;

4、用try-catch结构,在关闭窗口时返回(即退出程序)。

参考技术A

用全局变量也行,但是循环体里面要加入drawnow()函数,让函数有机会读取你更改的全局变量以实现停止。

一个按钮开始循环,预留全局变量中断循环,另一个按钮改变全局变量。

点击一个按钮,不断的输出i自增的数值,然后一个if判别全局变量控制循环的中断,在循环体中,插入drawnow(),让函数有机会读取你更改的全局变量。这个按钮下的代码如下:

function pushbutton1_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global h;
i=1;
while 1
    i=i+1
    if (h==0)
        break;
    end
    drawnow()
end

另一个按钮,改变全局变量

function pushbutton2_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% handles.h=0;
global h;
h=0;

提示:需要已经在OpeningFcn声明过全局变量。

过程控制基于matlab GUI串级控制含Matlab源码 2385期

⛄一、简介

1 交互系统整体外观展示
该系统基于 MATLAB GUI 与 Simulink 联合开发, 实现对串级控制系统特性的研究与分析。学生在学习串级控 制有关知识后可使用该应用进行知识回顾。界面提供许多功能按钮以及输入输出窗口, 方便参数设置。整个系统分 为三大部分:串级控制特性——提升工作频率演示、串级控制特性——提升抗扰能力演示、串级控制主控制器和副 控制器参数整定演示。(注:验证参数可根据这张图片中的数据进行设定)

2 串级控制特性——提升工作频率演示
这一部分开发的基础知识源于《过程控制系统》 P121- 124 有关串级控制提升工作频率的理论讲解。 模块包含三 个子部分:图像绘制界面、控制面板、参数显示部分。图像绘制界面绘制串级控制与单回路控制在阻尼相同时的阶 跃响应曲线与各自的闭环 bode 图。控制面板可以输入影响串级控制提升工作频率的几个重要参数 (To1/To2, K2),即 主对象与副对象之间时间常数比值以及副控制器增益, 另外K1 也可作为输入。参数显示部分从 3 个方面比较串级控 制与单回路控制差别:工作频率、闭环带宽、过渡时间。同时, 还给出了串级控制较单回路控制等效时间常数和等 效增益的变化。在参数显示中,创新地将工作频率提升的本质归结到闭环带宽的提升,这一点是书上没有讲到的。 图像绘制界面可以绘制串级控制与单回路控制的时域响应和频域响应。参数面板如下图,既有时域信息也有频域信
息。

有关参数的计算原理可参考《自动控制原理》第三章时域理论以及第五章频域理论。等效时间常数和等效增益 计算参考《过程控制系统》P122。

3 串级控制特性——提升抗扰能力演示
这一部分基于 MATLAB 与 Simulink 联合开发,MATLAB GUI 运行 Simulink 模型后将数据传至 Workspace , GUI 再调用Workspace 数据, 最后进行图像的绘制。该模块包含三个子部分:图像绘制界面、扰动值和扰动时间给 定界面、功能按钮部分。涉及到的理论知识参考《过程控制系统》P124- 126 有关串级控制抗扰能力的讲述。功能按 钮部分点击“Simulink 开始仿真”即可开始仿真。第二个按钮可查看 Simulink 模型示意图,第三个按钮点击后可显
示仿真中串级控制和单回路控制的系统方框图,方便使用者对应参数在实际模型中所处位置,点击后弹出窗口:

第四个按钮点击后会显示在这一部分默认使用的系统参数。给定好恒值干扰大小以及作用时间后点击“Simulink 开
始仿真”,稍微等待一段时间即可得到图像(图中虚线位置为扰动加入时间点)。

图中虚线表示干扰开始作用的时间,该演示程序添加了数据游标等工具方便使用者对图像进行细致观察。

4 串级控制主控制器和副控制器参数整定演示
这一部分同样基于 Simulink 与MATLAB 进行联合仿真并计算。涉及到的知识参考《过程控制系统》 P129, 133- 135,以及一些优化算法知识。根据 P129 页有关“主副调节器控制规律的选择”所述, 这一部分所使用的串级控制 模型中主控制器为 PI (比例-积分),副控制器为 P (比例)。该模块包含 5 个子部分: 优化后串级控制输出响应曲线绘 制、优化后串级控制 PI 控制器输出响应曲线、给定模型参数部分、经优化后 PI 控制器,P 控制器参数值以及开始 仿真按钮。
参数的选择使用无梯度优化的方法, 目标函数选用性能优异的 ITAE 指标 (这一部分参考《控制系统仿真与 CAD》):
为了更好地模拟实际情况,控制器中积分项带限幅输出且控制器输出带相同限幅输出, 同时考虑到阀门全开状 态下流量有上限,因此阀门输出带限幅,这些参数都可以在整定前输入界面。

⛄二、部分源代码

function varargout = demo(varargin)
gui_Singleton = 1;
gui_State = struct(‘gui_Name’, mfilename, …
‘gui_Singleton’, gui_Singleton, …
‘gui_OpeningFcn’, @demo_OpeningFcn, …
‘gui_OutputFcn’, @demo_OutputFcn, …
‘gui_LayoutFcn’, [] , …
‘gui_Callback’, []);
if nargin && ischar(varargin1)
gui_State.gui_Callback = str2func(varargin1);
end

if nargout
[varargout1:nargout] = gui_mainfcn(gui_State, varargin:);
else
gui_mainfcn(gui_State, varargin:);
end
end
% End initialization code - DO NOT EDIT

% — Executes just before demo is made visible.
function demo_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to demo (see VARARGIN)

% Choose default command line output for demo
handles.output = hObject;

% Update handles structure
axes(handles.axes1);grid on;
axes(handles.axes3);grid on;
axes(handles.axes4);grid on;
axes(handles.axes5);grid on;
%初始化串级控制参数
handles.K01 = 1;handles.Km1 = 5;handles.K02 = 1;handles.Km2 = 1;
handles.Kv = 1;
guidata(hObject, handles);
end

% — Outputs from this function are returned to the command line.
function varargout = demo_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure
varargout1 = handles.output;
end

function edit1_Callback(hObject, eventdata, handles)
% Hints: get(hObject,‘String’) returns contents of edit1 as text
% str2double(get(hObject,‘String’)) returns contents of edit1 as a double
T01 = get(handles.edit1,‘String’);
T01 = str2double(T01);
handles.T01 = T01;
guidata(hObject,handles);
end

% — Executes during object creation, after setting all properties.
function edit1_CreateFcn(hObject, eventdata, handles)
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,‘BackgroundColor’), get(0,‘defaultUicontrolBackgroundColor’))
set(hObject,‘BackgroundColor’,‘white’);
end
end

function edit2_Callback(hObject, eventdata, handles)
% Hints: get(hObject,‘String’) returns contents of edit2 as text
% str2double(get(hObject,‘String’)) returns contents of edit2 as a double
T02 = get(handles.edit2,‘String’);
T02 = str2double(T02);
handles.T02 = T02;
guidata(hObject,handles);
end

⛄三、运行结果


⛄四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]吴成渝,王超,李斌.模糊自适应PID串级控制在主汽温控制中的应用[J].电子设计工程. 2018,26(22)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

以上是关于matlab gui 循环计算过程实现暂停和继续计算的主要内容,如果未能解决你的问题,请参考以下文章

怎么用matlab实现计算器功能

Matlab - AppDesigner:使用GUI中断循环

JS,JQ实现暂停FOR循环,间隔几秒后再继续执行

基于YOLOv4的目标检测系统(附MATLAB代码+GUI实现)

matlab GUI-数据输入,输出与处理的简单例子

Matlab GUI中的无限循环导致关闭GUI时Matlab冻结?