Main Content

Controlar la ejecución de gráficos con lógica temporal

La lógica temporal controla la ejecución de un gráfico en términos de tiempo. En las acciones y transiciones de estado, se pueden utilizar dos tipos de lógica temporal:

  • La lógica temporal basada en eventos realiza el seguimiento de eventos recurrentes. Puede utilizar cualquier evento explícito o implícito como evento base.

  • La lógica temporal en tiempo absoluto registra el tiempo transcurrido desde que un estado se convirtió en activo. El tiempo de los operadores de lógica temporal de tiempo absoluto depende del tipo de gráfico de Stateflow®:

    • Los gráficos de un modelo de Simulink® definen la lógica temporal de tiempo absoluto en términos del tiempo de simulación.

    • Los gráficos independientes de MATLAB® definen la lógica temporal de tiempo absoluto en términos de tiempo de reloj, que está limitado a una precisión de 1 milisegundo.

Operadores de lógica temporal

Para definir el comportamiento de un gráfico de Stateflow basado en la lógica temporal, utilice los operadores enumerados en esta tabla. Estos operadores pueden aparecer en:

  • Acciones de estado on

  • Acciones en rutas de transición que se originan en un estado

Cada operador de lógica temporal tiene un estado asociado, que es el estado en el que aparece la acción o en el que se origina la ruta de transición. El gráfico de Stateflow restablece el contador utilizado por cada operador cada vez que se reactiva el estado asociado.

OperadorSintaxisDescripciónEjemplo
after

after(n,E)

n es un entero positivo o una expresión que se evalúa a un valor entero positivo.

E es el evento base del operador.

Devuelve true si el evento E ha ocurrido al menos n veces desde que el estado asociado se convirtió en activo. De lo contrario, el operador devuelve false.

Muestra un mensaje de estado cuando el gráfico procesa una transmisión del evento E, comenzando con la tercera transmisión de E después de que el estado se convirtió en activo.

on after(3,E): disp("ON");

Realiza una transición de salida del estado asociado cuando el gráfico procese una transmisión del evento E, comenzando en la quinta transmisión de E después de que el estado se convirtió en activo.

after(5,E)

after(n,tick)

n es un entero positivo o una expresión que se evalúa a un valor entero positivo.

Devuelve true si el gráfico se ha activado al menos n veces desde que el estado asociado se convirtió en activo. De lo contrario, el operador devuelve false.

El evento implícito tick no está admitido cuando un gráfico de Stateflow de un modelo de Simulink cuenta con eventos de entrada. Para obtener más información, consulte Controlar el comportamiento del gráfico con eventos implícitos.

Realiza una transición de salida del estado asociado cuando el gráfico se active al menos por séptima vez desde que el estado se convirtió en activo, pero solo si la variable temp es mayor que 98.6.

after(7,tick)[temp > 98.6]

after(n,sec)

after(n,msec)

after(n,usec)

n es un número real positivo o una expresión que se evalúa a un valor entero positivo.

Devuelve true si han transcurrido al menos n unidades de tiempo desde que el estado asociado se convirtió en activo. De lo contrario, el operador devuelve false.

En gráficos de un modelo de Simulink, especifique el tiempo en segundos (sec), milisegundos (msec) o microsegundos (usec).

En los gráficos independientes de MATLAB, especifique el tiempo en segundos (sec). El operador crea un objeto timer de MATLAB que genera un evento implícito para activar el gráfico. Los objetos timer de MATLAB están limitados a una precisión de 1 milisegundo. Para obtener más información, consulte Events in Standalone Charts.

Establece la variable temp en LOW cada vez que el gráfico se active, comenzando cuando el estado asociado esté activo durante al menos 12,3 segundos.

on after(12.3,sec): temp = LOW;
at

at(n,E)

n es un entero positivo o una expresión que se evalúa a un valor entero positivo.

E es el evento base del operador.

