Состояние и действия перехода являются инструкциями, что вы пишете в состоянии или рядом с переходом, чтобы задать как Stateflow® график ведет себя в процессе моделирования. Для получения дополнительной информации смотрите Конечные автоматы Модели.
Действия в этом графике задают конечный автомат, который опытным путем проверяет один экземпляр догадки Collatz. Для данного числового входа
график вычисляет последовательность градины


… путем итерации этого правила:
Если
является четным, то
.
Если
является нечетным, то
.
Догадка Collatz утверждает, что каждое положительное целое число имеет последовательность градины, которая в конечном счете достигает единицы.

График состоит из трех состояний. В начале симуляции, Init состояние инициализирует данные о графике:
Локальные данные n установлен в значение входа u.
Локальные данные n2 установлен в остаток когда n разделен на два.
Выходные данные y установлен в false.
В зависимости от четности входа, переходов графика к любому Even или Odd состояние. Когда действие состояния переключает между Even и Odd состояния, график вычисляет числа в последовательности градины. Когда последовательность достигает значения одного, выходные данные y становится true и инициировал блок Stop Simulation (Simulink) в модели Simulink®.
Состояния активности задают то, что делает диаграмма Stateflow, в то время как состояние активно. Наиболее распространенными типами состояний активности является entry, during, и exit действия.
| Тип состояния активности | Сокращение | Описание |
|---|---|---|
entry | en | Действие происходит на временном шаге, когда состояние становится активным. |
during | du | Действие происходит на временном шаге, когда состояние уже активно, и график не переходит из состояния. |
exit | ex | Действие происходит на временном шаге когда переходы графика из состояния. |
Можно задать тип состояния активности его полным ключевым словом (entry, duringвыход) или его сокращением (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); | Вычисляет следующее количество последовательности градины (3
В течение большей части симуляции, |
Действия перехода задают то, что делает диаграмма 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
В панели Символов выберите локальные данные n. В Property Inspector, под Logging, выбирают Log signal data.
В блоке Constant (Simulink) введите вход u = 9.
Во вкладке Simulation нажмите 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 (Simulink) соединяется с выходным сигналом y останавливает симуляцию.
Во вкладке Simulation, под Review Results, нажимают Data Inspector
.
Чтобы видеть значения последовательности градины, в Инспекторе Данных моделирования, выбирают регистрируемый n сигнала.
