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.

hasChangedTo

Detectar cambios de datos por el valor especificado en un gráfico de Stateflow

Descripción

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

ejemplo

Ejemplos

expandir todo

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

[hasChangedTo(M,matrixValue)]

Stateflow chart that uses the hasChangedTo operator in a transition.

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

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

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

Stateflow chart that uses the hasChangedTo operator in a transition.

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

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

Stateflow chart that uses the hasChangedTo operator in a transition.

Realiza 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 y el valor actual de struct es igual a structValue.

[hasChangedTo(struct,structValue)]

Stateflow chart that uses the hasChangedTo operator in a transition.

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

[hasChangedTo(struct.field,5)]

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

Historial de versiones

Introducido en R2007a