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

В этом примере показано, как создать эту диаграмму Stateflow для симуляции в Simulink и выполнения в MATLAB.
Редактор 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 являются палитра объектов, полотно графика и панель «Символы».
Полотно графика является областью рисования, где вы создаете график путем объединения состояний, переходов и других графических элементов.
В левой части полотна на палитре объектов отображается набор инструментов для добавления графических элементов к графику.
В правой части полотна на панели «Символы» вы добавляете новые данные к графику и устраняете неопределенные или неиспользованные символы.

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

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

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

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

Очистить график:
Чтобы улучшить ясность, переместите каждую метку перехода в удобное место выше или ниже ее соответствующего перехода.
Чтобы выровнять и изменить размер графических элементов графика, на вкладке Format щелкните Auto Arrange или нажмите Ctrl+Shift+A.
Чтобы изменить размер графика в соответствии с холстом, нажмите пробел или щелкните значок Fit To View.![]()
Перед выполнением диаграммы необходимо определить каждый символ, который вы используете на графике, и задать его возможности (для примера, входных данных, выхода данных или локальных данных). На панели «Символы» неопределенные символы отмечены красным значком ошибки.
В Type столбце отображаются предлагаемые возможности видимости для каждого неопределенного символа на основе его использования на графике.
Откройте панель «Символы».
Если вы строите график в модели Simulink, на вкладке Modeling, под Design Data, выберите Symbols Pane.
Если вы строите автономную диаграмму для выполнения в MATLAB, на вкладке State Chart, выберите Add Data > Symbols Pane.
На панели «Символы» нажмите кнопку Resolve Undefined Symbols.
Если вы строите график в модели Simulink, Редактор Stateflow разрешает символы x и t0 как входные данные
и y в качестве выходных данных.![]()
Если вы строите автономную диаграмму для выполнения в MATLAB, Редактор Stateflow разрешает t0, x, и y как локальные данные.![]()

Потому что порог t0 не изменяется во время симуляции, изменяет его возможности на постоянные данные. В Type столбце щелкните значок типа данных рядом с t0 и выберите
Constant Data.
Установите значение порога t0. В Value столбце щелкните пустую запись рядом с t0 и введите значение 0.
Сохраните диаграмму Stateflow.
Теперь ваш график готов к симуляции в Simulink или выполнению в MATLAB.
Чтобы симулировать график внутри модели Simulink, соедините блок диаграммы с другими блоками модели через входные и выходные порты. Если необходимо выполнить график из Командного окна MATLAB, см. раздел Выполнение диаграммы как объекта MATLAB.
Чтобы вернуться в Редактор Simulink, на панели навигатора в верхней части полотна, щелкните имя модели Simulink: ![]()
rectify. Если панель навигатора не отображается, щелкните значок Hide/Show Explorer Bar
в верхней части палитры объектов.
Добавьте источник к модели:
Из библиотеки Simulink Sources добавьте Sine Wave (Simulink) блок.
Дважды кликните Sine Wave блок и установите значение Sample time равным 0,2.
Соедините выход блока Sine Wave с входом диаграммы Stateflow.
Пометьте сигнал следующим x.
Добавьте раковину в модель:
Из библиотеки Simulink Sinks добавьте Scope (Simulink) блок с двумя входными портами.
Соедините выход блока Sine Wave с первым входом блока Scope.
Соедините выход диаграммы Stateflow со вторым входом блока Scope.
Пометьте сигнал следующим y.
Сохраните модель Simulink.

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

Результаты симуляции показывают, что выпрямитель отфильтровывает отрицательные входные значения.
Чтобы выполнить график в Командном Окне MATLAB, создайте объект диаграммы и вызовите его step функция. Если вы хотите симулировать график в модели Simulink, см. «Моделируйте график как блок Simulink».
Создайте объект графика r при помощи имени sfx файл, который содержит определение графика как функцию. Задайте начальное значение для данных графика x как пара "имя-значение".
r = rectify('x',0);Инициализируйте входные и выходные данные для выполнения графика. Векторная X содержит вход значения из синусоиды. Векторная Y - пустой аккумулятор.
T = 0:0.2:10; X = sin(T); Y = [];
Выполните объект графика путем вызова step функция несколько раз. Передайте индивидуума значения из вектора X как данные графика x. Соберите результирующие значения y в векторном Y. Во время выполнения Редактор Stateflow подсвечивает активные состояния и переходы через анимацию на графике.
for i = 1:51 step(r,'x',X(i)); Y(i) = r.y; end
Удалите объект графика r из рабочего пространства MATLAB.
delete(r)
Исследуйте результаты выполнения графика. Для примера можно вызвать 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')

Результаты выполнения показывают, что выпрямитель отфильтровывает отрицательные входные значения.
Chart | sfnew | stairs | Scope (Simulink) | Sine Wave (Simulink)