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

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

Обзор модели в качестве примера

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

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

  • Исключительный (OR) состояния

  • Блок-схемы

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

  • Соединения истории

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

  • Акты государственной власти

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

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

Модель процесса регистрации для отеля

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

Модель sf_semantics_hotel_checkin состоит из четырех Ручных блоков switch, одного блока Mux, одного Многопортового блока switch, графика Отеля и блока Display.

Модель использует этот блок...К...Поскольку...

Ручной переключатель

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

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

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

  • Вызов обслуживания номеров

  • Инициирование пожарной сигнализации

  • Отправка сигнала отбоя после пожарной сигнализации

Мультиплексор

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

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

Многопортовый переключатель

Включите выбор больше чем среди двух входных параметров.

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

Ручной блок switch не может поддержать больше чем два входных параметров, но Многопортовый блок switch может.

Отображение

Покажите актуальное численное значение для входного сигнала.

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

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

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

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

Стройте диаграмму инициализации

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

Примечание

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

Стройте диаграмму взаимодействия с другими блоками

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

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

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

Стройте диаграмму неактивности

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

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

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

Совет

Кликните по теневой области, чтобы перейти непосредственно к информации о той фазе выполнения графика.

Фаза: стройте диаграмму инициализации

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

ЭтапСценарий отеляСтройте диаграмму поведения
1

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

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

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

2

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

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

Для ссылки смотрите Как События Процесса Графиков.

3

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ЭтапСценарий отеляСтройте диаграмму поведения
1

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

После того, как событие check_in инициировало переход из Front_desk, три пути к переходу доступны на основе типа комнаты, которую вы выбираете с Многопортовым блоком switch. Тестирование перехода происходит на основе приоритета, который вы присваиваете каждому пути.

Для ссылки смотрите Порядок Выполнения для набора Блок-схем.

2

Если вы выбираете президентский люкс, основной сбор 1500.

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

Примечание

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

Чтобы узнать о неумышленном отслеживании в обратном порядке и как избежать его, смотрите Отслеживание в обратном порядке в Блок-схемах и Лучшых практиках для Создания Блок-схем.

3

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

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

4

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

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

 Что происходит, если room_type имеет значение кроме 1, 2, или 3?

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

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

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

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

Блок-схемы в Stateflow

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

Действия условия выполняются, как только условие оценивает к истине. Действия перехода не выполняются, пока путь к переходу не завершен к останавливающемуся соединению или состоянию.

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

Типы действия перехода

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

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

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

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

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

ЭтапСценарий отеляСтройте диаграмму поведения
1

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

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

2

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

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

  1. Счетчик для service локальные данные постепенно увеличивается 1.

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

Для ссылки смотрите Как События Процесса Графиков.

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

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

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

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

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

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

Типы акта государственной власти

Используйте On 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

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

Примечание

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

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

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

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

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

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

2

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

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

3

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

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

4

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

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

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

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

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

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

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

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

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

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

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

ЭтапСценарий отеляСтройте диаграмму поведения
1

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

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

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

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

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

     Как я задаю порядок?

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

2

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

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

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

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

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

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

Не используйте соединения истории в состояниях с параллелью (AND) разложение.

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

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

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

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

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

ЭтапСценарий отеляСтройте диаграмму поведения
1

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

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

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

2

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

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

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

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

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

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

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

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

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