Devuelve true si el evento E se ha producido exactamente n veces desde que el estado asociado se convirtió en activo. De lo contrario, el operador devuelve false.

Muestra un mensaje de estado cuando el gráfico procesa la tercera transmisión del evento E después de que el estado se convirtió en activo.

on at(3,E): disp("ON");

Realiza una transición de salida del estado asociado cuando el gráfico procesa la quinta transmisión del evento E después de que el estado se convirtió en activo.

at(5,E)

at(n,tick)

n es un entero positivo o una expresión que se evalúa a un valor entero positivo.

Devuelve true si el gráfico se ha activado exactamente n veces desde que el estado asociado se convirtió en activo. De lo contrario, el operador devuelve false.

El evento implícito tick no está admitido cuando un gráfico de Stateflow de un modelo de Simulink cuenta con eventos de entrada. Para obtener más información, consulte Controlar el comportamiento del gráfico con eventos implícitos.

Realiza una transición de salida del estado asociado cuando el gráfico se activa por séptima vez desde que el estado se convirtió en activo, pero solo si la variable temp es mayor que 98,6.

at(7,tick)[temp > 98.6]

at(n,sec)

n es un número real positivo o una expresión que se evalúa a un valor entero positivo.

Devuelve true si han transcurrido exactamente n segundos desde que el estado asociado se convirtió en activo. De lo contrario, el operador devuelve false.

El uso de at como operador de lógica temporal en tiempo absoluto solo se admite en gráficos independientes en MATLAB. El operador crea un objeto timer de MATLAB que genera un evento implícito para activar el gráfico. Los objetos timer de MATLAB están limitados a una precisión de 1 milisegundo. Para obtener más información, consulte Events in Standalone Charts.

Establece la variable temp en HIGH si el estado ha permanecido activo durante exactamente 12,3 segundos.

on at(12.3,sec): temp = HIGH;
before

before(n,E)

n es un entero positivo o una expresión que se evalúa a un valor entero positivo.

E es el evento base del operador.

Devuelve true si el evento E se ha producido menos de n veces desde que el estado asociado se convirtió en activo. De lo contrario, el operador devuelve false.

El operador de lógica temporal before solo se admite en gráficos de Stateflow de modelos de Simulink.

Muestra un mensaje de estado cuando el gráfico procesa la primera y la segunda transmisión del evento E después de que el estado se convirtió en activo.

on before(3,E): disp("ON");

Realiza una transición de salida del estado asociado cuando el gráfico procesa una transmisión del evento E, pero solo si el estado ha permanecido activo durante menos de cinco transmisiones de E.

before(5,E)

before(n,tick)

n es un entero positivo o una expresión que se evalúa a un valor entero positivo.

Devuelve true si el gráfico se ha activado menos de n veces desde que el estado asociado se convirtió en activo. De lo contrario, el operador devuelve false.

El evento implícito tick no está admitido cuando un gráfico de Stateflow de un modelo de Simulink cuenta con eventos de entrada. Para obtener más información, consulte Controlar el comportamiento del gráfico con eventos implícitos.

El operador de lógica temporal before solo se admite en gráficos de Stateflow de modelos de Simulink.

Realiza una transición de salida del estado asociado cuando el gráfico se activa, pero solo si la variable temp es mayor que 98,6 y el gráfico se ha activado menos de siete veces desde que el estado se convirtió en activo.

before(7,tick)[temp > 98.6]

before(n,sec)

before(n,msec)

before(n,usec)

n es un número real positivo o una expresión que se evalúa a un valor entero positivo.

Devuelve true si han transcurrido menos de n unidades de tiempo desde que el estado asociado se convirtió en activo. De lo contrario, el operador devuelve false.

Especifique el tiempo en segundos (sec), milisegundos (msec) o microsegundos (usec).

El operador de lógica temporal before solo se admite en gráficos de Stateflow de modelos de Simulink.

Establece la variable temp en MED cada vez que el gráfico se activa, pero solo si el estado asociado ha permanecido activo menos de 12,3 segundos.

