Stateflow® графики могут обнаружить изменения в значениях данных и выражений между временными шагами. Вы можете:
Используйте операторы обнаружения изменения, чтобы определить, когда переменная превратится на или от значения.
Используйте операторы обнаружения ребра, чтобы определить, когда выражение повысится выше или упадет ниже порога.
Чтобы сгенерировать неявное локальное событие, когда график установит значение переменной, используйте change
оператор. Для получения дополнительной информации смотрите Поведение Диаграммы управления при помощи Неявных Событий.
Чтобы обнаружить изменения в данных Stateflow, используйте операторы, перечисленные в этой таблице.
Оператор | Синтаксис | Описание | Пример |
---|---|---|---|
hasChanged | tf = hasChanged(data_name) | Возвращается 1 (true ) если значение data_name в начале текущего времени шаг отличается от значения data_name в начале предыдущего временного шага. В противном случае оператор возвращается 0 (false ). | Переход из состояния, если любой элемент матричного [hasChanged(M)] |
Переход из состояния, если элемент в строке 1 и столбце 3 матричного В графиках то использование MATLAB® как язык действия, используйте: [hasChanged(M(1,3))] В графиках, которые используют C в качестве языка действия, используйте: [hasChanged(M[0][2])] | |||
hasChangedFrom | tf = hasChangedFrom(data_name,value) | Возвращается 1 (true ) если значение data_name было равно заданному value в начале предыдущего временного шага и различное значение в начале шага текущего времени. В противном случае оператор возвращается 0 (false ). | Переход из состояния, если предыдущее значение структуры [hasChangedFrom(struct,structValue)] |
hasChangedTo | tf = hasChangedTo(data_name,value) | Возвращается 1 (true ) если значение data_name не было равно заданному value в начале предыдущего временного шага и равно value в начале шага текущего времени. В противном случае оператор возвращается 0 (false ). | Переход из состояния, если поле [hasChangedTo(struct.field,5)] |
Примечание
Если несколько входных событий имеют место в том же временном шаге, эти операторы могут обнаружить изменения в значении данных между входными событиями.
Эта модель показывает как операторы hasChanged
, hasChangedFrom
, и hasChangedTo
обнаружьте определенные изменения во входном сигнале. В этом примере блок Ramp (Simulink) отправляет дискретный, увеличивающийся сигнал времени в график.
Модель использует решатель фиксированного шага с размером шага 1. Сигнал постепенно увеличивается 1 каждым временным шагом. График анализирует входной сигнал u
для этих изменений:
Любое изменение от предыдущего временного шага
Изменение в значении 3
Изменение от значения 3
Чтобы проверять сигнал, график вызывает три оператора обнаружения изменения в действии перехода. График выводит возвращаемые значения как y1
, y2
, и y3
.
В процессе моделирования блок Scope (Simulink) показывает сигналы ввода и вывода для графика.
Значение u
увеличения 1 каждым временным шагом.
Значение y1
изменения от 0 до 1 во время t = 1
. Значение y1
остается 1 потому что u
продолжает изменяться на каждом последующем временном шаге.
Значение y2
изменения от 0 до 1 во время t = 4
когда значение u
изменения от 3 до 4. Значение y2
возвращается к 0 после одного временного шага.
Значение y3
изменения от 0 до 1 во время t = 3
когда значение u
изменения от 2 до 3. Значение y3
возвращается к 0 после одного временного шага.
Тип диаграммы Stateflow определяет осциллограф данных, поддержанных для обнаружения изменения:
Автономные диаграммы Stateflow в MATLAB: Local
только
Графики в Simulink® то использование MATLAB как язык действия: Input
только
Графики в Simulink, которые используют C в качестве языка действия: Input
вывод
, Local
, или Data Store Memory
Аргумент data_name
может быть:
Скалярная переменная.
Матрица A или элемент матрицы.
Если data_name
матрица, оператор возвращает true
когда это обнаруживает изменение в любом элементе data_name
.
Индексируйте элементы матрицы при помощи чисел или выражений, которые оценивают до постоянного целого числа. Смотрите Поддерживаемые Операции для Векторов и Матриц.
Структура или поле в структуре.
Если data_name
структура, оператор обнаружения изменения возвращает true
когда это обнаруживает изменение в любом поле data_name
.
Индексируйте поля в структуре при помощи записи через точку. Смотрите индекс и Значения Присвоения к Структурам Stateflow.
Любая допустимая комбинация полей структуры или элементов матрицы.
Аргумент data_name
не может быть нетривиальное выражение или переменная пользовательского кода.
Примечание
Автономные диаграммы в MATLAB не поддерживают обнаружение изменения на элементе матрицы или поля в структуре.
Для hasChangedFrom
и hasChangedTo
операторы, аргумент value
может быть любое выражение, которое решает к значению, которое сопоставимо с data_name
.
Если data_name
скаляр, затем value
должен решить к скалярному значению.
Если data_name
матрица, затем value
должен решить к матричному значению с теми же размерностями как data_name
.
В качестве альтернативы в графике, который использует C в качестве языка действия, value
может решить к скалярному значению. График использует скалярное расширение, чтобы сравнить data_name
к матрице, элементы которой все равны значению, заданному value
. Смотрите значения присвоения ко всем элементам матрицы.
Если data_name
структура, затем value
должен решить к значению структуры, полевая спецификация которого совпадает с data_name
точно.
Если вы генерируете код из графика, который использует операторы обнаружения изменения, и упорядоченное по строкам размещение массивов включено, генерация кода производит ошибку. Прежде, чем сгенерировать код, включите упорядоченное по столбцам размещение массивов. Смотрите Избранное Размещение Массивов для Матриц в Сгенерированном коде.
Чтобы определить, когда выражение повысится выше или упадет ниже порога, используйте операторы, перечисленные в этой таблице.
Оператор | Синтаксис | Описание | Пример |
---|---|---|---|
crossing | tf = crossing(expression) | Возвращается 1 (
В противном случае оператор возвращается 0 ( Этот оператор подражает поведению блока Trigger (Simulink) с набором Trigger Type к | Переход из состояния, если значение входных данных [crossing(signal-2.5)] Ребро обнаруживается когда значение выражения |
falling | tf = falling(expression) | Возвращается 1 (
В противном случае оператор возвращается 0 ( Этот оператор подражает поведению блока Trigger (Simulink) с набором Trigger Type к | Переход из состояния, если значение входных данных [falling(signal-2.5)] Падающее ребро обнаруживается когда значение выражения |
rising | tf = rising(expression) | Возвращается 1 (
В противном случае оператор возвращается 0 ( Этот оператор подражает поведению блока Trigger (Simulink) с набором Trigger Type к | Переход из состояния, если значение входных данных [rising(signal-2.5)] Возрастающее ребро обнаруживается когда значение выражения |
Примечание
Как блок Trigger, эти операторы обнаруживают одно ребро когда expression
аргумент изменяет значение от положительного, чтобы обнулить к отрицанию или от отрицательного, чтобы обнулить к положительному на трех последовательных временных шагах. Ребро происходит, когда значение выражения становится нулевым.
Эта модель показывает как операторы crossing
, falling
, и rising
обнаружьте ребра во входном сигнале. В этом примере блок Pulse Generator (Simulink) отправляет прямоугольную волну в график.
Модель использует решатель фиксированного шага с размером шага 1. Значение входного сигнала u
альтернативы между 0 и 5 каждыми двумя временными шагами. График анализирует входной сигнал u
для этих ребер:
Падение или возрастающее ребро, пересекающее порог 2,5
Ребро, повышающееся по порогу 2,5
Ребро, подпадающее под порог 2,5
Чтобы проверять сигнал, график вызывает три оператора обнаружения ребра в действии перехода. График выводит возвращаемые значения как y1
, y2
, и y3
.
В процессе моделирования блок Scope (Simulink) показывает сигналы ввода и вывода для графика.
Значение u
альтернативы между 0 и 5 на любом временном шаге.
Значение y1
изменения от 0 до 1 во время t = 1
, 3, 5
, и
7
, когда значение выражения u-2.5
изменяет знак. Значение y1
возвращается к 0 после одного временного шага.
Значение y2
изменения от 0 до 1 во время t = 1
и 5
, когда значение выражения u-2.5
изменения от отрицательного до положительного. Значение y2
возвращается к 0 после одного временного шага.
Значение y3
изменения от 0 до 1 во время t = 3
и 7
, когда значение выражения u-2.5
изменения от положительного до отрицания. Значение y3
возвращается к 0 после одного временного шага.
Обнаружение ребра поддерживается только в диаграммах Stateflow в моделях Simulink.
Аргумент expression
:
Должно быть выражение со скалярным знаком
Может объединить входные данные графика, константы, ненастраиваемые параметры, непрерывное время локальные данные, и утвердить данные из основанных на Simulink состояний
Может включать сложение, вычитание, и умножение скалярных переменных, элементы матрицы, полей в структуре или любой допустимой комбинации полей структуры и элементов матрицы
Индексируйте элементы матрицы при помощи чисел или выражений, которые оценивают до постоянного целого числа.
Обнаружение ребра в течение непрерывного времени локальные данные и данные состояния из основанных на Simulink состояний поддерживается только в условиях перехода.
В атомарных субдиаграммах сопоставьте все входные данные, которые вы используете в выражениях обнаружения ребра для входных данных или ненастраиваемых параметров в основном графике. При отображении этих входных данных с выходными данными локальные данные или настраиваемые параметры могут привести к неопределенному поведению.
Диаграммы Stateflow, которые используют операторы обнаружения ребра, не поддерживают рабочие точки.
График обнаруживает изменения в данных о графике и выражениях путем оценки значений на контурах временного шага. График сравнивает значение в начале предыдущего шага выполнения со значением в начале текущего шага выполнения.
Например, когда вы вызываете hasChanged
оператор с аргументом x
, двойные буферы диаграммы Stateflow значения x
в локальных переменных.
Локальный буфер | Описание |
---|---|
x_prev | Значение данных |
x_start | Значение данных |
Чтобы обнаружить изменения, значения данных двойных буферов графика после, событие инициировало график, но прежде чем график начинает выполнение. Если значения xprev
и xstart
соответствуйте, оператор обнаружения изменения возвращает false
указать, что никакое изменение не произошло; в противном случае это возвращает true
указать на изменение. Эта схема помещает эти задачи в контекст жизненного цикла графика.
Операторы обнаружения ребра ведут себя похожим способом, за исключением того, что они сравнивают значение выражения в начале последнего временного шага (xprev
) с его текущим значением (x
). Различие в реализации позволяет графикам непрерывного времени обнаруживать ребра в локальных данных во время незначительных временных шагов.
Операторы обнаружения изменения пытаются отфильтровать переходные изменения в локальных переменных графика путем оценки их значений только на контурах времени. График оценивает заданную локальную переменную только однажды в конце шага выполнения. Возвращаемое значение операторов обнаружения изменения остается постоянным, даже если значение локальной переменной колеблется в данном временном шаге. Например, предположите это на шаге текущего времени, локальная переменная temp
изменения от его значения на предыдущем временном шаге, но затем возвращаются к исходному значению. Оператор hasChanged(temp)
возвращает false
для следующего временного шага, указывая, что никакое изменение не произошло.
В отличие от этого операторы обнаружения ребра могут обнаружить ребра в непрерывное время локальные данные во время незначительных временных шагов. Например, предположите тот p
локальная переменная непрерывного времени с отрицательной производной. Затем оператор falling(p)
возвращает true
во время незначительного временного шага, когда p
изменяет знак от положительного до отрицания.
Когда несколько входных событий имеют место в том же временном шаге, или когда вы включаете супер семантику шага, график обновляет xprev
и xstart
буферизует каждый раз, когда это выполняется. График обнаруживает изменения в значении между входными событиями, и супер продвиньтесь итерации, даже если изменения происходят несколько раз в данном временном шаге. Для получения дополнительной информации смотрите События Использования, чтобы Выполнить Графики и Супер Семантику Шага.
change | crossing | falling | hasChanged | hasChangedFrom | hasChangedTo | rising