Main Content

Sincronizar estados paralelos transmitiendo eventos

Los eventos locales permiten coordinar estados paralelos permitiendo a un estado activar una transición o una acción en otro estado en el mismo gráfico de Stateflow®. Para transmitir un evento de un estado a otro estado, use el operador send con el nombre del evento y el nombre del estado activo:

send(eventName,stateName)

Cuando se transmite un evento, el evento tiene efecto en el estado receptor y en cualquier subestado de la jerarquía de ese estado.

Modelar un sistema de seguridad residencial

Este ejemplo utiliza eventos locales como parte del diseño de un sistema de seguridad residencial.

El sistema de seguridad consta de una alarma y tres sensores a prueba de intrusiones: un sensor de puerta, un sensor de ventana y un detector de movimiento. Una vez que el sistema detecta una intrusión, dispone de un tiempo determinado para desactivar la alarma. De lo contrario, el sistema llama a la policía.

El gráfico modela cada sensor utilizando uno de estos estados paralelos:

  • El estado paralelo Door modela el sensor de puerta. La señal de entrada D_mode selecciona entre los modos Active y Disabled para este sensor. Cuando el sensor está activo, la señal de entrada Door_sens indica una posible intrusión.

  • El estado paralelo Win modela el sensor de ventana. La señal de entrada W_mode selecciona entre los modos Active y Disabled para este sensor. Cuando el sensor está activo, la señal de entrada Win_sens indica una posible intrusión.

  • El estado paralelo Motion modela el detector de movimiento. La señal de entrada M_mode selecciona entre los modos Active y Disabled para este sensor. Cuando el sensor está activo, la señal de entrada Mot_sens indica una posible intrusión.

Para mitigar el efecto de falsos positivos, el detector de movimiento incorpora un diseño para eliminar rebotes, de modo que solo una señal de activación positiva continua genera una alerta. Por el contrario, los sensores de puerta y de ventana interpretan una única señal de activación positiva como una intrusión y generan una alerta inmediata.

Otro estado paralelo denominado Alarm modela los modos de funcionamiento del sistema de alarma. La señal de entrada Alarm_active selecciona entre los modos On y Off para la alarma. Si un sensor detecta una intrusión mientras el subsistema de la alarma está encendido, el sensor transmite el evento local Alert al estado Alarm. En el subestado On del estado Alarm, el evento activa la transición del subestado Idle al subestado Pending. Cuando se activa Pending, un sonido de advertencia alerta a los ocupantes de la posible intrusión. En el caso de una alarma accidental, los ocupantes disponen de un tiempo breve para desactivar el sistema de seguridad. Si no se desactiva en ese espacio de tiempo, el sistema llama a la policía antes de volver al modo Idle.

Coordinar con otros bloques de Simulink

Los gráficos de Stateflow también pueden utilizar eventos para comunicarse con otros bloques de un modelo de Simulink®.

Eventos de salida

Un evento de salida es un evento que se produce en un gráfico de Stateflow, pero que es visible en bloques de Simulink fuera del gráfico. Este tipo de eventos permite que un gráfico envíe una notificación a otros bloques de un modelo sobre los eventos que se producen en el gráfico. En este caso, por ejemplo, los eventos de salida Sound y call_police accionan bloques externos que manejan el sonido de advertencia y la llamada a la policía. El gráfico transmite estos eventos cuando el evento local Alert activa la transición al subestado Pending del estado Alarm. Concretamente, en el subestado Pending, la acción de entrada transmite el evento Sound. De forma similar, la acción de condición en la transición de Pending a Idle transmite el evento call_police. En cada caso, la acción que transmite el evento de salida usa el operador send con el nombre del evento:

send(eventName)

