Состояния

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

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

Иерархия состояния

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

Пример иерархии состояния

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

В этом примере график является родительским элементом Car_done состояния. Car_done состояния родительское состояние Car_made и Car_shipped состояния. Car_made состояния также родительский элемент Parts_assembled и Painted состояния. Можно также сказать что состояния Parts_assembled и Painted дочерние элементы Car_made состояние.

Чтобы представлять иерархию Stateflow дословно, используйте символ наклонной черты (/) представлять график и использовать период (.) разделить каждый уровень в иерархии состояний. Следующий список является текстовым представлением иерархии объектов в предыдущем примере:

  • /Car_done

  • /Car_done.Car_made

  • /Car_done.Car_shipped

  • /Car_done.Car_made.Parts_assembled

  • /Car_done.Car_made.Painted

Объекты, которые может содержать состояние

Состояния могут содержать все другие объекты Stateflow. Обозначение диаграммы Stateflow поддерживает представление иерархии графического объекта в диаграммах Stateflow с включением. Состоянием является superstate, если оно содержит другие состояния. Состоянием является substate, если оно содержится в другом состоянии. Состояние, которое не является ни сверхсостоянием, ни подсостоянием другого состояния, является состоянием, родительским элементом которого является сама диаграмма Stateflow.

Состояния могут также содержать неграфические данные, событие и объекты сообщения. Иерархия этого включения появляется в Model Explorer. Вы задаете данные, событие и включение сообщения путем определения родительского объекта.

Разложение состояния

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

Исключительный (OR) разложение состояния

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

В следующем примере, любом A состояния или B состояния может быть активным. Если A состояния активно, любой A1 состояния или A2 состояния может быть активным в установленный срок.

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

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

В следующем примере, когда A состояния активно, A1 и A2 оба активны одновременно.

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

В следующем примере, когда A состояния становится активным, оба состояния B и C станьте активными одновременно. Когда C состояния становится активным, любой C1 состояния или C2 состояния может быть активным.

Метки состояния

Метка для состояния появляется в главном левом угле прямоугольника состояния со следующим общим форматом:

name/
entry:entry actions
during:during actions
exit:exit actions
on event_name:on event_name actions
on message_name:on message_name actions
bind:events

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

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

Имя состояния

Метка состояния запускается с имени состояния, сопровождаемого дополнительным / символ. В предыдущем примере именами состояния является On и Off. Допустимые имена состояния состоят из алфавитно-цифровых символов и могут включать подчеркивание (_Символ. Для получения дополнительной информации см. Правила для Именования Объектов Stateflow.

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

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

Каждое из этих состояний имеет уникальное имя из-за своего местоположения в графике. Полные имена для состояний в FAN1 и FAN2 :

  • PowerOn.FAN1.On

  • PowerOn.FAN1.Off

  • PowerOn.FAN2.On

  • PowerOn.FAN2.Off

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

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

Для каждого типа действия можно начать больше чем одно действие путем разделения каждого действия возвратом каретки, точкой с запятой или запятой. Можно задать действия больше чем для одного события или сообщения путем добавления дополнительного on event_name или on message_name линии.

Если вы вводите имя и режете сопровождаемый непосредственно действиями, действия интерпретированы как entry действие (действия). Это сокращение полезно, если вы задаете только entry действия.

Действие записи.  Предшествовавший префиксным entry или en для краткости В предыдущем примере утвердите On имеет entry действие on_count=0. Это означает что значение on_count сбрасывается к 0 каждый раз, когда On состояния становится активным (вводимый).

Во время Действия.  Предшествовавший префиксным during или du для краткости В предыдущем примере метки утвердите On имеет два during действия, light_on() и on_count++. Эти действия выполняются каждый раз, когда On состояния уже активно, и любое событие имеет место.

Выйдите из Действия.  Предшествовавший префиксным exit или ex для краткости В предыдущем примере метки утвердите Off имеет exit действие light_off(). Если state Off активно, но становится неактивным (вышедший), это действие выполняется.

На Действии.  Предшествовавший префиксным on event_name, или on message_name. В предыдущем примере метки утвердите On имеет on power_outage действие. Если On состояния активно и событие power_outage происходит, действие handle_outage() выполняется.

Свяжите Действие.  Предшествовавший префиксным bind. События, связанные с состоянием, могут только быть широковещательно переданы тем состоянием или его дочерними элементами.