exponenta event banner

Конструирование логики человеко-машинного интерфейса с использованием диаграмм статусов

В этом примере показано, как моделировать логику графического интерфейса пользователя в автономной диаграмме Stateflow ®. Автономные диаграммы реализуют классическую семантику диаграмм с MATLAB ® в качестве языка действий. Можно запрограммировать диаграмму с помощью всех функциональных возможностей MATLAB, включая функции, ограниченные для генерации кода в Simulink ®. Дополнительные сведения см. в разделе Создание диаграмм потока состояний для выполнения в виде объектов MATLAB.

Можно выполнить автономную диаграмму Stateflow, вызвав ее входные события и используя временные операторы. Рабочий процесс выполнения на основе событий и таймеров подходит для разработки логики, лежащей в основе человеко-машинных интерфейсов (HMI) и графических пользовательских интерфейсов (UI).

  • При использовании MATLAB App Designer функции обратного вызова из виджетов интерфейса вызывают события на диаграмме.

  • В диаграмме Stateflow свойства пользовательского интерфейса контролируются временными операторами и локальными данными.

Дополнительные сведения об использовании MATLAB для создания графических пользовательских интерфейсов см. в разделе Разработка приложений с помощью App Designer.

Управление пользовательским интерфейсом App Designer

Этот интерфейс пользователя содержит переключатель On-Off, управляющий лампой. Если переключатель находится в положении «Включено», индикатор загорается в одном из двух режимов, сплошном или мигающем, в зависимости от положения кнопки опции «Режим». Скорость мигания можно контролировать, перемещая ползунок Скорость мигания (Blink Rate).

Файл sf_lamp_logic.sfx определяет автономную диаграмму Stateflow, реализующую логику пользовательского интерфейса. Диаграмма содержит входные события (ON, OFF, BLINKING, и SOLID) и локальные данные (delay и app). Действия в диаграмме определяют, какие виджеты доступны из каждого состояния. Например, действия в Off состояние приводит к тому, что виджет «Лампа», кнопки опций «Режим» и ползунок «Скорость мигания» в интерфейсе пользователя становятся недоступными.

В On состояние, подстанции Solid и Blinking обозначают два режима работы. Для реализации мигающей лампы диаграмма опирается на оператор временной логики after. Когда диаграмма переходит в состояние Blinking.Off, выражение after(delay,sec) при исходящем переходе создается объект таймера MATLAB, который выполняет диаграмму через несколько секунд. Затем диаграмма переходит в состояние Blinking.On и создает другой объект таймера для запуска перехода обратно в Blinking.Off. В то время как диаграмма постоянно переходит между двумя состояниями, скорость мигания можно регулировать путем изменения значения локальной задержки данных или выхода из режима мигания путем вызова входных событий. SOLID или OFF.

Исторический стык в On состояние сохраняет информацию о последнем активном подсостоянии, так что пользовательский интерфейс возвращается к предыдущему режиму работы при включении лампы.

Выполнение автономной диаграммы с помощью событий

Автономную диаграмму можно выполнить, вызвав ее входные функции событий в окне команд MATLAB. Редактор потока состояний показывает эффекты каждой из этих команд, выделяя активные состояния и переходы с помощью анимации диаграммы.

1. Откройте автономную диаграмму в редакторе Stateflow Editor.

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 и выберите Просмотр кода.

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 = round(0.5/app.BlinkRateSlider.Value,2);
end

При запуске интерфейса пользователя можно наблюдать влияние настройки управляющих виджетов на холсте диаграммы и на виджете лампы.

См. также

Связанные темы