exponenta event banner

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 не может быть нетривиальным выражением или пользовательской переменной кода.

Примечание

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

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

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