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

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

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

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

  • Если даже, то.

  • Если нечетно, то.

Догадка 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выход) или его сокращением (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 останавливает симуляцию.

Смотрите также

Похожие темы