Существует два общих подхода к программированию Stateflow® график в Simulink® модель:
Идентифицируйте рабочие режимы вашей системы.
Идентифицируйте системный интерфейс, например события, на которые реагирует ваша система.
В этом руководстве используется первый подход - то есть начните с определения рабочих режимов системы для программирования графика.
В этом примере показано, как создать диаграмму Stateflow с помощью MATLAB® как язык действий. Модель представляет машину на конвейере, которая подает сырье в другие части линии. Этот питатель ведет себя следующим образом:
При инициализации системы проверяйте, что три значения датчика нормальны.
Положительное значение означает, что датчик работает правильно. Нуль означает, что датчик не работает.
Если все значения датчика нормальны, переход от «инициализации системы» к «включению».
Если питатель не покидает режим инициализации через 5 секунд, принудительно переводите питатель в состояние отказа.
После включения системы он начинает подсчет количества подаваемых деталей.
На каждом временном шаге, если любое считывание датчика составляет 2 или больше, деталь переместилась на следующую станцию.
Если сигнал тревоги звучит, принудительно переключите систему в состояние отказа.
Аварийный сигнал может возникнуть, когда оператор открывает одну из предохранительных дверей на фидере или на сборочной линии возникает проблема нисходящего потока, из-за которой все вышестоящие фидеры останавливаются.
Если сигнал all-clear звучит, возобновите нормальную операцию и сбросьте количество частей, подаваемых в нуль.
Светодиодный индикатор фидера изменяет цвет в соответствии с режимом работы системы - оранжевый для «инициализации системы», зеленый для «on» и красный для «failure state».
На основе описания поведения питателя можно идентифицировать ключевые системные атрибуты.
Признак | Особенность |
---|---|
Рабочие режимы |
|
Переходы |
|
Параллельные режимы | Никакие рабочие режимы не работают параллельно. В любой момент может быть активен только один режим. |
Режим по умолчанию | Инициализация системы |
Исходные данные |
|
Выходы |
|
В этом упражнении вы добавляете диаграмму Stateflow к модели Simulink, которая содержит входные сигналы датчика и тревоги к фидеру.
Чтобы реализовать модель самостоятельно, следуйте этим упражнениям. В противном случае можно открыть завершенную модель.
Откройте частично построенную модель.
Дважды кликните SensorSignals
блок для просмотра трех сигналов датчика, представленных блоками импульсного генератора.
The sensors
сигнал указывает, когда сборная часть готова к переходу на следующую станцию.
Дважды кликните AlarmSignal
блок для просмотра блоков шагов, которые представляют сигнал тревоги.
Когда ALARM
сигнал активен, машина отключается.
Запустите модель, чтобы увидеть выходы датчика и аварийных сигналов в блоке Scope.
Верхняя ось показывает сигналы датчика. Только два сигнала датчика появляются, потому что два из датчиков имеют один и тот же сигнал. Нижняя ось показывает сигнал тревоги, который отключает питатель между временем симуляции от 45 до 80 секунд.
Откройте библиотеку Stateflow путем выполнения sflib
в командной строке MATLAB.
Выберите Chart
и перетащите его в модель.
Совет
Чтобы создать новую модель с пустой диаграммой Stateflow, которая использует MATLAB в качестве языка действий, используйте функцию sfnew
.
Удалите соединения из подсистемы SensorSignals к возможностям и из подсистемы AlarmSignal к возможностям.
Переименуйте метку Chart
расположен под диаграммой Stateflow, чтобы Feeder
. Модель теперь должна выглядеть так:
На основе ранее описанных системных атрибутов существует три рабочих режима:
Инициализация системы
На
Состояние отказа
Чтобы добавить состояния для моделирования поведения этих рабочих режимов:
Дважды кликните График, чтобы начать добавление состояний.
Примечание
Значок MATLAB в нижнем левом углу графика указывает, что вы используете диаграмму Stateflow с синтаксисом MATLAB.
Щелкните значок Инструмент, чтобы привести состояние в график.
Щелкните верхний левый угол состояния и введите имя, InitializeSystem
.
Повторите шаги 2 и 3, чтобы добавить еще два состояния с именем On
и FailState
.
Состояния выполняют действия на различных фазах своего цикла выполнения от момента их активации до момента, когда они становятся неактивными. Три основных состояний активности:
Тип действия | При выполнении | Как часто выполняется, пока состояние активно |
---|---|---|
Вход | Когда состояние введено (становится активным) | Однажды |
Во время | Пока состояние активно, и нет допустимого перехода к другому состоянию | На каждом временном шаге |
Выход | Перед переходом в другое состояние | Однажды |
Для примера можно использовать entry
действия по инициализации данных, during
действия по обновлению данных и exit
действия по конфигурированию данных для следующего перехода. Для получения дополнительной информации о других типах действий состояния смотрите Синтаксис для состояний и переходов.)
Нажмите возврат после InitializeSystem
имя состояния и добавить этот текст, чтобы задать действие входа состояния:
entry: Light = ORANGE;
InitializeSystem
состояние.Добавьте следующий код после FailState
имя состояния для определения действия входа:
entry: Light = RED;
Красный светодиодный индикатор указывает на вход в FailState
.
Добавьте следующий код после On
имя состояния для определения действия входа:
entry: Light = GREEN; partsFed = 0;
On
состояние. Количество подаваемых частей инициализируется в 0 каждый раз, когда мы входим в On
состояние.Добавьте следующий код к On
состояние после действия входа для проверки наличия сильного сигнала датчика и приращения частей, подаваемых на следующую станцию:
during: if(any(sensors >= 2)) partsFed = partsFed + 1; end
The 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, чтобы убедиться, что модель захватывает ожидаемое поведение питателя.
Верхняя ось показывает светодиодный сигнал, который изменяется между оранжевым (1), зеленым (2) и красным (0), чтобы указать текущий режим работы. Нижняя ось показывает количество деталей, подаваемых на следующую станцию сборки, которое постепенно увеличивается, пока аварийный сигнал не отключает машину и затем сбрасывается.
Другой подход к программированию графика состоит в том, чтобы начать с определения частей системного интерфейса, таких как события, на которые реагирует ваша система.
В предыдущем примере, когда вы используете входные данные для представления события, график периодически просыпается и проверяет, действительны ли условия переходов. В этом случае, если ALARM = = 1, переход в состояние отказа происходит на следующем временном шаге. Однако создание диаграммы Stateflow, которая реагирует на входные события, позволяет вам реагировать на сигнал тревоги, когда событие запускается.
Для получения дополнительной информации о том, когда использовать основанную на событиях график, смотрите Синхронизация компонентов модели посредством широковещательных событий.
В основанном на событиях подходе системными атрибутами, которые должны быть рассмотрены в первую очередь, являются события, входы и выходы.
В следующей таблице рассмотрите характеристики управляемой событием модели питателя, которые отличаются от системы на основе условий перехода.
Признаки | Особенности |
---|---|
События | Два асинхронных события: сигнал тревоги и all-clear сигнал |
Исходные данные | Три показания датчика, чтобы обнаружить, переместилась ли деталь на нижестоящую сборочную станцию |
В этом примере модель питателя реагирует на входные события с помощью триггерного графика.
Теперь график имеет только один входной порт слева и событийный вход сверху. Для получения дополнительной информации о том, как создать диаграмму Stateflow, активированную событиями, смотрите Активировать диаграмму Stateflow путем отправки входных событий
Когда ALARM
сигнал запускает график, график реагирует на триггер в том временном шаге. Если текущее состояние On
когда срабатывает предупреждение, текущее состояние переходит к FailState
.
Возможности выхода для графика, вызванной событием, показаны на следующем рисунке.
Верхняя ось показывает светодиодный сигнал, который изменяется между красным (0), оранжевым (1) и зеленым (2), чтобы указать текущий режим работы. Нижняя ось показывает количество деталей, подаваемых на следующую станцию сборки, которое постепенно увеличивается, пока аварийный сигнал не отключает машину и затем сбрасывается. Однако основанная на событиях симуляция подает больше деталей на следующую станцию сборки из-за различий в тактах и решателях.