Существует два общих подхода к программированию графика Stateflow® в модели Simulink®:
Идентифицируйте рабочие режимы своей системы.
Идентифицируйте системный интерфейс, такой как события, на которые реагирует ваша система.
Этот пример использует первый подход — то есть, запустите путем идентификации рабочих режимов системы, чтобы программировать график.
В этом примере показано, как создать диаграмму Stateflow с помощью MATLAB® в качестве языка действия. Модель представляет машину на сборочном конвейере, который кормит сырьем другие части линии. Этот фидер ведет себя можно следующим образом:
При системной инициализации проверяйте, что три значения датчика нормальны.
Положительное значение означает, что датчик работает правильно. Нуль означает, что датчик не работает.
Если все значения датчика нормальны, переход от "системной инициализации" к "на".
Если фидер не оставляет режим инициализации после 5 секунд, обеспечьте фидер в состояние отказа.
После того, как система включает, она начинает считать количество частей питаемым.
На каждом временном шаге, если какое-либо чтение датчика равняется 2 или больше, часть переместилась в следующую станцию.
Если сигнал тревоги звучит, обеспечьте систему в состояние отказа.
Сигнал тревоги может произойти, когда оператор открывает одну из дверей безопасности на фидере, или нисходящая проблема происходит на сборочном конвейере, который заставляет все восходящие фидеры останавливаться.
Если звуки сигнала отбоя, возобновите нормальное функционирование и сбросьте количество частей, питаемых нуль.
Фидер LED изменяет цвет, чтобы совпадать с системным рабочим режимом — оранжевый для "системной инициализации", зеленый для "на", и красный для "состояния отказа".
На основе описания поведения фидера можно идентифицировать ключевые атрибуты системы.
Атрибут | Характеристика |
---|---|
Рабочие режимы |
|
Переходы |
|
Параллельные режимы | Никакие рабочие режимы не запущены параллельно. Только один режим может быть активным в любое время. |
Режим по умолчанию | Системная инициализация |
Входные параметры |
|
Выходные параметры |
|
В этом осуществлении вы добавляете диаграмму Stateflow в модель Simulink, которая содержит датчик и сигнальные входные сигналы к фидеру.
Чтобы реализовать модель самостоятельно, следуйте за этими упражнениями. В противном случае можно открыть завершенную модель.
Откройте частично созданную модель.
Дважды кликните SensorSignals
блокируйтесь, чтобы видеть три сигнала датчика, представленные импульсными блоками генератора.
sensors
сигнал указывает, когда часть блока готова переместиться в следующую станцию.
Дважды кликните AlarmSignal
блокируйтесь, чтобы видеть блоки шага, которые представляют сигнал тревоги.
Когда ALARM
сигнал активен, машина выключает.
Запустите модель, чтобы видеть выход датчика и сигналов тревоги в блоке Scope.
Верхняя ось показывает сигналы датчика. Только два сигнала датчика появляются, потому что два из датчиков имеют тот же сигнал. Более низкая ось показывает сигнал тревоги, который выключает фидер между временем симуляции 45 - 80 секунд.
Откройте Библиотеку Stateflow путем выполнения sflib
в командной строке MATLAB.
Выберите Chart
и перетащите его в свою модель.
Совет
Чтобы создать новую модель с пустой диаграммой Stateflow, которая использует MATLAB в качестве языка действия, используйте функцию sfnew
.
Удалите связи от подсистемы SensorSignals до осциллографа и от подсистемы AlarmSignal до осциллографа.
Переименуйте метку Chart
расположенный под диаграммой Stateflow к Feeder
. Модель должна теперь выглядеть так:
На основе системных атрибутов, ранее описанных, существует три рабочих режима:
Системная инициализация
On
Состояние отказа
Добавить состояния для моделирования поведения этих рабочих режимов:
Дважды кликните График Фидера, чтобы начать добавлять состояния.
Примечание
Значок MATLAB в левом нижнем углу графика указывает, что вы используете диаграмму Stateflow с синтаксисом MATLAB.
Нажмите State Tool icon, чтобы принести состояние в график.
Кликните по левому верхнему углу состояния и введите имя, InitializeSystem
.
Повторите шаги 2 и 3, чтобы добавить еще два состояния под названием On
и FailState
.
Состояния выполняют действия в различных фазах их цикла выполнения со времени, они становятся активными ко времени, они становятся неактивными. Три основных состояния активности:
Тип действия | Когда выполняется | Как часто выполняемый, в то время как состояние активно |
---|---|---|
Запись | То, когда состояние вводится (становится активным), | Однажды |
Во время | В то время как состояние активно, и никакой допустимый переход к другому состоянию не доступен | На каждом временном шаге |
Выход | Прежде чем переход взят к другому состоянию | Однажды |
Например, можно использовать entry
действия, чтобы инициализировать данные, during
действия, чтобы обновить данные и exit
действия, чтобы сконфигурировать данные для следующего перехода. Для получения дополнительной информации о других типах состояний активности, смотрите Синтаксис для состояний и Переходов.)
Нажмите возвращаются после InitializeSystem
утвердите называют и добавляют этот текст, чтобы задать действие входа состояния:
entry: Light = ORANGE;
InitializeSystem
состояние.Добавьте следующий код после FailState
утвердите имя, чтобы задать действие входа:
entry: Light = RED;
Красный LED указывает на запись в FailState
.
Добавьте следующий код после On
утвердите имя, чтобы задать действие входа:
entry: Light = GREEN; partsFed = 0;
On
состояние. Количество питаемых частей инициализируется к 0 каждым разам, когда мы вводим On
состояние.Добавьте следующий код в On
состояние после действия входа, чтобы проверять, существует ли сильный датчик, сигнализирует и постепенно увеличивает части, питаемые следующую станцию:
during: if(any(sensors >= 2)) partsFed = partsFed + 1; end
On
утвердите проверяет сигнал датчика определить, готова ли часть питаться следующую станцию блока. Если сигнал датчика силен (количество датчиков, которые работают, больше или равен 2), то график считает часть как шедший дальше к следующей станции.
Синтаксис для во время действий
График должен теперь выглядеть так фигура.
Условия перехода задают, когда переместиться от одного рабочего режима до другого. Когда условие верно, график берет переход к следующему состоянию. В противном случае текущее состояние остается активным. Для получения дополнительной информации смотрите Переходы.
На основе описания поведения фидера задайте правила для переходов между состояниями:
Соедините переход по умолчанию к InitializeSystem
состояние, чтобы указать на точку входа графика.
Переходы по умолчанию задают, где начать симуляцию.
Чертите переход от InitializeSystem
утвердите к On
состояние:
Переместите мышь через более низкое ребро InitializeSystem
состояние до формы указателя превращается в крест нитей.
Перетащите мышь к верхнему ребру On
состояние. Вы затем видите переход от InitializeSystem
утвердите к On
состояние.
Дважды кликните переход, чтобы добавить это условие:
[all(sensors>0)]
Это условие перехода проверяет, имеют ли все датчики значения, больше, чем нуль.
Повторите эти шаги, чтобы создать эти остающиеся условия перехода.
Переход | Условие |
---|---|
On к FailState | [Alarm == 1] |
FailState к InitializeSystem | [Alarm == 0] |
Чертите другой переход от InitializeSystem
к FailState
. На этом переходе введите следующее, чтобы создать событие перехода:
after(5,sec)
InitializeSystem
к FailState
.Примечание
Синтаксис на этом переходе является событием, а не условием перехода. Для получения дополнительной информации смотрите Управление выполнением диаграммы при помощи Временной Логики.
График теперь выглядит так фигура.
Примечание
Исходящие переходы от InitializeSystem
имейте маленькое, маркируют 1 и 2, чтобы указать на порядок, в котором оценены сегменты перехода. Если числа от фигуры не совпадают с вашей моделью, щелкните правой кнопкой мыши по переходу и затем измените его путем нажатия на Execution Order
. Смотрите Порядок Оценки Перехода для деталей.
Запустите симуляцию своей модели. Ошибки о неразрешенных символах появляются, наряду с Мастером Символа.
Мастер Символа автоматически не добавляет данных в ваш график. Это идентифицирует неразрешенные данные и выводит класс и осциллограф тех данных с помощью правил вывода выражений MATLAB в действиях Stateflow. В графике:
Данные, которые считаны из, но не записаны в, выведены как входные данные. Однако, если имя данных находится во всех прописных буквах, Мастер Символа выводит данные в качестве параметра
Данные, которые записаны в, но не считаны из, выведены как выходные данные.
Данные, которые считаны из и записаны в, выведены как локальные данные.
Мастер Символа выводит осциллограф входных данных в вашем графике. Однако необходимо зафиксировать осциллограф данных для partsFed
Вывод . Выполните эти шаги:
Для данных partsFed: в столбце Scope выберите Output из списка.
Мастер Символа теперь выглядит так фигура.
Чтобы добавить данные, которые предлагает Мастер Символа, нажмите OK.
Добавьте начальные значения для параметров. В командной строке MATLAB введите:
RED = 0;
Точно так же в командной строке MATLAB, добавьте следующие начальные значения для остающихся параметров:
Параметр | Значение |
---|---|
RED | 0 |
ORANGE | 1 |
GREEN | 2 |
Возвратитесь к модели и соедините вводы и выводы с их соответствующими портами.
Запустите симуляцию.
Дважды кликните блок Scope, чтобы проверить, что модель получает ожидаемое поведение фидера.
Верхняя ось показывает сигнал LED, который варьируется между оранжевым (1), зеленый (2), и красный (0), чтобы указать на текущий рабочий режим. Более низкая ось показывает количество частей, питаемых следующую станцию блока, которая увеличивается инкрементно, пока сигнал тревоги не выключает машину и затем сбрасывает.
Другой подход к программированию графика должен запуститься путем идентификации частей системного интерфейса, таких как события, на которые реагирует система.
В предыдущем примере, когда вы используете входные данные, чтобы представлять событие, график периодически просыпается и проверяет, допустимы ли условия на переходах. В этом случае, если ПРЕДУПРЕЖДЕНИЕ == 1, то переход к состоянию отказа происходит на следующем временном шаге. Однако создание диаграммы Stateflow, которая реагирует, чтобы ввести события, позволяет вам реагировать на сигнал тревоги, когда событие инициировано.
Для получения дополнительной информации на том, когда использовать основанный на событии график, смотрите, Синхронизируют Компоненты модели Широковещательными Событиями.
В основанном на событии подходе системные атрибуты, чтобы рассмотреть сначала являются событиями, входными параметрами и выходными параметрами.
В следующей таблице рассмотрите характеристики событийно-управляемой Модели Фидера, которые отличаются от системы на основе условий перехода.
Атрибуты | Характеристики |
---|---|
События | Два асинхронных события: сигнал тревоги и сигнал отбоя |
Входные параметры | Три показаний датчика, чтобы обнаружить, если часть переместилась в нисходящую станцию блока |
В этом примере модель фидера реагирует, чтобы ввести события с помощью инициированного графика.
График теперь имеет только один входной порт слева, и событие инициировало вход на верхней части. Для получения дополнительной информации о том, как создать диаграмму Stateflow, активированную событиями, смотрите, Активируют диаграмму Stateflow путем Отправки Входных Событий
Когда ALARM
предупредите инициировал график, график отвечает на триггер в том временном шаге. Если текущим состоянием является On
когда предупреждение инициировано, затем переходы текущего состояния к FailState
.
Выход scope для инициированного Событием графика в следующем рисунке.
Верхняя ось показывает сигнал LED, который варьируется между красным (0), оранжевый (1), и зеленый (2), чтобы указать на текущий рабочий режим. Более низкая ось показывает количество частей, питаемых следующую станцию блока, которая увеличивается инкрементно, пока сигнал тревоги не выключает машину и затем сбрасывает. Однако основанная на событии симуляция кормит большим количеством частей следующую станцию блока должным синхронизировать и различия в решателе.