Во время выполнения объекты Stateflow ® взаимодействуют друг с другом для моделирования реального поведения. В следующей модели показаны различные объекты Stateflow и описаны их взаимодействия.
Пример модели показывает, как общие графические и неграфические объекты в диаграмме взаимодействуют во время выполнения. К этим объектам относятся:
Условия и действия условий
Исключительные состояния (ИЛИ)
Блок-схемы
Вызовы функций
Исторические стыки
Состояния Parallel (AND)
Действия состояния
Переходы, охраняемые входными событиями
Дополнительные сведения о семантике диаграммы см. в разделе Фазы выполнения диаграммы.
В этом примере процесс регистрации в отеле используется для объяснения семантики диаграммы Stateflow.
sf_semantics_hotel_checkin модель состоит из четырех блоков Manual Switch (Simulink), одного блока Mux (Simulink), одного блока Multiport Switch (Simulink), диаграммы отеля и блока Display (Simulink).

| Блок | Цель | Объяснение |
|---|---|---|
Ручное переключение (Simulink) | Включение переключения между двумя параметрами во время моделирования без необходимости приостановки или перезапуска. | Во время моделирования можно в интерактивном режиме запустить диаграмму, отправив одно из следующих входных событий:
|
Мукс (Симулинк) | Объединение нескольких входных сигналов в вектор. | Диаграмма может поддерживать несколько входных событий, только если они подключаются к порту триггера диаграммы в качестве вектора входных данных. |
Многопортовый коммутатор (Simulink) | Включить выбор из более чем двух входов. | Этот блок предоставляет значение для входных данных диаграммы Блок ручного коммутатора не может поддерживать более двух входов, но блок многопортового коммутатора может. |
Дисплей (Simulink) | Отображение обновленного числового значения для входного сигнала. | Во время моделирования любые изменения выходных данных диаграммы |
Диаграмма гостиниц содержит графические объекты, такие как соединения состояний и истории, и неграфические объекты, такие как условия и действия условий.

Сведения о сопоставлении объектов с их расположениями на диаграмме см. в разделе Объекты Stateflow.
При запуске моделирования диаграмма пробуждается и выполняет переходы по умолчанию, поскольку включен параметр «Выполнить (ввод) диаграмму при инициализации» (см. раздел Выполнение диаграммы при инициализации). Затем график засыпает.
Примечание
Если этот параметр отключен, диаграмма не пробуждается до тех пор, пока не будет переключен один из блоков ручного переключения. Этот параметр можно проверить в диалоговом окне «Свойства диаграммы». Щелкните правой кнопкой мыши на верхнем уровне диаграммы и выберите в контекстном меню пункт «Свойства».
Диаграмма снова пробуждается, только когда происходит инициированное ребром входное событие: check_in, room_service, fire_alarm, или all_clear. При переключении блока ручного переключения для входного события во время моделирования диаграмма обнаруживает растущий или падающий фронт и пробуждается. Пока график бодрствует:
Блок многопортового коммутатора предоставляет значение для входных данных диаграммы room_type.
В блоке Display отображается любое изменение значения выходных данных диаграммы. fee.
После завершения всех возможных фаз выполнения диаграмма возвращается в спящий режим.
В следующих разделах описывается выполнение диаграммы для каждой закрашенной области диаграммы отеля.

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

| Стадия | Сценарий гостиницы | Поведение диаграммы |
|---|---|---|
| 1 | Ваша первая остановка на стойке регистрации отеля. | На уровне диаграммы переход по умолчанию в Дополнительные сведения см. в разделе Ввод диаграммы или состояния. |
| 2 | Вы покидаете стойку регистрации после регистрации в отеле. | Дополнительные сведения см. в разделе Как диаграммы Stateflow реагируют на события. |
| 3 | Перед тем, как покинуть стойку регистрации, вы забираете сумки, чтобы переехать в свою комнату. | Непосредственно перед переходом, Дополнительные сведения см. в разделе Выход из состояния. |
Рекомендации по моделированию для инициализации диаграммы. Следующие инструкции применяются к инициализации диаграммы.
| Руководство по моделированию | Почему применяется это руководство | Ссылка |
|---|---|---|
Используйте исключительную декомпозицию (OR), если ни одно из двух состояний на уровне иерархии не может быть активным одновременно. | Эта инструкция обеспечивает правильное выполнение диаграммы. Например, | |
Используйте переход по умолчанию, чтобы отметить первое состояние, которое должно стать активным среди состояний exclusive (OR). | Эта инструкция предотвращает ошибки несогласованности состояний во время выполнения диаграммы. | |
Вместо условий используйте события для защиты переходов, зависящих от вхождений без собственного числового значения. | Поскольку вы не можете легко определить численное значение регистрации в отеле, смоделировать такое событие, как событие. | |
Использовать | Другие типы действий состояния выполняются по-разному и не применяются:
|
В этом разделе описывается, что происходит после выхода из Front_desk состояние: оценка группы исходящих переходов из одного перехода.

