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)