hasChanged

Обнаружение изменения данных с момента последнего временного шага

Синтаксис

Описание

пример

tf = hasChanged(data_name) возвращает 1 (true) если значение data_name в начале текущего временного шага отличается от значения data_name в начале предыдущего временного шага. В противном случае оператор возвращает 0 (false).

Аргумент data_name могут быть:

  • Скалярная переменная.

  • Матрица или элемент массива матрицы.

    • Если data_name является матрицей, оператор возвращает true когда он обнаруживает изменение в любом элементе data_name.

    • Индексируйте элементы массива матрицы с помощью чисел или выражений, которые вычисляются до постоянного целого числа. См. «Поддерживаемые операции для векторов и матриц».

  • Структура или поле в структуре.

    • Если data_name является структурой, оператор обнаружения изменений возвращает true когда он обнаруживает изменение в любом поле data_name.

    • Индексируйте поля в структуре с помощью записи через точку. См. Индекс и присвоение значений структурам Stateflow».

  • Любая допустимая комбинация структурных полей или элементов матрицы.

Аргумент data_name не может быть нетривиальным выражением или пользовательской переменной кода.

Примечание

Автономные диаграммы в MATLAB® не поддерживает обнаружение изменений в элементе массива матрицы или поле в структуре.

Примеры

расширить все

Переход из состояния вне состояния, если какой-либо элемент матрицы M изменило значение с момента последнего временного шага или входного события.

[hasChanged(M)]

Stateflow chart that uses the hasChanged operator in a transition.

Переходите из состояния в состояние, если элемент в строке 1 и столбце 3 матрицы M изменило значение с момента последнего временного шага или входного события.

В графиках, которые используют MATLAB в качестве языка действий, используйте:

[hasChanged(M(1,3))]

Stateflow chart that uses the hasChanged operator in a transition.

В графиках, которые используют C в качестве языка действий, используйте:

[hasChanged(M[0][2])]

Stateflow chart that uses the hasChanged operator in a transition.

Переход из состояния «вне состояния», если какое-либо поле структуры struct изменило значение с момента последнего временного шага или входного события.

[hasChanged(struct)]

Stateflow chart that uses the hasChanged operator in a transition.

Переход из состояния «вне состояния», если поле struct.field изменило значение с момента последнего временного шага или входного события.

[hasChanged(struct.field)]

Stateflow chart that uses the hasChanged operator in a transition.

Совет

  • Если за один временной шаг происходит несколько входных событий, hasChanged оператор может обнаруживать изменения в значении данных между входными событиями.

  • Если график записывает в объект данных, но не изменяет значение данных, hasChanged оператор возвращает false.

  • Тип Stateflow® график определяет возможности данных, поддерживаемых операторами обнаружения изменений:

    • Автономные диаграммы Stateflow в MATLAB: Local только

    • В Simulink® модели, графики, которые используют MATLAB в качестве языка действий: Input только

    • В моделях Simulink графиков, которые используют C как язык действий: Input, Output, Local, или Data Store Memory

  • В автономной диаграмме в MATLAB оператор обнаружения изменений может обнаружить изменения в данных, заданных в вызове step функция, поскольку эти изменения происходят перед началом текущего временного шага. Для примера, если x равно нулю, выражение hasChanged(x) возвращает true при выполнении графика ch с помощью команды:

    step(ch,'x',1);
    Напротив, оператор обнаружения изменений не может обнаружить изменения в данных, вызванные назначениями в состоянии или переходными действиями на том же временном шаге. Вместо этого оператор обнаруживает изменение значения в начале следующего временного шага.

  • На графике в модели Simulink, если вы включите Initialize Outputs Every Time Chart Wakes Up опции графика, используйте выход в качестве аргумента hasChanged оператор всегда возвращает false. Для получения дополнительной информации смотрите Инициализация выходов каждый раз, когда график просыпается.

  • Когда размещение массива с основной строкой включено в графиках, которые используют hasChangedгенерация кода приводит к ошибке. Перед генерацией кода в графиках, которые используют hasChanged, включите размещение массива основного столбца. Смотрите Select Array Layout для матриц в Сгенерированный код.

Введенный в R2007a