Автономный график Stateflow® является классом MATLAB®, который задает поведение конечного автомата. Автономные графики реализуют классическую семантику графика с 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 показывает эффекты каждой из этих команд путем выделения активных состояний и переходов посредством анимации графика.
Откройте автономный график в редакторе Stateflow.
edit sf_lamp_logic.sfx
Создайте объект диаграммы L
и инициализируйте значение delay
к 0,5. Это значение соответствует мигающему уровню одной флэш-памяти в секунду.
L = sf_lamp_logic('delay',0.5);
Включите лампу.
ON(L)
Переключитесь на мигающий режим.
BLINKING(L)
Установите значение delay
к 0,25. Это значение соответствует мигающему уровню двух вспышек в секунду.
L.delay = 0.25;
Переключитесь на твердый режим.
SOLID(L)
Выключите лампу.
OFF(L)
Удалите объект диаграммы L
из рабочего пространства MATLAB.
delete(L)
Чтобы установить двунаправленную связь между пользовательским интерфейсом и автономной диаграммой Stateflow, откройте окно App Designer и выберите Code View.
В окне App Designer создайте частную собственность lampLogic
, чтобы сохранить указатель на объект диаграммы Stateflow.
properties (Access = private)
lampLogic
end
Создайте функцию обратного вызова StartupFcn
, которая создает объект диаграммы и устанавливает его локальные данные app
на указатель пользовательского интерфейса. Присвойте указатель объекта диаграммы на частную собственность lampLogic
.
% Code that executes after component creation function StartupFcn(app) app.lampLogic = sf_lamp_logic('delay',0.5,'app',app); end
Создайте функцию обратного вызова CloseRequestFcn
, которая удаляет объект диаграммы, когда вы закрываете пользовательский интерфейс.
% Close request function: UIFigure function UIFigureCloseRequest(app, event) delete(app.lampLogic); delete(app); end
Для каждого из виджетов пользовательского интерфейса добавьте функцию обратного вызова, которая вызывает соответствующее событие на автономный график.
Функция обратного вызова 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
Когда вы запускаете пользовательский интерфейс, можно наблюдать эффекты корректировки виджетов управления на холсте графика и на виджете лампы.