on before(12.3,sec): temp = MED;
every

every(n,E)

n es un entero positivo o una expresión que se evalúa a un valor entero positivo.

E es el evento base del operador.

Devuelve true en cada n-ésima ocurrencia del evento E desde que el estado asociado se convirtió en activo. De lo contrario, el operador devuelve false.

Muestra un mensaje de estado cuando el gráfico procesa cada tercera transmisión del evento E después de que el estado se convirtió en activo.

on every(3,E): disp("ON");

Realiza una transición de salida del estado asociado cuando el gráfico procesa cada quinta transmisión del evento E después de que el estado se convirtió en activo.

every(5,E)

every(n,tick)

n es un entero positivo o una expresión que se evalúa a un valor entero positivo.

Devuelve true cada n-ésima vez que el gráfico se activa desde que el estado asociado se convirtió en activo. De lo contrario, el operador devuelve false.

El evento implícito tick no está admitido cuando un gráfico de Stateflow de un modelo de Simulink cuenta con eventos de entrada. Para obtener más información, consulte Controlar el comportamiento del gráfico con eventos implícitos.

Realiza una transición de salida del estado asociado cada séptimo evento tick desde que el estado se convirtió en activo, pero solo si la variable temp es mayor que 98,6.

every(7,tick)[temp > 98.6]

every(n,sec)

n es un número real positivo o una expresión que se evalúa a un valor entero positivo.

Devuelve true cada n segundos desde que el estado asociado se convirtió en activo. De lo contrario, el operador devuelve false.

El uso de every como operador de lógica temporal en tiempo absoluto solo se admite en gráficos independientes en MATLAB. El operador crea un objeto timer de MATLAB que genera un evento implícito para activar el gráfico. Los objetos timer de MATLAB están limitados a una precisión de 1 milisegundo. Para obtener más información, consulte Events in Standalone Charts.

Se aumenta la variable temp en 5 cada 12,3 segundos que el estado está activo.

on every(12.3,sec): temp = temp+5;
temporalCount

temporalCount(E)

E es el evento base del operador.

Devuelve el número de ocurrencias del evento E desde que el estado asociado se convirtió en activo.

El uso de temporalCount como operador de lógica temporal basado en eventos solo se admite en gráficos de Stateflow de modelos de Simulink.

Acceda a los elementos sucesivos del arreglo M cada vez que el gráfico procese una transmisión del evento E.

on E: y = M(temporalCount(E));
temporalCount(tick)

Devuelve el número de veces que el gráfico se ha activado desde que el estado asociado se convirtió en activo.

El evento implícito tick no está admitido cuando un gráfico de Stateflow de un modelo de Simulink cuenta con eventos de entrada.

El uso de temporalCount como operador de lógica temporal basado en eventos solo se admite en gráficos de Stateflow de modelos de Simulink.

Guarde el valor de los datos de entrada u en elementos sucesivos del arreglo M.

en,du:
   M(temporalCount(tick)+1) = u;

temporalCount(sec)

temporalCount(msec)

temporalCount(usec)

Devuelve el tiempo transcurrido desde que el estado asociado se convirtió en activo.

Especifique el tiempo en segundos (sec), milisegundos (msec) o microsegundos (usec).

Guarde el número de milisegundos desde que el estado se convirtió en activo.

en,du:
   y = temporalCount(msec);
elapsed

elapsed(sec)

Devuelve el tiempo transcurrido desde que el estado asociado se convirtió en activo.

Equivale a temporalCount(sec).

Guarde el número de segundos desde que el estado se convirtió en activo.

en,du:
   y = elapsed(sec);
etUna forma alternativa de ejecutar elapsed(sec).

Cuando el gráfico procese una transmisión del evento E, realice la transición de salida del estado asociado y muestre el tiempo transcurrido desde que el estado se convirtió en activo.

E{disp(et);}
count

count(C)

