hasChangedFrom

Обнаружение изменения данных от заданного значения

Описание

пример

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

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

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

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

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

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

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

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

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

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

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

Примечание

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

Аргумент value может быть любым выражением, которое разрешается до значения, которое сопоставимо с data_name:

  • Если data_name является скаляром, тогда value должно разрешиться до скалярного значения.

  • Если data_name является матрицей, тогда value должен разрешиться до матричного значения с такими же размерностями, как data_name.

    Кроме того, на графике, которая использует C в качестве языка действий, value может разрешиться до скалярного значения. График использует скалярное расширение, чтобы сравнить data_name в матрицу, элементы которой все равны значению, заданному value. См. «Присвоение значений всем элементам матрицы».

  • Если data_name является структурой, тогда value должен разрешиться к значению структуры, спецификация поля которого соответствует data_name точно.

Примеры

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

Переход из состояния «вне состояния», если предыдущее значение матрицы M был равен matrixValue и любой элемент M изменило значение с момента последнего временного шага или входного события.

[hasChangedFrom(M,matrixValue)]

Stateflow chart that uses the hasChangedFrom operator in a transition.

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

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

[hasChangedFrom(M(1,3),7)]

Stateflow chart that uses the hasChangedFrom operator in a transition.

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

[hasChangedFrom(M[0][2],7)]

Stateflow chart that uses the hasChangedFrom operator in a transition.

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

[hasChangedFrom(struct,structValue)]

Stateflow chart that uses the hasChangedFrom operator in a transition.

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

[hasChangedFrom(struct.field,5)]

Stateflow chart that uses the hasChangedFrom operator in a transition.

Совет

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

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

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

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

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

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

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

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

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

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

Введенный в R2007a