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

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

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

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

Вычисляет следующее количество последовательности градины (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. В Property Inspector выберите символ n для журналирования.

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

  4. Кликните по значку 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, останавливает симуляцию.

Похожие темы