C es una expresión que se evalúa como true o false.

Devuelve el número de veces que el gráfico se ha activado desde que la expresión condicional C se convirtió en true y el estado asociado se convirtió en activo.

El gráfico de Stateflow restablece el valor del operador count si la expresión condicional C se convierte en false o si el estado asociado se convierte en inactivo.

En los gráficos de un modelo de Simulink, el valor de count puede depender del tamaño del paso. Cambiar el solver o el tamaño del paso del modelo afecta a los resultados producidos por el operador count.

Realice la transición de salida del estado asociado cuando la variable x ha sido mayor o igual a 2 durante más de cinco ejecuciones del gráfico.

[count(x>=2) > 5]

Guarde el número de ejecuciones del gráfico desde que la variable x se volvió mayor que 5.

en,du:
   y = count(x>5);
duration

duration(C)

duration(C,sec)

duration(C,msec)

duration(C,usec)

  • C es una expresión que se evalúa como true o false.

Devuelve el tiempo transcurrido desde que la expresión condicional C se convirtió en true y el estado asociado se convirtió en activo.

Especifique el tiempo en segundos (sec), milisegundos (msec) o microsegundos (usec). La unidad predeterminada se mide en segundos.

El gráfico de Stateflow restablece el valor del operador duration si la expresión condicional C se convierte en false o si el estado asociado se convierte en inactivo.

El operador de lógica temporal duration no admite gráficos independientes en MATLAB.

Realice la transición de salida del estado en el que la variable x ha sido mayor que o igual a 0 durante más de 0,1 segundos.

[duration(x>=0) > 0.1]

Guarde el número de milisegundos desde que la variable x se convirtió en mayor que 5 y el estado se convirtió en activo.

en,du:
   y = duration(x>5,msec);

Puede encerrar entre comillas las palabras clave 'tick', 'sec', 'msec' y 'usec'. Por ejemplo, after(5,'tick') equivale a after(5,tick).

Nota

Los operadores de lógica temporal after, at, before y every comparan el umbral n con un contador interno de tipo entero. Si n es un número de punto fijo definido por una pendiente que no es una potencia entera de dos o un sesgo distinto de cero, la comparación puede dar resultados inesperados debido al redondeo. Para obtener más información, consulte Relational Operations for Fixed-Point Data.

Ejemplos de lógica temporal

Definir retardos de tiempo

Este ejemplo muestra cómo definir dos retardos de tiempo absoluto en un gráfico de tiempo continuo.

La ejecución del gráfico sigue estos pasos:

  1. Cuando el gráfico se activa, el estado Input se activa primero.

  2. Pasados 5,33 milisegundos de tiempo de simulación, se produce la transición de Input a Output.

  3. El estado Input se convierte en inactivo y el estado Output se convierte en activo.

  4. Pasados 10,5 segundos de tiempo de simulación, se produce la transición de Output a Input.

  5. El estado Output se convierte en inactivo y el estado Input se convierte en activo.

Los pasos 2 a 5 se repiten hasta que la simulación termina.

Si un gráfico tiene un tiempo de muestreo discreto, cualquier acción en el gráfico ocurre en múltiplos enteros de este tiempo de muestreo. Por ejemplo, si el solver de Simulink® utiliza un paso fijo de 0,1 segundos, la primera transición del estado Input al estado Output se produce en t = 0,1 segundos. Este comportamiento se debe a que el solver no activa el gráfico exactamente a t = 5,33 milisegundos. En su lugar, el solver activa el gráfico en múltiplos enteros de 0,1 segundos, como t = 0,0 y 0,1 segundos.

Detectar el tiempo transcurrido

En este ejemplo, un bloque Step (Simulink) proporciona una entrada de paso de unidad a un gráfico de Stateflow.