| Стадия | Сценарий гостиницы | Поведение диаграммы |
|---|---|---|
| 1 | Можно перейти к одному из трех типов комнат. | После Для получения справки см. Порядок выполнения набора блок-схем. |
| 2 | При выборе представительского люкса базовая плата составляет 1500. | Если Примечание Если верхний переход недействителен, управление потоком возвращается к центральному соединению, чтобы можно было выполнить тестирование следующего перехода. Этот тип обратного отслеживания является преднамеренным. Сведения о непреднамеренном обратном отслеживании и о том, как его избежать, см. в разделе Обратное отслеживание в блок-схемах и Рекомендации по созданию блок-схем. |
| 3 | Если вы выбираете семейный люкс, базовая плата составляет 1000. | Если |
| 4 | Если вы выбираете одноместный номер, базовая плата составляет 500. | Если |
Что будет, если room_type имеет значение, отличное от 1, 2 или 3?
Руководство по моделированию для оценки исходящих переходов. Следующие инструкции применяются к синтаксису перехода.
| Руководство по моделированию | Почему применяется это руководство | Ссылка |
|---|---|---|
Вместо событий используйте условия для защиты переходов, зависящих от вхождений с числовым значением. | Поскольку вы можете количественно определить тип гостиничного номера численно, выражайте выбор типа номера как условие. | |
По возможности используйте действия условий вместо действий перехода. | Действия условия выполняются, как только условие получает значение true. Действия перехода выполняются только после завершения пути перехода в конечное соединение или состояние. Если не требуется задержка выполнения, используйте действия условий вместо действий перехода. | |
Используйте явное упорядочение для управления порядком тестирования группы исходящих переходов. | Можно указать явный или неявный порядок переходов. По умолчанию диаграмма использует явное упорядочение. При переключении на неявное упорядочение порядок тестирования перехода может изменяться при перемещении графических объектов. |
В этом разделе описывается, что происходит после ввода Checked_in состояние, независимо от того, какое подсостояние становится активным.

| Стадия | Сценарий гостиницы | Поведение диаграммы |
|---|---|---|
| 1 | Добравшись до нужной комнаты, вы закончите двигать сумки. | |
| 2 | Если вы заказываете обслуживание номеров, ваш счет в отеле увеличивается на постоянную сумму. | Если диаграмма получает широковещательную рассылку событий для
Дополнительные сведения см. в разделе Как диаграммы Stateflow реагируют на события. |
Руководство по моделированию для выполнения действий состояния. Следующие инструкции применяются к действиям состояния.
| Руководство по моделированию | Почему применяется это руководство | Ссылка |
|---|---|---|
Использовать | Другие типы действий состояния выполняются по-разному и не применяются:
| Государства |
Использовать | ||
Используйте суперсостояние для включения нескольких подсостояний, которые совместно используют одни и те же действия состояния. | Это руководство позволяет повторно использовать действия состояния, которые применяются к нескольким подстанциям. Действия состояния записываются только один раз, а не отдельно в каждом подсостоянии. | Создание подстанций и суперсостояний |
В этой части диаграммы описывается, как можно выполнять вызовы функций во время активного состояния.

