Построение и запуск диаграммы Stateflow

Stateflow® график является графическим представлением конечного конечного автомата, состоящего из состояний, переходов и данных. Можно создать диаграмму Stateflow, чтобы определить, как MATLAB® алгоритм или Simulink® модель реагирует на внешние входные сигналы, события и основанные на времени условия. Для получения дополнительной информации см. Model Finite State Machines.

Например, эта диаграмма Stateflow представляет логику, лежащую в основе полуволнового выпрямителя. График содержит два состояния, маркированные On и Off. В On состояние, выходной сигнал графика y равен входу x. В Off состояние, выходной сигнал устанавливается в нуль. Когда входной сигнал переходит некоторый порог t0график переходит между этими состояниями. Действия в каждом состоянии обновляют значение y на каждом временном шаге симуляции.

Stateflow chart with two states.

В этом примере показано, как создать эту диаграмму Stateflow для симуляции в Simulink и выполнения в MATLAB.

Построение диаграммы Stateflow

Откройте редактор Stateflow

Редактор Stateflow является графическим окружением для разработки диаграмм переходов состояний, потоковых графиков, таблиц переходов состояний и таблиц истинности. Прежде чем открывать Редактор Stateflow, определите режим выполнения графика, который наилучшим образом соответствует вашим потребностям.

  • Чтобы смоделировать условную, основанную на событиях и основанную на времени логику для периодических или непрерывных алгоритмов Simulink, создайте диаграмму Stateflow, которую можно симулировать как блок в модели Simulink. В командной строке MATLAB введите:

    sfnew rectify     % create chart for simulation in a Simulink model

    Simulink создает модель под названием rectify который содержит пустой блок Stateflow Chart. Чтобы открыть Редактор Stateflow, дважды кликните блок графика.

  • Чтобы спроектировать переиспользуемый конечный автомат и логику синхронизации для приложений MATLAB, создайте автономную диаграмму Stateflow, которую можно выполнить как объект MATLAB. В командной строке MATLAB введите:

    edit rectify.sfx  % create chart for execution as a MATLAB object

    Если файл rectify.sfx не существует, редактор Stateflow создает пустой график с именем rectify.

Основными компонентами редактора Stateflow являются палитра объектов, полотно графика и панель «Символы».

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

  • В левой части полотна на палитре объектов отображается набор инструментов для добавления графических элементов к графику.

  • В правой части полотна на панели «Символы» вы добавляете новые данные к графику и устраняете неопределенные или неиспользованные символы.

Default view of the Stateflow Editor.

Совет

После создания диаграммы Stateflow можно скопировать ее содержимое на другой график с другим режимом выполнения. Например, можно создать график для выполнения в MATLAB и скопировать ее содержимое в график для симуляции в Simulink.

Добавление состояний и переходов

  1. В палитре объектов щелкните значок State и переместите указатель мыши на холст графика. Появляется состояние с переходом по умолчанию. Чтобы поместить состояние, щелкните место на холсте. В текстовом приглашении введите имя состояния On и состояние активности y = x.

    Chart with one state, On.

  2. Добавить другое состояние. Щелкните правой кнопкой мыши и перетащите On состояние. Синие графические подсказки помогают вам выровнять состояния горизонтально или вертикально. Имя нового состояния изменяется на Off. Дважды кликните состояние и измените состояние активности, чтобы y = 0.

    Chart with two states, On and Off.

  3. Выровняйте два состояния и пауза в пространстве между этими двумя состояниями. Синие сигналы перехода указывают на несколько способов, которыми можно соединить состояния. Чтобы добавить переходы, щелкните соответствующий ключ.

    Кроме того, чтобы нарисовать переход, щелкните и перетащите мышью от ребра одного состояния к ребру другого состояния.

    Chart with the two states joined by transitions.

  4. Дважды кликните каждый переход и введите соответствующее условие перехода x<t0 или x>=t0. Условия появляются внутри квадратных скобок.

    Chart with transition conditions.

  5. Очистить график:

    • Чтобы улучшить ясность, переместите каждую метку перехода в удобное место выше или ниже ее соответствующего перехода.

    • Чтобы выровнять и изменить размер графических элементов графика, на вкладке Format щелкните Auto Arrange или нажмите Ctrl+Shift+A.

    • Чтобы изменить размер графика в соответствии с холстом, нажмите пробел или щелкните значок Fit To View.

Разрешение неопределенных символов

