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.
Tipo | Descripción |
---|---|
Evento de entrada | Evento 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 local | Evento 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 salida | Evento 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ía | Visibilidad |
---|---|
Gráfico | El evento local es visible para el gráfico y todos sus estados y subestados. |
Subgráfico | El evento local es visible para el subgráfico y todos sus estados y subestados. |
Estado | El 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
En la pestaña Modeling, en Design Data, seleccione Symbols Pane.
Haga clic en el icono Create Event .
En la fila del evento nuevo, en Type, haga clic en el icono y seleccione:
Input Event
Local Event
Output 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 Explore. Para obtener más información, consulte Set Properties for an Event.
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 Set Properties for an Event.
Añadir eventos con Model Explorer
En la pestaña Modeling, en Design Data, seleccione Model Explorer.
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.
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.
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.