Состояние и действия перехода являются инструкциями, что вы пишете в состоянии или рядом с переходом, чтобы задать, как график 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
, останавливает симуляцию.