График и вход в состояние происходит, когда:
Впервые активируется график. Это называется инициализацией графика.
Допустимый переход в состояние существует. См. «Оценка переходов».
Этот график потока показывает прогрессирование событий, которые Stateflow® принимает для входа в график или состояние. В этом графике потока данных текущее состояние относится к состоянию, в котором происходит решение или процесс.
Первый раз, когда ваша диаграмма Stateflow становится активной, называется инициализацией. Когда происходит инициализация вашего графика, вводится график, и Stateflow выполняет любые переходы по умолчанию для исключительных состояний (OR). Если состояния на верхнем уровне графика параллельны (AND), они становятся активными на основе номера порядка.
Если вы хотите, чтобы ваш график принимал любые изменения по умолчанию перед временем t = 0
в диалоговом окне Графика Свойств установите флажок Execute (enter) chart at initialization. Эта опция заставляет диаграмму Stateflow инициализировать одновременно с Simulink® инициализация. Пути перехода по умолчанию для графика затем выполняются во время фазы инициализации модели.
Когда состояние помечено для входа, действия входа для состояния выполняются. Когда ваш график активен и прошла через инициализацию, состояние верхнего уровня становится активным. Состояние помечается для входа одним из следующих способов:
Входящий переход пересекает контуры состояний.
Входящий переход заканчивается на контуре состояния.
Состояние является дочерним элементом параллельного состояния активного состояния.
Действия входа предшествует префикс entry
или en
кратко, далее следует необходимая двоеточие (:
), а затем одно или несколько действий. Вы разделяете несколько действий при помощи возврата каретки, точки с запятой (;
), или запятая (,
). Если вы явно не задаете тип состояния активности для оператора, график рассматривает этот оператор как entry
, during
действие.
В этом примере, когда первый раз график становится активным, происходит инициализация диаграммы.
Следуя рабочему процессу для ввода графика или состояния до тех пор, пока график не перейдет в спящий режим, шаги для инициализации графика выполняются в следующем порядке:
Действия перехода по умолчанию выполняются, и x = 0
, y = 0
, и z = 0
.
StateA
отмечен для ввода.
StateA
не является подсостоянием неактивного родительского элемента. Выполните entry
действия для StateA
. Теперь x = 1
.
StateA
- состояние, которое первоначально было помечено для входа.
StateA
не содержит никаких исторических соединений.
Существует переход по умолчанию к подсостояние, StateA1
. Перейдите к потоку «Оценить переходы» график.
Следуя потоку Evaluate Transitions графика, отметьте StateA1
для entry
. Перейдите к блоку Exit Actions графика.
Текущее состояние, StateA
, является суперштатом состояния назначения, StateA1
. Вернитесь к Действиям входа графика потока.
StateA1
не является подсостоянием неактивного родительского элемента. Выполните entry
действия для StateA1
. Теперь x = 3
.
StateA1
- состояние, которое первоначально было помечено для входа.
StateA1
не содержит никаких исторических соединений.
StateA1
не содержит никаких переходов по умолчанию.
StateA1
не содержит ни одних подсостояний.
График засыпает.
Этапы с 1 по 14 происходят на начальном временном шаге. На этом процесс инициализации графика завершается.
Если вы хотите, чтобы ваша диаграмма Stateflow запомнила и вернулась к подсостоянию, которое ранее было активным, независимо от перехода по умолчанию, используйте историческое соединение. Размещение исторического соединения в состоянии переопределяет переход по умолчанию, приводящий к исключительным (OR) подсостояниям. После размещения исторического соединения в состоянии, при входе ваша диаграмма Stateflow запоминает и входит в ранее активное подсостояние. Соединение истории применяется только к уровню иерархии, в которой оно появляется.
В этом примере свет может быть включен или отключен. Эти опции обозначаются состояниями Power_on
и Power_off
. Опции управляются входными событиями switch_on
и switch_off
. Когда свет горит, он может быть тусклым или ярким. Эти опции обозначаются состояниями Low
и High
и управляются входными событиями switch_low
и switch_high
.
Изначально график спит. Состояние Power_off
активно. Когда состояние Power_on
последний активный, High
был ранее активным подсостоянием. Событийный switch_on
происходит и состояние Power_on
отмечен для ввода. В это время p = 0
.
Следуя рабочему процессу для ввода графика или состояния до тех пор, пока график не перейдет в спящий режим, шаги выполнения для входа в состояние Power_on
находятся в таком порядке:
Power_on
не является дочерним элементом неактивного родительского элемента.
Нет действий входа для Power_on
.
Power_on
- состояние, которое первоначально было помечено для входа.
В Power_on
есть исторические соединения.
High
был ранее активным подсостоянием. Теперь p = 2
.
High
не содержит никаких исторических соединений.
High
не содержит никаких переходов по умолчанию.
High
не содержит ни одних подсостояний.
График засыпает.
Это завершает entry
действия для Power_on
и High
.
Суперпереход является переходом между различными уровнями на графике. Суперпереход может быть между состоянием на графике верхнего уровня и состоянием на одной из его субдиаграмм или между состояниями, находящимися в различных субдиаграммах на одном или разных уровнях на графике. Можно создать суперпереходы, которые охватывают любое количество уровней на графике.
Когда состояние вводится через суперпереход, перед выполнением действий входа для конечного адресата его сверхсостояний должны быть помечены как активные и должны выполняться их действия входа. В этом примере StateB1
отмечен для входа из StateA2
. На данной точке x = 5
, y = 5
, и z = 1
.
Следуя рабочему процессу для ввода графика или состояния до тех пор, пока график не перейдет в спящий режим, шаги выполнения для входа в состояние StateB1
находятся в таком порядке:
StateB1
- подсостояние неактивного родительского элемента (StateB
).
StateB
помечен как активный.
StateB
не является подсостоянием неактивного родительского элемента.
Выполните действия входа для StateB
. Теперь x = 4
.
StateB
не является состоянием, которое первоначально было помечено для входа.
Выполните действия входа для StateB1
. Теперь x = 3
.
StateB1
- состояние, которое первоначально было помечено для входа.
StateB1
не имеет исторических соединений.
StateB1
не содержит никаких переходов по умолчанию.
StateB1
не содержит ни одних подсостояний.
График засыпает.
Это завершает entry
действия для StateB
и StateB1
.