Как объекты Stateflow взаимодействуют во время выполнения

Во время выполнения, Stateflow® объекты взаимодействуют друг с другом, чтобы симулировать поведение в реальном мире. В следующей модели показываются различные объекты Stateflow, и их взаимодействия объясняются.

Обзор модели примера

Пример модели показывает, как общие графические и неграфические объекты на графике взаимодействуют во время выполнения. Эти объекты включают:

  • Условия и действия условия

  • Эксклюзивные (ИЛИ) состояния

  • Блок- графики

  • Вызовы функций

  • Исторические соединения

  • Параллельные (И) состояния

  • Состояния активности

  • Переходы, охраняемые входом событиями

Для получения дополнительной информации о семантике графика смотрите Фазы выполнения графика.

Модель процесса заезда в отель

Этот пример использует процесс регистрации в отеле, чтобы объяснить семантику диаграммы Stateflow.

The sf_semantics_hotel_checkin модель состоит из четырех блоков Manual Switch (Simulink), одного блока Mux (Simulink), одного блока Multiport Switch (Simulink), графика Отеля и блока Display (Simulink).

БлокЦельОбъяснение

Manual Switch (Simulink)

Включите переключение между двумя настройками во время симуляции без необходимости паузы или перезапуска.

Во время симуляции можно в интерактивном режиме запустить график, отправив одно из следующих входных событий:

  • Регистрация в отеле

  • Вызов в номер

  • Запуск пожарной сигнализации

  • Отправка полностью очищенного сигнала после пожарной сигнализации

Mux (Simulink)

Объедините несколько входных сигналов в вектор.

График может поддерживать несколько входных событий, только если они соединяются с триггерным портом диаграммы как вектор входов.

Multiport Switch (Simulink)

Включите выбор из более чем двух входов.

Этот блок предоставляет значение для входных данных графика room_type, где каждый тип номера соответствует числу (1, 2 или 3).

Блок Manual Switch не может поддерживать более двух входов, но блок Multiport Switch может.

Display (Simulink)

Отобразите актуальное числовое значение для входного сигнала.

Во время симуляции любое изменение выходных данных графика fee появляется на отображении.

График отеля содержит графические объекты, такие как состояния и исторические соединения, и неграфические объекты, такие как условия и действия условия.

Для отображения объектов в их местоположения на графике смотрите Stateflow Objects.

Как график взаимодействует с блоками Simulink

Инициализация графика

Когда симуляция начинается, график просыпается и выполняет свои переходы по умолчанию, потому что опция Execute (enter) Chart At Initialization включена (см. Выполнение диаграммы при инициализации). Потом график засыпает.

Примечание

Если эта опция отключена, график не просыпается, пока вы не переключите один из блоков Manual Switch. Можно проверить настройку для этой опции в диалоговом окне «свойств графика». Щелкните правой кнопкой мыши в верхний уровень диаграммы и выберите Properties из контекстного меню.

График с другими блоками

График просыпается снова, только когда происходит инициированное ребром входное событие: check_in, room_service, fire_alarm, или all_clear. Когда вы переключаете блок Manual Switch для события входа во время симуляции, график обнаруживает поднимающийся или падающее ребро и просыпается. Пока график бодрствует:

  • Блок Multiport Switch обеспечивает значение для входных данных графика room_type.

  • Блок Display показывает любое изменение значения выходных данных графика fee.

Неактивность графика

После завершения всех возможных фаз выполнения график возвращается в сон.

Фазы выполнения графика

В следующих разделах описывается выполнение графика для каждой заштрихованной области графика отеля.

Совет

Щелкните заштрихованную область, чтобы перейти непосредственно к информации об этой фазе выполнения графика.

Фаза: Инициализация графика

Этот раздел описывает, что происходит в Front_desk состояние сразу после пробуждения графика.

СтадияСценарий отеляПоведение графика
1

Ваша первая остановка на стойке регистрации отеля.

На уровне графика переход по умолчанию на Check_in происходит, что делает это состояние активным. Затем переход по умолчанию на Front_desk происходит, что делает это состояние активным.

Для ссылки смотрите Ввод графика или состояния.

2

Вы покидаете стойку регистрации после регистрации в отеле.

The check_in событие охраняет исходящий переход от Front_desk. Когда график получает широковещательное событие для check_inпереход становится допустимым.

Для ссылки смотрите Как диаграммы Stateflow отвечают на события.

