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

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

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

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

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

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

  • Блок-схемы

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

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

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

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

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

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

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

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

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.

Как график взаимодействует с блоками 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

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

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 выходные данные к 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 выходные данные.

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

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

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

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

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

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

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

Состояния

Используйте на event_name или на 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 путем отправки входных Событий