Автоматическое обновление графика в приложении GUIDE

Этот пример показывает, как исследовать и запустить предварительно созданное приложение GUIDE. Отображения приложения объемная поверхностная диаграмма, добавляет случайный шум к поверхности и обновляет график равномерно. Приложение содержит две кнопки: тот, который начинает добавлять случайный шум к графику и другому, который прекращает добавлять шум. Ползунок ниже графика позволяет пользователю устанавливать период обновления между 0,01 и 2 секундами.

Открытие и запуск примера

Открытый и выполнение приложение. Переместите ползунок, чтобы установить интервал обновления между 0,01 и 2,0 секундами. Затем нажмите кнопку Start Randomizing, чтобы начать добавлять случайный шум к нанесенной на график функции. Нажмите кнопку Stop Randomizing, чтобы прекратить добавлять шум и обновлять график.

Исследование кода

  1. В GUIDE нажмите кнопку Editor, чтобы просмотреть код.

  2. Около верхней части окна Editor используйте кнопку Go To, чтобы перейти к функциям, обсужденным ниже.

ex_guide_timergui_OpeningFcn

Функция ex_guide_timergui_OpeningFcn выполняется, когда приложение открывает и начинает запускаться. Эта команда создает объект timer и хранит его в структуре handles.

handles.timer = timer(...
    'ExecutionMode', 'fixedRate', ...       % Run timer repeatedly.
    'Period', 1, ...                        % Initial period is 1 sec.
    'TimerFcn', {@update_display,hObject}); % Specify callback function.
Функцией обратного вызова для таймера является update_display, который задан как локальная функция.

update_display

Функция update_display выполняется, когда заданный период timer протекает. Функция получает значения в свойстве ZData объекта Surface и добавляет случайный шум к нему. Затем это обновляет график.

handles = guidata(hfigure);
Z = get(handles.surf,'ZData');
Z = Z + 0.1*randn(size(Z));
set(handles.surf,'ZData',Z);

periodsldr_Callback

Функция periodsldr_Callback выполняется, когда пользователь перемещает ползунок. Это вычисляет период таймера путем получения значения ползунка и усечения его. Затем это обновляет метку ниже ползунка и обновляет период объекта timer.

% Read the slider value
period = get(handles.periodsldr,'Value');
% Truncate the value returned by the slider.
period = period - mod(period,.01);
% Set slider readout to show its value.
set(handles.slidervalue,'String',num2str(period))
% If timer is on, stop it, reset the period, and start it again.
if strcmp(get(handles.timer, 'Running'), 'on')
    stop(handles.timer);
    set(handles.timer,'Period',period)
    start(handles.timer)
else               % If timer is stopped, reset its period.
    set(handles.timer,'Period',period)
end

startbtn_Callback

Вызовы функции startbtn_Callback метод start объекта timer, если таймер уже не запускается.

if strcmp(get(handles.timer, 'Running'), 'off')
    start(handles.timer);
end

stopbtn_Callback

Вызовы функции stopbtn_Callback метод stop объекта timer, если таймер в настоящее время запускается.

if strcmp(get(handles.timer, 'Running'), 'on')
    stop(handles.timer);
end

figure1_CloseRequestFcn

Обратный вызов figure1_CloseRequestFcn выполняется, когда пользователь закрывает приложение. Функция останавливает объект timer, если это запускает, удаляет объект timer, и затем удаляет окно фигуры.

if strcmp(get(handles.timer, 'Running'), 'on')
    stop(handles.timer);
end
% Destroy timer
delete(handles.timer)
% Destroy figure
delete(hObject);

Похожие темы

Была ли эта тема полезной?