Задайте поведение графика при помощи действий

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

Пример состояния и действий перехода

Действия в этом графике задают конечный автомат, который опытным путем проверяет один экземпляр догадки Collatz. Для данного числового входа $u$график вычисляет последовательность градины$n_0 = u,$$n_1,$$n_2,$$n_3,$ … путем итерации этого правила:

  • Если$n_i$ является четным, то$n_{i+1} = n_i / 2$.

  • Если$n_i$ является нечетным, то$n_{i+1} = 3n_i+1$.

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

График состоит из трех состояний. В начале симуляции, Init состояние инициализирует данные о графике:

  • Локальные данные n установлен в значение входа u.

  • Локальные данные n2 установлен в остаток когда n разделен на два.

  • Выходные данные y установлен в false.

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

Типы действий состояния

Состояния активности задают то, что делает диаграмма Stateflow, в то время как состояние активно. Наиболее распространенными типами состояний активности является entry, during, и exit действия.

Тип состояния активностиСокращениеОписание
entryenДействие происходит на временном шаге, когда состояние становится активным.
duringduДействие происходит на временном шаге, когда состояние уже активно, и график не переходит из состояния.
exitexДействие происходит на временном шаге когда переходы графика из состояния.

Можно задать тип состояния активности его полным ключевым словом (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);

Вычисляет следующее количество последовательности градины (n / 2) и обновления его четность на:

  • Временной шаг, когда Even сначала становится активным.

  • Каждый последующий временной шаг, что Even активно.

Odd

entry,during:
 n = 3*(n-y)+1;
 n2 = rem(n,2);

Вычисляет следующее количество последовательности градины (3n+1) и обновляет его четность на:

  • Временной шаг, когда Odd сначала становится активным.

  • Каждый последующий временной шаг, что Odd активно.

В течение большей части симуляции, y оценивает, чтобы обнулить. На последнем временном шаге, когда n = 1, y оценивает к одному, таким образом, это действие не изменяет n или n2 прежде чем симуляция останавливается.

Типы действия перехода

Действия перехода задают то, что делает диаграмма 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 равно одному.

Исследуйте поведение графика

Предположим, что вы хотите вычислить последовательность градины начиная со значения девять.

  1. В диалоговом окне Model Configuration Parameters, под Solver, выбирают эти опции:

    • Время начала: 0.0

    • Stop time: inf

    • Ввод: Fixed-step

    • Fixed-step size: 1

  2. В панели Символов выберите локальные данные n. В Property Inspector, под Logging, выбирают Log signal data.

  3. В блоке Constant (Simulink) введите вход u = 9.

  4. Во вкладке 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 останавливает симуляцию.

  5. Во вкладке Simulation, под Review Results, нажимают Data Inspector .

  6. Чтобы видеть значения последовательности градины, в Инспекторе Данных моделирования, выбирают регистрируемый n сигнала.

Simulation Data Inspector showing the output of the chart.

Похожие темы