Документация Engee

Операторы отслеживания фронта сигнала

Страница в процессе разработки.

Помимо операторов и индикаторов из статей Операторы темпоральной логики и Индикаторы изменений, на переходах stateflow library transition могут быть заданы операторы отслеживания фронта сигнала.

Операторы отслеживания фронта сигнала — это функции rising, falling и crossing, которые возвращают логическое значение true в момент изменения сигнала определённым образом. Это позволяет конечному автомату точно определить момент переключения: не по текущему значению сигнала, а по его изменению во времени.

Что такое изменение сигнала и фронт

В цифровых системах сигналы часто представлены логическими значениями — логический 0 (false) и логическая 1 (true). Изменение в таком случае — это переход между этими двумя состояниями.

В непрерывных системах (например, с аналоговыми сигналами) значения могут быть любыми числовыми, и важным считается момент, когда сигнал пересекает определенный порог — особенно значение ноль.

Изменения сигнала называют фронтами. Различают два основных типа:

  • Нарастающий фронт — переход сигнала через 0 от меньшего значения к большему (например, от -1 к 0.5);

  • Спадающий фронт — переход сигнала через 0 от большего значения к меньшему (например, от 1 к -0.2).

Логика срабатывания операторов

Каждый из операторов (rising, falling, crossing) — это выражение, которое возвращает значение true только в момент изменения сигнала определенным образом. В остальное время — false.

Рассмотрим условия срабатывания каждого оператора.

Оператор rising(x)

Оператор rising(x) возвращает true в момент, когда сигнал x пересекает ноль снизу вверх (возрастание).

Это происходит в двух случаях:

  1. Предыдущее значение x было отрицательным, а текущее стало нулевым или положительным;

  2. Предыдущее значение x было нулевым, а текущее стало положительным.

Так, rising(x) — это детектор перехода в положительном направлении.

Например, пусть переменная x изменяется от -0.20.1. Оператор rising(x) в этом случае вернет true, так как произошло пересечение нуля снизу вверх. Если же x изменяется от 0.1 к -0.1, то оператор не сработает.

Аналогично, rising(x - 0.5) отслеживает момент, когда x пересекает значение 0.5 снизу вверх. Например:

state machines tracking signal operators 3

  • x было 0.4, стало 0.6rising(x - 0.5) вернет true;

  • x было 0.6, стало 0.4rising(x - 0.5) вернет false.

Оператор falling(x)

Оператор falling(x) возвращает true в момент, когда сигнал x пересекает ноль сверху вниз. Срабатывает при:

  1. Предыдущем положительном значении x, если текущее — нулевое или отрицательное;

  2. Предыдущем нулевом значении x, если текущее стало отрицательным.

Так, falling(x) реагирует на переход в отрицательном направлении. Пример:

  • x было 0.2, стало -0.1falling(x) вернет true;

  • x было -0.1, стало 0.2 → не сработает.

Для falling(x - 0.5) аналогично: оператор сработает, когда x пересекает 0.5 сверху вниз. Например:

state machines tracking signal operators 2

  • x изменяется от 0.6 к 0.4 → срабатывает;

  • x изменяется от 0.4 к 0.6 → не срабатывает.

Оператор crossing(x)

Оператор crossing(x) — это универсальный оператор, возвращающий true при любом пересечении сигнала через ноль (или другой заданный порог), вне зависимости от направления. Он срабатывает при одном из следующих условий:

  1. Предыдущее значение было положительным, а текущее — нулевым или отрицательным;

  2. Предыдущее значение было нулевым, а текущее — отличным от нуля;

  3. Предыдущее значение было отрицательным, а текущее — нулевым или положительным.

Так, оператор crossing(x) фиксирует любой переход через ноль — и вверх (возрастание), и вниз (убывание). Например:

state machines tracking signal operators 1

  • x изменяется от 0.6 к 0.4crossing(x - 0.5) вернет true;

  • x изменяется от 0.4 к 0.6 → также true;

  • x остается ниже 0.5 или выше 0.5, не пересекает порог → false.


Отдельное внимание стоит уделить тому, как обрабатывается равенство нулю. В отличие от простого условия x > 0, эти операторы не игнорируют ноль, а учитывают его как граничное состояние, играющее важную роль в логике переходов.

Например:

  • Если сигнал был нулевым, и стал положительным → это считается нарастающим фронтом;

  • Если был нулевым, и стал отрицательным → это спадающий фронт;

  • Если был нулевым, и стал ненулевым (любым) → это срабатывание crossing.