3

Перед тем, как покинуть стойку регистрации, вы забираете сумки, чтобы переехать в свою комнату.

Непосредственно перед переходом происходит exit действие Front_desk устанавливает move_bags локальные данные для 1. Затем, Front_desk становится неактивным.

Для ссылки смотрите Выход из состояния.

Руководства по моделированию для инициализации графика.  Следующие инструкции применяются к инициализации графика.

Руководство по моделированиюПочему применяется это руководствоСсылка

Используйте эксклюзивное (OR) разложение, когда никакие два состояния на уровне иерархии не могут быть активными одновременно.

Это руководство обеспечивает правильное выполнение графика. Для примера, Check_in и Waiting_area являются эксклюзивными (OR) состояниями, потому что вы не можете находиться внутри и вне отеля одновременно.

Используйте переход по умолчанию, чтобы отметить первое состояние, которое станет активным среди исключительных состояний (OR).

Это руководство предотвращает ошибки несогласованности состояний во время выполнения графика.

Используйте события вместо условий, чтобы защитить переходы, которые зависят от вхождений без присущего им числового значения.

Поскольку вы не можете легко количественно определить числовое значение проверки в отеле, моделируйте такое вхождение как событие.

Использование exit действие для выполнения оператора один раз, непосредственно перед тем, как состояние становится неактивным.

Другие виды состояний активности выполняются по-разному и не применяются:

  • Entry действия выполняются один раз, сразу после того, как состояние станет активным.

  • During действия выполняются в каждый временной шаг (кроме первого временного шага после того, как состояние становится активным). Выполнение продолжается, пока график остается в этом состоянии и нет допустимых исходящих переходов.

  • На event_name действия выполняются только после получения широковещательной передачи события.

Фаза: Оценка исходящих переходов от одного соединения

В этом разделе описывается, что происходит после выхода из Front_desk состояние: оценка группы исходящих переходов от одного соединения.

СтадияСценарий отеляПоведение графика
1

Можно переехать в один из трех типов комнат.

После check_in событие запускает переход из Front_deskтри пути перехода доступны в зависимости от типа комнаты, выбранной с блоком Multiport Switch. Переход проверки происходит на основе приоритета, который вы присваиваете каждому пути.

Для получения ссылки смотрите Порядок выполнения для Набора Графиков потока.

2

Если вы выбираете исполнительный набор, базовая плата составляет 1500.

Если на room_type входные данные равны 1, верхний переход действителен. Если это условие верно, действие условия выполняется путем установки fee выход данных на 1500.

Примечание

Если верхний переход не действителен, управляйте обратными связями потока к центральному соединению, чтобы могло произойти тестирование следующего перехода. Этот тип обратного отслеживания является преднамеренным.

Чтобы узнать о непреднамеренном обратном отслеживании и о том, как его избежать, смотрите Backtrack in Flow Charts и Лучшие Практики for Creating Flow Chart.

3

Если вы выбираете семейство набора, базовая комиссия составляет 1000.

Если room_type равен 2, средний переход действителен. Если это условие верно, действие условия выполняется путем установки fee до 1000.

4

Если вы выбираете одноместный номер, базовая плата составляет 500.

Если room_type равен 3, нижний переход действителен. Если это условие верно, действие условия выполняется путем установки fee до 500.

 Что будет, если room_type имеет значение, отличное от 1, 2 или 3?

Руководства по моделированию для оценки исходящих переходов.  Следующие инструкции применяются к синтаксису перехода.

Руководство по моделированиюПочему применяется это руководствоСсылка

Используйте условия вместо событий, чтобы защитить переходы, которые зависят от вхождений с числовым значением.

Поскольку вы можете количественно определить тип гостиничного номера, выразите выбор типа номера в качестве условия.

Графики потока в Stateflow

По возможности используйте действия условия вместо действий перехода.

Действия условия выполняются, как только условие вычисляется как true. Переходные действия выполняются только после завершения переходного пути в оконечное соединение или состояние.

Если задержка выполнения не требуется, используйте действия условия вместо действий перехода.

Переходы

Используйте явное упорядоченное расположение для управления порядком проверки группы исходящих переходов.

Можно задать явное или неявное упорядоченное расположение переходов. По умолчанию на графике используется явное упорядоченное расположение. Если вы переключитесь на неявное упорядоченное расположение, порядок проверки перехода может измениться при перемещении графических объектов.

