В этом примере показано, как смоделировать логику графического интерфейса пользователя в автономном графике Stateflow®. Автономные графики реализуют классическую семантику графика с MATLAB® как язык действия. Можно программировать график при помощи полной функциональности MATLAB, включая те функции, которые ограничиваются для генерации кода в Simulink®. Для получения дополнительной информации смотрите, Создают диаграммы Stateflow для Выполнения как Объекты MATLAB.
Можно выполнить автономную диаграмму Stateflow путем вызова ее входных событий и использования темпоральных операторов. Событие - и управляемый таймером рабочий процесс выполнения подходит для разработки логики, лежащей в основе человеко-машинных интерфейсов (HMIs) и графических интерфейсов пользователя (UIs).
Когда вы используете App Designer MATLAB, функции обратного вызова от интерфейсных виджетов вызывают события в графике.
В диаграмме Stateflow темпоральные операторы и локальные данные управляют свойствами пользовательского интерфейса.
Для получения дополнительной информации о том, как использовать MATLAB, чтобы создать графические интерфейсы пользователя, видеть App Designer (MATLAB).
Этот пользовательский интерфейс содержит переключатель On-Off, который управляет лампой. Когда переключатель находится в На положении, лампа освещает в одном из двух режимов, тела или мигающий, в зависимости от положения переключателя Mode. Вы управляете уровнем мигания путем перемещения ползунка Частоты мигания.
Файл sf_lamp_logic.sfx
задает автономную диаграмму Stateflow, которая реализует логику для пользовательского интерфейса. График ввел события (ON
'off'
, BLINKING
, и SOLID
) и локальные данные (delay
и app
). Действия в управлении графиком, какие виджеты доступны от каждого состояния. Например, действия в Off
утвердите вызывают виджет Лампы, переключатели Mode, и ползунок Частоты мигания в пользовательском интерфейсе, чтобы появиться потускнел.
В On
состояние, подсостояния Solid
и Blinking
обозначьте эти два режима работы. Чтобы реализовать мигающую лампу, график использует временный логический оператор after
. Когда график вводит Blinking.Off
состояния, выражение
after(delay,sec)
на исходящем переходе создает объект - таймер MATLAB, который выполняет график после многих секунд. График затем переходы к Blinking.On
состояния и создает другой объект - таймер инициировать переход назад к
Blinking.Off
. В то время как график постоянно переходит между двумя состояниями, можно настроить, уровень мигания путем изменения значения локальных данных задерживаются или переход из мигающего режима путем вызова входных событий SOLID
или OFF
.
Соединение истории в On
утвердите информацию о консервах о последний раз активном подсостоянии так, чтобы пользовательский интерфейс возвратился к предыдущему режиму работы, когда вы включаете лампу.
Можно выполнить автономный график путем вызывания его входных функций события в Окне Команды MATLAB. Редактор Stateflow показывает эффекты каждой из этих команд путем выделения активных состояний и переходов посредством анимации графика.
1. Откройте автономный график в редакторе Stateflow.
edit sf_lamp_logic.sfx
2. Создайте объект диаграммы L
и инициализируйте значение delay
к 0,5. Это значение соответствует мигающему уровню одной флэш-памяти в секунду.
L = sf_lamp_logic('delay',0.5);
3. Включите лампу.
ON(L)
4. Переключитесь на мигающий режим.
BLINKING(L)
5. Установите значение delay
к 0,25. Это значение соответствует мигающему уровню двух вспышек в секунду.
L.delay = 0.25;
6. Переключитесь на твердый режим.
SOLID(L)
7. Выключите лампу.
OFF(L)
8. Удалите объект диаграммы L
от рабочего пространства MATLAB.
delete(L)
Чтобы установить двунаправленную связь между пользовательским интерфейсом и автономной диаграммой Stateflow, откройте окно App Designer и выберите Code View.
1. В окне App Designer создайте частную собственность lampLogic
сохранить указатель на объект диаграммы Stateflow.
properties (Access = private)
lampLogic
end
2. Создайте StartupFcn
функция обратного вызова, которая создает объект диаграммы и устанавливает его локальные данные app
к указателю пользовательского интерфейса. Присвойте указатель объекта диаграммы на lampLogic
частная собственность.
% Code that executes after component creation function StartupFcn(app) app.lampLogic = sf_lamp_logic('delay',0.5,'app',app); end
3. Создайте CloseRequestFcn
функция обратного вызова, которая удаляет объект диаграммы, когда вы закрываете пользовательский интерфейс.
% Close request function: UIFigure function UIFigureCloseRequest(app, event) delete(app.lampLogic); delete(app); end
4. Для каждого из виджетов пользовательского интерфейса добавьте функцию обратного вызова, которая вызывает соответствующее событие на автономный график.
ValueChangedFcn
функция обратного вызова для виджета Переключателя:
function SwitchValueChanged(app,event) value = app.Switch.Value; switch lower(value) case 'off' OFF(app.lampLogic); case 'on' ON(app.lampLogic); end end
SelectionChangedFcn
функция обратного вызова для виджета Кнопки Режима:
function ModeButtonGroupSelectionChanged(app,event) selectedButton = app.ModeButtonGroup.SelectedObject; if app.SolidButton == selectedButton SOLID(app.lampLogic); else BLINKING(app.lampLogic); end end
ValueChangedFcn
функция обратного вызова для виджета Ползунка Частоты мигания:
function BlinkRateSliderValueChanged(app,event) app.lampLogic.delay = 0.5/app.BlinkRateSlider.Value; end
Когда вы запускаете пользовательский интерфейс, можно наблюдать эффекты корректировки виджетов управления на холсте графика и на виджете лампы.