| Стадия | Сценарий гостиницы | Поведение диаграммы |
|---|---|---|
| 1 | В зависимости от типа номера и общего количества запросов на обслуживание номеров можно отслеживать счет за проживание в отеле. |
Если дважды щелкнуть поле функции, в редакторе функций появится следующий сценарий: 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 | Когда вы достигнете представительского люкса, вы входите в спальню первым. Примечание В представительском номере есть отдельная спальня и столовая. Поэтому в любое время можно находиться только в одной области номера. | Когда условие
Дополнительные сведения см. в разделе Ввод диаграммы или состояния. |
| 2 | Когда вы заказываете обслуживание номеров, вы входите в столовую, чтобы поесть. | Когда |
| 3 | Когда вы хотите удалить еду из столовой, вы заказываете обслуживание в номере снова, а затем вернуться в спальню. | Когда |
| 4 | Если вы покидаете представительский люкс из-за пожарной сигнализации, вы возвращаетесь в свой предыдущий номер после сигнала полной очистки. | Если переход из |
Руководство по моделированию для выполнения исключительных (OR) состояний. Следующие инструкции применяются к исключительным состояниям (OR).
| Руководство по моделированию | Почему применяется это руководство | Ссылка |
|---|---|---|
Используйте исключительную декомпозицию (OR), если ни одно из двух состояний на этом уровне иерархии не может быть активным одновременно. | Эта инструкция обеспечивает правильное выполнение диаграммы. Например, | |
Если повторный вход в состояние с исключительным разложением (OR) зависит от ранее активного подсостояния, используйте переход истории. Этот тип соединения записывает активное подсостояние, когда диаграмма выходит из состояния. | Если не записать ранее активное подсостояние, происходит переход по умолчанию, и неправильное подсостояние может стать активным при повторном входе в состояние. Например, если бы вы ели, когда прозвучала пожарная сигнализация, вы бы вернулись в спальню вместо столовой. |
В этой части диаграммы показано, как выполняется состояние с параллельной декомпозицией (AND).

| Стадия | Сценарий гостиницы | Поведение диаграммы |
|---|---|---|
| 1 | Когда ваша семья достигает люкс, члены семьи могут находиться в обеих спальнях (например, родители в главной спальне и дети во второй спальне). Выбор комнаты по умолчанию не применяется. | Когда условие
Дополнительные сведения см. в разделе Ввод диаграммы или состояния. |
| 2 | Вы можете занимать обе комнаты одновременно. |
|
Руководство по моделированию для выполнения параллельных состояний (AND). Следующие инструкции применяются к параллельным состояниям (AND).
| Руководство по моделированию | Почему применяется это руководство | Ссылка |
|---|---|---|
Используйте разложение параллельно (AND), когда все состояния на этом уровне иерархии могут быть активны одновременно. | Эта инструкция обеспечивает правильное выполнение диаграммы. Например, | |
Не используйте переходы истории в состояниях с параллельным разложением (И). | Эта инструкция предотвращает ошибки времени компиляции. Поскольку все параллельные состояния на уровне иерархии активны одновременно, исторические стыки не имеют значения. | |
Используйте явное упорядочение для управления порядком выполнения состояний parallel (AND). | Можно задать явное или неявное упорядочение параллельных состояний. По умолчанию диаграмма использует явное упорядочение. При переключении на неявное упорядочение порядок выполнения может изменяться при перемещении параллельных состояний. |
В этой части диаграммы описывается, как события могут защитить переходы между исключительными состояниями (OR).

| Стадия | Сценарий гостиницы | Поведение диаграммы |
|---|---|---|
| 1 | Если сработает пожарная сигнализация, вы покинете отель и переедете в зону ожидания снаружи. | Когда диаграмма получает широковещательную рассылку событий для |
| 2 | Если возникает сигнал полной очистки, вы можете покинуть зону ожидания и вернуться в свое предыдущее местоположение внутри отеля. | Когда диаграмма получает широковещательную рассылку событий для Стык истории на каждом уровне иерархии в |
Рекомендации по моделированию для защиты переходов. В следующем руководстве обсуждается использование событий в сравнении с условиями.
| Руководство по моделированию | Почему применяется это руководство | Ссылка |
|---|---|---|
Вместо условий используйте события для защиты переходов, зависящих от вхождений без числового значения. | Поскольку невозможно определить численное значение пожарной сигнализации или сигнала полной очистки, смоделировать такое событие как событие. | Активация диаграммы потока состояний путем отправки входных событий |