Порядок оценки перехода

Фаза: Выполнение состояний активности для сверхсостояния

В этом разделе описывается, что происходит после ввода Checked_in состояние, независимо от того, какое подсостояние становится активным.

СтадияСценарий отеляПоведение графика
1

Достигнув нужной комнаты, вы заканчиваете перемещать сумки.

The entry действие выполняется путем установки move_bags локальные данные 0.

2

Если вы заказываете обслуживание номеров, счет за проживание в отеле увеличивается на постоянную сумму.

Если график получает широковещательную передачу события для room_service, эти действия происходят:

  1. Счетчик для service локальные шаги данных на 1.

  2. Вызов функции для expenses происходит, что возвращает значение счета отеля, хранящегося в fee выход данных.

Для ссылки смотрите Как диаграммы Stateflow отвечают на события.

Руководства по моделированию для выполнения Состояний активности.  Следующие инструкции применяются к состояниям активности.

Руководство по моделированиюПочему применяется это руководствоСсылка

Использование entry действие для выполнения оператора один раз, сразу после того, как состояние станет активным.

Другие виды состояний активности выполняются по-разному и не применяются:

  • During действия выполняются в каждом временном шаге до тех пор, пока не произойдет допустимый переход из состояния.

  • Exit действия выполняются один раз, непосредственно перед тем, как состояние становится неактивным.

Государства

Использование включенного event_name или On message_name действие для выполнения оператора только после получения широковещательной передачи события или сообщения.

Используйте сверхсостояние, чтобы окружить несколько подсостояний, которые имеют одинаковые состояния активности.

Это руководство позволяет повторно использовать состояния активности, которые применяются к нескольким подсостояниям. Вы записываете состояния активности только один раз, вместо того, чтобы записывать их отдельно в каждом подсостоянии.

Создание подсостояний и сверхсостояний

Фаза: Вызов функции из состояния активности

Эта часть графика описывает, как можно выполнять вызовы функций в активном состоянии.

СтадияСценарий отеляПоведение графика
1

Исходя из типа номера и общего количества запросов на обслуживание номера, вы можете отслеживать счет за проживание в отеле.

expenses является MATLAB® функция, которая принимает общее количество запросов на обслуживание номеров в качестве входов и возвращает текущий счет за гостиницу в качестве выходов.

Если вы дважды кликните окно функции, вы увидите этот скрипт в редакторе функций:

function y = expenses(x)

if (room_type == 1)
   y = 1500 + (x*50);
else
   if (room_type == 2)
      y = 1000 + (x*25);
   else
      y = 500 + (x*5);
   end
end

Руководства по моделированию для вызовов функций.  Следующие инструкции применяются к вызовам функций.

Руководство по моделированиюПочему применяется это руководствоСсылка

Используйте функции MATLAB для выполнения численных расчетов на графике.

Функции MATLAB лучше обрабатывают численные расчеты, чем графические функции, таблицы истинности или Simulink® функций.

Повторно используйте код MATLAB путем определения функций MATLAB

Используйте описательные имена в сигнатурах функции.

Описательные имена функции улучшают читаемость объектов графика.

Фаза: Выполнение государства с исключительными подсостояниями

Эта часть графика показывает, как выполняется состояние с исключительным (OR) разложением.

СтадияСценарий отеляПоведение графика
1

Когда вы достигаете executive suite, вы входите в спальню первым.

Примечание

В представительском наборе есть отдельная спальня и столовые. Поэтому вы можете находиться только в одной области набора в любое время.

Когда условие room_type == 1 true, действие условия fee = 1500 выполняет. Завершение этого переходного пути запускает эти действия инициализации состояния:

  1. Checked_in становится активным и выполняет свое действие входа.

  2. Executive_suite становится активным.

  3. Переход по умолчанию на Bedroom происходит, что делает это состояние активным.

Для ссылки смотрите Ввод графика или состояния.

2

Когда вы заказываете обслуживание номера, вы заходите в столовую, чтобы поесть.

Когда room_service происходит событие, переход от Bedroom на Dining_area происходит.

3

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

Когда room_service происходит событие, переход от Dining_area на Bedroom происходит.

4

Если вы покидаете исполнительный набор из-за пожарной сигнализации, вы возвращаетесь в свою предыдущую комнату после сигнала all-clear.

