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.

hasChangedFrom

Detectar cambios en los datos con respecto al valor especificado en un gráfico de Stateflow

Descripción

tf = hasChangedFrom(data,value) devuelve 1 (true) si el valor de data al comienzo de la unidad de tiempo anterior es igual a value y es un valor diferente al comienzo de la unidad de tiempo actual. De lo contrario, el operador devuelve 0 (false).

ejemplo

Ejemplos

expandir todo

Realice la transición de salida de estado si el valor anterior de la matriz M era igual a matrixValue y algún elemento de M ha cambiado de valor desde la última unidad de tiempo o evento de entrada.

[hasChangedFrom(M,matrixValue)]

Stateflow chart that uses the hasChangedFrom 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 del valor 7 desde la última unidad de tiempo o evento de entrada.

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

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

Stateflow chart that uses the hasChangedFrom operator in a transition.

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

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

Stateflow chart that uses the hasChangedFrom operator in a transition.

Realice la transición de salida de estado si el valor anterior de la estructura struct era igual a structValue y algún campo de struct ha cambiado de valor desde la última unidad de tiempo o evento de entrada.

[hasChangedFrom(struct,structValue)]

Stateflow chart that uses the hasChangedFrom operator in a transition.

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

[hasChangedFrom(struct.field,5)]

Stateflow chart that uses the hasChangedFrom 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.

Valor de los datos en la unidad de tiempo anterior, especificado como el mismo tipo de datos de data. value debe ser una expresión que se resuelva en un valor comparable con data:

  • Si data es un escalar, value debe resolverse en un escalar.

  • Si data es una matriz, value debe resolverse en una matriz con las mismas dimensiones que data.

    Como alternativa, en un gráfico que utilice C como lenguaje de acción, value puede resolverse en un valor escalar. El gráfico utiliza la expansión escalar para comparar data con una matriz cuyos elementos son todos iguales al valor especificado por value. Consulte Asignar valores a todos los elementos de una matriz.

  • Si data es una estructura, value debe resolverse en una estructura cuya especificación de campos coincida exactamente con data.

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 hasChangedFrom 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 hasChangedFrom 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 hasChangedFrom(x,0) 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 hasChangedFrom, la generación de código produce un error. Antes de generar código en gráficos que utilizan hasChangedFrom, habilite el orden por columna principal. Consulte Select Array Layout for Matrices in Generated Code.

Historial de versiones

Introducido en R2007a