Main Content

Sincronizar los componentes del modelo con la transmisión de eventos

Un evento es un objeto de Stateflow® que puede activar acciones en uno de estos objetos:

  • Un estado paralelo en un gráfico de Stateflow

  • Otro gráfico de Stateflow

  • Un subsistema activado por Simulink® o de llamada a función

A efectos de simulación, no hay límite en el número de eventos en un gráfico de Stateflow. Sin embargo, para la generación de código, el compilador de C subyacente aplica un límite teórico de 231-1 eventos.

Tipos de eventos

Un evento implícito es un evento integrado que se transmite durante la ejecución del gráfico. Estos eventos son implícitos porque no se definen ni se activan explícitamente. Para obtener más información, consulte Controlar el comportamiento del gráfico con eventos implícitos.

Un evento explícito es un evento que se define explícitamente. Los eventos explícitos pueden tener uno de estos tipos.

TipoDescripción
Evento de entradaEvento que se transmite a un gráfico de Stateflow desde fuera del gráfico. Para obtener más información, consulte Activar un gráfico de Stateflow enviando eventos de entrada y Diseñar una lógica de interfaz humano-máquina utilizando gráficos de Stateflow.
Evento localEvento que puede producirse en cualquier parte de un gráfico de Stateflow, pero solo es visible en el objeto principal y sus descendientes. Los eventos locales no se admiten en gráficos independientes de Stateflow en MATLAB®. Para obtener más información, consulte Broadcast Local Events to Synchronize Parallel States.
Evento de salidaEvento que se produce en un gráfico de Stateflow, pero se transmite a un bloque de Simulink. Los eventos de salida no se admiten en gráficos independientes de Stateflow en MATLAB. Para obtener más información, consulte Activate a Simulink Block by Sending Output Events.

Puede definir eventos locales en estos niveles de la jerarquía de Stateflow.

Nivel de jerarquíaVisibilidad
GráficoEl evento local es visible para el gráfico y todos sus estados y subestados.
SubgráficoEl evento local es visible para el subgráfico y todos sus estados y subestados.
EstadoEl evento local es visible para el estado y todos sus subestados.

Definir eventos en un gráfico

Puede añadir eventos a un gráfico de Stateflow con el panel Symbols, el menú del editor de Stateflow o Model Explorer.

Añadir eventos con el panel Symbols

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

  2. Haga clic en el icono Create Event .

  3. En la fila del evento nuevo, en Type, haga clic en el icono y seleccione:

    • Input Event

    • Local Event

    • Output Event

  4. Edite el nombre del evento.

  5. En cuanto a los eventos de entrada y de salida, haga clic en el campo Port y seleccione un número de puerto.

  6. Para especificar las propiedades del evento, abra Property Inspector. En el panel Symbols, haga clic con el botón secundario en la fila del evento y seleccione Explore. Para obtener más información, consulte Set Properties for an Event.

Añadir eventos con el menú del editor de Stateflow

  1. En un gráfico de Stateflow de un modelo de Simulink, seleccione la opción del menú que corresponda al tipo del evento que desea añadir.

    TipoOpción del menú
    Evento de entradaEn la pestaña Modeling, en Design Data, haga clic en Event Input.
    Evento de salidaEn la pestaña Modeling, en Design Data, haga clic en Event Output.
    Evento localEn la pestaña Modeling, en Design Data, haga clic en Local Event.

  2. En el cuadro de diálogo del evento, especifique las propiedades de los datos. Para obtener más información, consulte Set Properties for an Event.

Añadir eventos con Model Explorer

  1. En la pestaña Modeling, en Design Data, seleccione Model Explorer.

  2. En el panel Model Hierarchy, seleccione el objeto de la jerarquía de Stateflow donde desea que el evento nuevo sea visible. El objeto que seleccione se convertirá en el elemento principal del evento nuevo.

  3. En el menú de Model Explorer, seleccione Add > Event. El evento nuevo con una definición predeterminada aparece en el panel Contents de Model Explorer.

  4. En el panel Event, especifique las propiedades del evento. Para obtener más información, consulte Set Properties for an Event.

Acceder a la información de eventos desde un gráfico de Stateflow

Puede visualizar las propiedades de un evento de entrada o local, o bien abrir el destino de un evento de salida directamente desde un gráfico de Stateflow. Haga clic con el botón secundario en el estado o la transición que contiene el evento de interés y seleccione Explore. Un menú contextual enumera los nombres y los ámbitos de todos los símbolos resueltos de ese estado o transición. Cuando selecciona un evento de entrada o local en el menú contextual se muestran sus propiedades en Model Explorer. Al seleccionar un evento de salida del menú contextual se abre el subsistema de Simulink o el gráfico de Stateflow asociados con dicho evento.

Prácticas recomendadas para utilizar eventos en gráficos de Stateflow

Utilizar el comando send para transmitir eventos explícitos en las acciones

Para transmitir eventos locales o de salida en acciones de estado o de transición, utilice el operador send. Para transmitir , por ejemplo, un evento de salida cuando una transición es válida, evite utilizar el nombre del evento como acción de condición.

{output_event;}

En su lugar, llame al operador send.

{send(output_event);}

Aunque ambas acciones son válidas, el uso del operador send mejora la legibilidad de un gráfico y garantiza que los eventos explícitos no se confundan con los datos.

Evitar el uso de eventos explícitos para activar acciones condicionales

Utilice condiciones en las transiciones en lugar de eventos cuando desee:

  • Representar instrucciones condicionales; por ejemplo, [x < 1] o [x == 0].

  • Representar un cambio de valor de los datos; por ejemplo, [hasChanged(x)].

Evitar utilizar el evento implícito enter para comprobar la actividad de los estados

Para comprobar la actividad de los estados, utilice el operador in en lugar del evento implícito enter. Para obtener más información, consulte Check State Activity by Using the in Operator.

No mezclar eventos de entrada activados por flancos y de llamada a funciones en un mismo gráfico

Mezclar eventos de entrada que utilizan activadores de flancos y llamadas a funciones da lugar a un error en tiempo de compilación.

Consulte también

| |

Temas relacionados