Если переход вышел из Executive_suite происходит, историческое соединение регистрирует последнее активное подсостояние, Bedroom или Dining_area. Для получения дополнительной информации о том, как этот переход может произойти, смотрите Фаза: События Охраняют Переходы между Государствами.

Руководства по моделированию для выполнения исключительных (ИЛИ) государств.  Следующие инструкции применяются к исключительным состояниям (OR).

Руководство по моделированиюПочему применяется это руководствоСсылка

Используйте exclusive (OR) разложение, когда никакие два состояния на этом уровне иерархии не могут быть активны одновременно.

Это руководство обеспечивает правильное выполнение графика. Для примера, Bedroom и Dining_area являются исключительными (OR) состояниями, потому что вы не можете находиться в обоих местах одновременно.

Если возврат в состояние с исключительным (OR) разложением зависит от ранее активного подсостояния, используйте историческое соединение. Этот тип соединения регистрирует активное подсостояние, когда график выходит из состояния.

Если вы не записываете ранее активное подсостояние, происходит переход по умолчанию, и неправильное подсостояние может стать активным при повторном вводе состояния.

Например, если бы вы ели, когда прозвучала пожарная сигнализация, то вернулись бы в спальню вместо столовой.

Фаза: Выполнение государства с параллельными подсостояниями

Эта часть графика показывает, как выполняется состояние с параллельным (И) разложением.

СтадияСценарий отеляПоведение графика
1

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

Когда условие room_type == 2 true, действие условия fee = 1000 выполняет. Завершение этого переходного пути запускает эти действия инициализации состояния:

  1. Checked_in становится активным и выполняет свое действие входа.

  2. Family_suite становится активным.

  3. Параллельные состояния просыпаются в порядке, заданном числом в правом верхнем углу каждого состояния: Master_bedroom, затем Second_bedroom.

     Как указать порядок?

Для ссылки смотрите Ввод графика или состояния.

2

Вы можете занять обе комнаты одновременно.

Master_bedroom и Second_bedroom оставаться активным одновременно.

Руководства по моделированию для выполнения параллельных (И) состояний.  Следующие инструкции применяются к параллельным состояниям (AND).

Руководство по моделированиюПочему применяется это руководствоСсылка

Используйте параллельное (И) разложение, когда все состояния на этом уровне иерархии могут быть активны одновременно.

Это руководство обеспечивает правильное выполнение графика. Для примера, Master_bedroom и Second_bedroom являются параллельными состояниями, потому что можно занимать обе комнаты одновременно.

Не используйте никаких исторических соединений в состояниях с параллельным (И) разложением.

Это руководство предотвращает ошибки во время компиляции. Поскольку все параллельные состояния на уровне иерархии активны одновременно, исторические соединения не имеют никакого значения.

Используйте явное упорядоченное расположение для управления порядком выполнения параллельных (И) состояний.

Можно задать явное или неявное упорядоченное расположение параллельных состояний. По умолчанию на графике используется явное упорядоченное расположение. Если вы переключитесь на неявное упорядоченное расположение, порядок выполнения может измениться, когда параллельные состояния перемещаются.

Фаза: События охраняют переходы между состояниями

Эта часть графика описывает, как события могут защищать переходы между исключительными (OR) состояниями.

СтадияСценарий отеляПоведение графика
1

Если звучит пожарная сигнализация, вы покидаете отель и переезжаете в зону ожидания на улице.

Когда график получает широковещательное событие для fire_alarm, происходит переход от подсостояния Check_in на Waiting_area.

 Как происходит этот переход?

2

Если появляется сигнал полной очистки, можно покинуть зону ожидания и вернуться в предыдущее место внутри отеля.

Когда график получает широковещательное событие для all_clear, переход от Waiting_area к ранее активному подсостоянию Check_in происходит.

Историческое соединение на каждом уровне иерархии в Check_in позволяет графику запоминать, какое подсостояние ранее было активным перед переходом на Waiting_area произошла.

 Как происходит этот переход?

Руководства по моделированию для охраны переходов.  В следующем руководстве рассматривается использование событий в зависимости от условий.

Руководство по моделированиюПочему применяется это руководствоСсылка

Используйте события вместо условий, чтобы защитить переходы, которые зависят от вхождений без числового значения.

Поскольку вы не можете легко количественно определить числовое значение пожарной сигнализации или сигнала полного сброса, моделируйте такое вхождение как событие.

Активируйте диаграмму Stateflow путем отправки входных событий