exponenta event banner

hasChanged

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

Синтаксис

Описание

пример

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

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

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

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

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

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

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

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

Аргумент 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, если включен параметр «Инициализировать выходные данные при каждом пробуждении диаграммы», в качестве аргумента hasChanged оператор всегда возвращает false. Дополнительные сведения см. в разделе Инициализация выходных данных при каждом включении диаграммы.

  • Если в диаграммах, использующих основные строки, включена компоновка массива hasChanged, создание кода приводит к ошибке. Перед созданием кода в диаграммах, использующих hasChanged, включить компоновку «столбец-основной массив». См. раздел Выбор формата массива для матриц в сгенерированном коде.

Представлен в R2007a