Состояния

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

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

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

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

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

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

В этом примере график является родительским элементом Car_done состояния. Car_done состояния является метрополией состояний Car_shipped и Car_made. Car_made состояния является также родительским элементом состояний Painted и Parts_assembled. Можно также сказать, что состояния 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. События, связанные с состоянием, могут только быть широковещательно переданы тем состоянием или его дочерними элементами.

Для просмотра документации необходимо авторизоваться на сайте