Состояние и действия перехода являются инструкциями, что вы пишете в состоянии или рядом с переходом, чтобы задать, как график 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 введите вход 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 соединяется с выходным сигналом y
останавливает симуляцию.
Во вкладке Simulation, под Review Results, нажимают Data Inspector .
Чтобы видеть значения последовательности градины, в Инспекторе Данных моделирования, выбирают регистрируемый n
сигнала.
Stop Simulation (Simulink)