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) разложение, только одно подсостояние может быть активным за один раз.
В следующем примере, любом A
состояния или
B
состояния может быть активным. Если
A
состояния активно, любой
A1
состояния или
A2
состояния может быть активным в установленный срок.
Подсостояния с пунктирными границами указывают на параллель (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
Следующий пример демонстрирует компоненты метки состояния.
Каждое действие в метке состояния появляется в подтемах, которые следуют. Для получения дополнительной информации о состояниях активности смотрите Выполнение диаграммы Stateflow.
Метка состояния запускается с имени состояния, сопровождаемого дополнительным /
символ. В предыдущем примере именами состояния является 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 | Выполняется, когда состояние становится активным. |
exit | ex | Выполняется, когда состояние активно, и переход из состояния происходит. |
during | du | Выполняется, когда состояние активно, и определенное событие имеет место. |
bind | 'none' | Связывает событие или объект данных так, чтобы только, что состояние и его дочерние элементы могут широковещательно передать событие или изменить значение данных. |
| 'none' | Выполняется, когда состояние активно, и оно получает широковещательную передачу event_name . |
| 'none' | Выполняется когда сообщение message_name доступно. |
| 'none' | Выполняется когда:
Для получения дополнительной информации смотрите |
| 'none' | Выполняется когда:
Для получения дополнительной информации смотрите |
| 'none' | Выполняется когда:
Для получения дополнительной информации смотрите |
| 'none' | Выполняется:
Для получения дополнительной информации смотрите |
entry
ДействияДействия входа выполняются, когда состояние становится активным. Действия входа состоят из префиксного entry
(или сокращение en
) сопровождаемый двоеточием (:
) и одно или несколько действий. Чтобы разделить многократные действия, используйте точки с запятой или запятые. Можно также начать действия на отдельных линиях.
В предыдущем примере, действие входа id = x+y
выполняется, когда график берет переход по умолчанию, и состояние A становится активным. Смотрите Вводят График или состояние.
exit
ДействияВыйдите действия выполняются, когда состояние активно, и переход из состояния происходит. Выйдите действия состоят из префиксного exit
(или сокращение ex
) сопровождаемый двоеточием (:
) и одно или несколько действий. Чтобы разделить несколько выходных действий, используйте точки с запятой или запятые. Можно также начать действия на отдельных линиях.
В предыдущем примере, выходное действие time_out
выполняется, когда график берет один из переходов от состояния, чтобы утвердить B или C. Смотрите Выход состояние.
during
ДействияВо время действий выполняются, когда состояние активно, событие имеет место, и никакой допустимый переход к другому состоянию или текущему состоянию не доступен. Во время действий состоят из префиксного during
(или сокращение du
) сопровождаемый двоеточием (:
) и одно или несколько действий. Чтобы разделить несколько во время действий, используйте точки с запятой или запятые. Можно также начать действия на отдельных линиях.
В предыдущем примере, во время действия switch_on()
выполняется каждый раз, когда состояние C активно, потому что нет никаких допустимых переходов к другому состоянию. Смотрите Выполнение диаграммы Stateflow.
bind
ДействияМожно связать данные и события к состоянию при помощи bind
действие. bind
действие состоит из префиксного bind
сопровождаемый двоеточием (:
) и одно или несколько событий или данных. Чтобы разделить несколько событий и данных, используйте точки с запятой или запятые. Можно также ввести события и данные по отдельным линиям.
Только состояние и его дочерние элементы могут изменить данные или широковещательно передать события, связанные с тем состоянием. Другие состояния могут считать связанные данные или прислушаться к связанному событию, но они не могут изменить связанные данные или отправить связанные события.
Свяжите действия, применяются к графику, активно ли обязательное состояние или нет. В предыдущем примере, связывать действие bind: id, time_out
для A
состояния связывает данные
id
и событие time_out
утверждать A
. Эта привязка предотвращает любое другое состояние (или его дочерние элементы) в графике от изменения id
или широковещательное событие time_out
.
Если состояние включает действия, которые изменяют данные или широковещательно передают события, которые связывают с другим состоянием, ошибка времени компиляции происходит. Например, этот график содержит действия с двумя состояниями, которые производят ошибки.
Состояние активности | Причина ошибки |
---|---|
bind: id в B состояния
| Только одно состояние может изменить данные id , который обязан утвердить A |
entry: time_out в C состояния
| Только одно состояние может широковещательно передать событие time_out , который обязан утвердить A |
Привязка события вызова функции к состоянию также связывает подсистему вызова функций, которую она вызывает. Подсистема вызова функций включена, когда обязательное состояние введено и отключено, когда из обязательного состояния выходят. Для получения дополнительной информации об этом поведении, смотрите, что Подсистемы вызова функций Управления при помощи связывают Действия.
Свяжите действия, поддерживаются только в диаграммах Stateflow в моделях Simulink®.
on
ДействияНа действиях выполняются, когда состояние активно, и оно получает событие или сообщение. На действиях состоят из префиксного on
сопровождаемый уникальным событием event_name
или передайте message_name
, двоеточие (:
), и одно или несколько действий. Чтобы разделить несколько на действиях, используйте точки с запятой или запятые. Можно также начать действия на отдельных линиях.
Можно задать действия больше чем для одного события или сообщения. Например, если вы хотите, чтобы различные события инициировали различные действия, введите несколько on
операторы действия в метке состояния активности:
on ev1: action1(); on ev2: action2();
ev1
и ev2
происходите одновременно, затем action1()
выполняется сначала и action2()
выполняется второй. Смотрите Выполнение диаграммы Stateflow.