Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

hasChanged

Detecte cambios en los datos desde la última unidad de tiempo

Descripción

ejemplo

tf = hasChanged(data_name) devuelve 1 (true) si el valor de data_name al comienzo de la unidad de tiempo actual es diferente del valor de data_name al comienzo de la unidad de tiempo anterior. De lo contrario, el operador devuelve 0 (false).

El argumento data_name puede ser:

  • Una variable escalar.

  • Una matriz o un elemento de una matriz.

    • Si data_name es una matriz, el operador devuelve true cuando detecta un cambio en cualquier elemento de data_name.

    • Indexe los elementos de una matriz usando números o expresiones que se evalúen como un entero constante. Consulte Operaciones admitidas para vectores y matrices.

  • Una estructura o un campo en una estructura.

    • Si data_name es una estructura, el operador de detección de cambios devuelve true cuando detecta un cambio en cualquier campo de data_name.

    • Indexe campos en una estructura usando la notación de puntos. Consulte Index and Assign Values to Stateflow Structures.

  • Cualquier combinación válida de campos de estructura o elementos de matriz.

El argumento data_name no puede ser una expresión no trivial o una variable de código personalizada.

Nota

Los gráficos independientes en MATLAB® no admiten la detección de cambios en un elemento de una matriz o un campo en una estructura.

Ejemplos

expandir todo

Realice la transición de salida de estado si algún elemento de la matriz M ha cambiado de valor desde la última unidad de tiempo o evento de entrada.

[hasChanged(M)]

Stateflow chart that uses the hasChanged operator in a transition.

Realice la transición de salida de estado si el elemento de la fila 1 y la columna 3 de la matriz M ha cambiado de valor desde la última unidad de tiempo o evento de entrada.

En gráficos que utilizan MATLAB como lenguaje de acción, utilice:

[hasChanged(M(1,3))]

Stateflow chart that uses the hasChanged operator in a transition.

En gráficos que utilizan C como lenguaje de acción, utilice:

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

Stateflow chart that uses the hasChanged operator in a transition.

Realice la transición de salida de estado si algún campo de la estructura struct ha cambiado de valor desde la última unidad de tiempo o evento de entrada.

[hasChanged(struct)]

Stateflow chart that uses the hasChanged operator in a transition.

Realice la transición de salida de estado si el campo struct.field ha cambiado de valor desde la última unidad de tiempo o evento de entrada.

[hasChanged(struct.field)]

Stateflow chart that uses the hasChanged operator in a transition.

Sugerencias

  • Si ocurren múltiples eventos de entrada en la misma unidad de tiempo, el operador hasChanged puede detectar cambios en el valor de los datos entre eventos de entrada.

  • Si el gráfico escribe en el objeto de datos, pero no cambia el valor de los datos, el operador hasChanged devuelve false.

  • El tipo de gráfico de Stateflow® determina el alcance de los datos admitidos por los operadores de detección de cambios:

    • Gráficos de Stateflow independientes en MATLAB: solo Local

    • En los modelos de Simulink®, gráficos que utilizan MATLAB como lenguaje de acción: solo Input

    • En los modelos de Simulink, gráficos que utilizan C como lenguaje de acción: Input, Output, Local o Data Store Memory

  • En un gráfico independiente en MATLAB, un operador de detección de cambios puede detectar cambios en los datos especificados en una llamada a la función step porque estos cambios ocurren antes del inicio de la unidad de tiempo actual. Por ejemplo, si x es igual a cero, la expresión hasChanged(x) devuelve true cuando ejecuta el gráfico ch con el comando:

    step(ch,x=1);
    Por el contrario, un operador de detección de cambios no puede detectar cambios en los datos provocados por asignaciones de estado o acciones de transición en la misma unidad de tiempo. En cambio, el operador detecta el cambio de valor al inicio de la siguiente unidad de tiempo.

  • En un gráfico de un modelo de Simulink, si habilita la opción de gráfico Initialize Outputs Every Time Chart Wakes Up, al utilizar una salida como argumento del operador hasChanged siempre devuelve false. Para obtener más información, consulte Initialize outputs every time chart wakes up.

  • Cuando el diseño de arreglo principal de fila está habilitado en gráficos que utilizan hasChanged, la generación de código produce un error. Antes de generar código en gráficos que utilizan hasChanged, habilite el diseño de arreglo principal de columna. Consulte Select Array Layout for Matrices in Generated Code.

Historial de versiones

Introducido en R2007a