El gráfico determina cuándo la entrada u es igual a 1:

  • Si la entrada es igual a 1 antes de que t = 2 segundos, se produce una transición de Start a Fast.

  • Si la entrada es igual a 1 antes de que t = 2 segundos y t = 5 segundos, se produce una transición de Start a Medium.

  • Si la entrada es igual a 1 antes de que t = 5 segundos, se produce una transición de Start a Slow.

Usar lógica temporal en tiempo absoluto en un subsistema activado

Puede utilizar lógica temporal en tiempo absoluto en un gráfico que reside en un subsistema de ejecución condicional. Cuando se desactiva el subsistema, el gráfico queda inactivo y el operador de lógica temporal se detiene mientras el gráfico está desactivado. El operador no sigue contando el tiempo de simulación hasta que el subsistema y el gráfico se activan de nuevo.

Este modelo tiene habilitado un subsistema con el parámetro States when enabling (Estados al habilitar) establecido en held.

El subsistema contiene un gráfico que utiliza el operador after para activar una transición.

El bloque Signal Editor (Simulink) proporciona una señal de entrada con estas características:

  • La señal activa el subsistema en t = 0.

  • La señal desactiva el subsistema en t = 2.

  • La señal vuelve a activar el subsistema en t = 6.

Este gráfico muestra el tiempo total transcurrido en el gráfico. Cuando la señal de entrada activa el subsistema en la unidad de tiempo t = 0, el estado A se activa. Mientras el sistema está activado, el tiempo transcurrido aumenta. Cuando el subsistema se desactiva en t = 2, el gráfico entra en reposo y el tiempo transcurrido deja de aumentar. Cuando 2 <t <6, el tiempo transcurrido permanece en 2 segundos porque el sistema está desactivado. Cuando el gráfico se vuelve a activar en t = 6, el tiempo transcurrido vuelve a aumentar.

La transición del estado A al estado B depende del tiempo transcurrido mientras el estado A está activo, no del tiempo de simulación. Por lo tanto, la transición se produce en t = 9, cuando el tiempo transcurrido en el estado A es igual a 5 segundos. Cuando se produce la transición, el valor de salida y cambia de 0 a 1.

Este comportamiento del modelo solo se aplica a los subsistemas en los que se configura el parámetro de bloque Enable States when enabling en held. Si se establece el parámetro en reset, el gráfico se reinicia completamente cuando se vuelve a activar el subsistema. Las transiciones predeterminadas se ejecutan y los contadores de lógica temporal se restablece en 0.

Notación para la lógica temporal basada en eventos en las transiciones

En los gráficos de Stateflow de los modelos de Simulink, los operadores after, at y before admiten dos notaciones distintas para expresar la lógica temporal basada en eventos en una transición.

  • La notación de activación define una transición que solo depende del evento base para el operador de lógica temporal. La notación de activación sigue esta sintaxis:

    temporalLogicOperator(n,E)[C]
    donde:

    • temporalLogicOperator es un operador de lógica temporal booleano.

    • n es el recuento de ocurrencias del operador.

    • E es el evento base del operador.

    • C es una expresión de condición opcional.

    Cuando se utiliza la notación de activación, la transición solo puede ocurrir cuando el gráfico procesa una transmisión del evento base E.

  • La notación condicional define una transición que depende de eventos base y no base. La notación condicional sigue esta sintaxis:

    F[temporalLogicOperator(n,E) && C]
    donde:

    • temporalLogicOperator es un operador de lógica temporal booleano.

    • n es el recuento de ocurrencias del operador.

    • E es el evento base del operador.

    • F es un evento no base opcional.

    • C es una expresión de condición opcional.

    Cuando se utiliza la notación condicional con un evento no base F, la transición solo puede ocurrir cuando el gráfico procesa una transmisión de F. Si se omite el evento no base, la transición puede ocurrir cuando el gráfico está procesando cualquier evento explícito o implícito.

    La notación condicional para operadores de lógica temporal no se admite con gráficos independientes en MATLAB.

