Проектируйте логику интерфейса человек-машина с помощью диаграмм Stateflow

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

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

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

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

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

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

Этот пользовательский интерфейс содержит выключатель, который управляет лампой. Когда переключатель находится в положении On, лампа загорается в одном из двух режимов, сплошном или мигающем, в зависимости от положения кнопки опция. Вы управляете скоростью мигания, перемещая ползунок Blink Rate.

Файл sf_lamp_logic.sfx задает автономную диаграмму Stateflow, которая реализует логику для пользовательского интерфейса. График имеет входные события (ON, OFF, BLINKING, и SOLID) и локальные данные (delay и app). Действия на графике определяют, какие виджеты доступны из каждого состояния. Для образца действия в Off состояние заставляет виджет Lamp, кнопки Mode и ползунок Blink Rate в пользовательском интерфейсе выглядеть затемненным.

В 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 и выберите Представление Кода.

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 функция обратного вызова для виджета Switch:

function SwitchValueChanged(app,event)
    value = app.Switch.Value;
    switch lower(value)
        case 'off'
            OFF(app.lampLogic);
        case 'on'
            ON(app.lampLogic);
    end
end
  • SelectionChangedFcn функция обратного вызова для виджета Mode Button:

function ModeButtonGroupSelectionChanged(app,event)
    selectedButton = app.ModeButtonGroup.SelectedObject;
    if app.SolidButton == selectedButton
        SOLID(app.lampLogic);
    else
        BLINKING(app.lampLogic);
    end
end
  • ValueChangedFcn функция обратного вызова для виджета Blink Rate Slider:

function BlinkRateSliderValueChanged(app,event)
    app.lampLogic.delay = round(0.5/app.BlinkRateSlider.Value,2);
end

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

См. также

Похожие темы