Cada evento de salida se asigna a un puerto de salida del gráfico. En función de la configuración, la señal correspondiente puede controlar un subsistema Triggered o un subsistema Function-Call. Para configurar un evento de salida:

  1. En la pestaña Modeling, en Design Data, seleccione Symbols Pane y Property Inspector.

  2. En el panel Symbols, seleccione el evento de salida.

  3. En Property Inspector, establezca Trigger en una de estas opciones:

  • Either edge: la transmisión del evento de salida hace que la señal saliente alterne entre cero y uno.

  • Function call: la transmisión del evento de salida provoca un evento de llamada a función de Simulink.

En este ejemplo, los eventos de salida usan activadores de flancos para activar un par de subsistemas de retención en el modelo de Simulink. Cuando cada retención detecta un cambio de valor en su señal de entrada, genera brevemente el valor 1 antes de volver a cero.

Eventos de entrada

Un evento de entrada es un evento que se produce en un bloque de Simulink, pero que es visible en un gráfico de Stateflow. Este tipo de eventos permite que otros bloques de Simulink, incluidos otros gráficos de Stateflow, envíen una notificación a un gráfico concreto de los eventos que se producen fuera de él. En este caso, por ejemplo, el evento de entrada sl_call controla el tiempo del eliminador de rebotes del detector de movimiento y el breve retardo antes de la llamada a la policía. En cada caso, el evento se produce dentro de una llamada al operador temporal after, que activa una transición después de que el gráfico recibe el evento varias veces.

Un bloque de Simulink externo envía un evento de entrada a través de una señal conectada con el puerto de activación en el gráfico de Stateflow. En función de la configuración, se produce un evento de entrada a partir de un cambio en el valor de señal o a través de una llamada a función de un bloque de Simulink. Para configurar un evento de entrada:

  1. En la pestaña Modeling, en Design Data, seleccione Symbols Pane y Property Inspector.

  2. En el panel Symbols, seleccione el evento de entrada.

  3. En Property Inspector, establezca Trigger en una de estas opciones:

  • Rising: el gráfico se activa cuando la señal de entrada pasa de cero o un valor negativo a un valor positivo.

  • Falling: el gráfico se activa cuando la señal de entrada pasa de un valor positivo a cero o un valor negativo.

  • Either: el gráfico se activa cuando la señal de entrada cambia de dirección y cruza cero.

  • Llamada a Function: el gráfico se activa con una llamada a función desde un bloque de Simulink.

En este ejemplo, un bloque Function-Call Generator de Simulink controla los tiempos del sistema de seguridad activando el evento de entrada sl_call a través de llamadas a función periódicas.

Explorar el ejemplo

En este ejemplo, el gráfico de Stateflow tiene entradas desde varios bloques Manual Switch y salidas a un par de subsistemas de retención que se conectan a bloques Display. Durante la simulación, puede hacer lo siguiente:

  • Activar los subsistemas de la alarma y el sensor y activar detección de intrusos haciendo clic en los bloques Switch.

  • Ver cómo la animación del gráfico resalta los distintos estados activos en el gráfico.

  • Ver las señales de salida en el bloque Scope y en Simulation Data Inspector.

Por ejemplo, suponga que se activan los subsistemas de la alarma y el sensor, desactivan los activadores del sensor y se inicia la simulación. Durante la simulación, se realizan estas acciones:

  1. En la unidad de tiempo $t = 250$ segundos, se activa el sensor de puerta. La alarma comienza a sonar (Sound = 1), por consiguiente, se desactiva inmediatamente el sistema de alarma. Se activa el activador del sensor de la puerta y se vuelve a activar la alarma.

  2. En la unidad de tiempo $t = 520$ segundos, se activa el sensor de la ventana y la alarma comienza a sonar (Sound = 0). Esta vez, no se desactiva la alarma. En la unidad de tiempo aproximada $t = 600$, el sistema de seguridad llama a la policía (call_police = 1). Las señales Sound y call_police continúan alternando entre cero y uno cada 80 segundos.

  3. En la unidad de tiempo $t = 1400$ segundos, se desactiva la alarma. Las señales Sound y call_police dejan de alternarse.

Simulation Data Inspector muestra la respuesta de las señales Sound y call_police ante estas acciones.

Consulte también

Temas relacionados