Por ejemplo, esta etiqueta de transición utiliza la notación de activación para indicar una transición de salida del estado asociado cuando el gráfico procesa una transmisión del evento base E a partir de la quinta transmisión de E y después de que el estado se convirtió en activo.

after(5,E)

En cambio, esta etiqueta de transición utiliza una notación condicional para indicar una transición de salida del estado asociado cuando el estado se ha activado durante al menos cinco transmisiones del evento base E, incluso si el gráfico no está procesando una transmisión de E.

[after(5,E)]

Nota

El operador every admite notaciones de activación y condicionales. Sin embargo, ambas notaciones son equivalentes para este operador. Las etiquetas de transición every(5,E) y [every(5,E)] indican una transición de salida del estado asociado cuando el gráfico procesa la k-ésima transmisión del evento base E después de que el estado se convirtió en activo, donde k es un múltiplo de cinco.

Prácticas recomendadas para la lógica temporal

No utilice la lógica temporal en las rutas de transición sin un estado de origen

El valor de un operador de lógica temporal depende del momento en el que el estado asociado se convirtió en activo. Para asegurarse de que cada operador de lógica temporal tiene un único estado asociado, utilice solo estos operadores en:

  • Acciones de estado on

  • Acciones en rutas de transición que se originan en un estado

No utilice operadores de lógica temporal en transiciones predeterminadas o en transiciones en funciones gráficas, porque no se originan en un estado.

Utilice la lógica temporal en tiempo absoluto en lugar de tick en los gráficos de modelos de Simulink

En los gráficos de un modelo de Simulink, el valor de las expresiones de retardo que utilizan la lógica temporal en tiempo absoluto son semánticamente independientes del tiempo de muestreo del modelo. En cambio, las expresiones de retardo que utilizan la lógica temporal basada en el evento implícito tick dependen del tamaño de paso que utiliza el solver de Simulink.

Además, la lógica temporal en tiempo absoluto es compatible con los gráficos que tienen eventos de entrada. El evento implícito tick no está admitido cuando un gráfico de Stateflow de un modelo de Simulink cuenta con eventos de entrada.

No utilice at para la lógica temporal en tiempo absoluto en los gráficos de modelos de Simulink

En los gráficos de un modelo de Simulink, no se admite el uso de at como operador de lógica temporal en tiempo absoluto. En su lugar, utilice el operador after. Por ejemplo, supongamos que queremos definir un retardo temporal usando la expresión at(5.33,sec).

Chart with a transition that uses at as an absolute-time temporal logic operator.

Para evitar un error en tiempo de ejecución, cambie la etiqueta de transición a after(5.33,sec).

Chart with a transition that uses after as an absolute-time temporal logic operator.

Resultados inesperados con grandes valores de parámetros

Una condición de lógica temporal de tiempo absoluto de Stateflow, como after(x,sec), podría no ser evaluada como true en el momento esperado después de acceder a un estado con las siguientes condiciones:

  • El gráfico tiene un tiempo de muestreo discreto periódico.

  • La lógica del gráfico hace que el estado permanezca activo durante más de 2147418 unidades de tiempo. Las unidades de tiempo son las más pequeñas de cualquier expresión de lógica temporal utilizada por ese estado. Por ejemplo, si el estado tiene dos transiciones salientes, una que utiliza after(x,sec) y otra que utiliza after(x,msec), las unidades de tiempo son msec (milliseconds).

Normalmente, los resultados inesperados se producen cuando la duración del estado es superior a 2147418 unidades de tiempo. Sin embargo, esto puede cambiar en función del tiempo de muestreo del gráfico.

No utilice every para la lógica temporal en tiempo absoluto en los gráficos de modelos de Simulink

En los gráficos de un modelo de Simulink, no se admite el uso de every como operador de lógica temporal en tiempo absoluto. En su lugar, puede utilizar una transición de autobucle externa con el operador after. Por ejemplo, supongamos que se desea imprimir un mensaje de estado para un estado activo cada 2,5 segundos durante la ejecución del gráfico.

