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

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

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

Действия на этом графике определяют конечный автомат, который эмпирически проверяет один образец догадки 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, 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);

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

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

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

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

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

Переходные действия определяют, что делает диаграмма Stateflow, когда переход уводит от активного состояния. Наиболее распространенными типами переходных действий являются условия и условные действия. Чтобы задать действия перехода, используйте метку с таким синтаксисом:

[condition]{conditional_action}

condition является логическим выражением, которое определяет, происходит ли переход. Если вы не задаете условие, подразумеваемое условие, вычисляющее true, принимается.

conditional_action - это команда, которая выполняется, когда условие, защищающее переход, соответствует true. Условное действие происходит после условия, но перед любым exit или entry Состояния активности.

В этой таблице перечислены результаты каждого переходного действия в графике градины.

ПереходДействиеТип действияРезультат
Переход по умолчанию в Init

n = u

Условное действиеВ начале симуляции присваивает вход значение u к локальным данным n.
Переход от Init на Even

n2 == 0

СостояниеКогда n является четным, переход происходит. Число 1 в источнике этого перехода указывает, что оно оценивается перед переходом на Odd.
Переход от Init на Odd НичегоКогда n нечетно, происходит переход. Число 2 в источнике этого перехода указывает, что оно оценивается после перехода к Even.
Переход от Odd на Even

n2 == 0

СостояниеКогда n является четным, переход происходит.
Переход от Even на Odd

n2 ~= 0

СостояниеКогда n нечетно, происходит переход.

y = isequal(n,1)

Условное действиеКогда происходит переход, определяет, n равно единице.

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

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

  1. В диалоговом окне Model Параметры Конфигурации, в разделе Solver, выберите следующие опции:

    • Start time: 0.0

    • Stop time: inf

    • Type: Fixed-step

    • Fixed-step size: 1

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

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

  4. На вкладке Simulation нажмите Run.

    График реагирует следующими действиями:

    • В момент времени t = 0 переход по умолчанию на Init происходит.

      • Действие перехода устанавливает значение n по 9.

      • The Init состояние становится активным.

      • The entry действия в Init установите n2 по 1 и y на false.

    • В момент времени t = 1, условие n2 == 0 false, поэтому график готовится к переходу на Odd.

      • The exit действие в Init устанавливает y на false.

      • The Init состояние становится неактивным.

      • The Odd состояние становится активным.

      • The entry действия в Odd установите n до 28 и n2 в 0.

    • В момент времени t = 2 условие n2 == 0 верно, поэтому график готовится к переходу на Even.

      • The Odd состояние становится неактивным.

      • The Even состояние становится активным.

      • The entry действия в Even установите n до 14 и n2 в 0.

    • В момент времени t = 3 условие n2 ~= 0 false, поэтому график не принимает переход.

      • The Even состояние остается активным.

      • The during действия в Even установите n до 7 и n2 по 1.

    • В момент времени t = 4 условие n2 ~= 0 верно, поэтому график готовится к переходу на Odd.

      • Действие перехода задает y на false.

      • The Even состояние становится неактивным.

      • The Odd состояние становится активным.

      • The entry действия в Odd установите n до 22 и n2 в 0.

    • График продолжает вычислять последовательность градины до тех пор, пока она не достигнет значения n = 1 в момент времени t = 19.

    • В момент t = 20 график готовится к переходу от Even на Odd.

      • Перед Even состояние становится неактивным, действие перехода устанавливает y на true.

      • The Odd состояние становится активным.

      • The entry действия в Odd не изменять n или n2.

      • Блок Stop Simulation соединяется с сигналом выхода y останавливает симуляцию.

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

  6. Чтобы увидеть значения последовательности градины, в Данные Моделирования Inspector, выберите записанный сигнал n.

Simulation Data Inspector showing the output of the chart.

См. также

(Simulink)

Похожие темы