Обнаружение изменения данных от заданного значения
tf = hasChangedFrom(
возвращает 1 (data_name
,value
)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
точно.
Если за один временной шаг происходит несколько входных событий, 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 для матриц в Сгенерированный код.