Chart with a state action that uses every as an absolute-time temporal logic operator.

Para evitar un error en tiempo de ejecución, sustituya la acción de estado por una transición de autobucle externa.

Chart with a self-loop transition that uses after as an absolute-time temporal logic operator.

Añada una intersección histórica en el estado para que el gráfico recuerde los ajustes de estado antes de cada transición de autobucle. Consulte Reanudar la actividad de un subestado previo con intersecciones históricas.

No utilice la lógica temporal en las rutas de transición con múltiples orígenes en los gráficos independientes de MATLAB

Los gráficos independientes de MATLAB no admiten el uso de operadores de lógica temporal en rutas de transición que tienen más de un estado de origen. Por ejemplo, este gráfico independiente produce un error en tiempo de ejecución porque la expresión de lógica temporal after(10,sec) activa una ruta de transición que tiene más de un estado de origen.

Standalone chart containing a temporal logic expression on the transition path originating from states Positive and Negative to state End.

Para resolver el problema, utilice expresiones de lógica temporal en rutas de transición separadas, cada una con un único estado de origen.

Standalone chart using temporal logic expressions on separate transition paths.

Evite mezclar la lógica temporal en tiempo absoluto y las condiciones en las rutas de transición de los gráficos independientes de MATLAB

En los gráficos independientes de MATLAB, los operadores after, at y every crean objetos timer de MATLAB que generan eventos implícitos para activar el gráfico. La combinación de estos operadores con condiciones en la misma ruta de transición puede dar lugar a un comportamiento no deseado:

  • Si una condición de la ruta de transición es falsa cuando el timer activa el gráfico, este realiza las acciones during y on del estado activo.

  • El gráfico no restablece el objeto timer asociado a los operadores after y at. Si la condición en la ruta de transición se vuelve verdadera en un momento posterior, la transición no tiene lugar hasta que otro evento explícito o implícito activa el gráfico.

Por ejemplo, en este gráfico, la ruta de transición del estado A al estado B combina el activador de lógica temporal en tiempo absoluto after(1,sec) y la condición [guard]. La transición del estado A al estado C tiene un activador de lógica temporal en tiempo absoluto after(5,sec). Cada transición está asociada a un objeto timer que genera un evento implícito. Inicialmente, la variable local guard es false.

Chart combining an absolute-time temporal logic trigger and a condition on the same transition path.

Cuando ejecuta el gráfico, el estado A se activa. El gráfico realiza la acción entry y muestra el mensaje Hello!. Al cabo de 1 segundo, el timer asociado a la transición de A a B activa el gráfico. Como la transición no es válida, el gráfico ejecuta la acción during en el estado A y muestra el mensaje Hello! por segunda vez.

Supongamos que, al cabo de 2 segundos, el gráfico recibe el evento de entrada E. El gráfico ejecuta la acción on en el estado A y cambia el valor guard a true. Dado que el gráfico no restablece el timer asociado al operador after, la transición de A a B no se produce hasta que otro evento activa el gráfico.

Al cabo de 5 segundos, el timer asociado a la transición de A a C activa el gráfico. Como la transición de A a B es válida y tiene un orden de ejecución superior, el gráfico no realiza la transición al estado C ni muestra el mensaje Farewell!. En cambio, el estado B se activa y el gráfico muestra el mensaje Good bye!.

Utilice gráficos con tiempos de muestreo discretos para generar códigos de forma más eficiente

El código generado para los gráficos discretos que no están dentro de un subsistema activado o habilitado utiliza contadores enteros para realizar un seguimiento del tiempo proporcionado por Simulink. Este comportamiento permite generar código de forma más eficiente en términos de sobrecarga y memoria, y permite usarlo en los modos de simulación software-in-the-loop (SIL) y processor-in-the-loop (PIL). Para obtener más información, consulte SIL and PIL Simulations (Embedded Coder).

Consulte también

| | | | | | | | | (Simulink) | (Simulink)

Temas relacionados