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

Detectar cambios en los datos desde la última unidad de tiempo en un gráfico de Stateflow

Descripción

tf = hasChanged(data) devuelve 1 (true) si el valor de data al comienzo de la unidad de tiempo actual es diferente del valor de data al comienzo de la última unidad de tiempo que el gráfico se activó. De lo contrario, el operador devuelve 0 (false).

ejemplo

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.

Argumentos de entrada

expandir todo

Datos de Stateflow®, especificados como:

  • Escalar

  • Una matriz o un elemento de una matriz

  • Una estructura o un campo en una estructura

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

Si data es una matriz, el operador devuelve true cuando detecta un cambio en uno de los elementos de data. También puede indexar los elementos de una matriz usando números o expresiones que se evalúen como un entero. Consulte Operaciones para vectores y matrices en Stateflow.

Si data es una estructura, el operador devuelve true cuando detecta un cambio en uno de los campos de data. También puede indexar campos en una estructura usando la notación de puntos. Consulte Index and Assign Values to Stateflow Structures.

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

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.

Limitaciones

  • No se puede utilizar dentro de una tabla de verdad de Stateflow.

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 ámbito 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 Inicializar las salidas cada vez que el gráfico se activa.

  • Cuando el orden por fila principal 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 orden por columna principal. Consulte Select Array Layout for Matrices in Generated Code.

Historial de versiones

Introducido en R2007a