exponenta event banner

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

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

Обзор примерной модели

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

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

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

  • Блок-схемы

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

  • Исторические стыки

  • Состояния Parallel (AND)

  • Действия состояния

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

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

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

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

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

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

Ручное переключение (Simulink)

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

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

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

  • Обслуживание номера вызывающего абонента

  • Срабатывание пожарной сигнализации

  • Посылка сигнала полной очистки после пожарной сигнализации

Мукс (Симулинк)

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

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

Многопортовый коммутатор (Simulink)

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

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

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

Дисплей (Simulink)

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

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

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

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

Взаимодействие диаграммы с блоками Simulink

Инициализация диаграммы

При запуске моделирования диаграмма пробуждается и выполняет переходы по умолчанию, поскольку включен параметр «Выполнить (ввод) диаграмму при инициализации» (см. раздел Выполнение диаграммы при инициализации). Затем график засыпает.

Примечание

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

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

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

  • Блок многопортового коммутатора предоставляет значение для входных данных диаграммы 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 эксклюзивные (ИЛИ) состояния, потому что вы не можете находиться внутри и вне отеля одновременно.

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

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

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

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

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

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

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

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

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

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

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

СтадияСценарий гостиницыПоведение диаграммы
1

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

После check_in событие запускает переход из Front_deskдоступны три пути перехода в зависимости от типа помещения, выбранного с помощью блока Multiport Switch. Тестирование перехода выполняется на основе приоритета, назначенного каждому тракту.

Для получения справки см. Порядок выполнения набора блок-схем.

2

При выборе представительского люкса базовая плата составляет 1500.

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

Примечание

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

Сведения о непреднамеренном обратном отслеживании и о том, как его избежать, см. в разделе Обратное отслеживание в блок-схемах и Рекомендации по созданию блок-схем.

3

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

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

4

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

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

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

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

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

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

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

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

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

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

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

Переходы

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

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

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

Этап: Выполнение действий государства для сверхгосударства

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

СтадияСценарий гостиницыПоведение диаграммы
1

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

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

2

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

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

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

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

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

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

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

Использовать 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

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

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

Этап: Выполнение состояния с исключительными подстанциями

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

СтадияСценарий гостиницыПоведение диаграммы
1

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

Примечание

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

Когда условие 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

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

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

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

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

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

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

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

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

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

Этап: Выполнение состояния с параллельными подстанциями

В этой части диаграммы показано, как выполняется состояние с параллельной декомпозицией (AND).

СтадияСценарий гостиницыПоведение диаграммы
1

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

Когда условие room_type == 2 true, действие условия 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 являются параллельными состояниями, поскольку можно занимать обе комнаты одновременно.

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

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

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

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

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

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

СтадияСценарий гостиницыПоведение диаграммы
1

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

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

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

2

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

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

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

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

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

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

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

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

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