График Stateflow® является графическим представлением конечного автомата, состоящего из состояний, переходов и данных. Можно создать диаграмму Stateflow, чтобы задать, как алгоритм MATLAB® или модель Simulink® реагируют на внешние входные сигналы, события и условия, зависящие от времени. Для получения дополнительной информации смотрите Конечные автоматы Модели.
Например, эта диаграмма 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
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.
Дважды кликните блок Sine Wave и установите Sample time на 0,2.
Соедините выход блока Sine Wave к входу диаграммы Stateflow.
Пометьте сигнал как x
.
Добавьте приемник в модель:
От библиотеки Simulink Sinks добавьте блок Scope с двумя входными портами.
Соедините выход блока 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 | Scope | Sine Wave | sfnew
| stairs