Sincronizar los componentes del modelo con el uso de eventos
Un evento es un objeto de Stateflow® que puede activar acciones en:
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
No hay límite en el número de eventos que puede contener un gráfico de Stateflow. Sin embargo, para la generación de código, el compilador de C subyacente aplica un límite 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 ser de uno de estos tipos.
| Tipo | Descripción |
|---|---|
| Evento de entrada | Un evento que se transmite a un gráfico de Stateflow desde fuera del gráfico. Para obtener más información, consulte Activar gráficos de Stateflow enviando eventos de entrada y Diseñar una lógica de interfaz persona-máquina utilizando gráficos de Stateflow. |
| Evento local | Un evento que puede producirse en cualquier parte de un gráfico de Stateflow, pero solo es visible en el objeto principal y sus descendientes. Para obtener más información, consulte Broadcast Local Events to Synchronize Parallel States. |
| Evento de salida | Un evento que se produce en un gráfico de Stateflow, pero se transmite a un bloque de Simulink. 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ía | Visibilidad |
|---|---|
| Gráfico | El evento local es visible para el gráfico y sus estados y subestados. |
| Subgráfico | El evento local es visible para el subgráfico y sus estados y subestados. |
| Estado | El evento local es visible para el estado y sus subestados. |
Definir eventos en un gráfico
Puede añadir eventos a un gráfico de Stateflow con el panel Symbols o el menú de Stateflow Editor.
Añadir eventos con el panel Symbols
En la pestaña Modeling, en Design Data, haga clic en Symbols Pane.
Haga clic en el icono de crear evento
.En la fila del evento nuevo, en Type, haga clic en el icono y seleccione:
Input EventLocal EventOutput Event
Edite el nombre del evento.
En cuanto a los eventos de entrada y de salida, haga clic en el campo Port y seleccione un número de puerto.
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 Inspect. Para obtener más información, consulte Establecer las propiedades de un evento.
Añadir eventos con el menú del editor de Stateflow
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.
Tipo Opción del menú Evento de entrada En la pestaña Modeling, en Design Data, haga clic en Event Input. Evento de salida En la pestaña Modeling, en Design Data, haga clic en Event Output. Evento local En la pestaña Modeling, en Design Data, haga clic en Local Event. En el cuadro de diálogo del evento, especifique las propiedades de los datos. Para obtener más información, consulte Establecer las propiedades de un evento.
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 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
Siga estas prácticas recomendadas cuando utilice eventos en gráficos.
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);}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 combinar eventos de entrada activados por flancos y de llamada a funciones en un mismo gráfico
Combinar eventos de entrada que utilizan activadores por flanco y llamadas a función da lugar a un error en tiempo de compilación.