Перед выполнением диаграммы необходимо определить каждый символ, который вы используете на графике, и задать его возможности (для примера, входных данных, выхода данных или локальных данных). На панели «Символы» неопределенные символы отмечены красным значком ошибки. В Type столбце отображаются предлагаемые возможности видимости для каждого неопределенного символа на основе его использования на графике.

  1. Откройте панель «Символы».

    • Если вы строите график в модели Simulink, на вкладке Modeling, под Design Data, выберите Symbols Pane.

    • Если вы строите автономную диаграмму для выполнения в MATLAB, на вкладке State Chart, выберите Add Data > Symbols Pane.

  2. На панели «Символы» нажмите кнопку Resolve Undefined Symbols.

    • Если вы строите график в модели Simulink, Редактор Stateflow разрешает символы x и t0 как входные данные и y в качестве выходных данных.

    • Если вы строите автономную диаграмму для выполнения в MATLAB, Редактор Stateflow разрешает t0, x, и y как локальные данные.

    Before and after views of the Symbols pane resolving the undefined symbols t0, x, and y.

  3. Потому что порог t0 не изменяется во время симуляции, изменяет его возможности на постоянные данные. В Type столбце щелкните значок типа данных рядом с t0 и выберите Constant Data.

  4. Установите значение порога t0. В Value столбце щелкните пустую запись рядом с t0 и введите значение 0.

  5. Сохраните диаграмму Stateflow.

Теперь ваш график готов к симуляции в Simulink или выполнению в MATLAB.

Симулируйте график как блок Simulink

Чтобы симулировать график внутри модели Simulink, соедините блок диаграммы с другими блоками модели через входные и выходные порты. Если необходимо выполнить график из Командного окна MATLAB, см. раздел Выполнение диаграммы как объекта MATLAB.

  1. Чтобы вернуться в Редактор Simulink, на панели навигатора в верхней части полотна, щелкните имя модели Simulink: rectify. Если панель навигатора не отображается, щелкните значок Hide/Show Explorer Bar в верхней части палитры объектов.

  2. Добавьте источник к модели:

    • Из библиотеки Simulink Sources добавьте Sine Wave (Simulink) блок.

    • Дважды кликните Sine Wave блок и установите значение Sample time равным 0,2.

    • Соедините выход блока Sine Wave с входом диаграммы Stateflow.

    • Пометьте сигнал следующим x.

  3. Добавьте раковину в модель:

    • Из библиотеки Simulink Sinks добавьте Scope (Simulink) блок с двумя входными портами.

    • Соедините выход блока Sine Wave с первым входом блока Scope.

    • Соедините выход диаграммы Stateflow со вторым входом блока Scope.

    • Пометьте сигнал следующим y.

  4. Сохраните модель Simulink.

    In a Simulink model, a Sine Wave block creates an input signal for the chart. A Scope block plots the input and output of the chart.

  5. Чтобы симулировать модель, нажмите Run. Во время симуляции Редактор Stateflow подсвечивает активные состояния и переходы через анимацию на графике.

  6. После моделирования модели дважды кликните блок Scope. В возможности отображаются графики входа и выхода сигналов на диаграммы.

    Scope block showing the input and output of the chart.

    Результаты симуляции показывают, что выпрямитель отфильтровывает отрицательные входные значения.

Выполните график как объект MATLAB

Чтобы выполнить график в Командном Окне MATLAB, создайте объект диаграммы и вызовите его step функция. Если вы хотите симулировать график в модели Simulink, см. «Моделируйте график как блок Simulink».

  1. Создайте объект графика r при помощи имени sfx файл, который содержит определение графика как функцию. Задайте начальное значение для данных графика x как пара "имя-значение".

    r = rectify('x',0);
  2. Инициализируйте входные и выходные данные для выполнения графика. Векторная X содержит вход значения из синусоиды. Векторная Y - пустой аккумулятор.

    T = 0:0.2:10;
    X = sin(T);
    Y = [];
  3. Выполните объект графика путем вызова step функция несколько раз. Передайте индивидуума значения из вектора X как данные графика x. Соберите результирующие значения y в векторном Y. Во время выполнения Редактор Stateflow подсвечивает активные состояния и переходы через анимацию на графике.

    for i = 1:51
        step(r,'x',X(i));
        Y(i) = r.y;
    end
  4. Удалите объект графика r из рабочего пространства MATLAB.

    delete(r)
  5. Исследуйте результаты выполнения графика. Для примера можно вызвать stairs функция для создания ступенчатого графика, который сравнивает значения X и Y.

    ax1 = subplot(2,1,1);
    stairs(ax1,T,X,'color','#0072BD')
    title(ax1,'x')
    
    ax2 = subplot(2,1,2);
    stairs(ax2,T,Y,'color','#D95319')
    title(ax2,'y')

    MATLAB figure showing the input and output of the chart.

    Результаты выполнения показывают, что выпрямитель отфильтровывает отрицательные входные значения.

См. также

| | | (Simulink) | (Simulink)

Похожие темы