Состояние и действия перехода являются инструкциями, что вы пишете в состоянии или рядом с переходом, чтобы задать, как график Stateflow® ведет себя во время симуляции. Для получения дополнительной информации смотрите Образцовые Конечные автоматы.
Например, действия в этом графике задают конечный автомат, который опытным путем проверяет один экземпляр догадки Collatz. Для данного числового входа u график вычисляет последовательность градины n0 = u, n1, n2, n3, … путем итерации этого правила:
Если ni даже, то ni+1 = ni / 2.
Если ni нечетен, то ni+1 = 3ni+1.
Догадка Collatz утверждает, что каждое положительное целое число имеет последовательность градины, которая в конечном счете достигает значения одного.

График состоит из трех состояний. В начале симуляции состояние Init инициализирует данные о графике:
Локальные данные n установлены в значение входа u.
Локальный n2 данных установлен в остаток, когда n разделен на два.
Выходные данные y установлены в false.
В зависимости от четности входа, переходов графика или к Even или к состоянию Odd. Когда действие состояния переключает между Even и состояниями Odd, график вычисляет числа в последовательности градины. Когда последовательность достигает значения одного, выходные данные y становится true и инициировал блок Stop Simulation в модели Simulink®.

Акты государственной власти задают то, что делает диаграмма Stateflow, в то время как состояние активно. Наиболее распространенными типами актов государственной власти является entry, during и действия exit.
| Тип акта государственной власти | Сокращение | Описание |
|---|---|---|
entry | en | Действие происходит на временном шаге, когда состояние становится активным. |
during | du | Действие происходит на временном шаге, когда состояние уже активно, и график не переходит из состояния. |
exit | ex | Действие происходит на временном шаге когда переходы графика из состояния. |
Можно задать тип акта государственной власти его полным ключевым словом (entry, during, exit) или его сокращением (en, du, ex). Можно также объединить типы акта государственной власти при помощи запятых. Например, действие с объединенным типом, entry,during происходит на временном шаге, когда состояние становится активным и на каждом последующем временном шаге, в то время как состояние остается активным.
Эта таблица приводит результат каждого акта государственной власти в графике градины.
| Состояние | Действие | Результат |
|---|---|---|
Init |
entry: n2 = rem(n,2); y = false; | Когда Init становится активным в начале симуляции, определяет четность n и устанавливает y на false. |
exit: y = isequal(n,1); | Когда переход из Init после одного временного шага, определяет, равен ли n одному. | |
Even |
entry,during: n = n/2; n2 = rem(n,2); | Вычисляет следующее количество последовательности градины (
|
Odd |
entry,during: n = 3*(n-y)+1; n2 = rem(n,2); | Вычисляет следующее количество последовательности градины
В течение большей части симуляции |
Действия перехода задают то, что делает диаграмма Stateflow, когда переход уводит от активного состояния. Наиболее распространенные типы действий перехода являются условиями и условными действиями. Чтобы задать действия перехода, используйте метку с этим синтаксисом:
[condition]{conditional_action}
condition является Булево выражение, которое определяет, происходит ли переход. Если вы не задаете условие, подразумеваемая оценка условия к истине принята.conditional_action является инструкцией, которая выполняется, когда условие, охраняющее переход, верно. Условное действие происходит после условия, но перед любым exit или актами государственной власти entry.
Эта таблица приводит результат каждого действия перехода в графике градины.
| Переход | Действие | Тип действия | Результат |
|---|---|---|---|
Переход по умолчанию в Init |
n = u | Условное действие | В начале симуляции, присваивает входное значение u локальным данным n. |
Переход от Init до Even |
n2 == 0 | Условие | Когда n даже, переход происходит. Номер 1 в источнике этого перехода указывает, что это оценено перед переходом к Odd. |
Переход от Init до Odd | 'none' | Когда n нечетен, переход происходит. Номер 2 в источнике этого перехода указывает, что это оценено после перехода к Even. | |
Переход от Odd до Even |
n2 == 0 | Условие | Когда n даже, переход происходит. |
Переход от Even до Odd |
n2 ~= 0 | Условие | Когда n нечетен, переход происходит. |
y = isequal(n,1) | Условное действие | То, когда переход происходит, определяет, равен ли n одному. |
Предположим, что вы хотите вычислить последовательность градины начиная со значения девять.
В диалоговом окне Model Configuration Parameters, под Solver, выбирают эти опции:
Время начала: 0.0
Stop time: inf
Ввод: Fixed-step
Fixed-step size: 1
В Property Inspector выберите символ n для журналирования.
В блоке Constant введите вход u = 9.
Кликните по значку Run
.
График отвечает этими действиями:
Во время t = 0, происходит переход по умолчанию к Init.
Действие перехода устанавливает значение n к 9.
Состояние Init становится активным.
Действия entry в Init устанавливают n2 на 1 и y к false.
Во время t = 1, условие n2 == 0 является ложным, таким образом, график готовится переходить к Odd.
Действие exit в Init устанавливает y на false.
Состояние Init становится неактивным.
Состояние Odd становится активным.
Действия entry в Odd устанавливают n на 28 и n2 к 0.
Во время t = 2, условие n2 == 0 верен, таким образом, график готовится переходить к Even.
Состояние Odd становится неактивным.
Состояние Even становится активным.
Действия entry в Even устанавливают n на 14 и n2 к 0.
Во время t = 3, условие n2 ~= 0 является ложным, таким образом, график не берет переход.
Состояние Even остается активным.
Действия during в Even устанавливают n на 7 и n2 к 1.
Во время t = 4, условие n2 ~= 0 верен, таким образом, график готовится переходить к Odd.
Действие перехода устанавливает y на false.
Состояние Even становится неактивным.
Состояние Odd становится активным.
Действия entry в Odd устанавливают n на 22 и n2 к 0.
График продолжает вычислять последовательность градины, пока это не достигает значения n = 1 во время t = 19.
Во время t = 20, график готовится переходить от Even до Odd.
Прежде чем состояние Even становится неактивным, действие перехода устанавливает y на true.
Состояние Odd становится активным.
Действия entry в Odd не изменяют n или n2.
Блок Stop Simulation, соединенный с выходным сигналом y, останавливает симуляцию.
