Main Content

Ver las diferencias entre los mensajes, eventos y datos de Stateflow

En este ejemplo se compara el comportamiento de los mensajes, eventos y datos en Stateflow®.

Gráficos emisores

Este modelo tiene tres gráficos emisores: DataSender, EventSender y MessageSender. Cada gráfico emisor tiene un estado. En la acción de entrada del estado, los gráficos asignan un valor a los datos, envían un evento de llamada a función o envían un mensaje.

Gráficos receptores

Cada uno de los gráficos emisores tiene un gráfico receptor correspondiente. Cada gráfico receptor tiene un diagrama de estados con los estados A0, A1, A2 y A3. El evento implícito after(3,sec) activa la transición de A0 a A1. Los datos, el evento o el mensaje del gráfico emisor correspondiente vigila las transiciones entre A1, A2 y A3.

Salida del ámbito

Cada gráfico receptor tiene una salida de estado activa habilitada y conectada con un ámbito. El ámbito muestra qué estados están activos en cada unidad de tiempo. Esta salida resalta la diferencia en el comportamiento entre datos de salida, eventos y mensajes.

Comportamiento de los datos

El gráfico DataSender asigna un valor de 1 a los datos de salida M, que se conectan como entrada al gráfico DataReceiver.

El gráfico DataReceiver solo se ejecuta una vez en cada unidad de tiempo. Al comienzo de la simulación, el estado A0 está activo. En la unidad de tiempo t=3, se produce la transición de A0 a A1. En la unidad de tiempo t=4, el gráfico comprueba si M es igual a 1. Esta condición es verdadera, por lo que el gráfico realiza la transición de A1 a A2. En la unidad de tiempo t=5, M todavía es igual a 1, por lo que el gráfico realiza la transición de A2 a A3. En el ámbito, puede ver que DataReceiver cambia de estado tres veces.

Una vez que se asigna un valor a los datos, se mantienen durante toda la simulación. De esta manera, cada vez que DataReceiver evalúa la condición [M == 1], realiza la transición a un nuevo estado.

Comportamiento del evento

El gráfico EventSender utiliza el comando send(M) para enviar un evento de salida de llamada a función para activar el gráfico EventReceiver.

El gráfico EventReceiver solo se ejecuta cuando el evento de entrada M activa el gráfico. Al comienzo de la simulación, el estado A0 está activo. La transición de A0 a A1 se basa en lógica temporal de tiempo absoluto y no es válida en la unidad de tiempo t=0. A0 permanece activo y el gráfico vuelve a su estado de inactividad. Dado que EventSender envía el evento M tan solo una vez, EventReceiver no vuelve a activarse. En el ámbito, puede ver que EventReceiver nunca sale de A0.

Los eventos no se mantienen válidos en diferentes unidades de tiempo, por lo que el gráfico receptor solo tiene una oportunidad para responder al evento. Cuando EventSender envía el evento, EventReceiver no está preparado para responderlo. EventReceiver pierde la oportunidad de hacer la transición en respuesta al evento.

Comportamiento del mensaje

El gráfico MessageSender utiliza la sintaxis send(M) para enviar un mensaje a través del puerto de mensajes de salida. El mensaje pasa a la cola de mensajes de entrada del gráfico MessageReceiver. El mensaje espera en la cola hasta que MessageReceiver lo evalúa.

El gráfico MessageReceiver solo se ejecuta una vez en cada unidad de tiempo. Al comienzo de la simulación, el estado A0 está activo. En la unidad de tiempo t=3, se produce la transición de A0 a A1. En la unidad de tiempo t=4, el gráfico determina que M está presente en la cola, así que realiza la transición a A2. Al finalizar la unidad de tiempo, el gráfico elimina M de la cola. En la unidad de tiempo t=5, no hay ningún mensaje presente en la cola, por lo que el gráfico no realiza la transición a A3. A2 permanece en el estado activo. En el ámbito, puede ver que MessageReceiver cambia de estado solo dos veces.

A diferencia de los eventos, los mensajes se ponen en la cola. El gráfico receptor puede decidir responder un mensaje en cualquier momento posterior a su envío. A diferencia de los datos, el mensaje no sigue siendo válido de forma indefinida. El mensaje se destruye al final de la unidad de tiempo.

Temas relacionados