Contenido principal

Ejecutar estados en paralelo

Puede establecer que un gráfico de Stateflow® active cada estado de un nivel de jerarquía en el mismo paso utilizando la descomposición paralela. Puede usar eventos para permitir que un estado active un comportamiento en otro estado.

Cuando un gráfico o estado que utiliza descomposición paralela se activa, los elementos secundarios directos del gráfico o estado también se activan. Los elementos secundarios, que se denominan estados paralelos, aparecen en el área de diseño con un borde discontinuo.

Por ejemplo, en este gráfico, los estados ParentA y ParentB utilizan descomposición paralela. Cuando cada estado principal se activa, también se activan los dos estados secundarios.

En cada paso de tiempo, el gráfico ejecuta acciones y evalúa transiciones para cada estado paralelo de un nivel de jerarquía en orden secuencial, lo que se indica por medio del número de la esquina superior derecha de cada estado. Por ejemplo, cuando ParentB se activa, el gráfico entra en ChildC y ChildD. Dado que ChildC tiene un orden de ejecución de 1, establece y en 3. Después, en el mismo paso de tiempo, ChildD sobrescribe y como 4.

Puede cambiar el orden de ejecución haciendo clic con el botón secundario en un estado, haciendo clic en Execution Order y seleccionando un orden nuevo.

En este ejemplo, se usan estados paralelos para finalizar un modelo incompleto de un sistema de baterías. Después, se utilizan eventos para crear interacciones entre los estados. El sistema de baterías contiene dos componentes independientes:

  • Una batería principal recargable

  • Una batería de emergencia no recargable que mantiene las funciones esenciales si la batería principal se agota

Abrir el modelo

El modelo sfGetStartedParallel representa la lógica de control para un sistema de baterías recargables. Para construir el modelo, siga las instrucciones de los pasos anteriores del tutorial.

Haga doble clic en el bloque Chart para entrar en el gráfico de la batería.

El gráfico contiene dos estados no paralelos que representan la batería principal y la de emergencia. Cada batería contiene estados secundarios anidados que representan modos de funcionamiento de carga, descarga o espera. Además, las baterías utilizan datos de entrada, de salida y locales:

  • isCharging: datos de entrada que representan si el sistema de baterías está conectado a una fuente de potencia. Determina el estado activo de la batería principal.

  • deviceDemand: datos de entrada que representan la demanda de potencia del dispositivo conectado.

  • maxWatts: datos locales que representan la salida de potencia máxima de la batería principal.

  • sentPower: datos locales que representan potencia de salida de la batería principal. Si deviceDemand es menor que maxWatts, es igual a deviceDemand. De lo contrario, es igual a maxWatts.

  • mainCharge y emergencyCharge: datos locales que representan la carga de cada batería como porcentaje.

Para obtener detalles sobre el funcionamiento de la batería principal, consulte los pasos anteriores del tutorial.

Habilitar la descomposición paralela

Puede habilitar la ejecución paralela de estados secundarios haciendo clic con el botón secundario en el componente principal y seleccionando Decomposition > Parallel.

Dado que los estados MainBattery y EmergencyBattery no tienen un estado principal, el gráfico se considera el elemento principal. Habilite la descomposición paralela para el gráfico haciendo clic con el botón secundario en una sección en blanco del área de diseño y seleccionando Decomposition > Parallel. Los bordes de los dos gráficos se vuelven discontinuos, lo que indica que son estados paralelos.

Transmitir y recibir eventos

Puede habilitar un componente del gráfico para que active un comportamiento en otros componentes del gráfico o modelo transmitiendo eventos. Por ejemplo, en un gráfico con dos estados paralelos, puede transmitir un evento en un estado para que genere una transición en el otro.

Para transmitir un evento desde un estado o transición, utilice el operador send con el siguiente formato:

send(event_name,receiving_state)

Para recibir la transmisión de eventos en una transición, introduzca el nombre del evento en la etiqueta de la transición. El evento no requiere corchetes ni llaves. La transición debe ser un elemento secundario directo o indirecto del estado receptor.

Los requisitos del proyecto para el sistema de baterías indican que la batería de emergencia debe descargarse cuando la batería principal se agota y debe pasar al estado en espera cuando la batería principal comienza a cargarse. Alterne el modo de funcionamiento de la batería de emergencia transmitiendo eventos desde la batería principal.

1. En el estado MainBattery, en la acción entry del estado secundario Empty, transmita un evento denominado toggleOn al estado EmergencyBattery:

entry:
sentPower=0;
send(toggleOn,EmergencyBattery);

2. En el estado MainBattery, en la acción entry del estado secundario Charge, transmita un evento denominado toggleOff al estado EmergencyBattery:

entry:
sentPower=3.5;
send(toggleOff,EmergencyBattery);

3. En el estado EmergencyBattery, haga doble clic en la transición de Standby a Discharge e introduzca la etiqueta toggleOn.

4. Haga doble clic en la transición de Discharge a Standby e introduzca la etiqueta toggleOff.

5. En el panel Symbols, haga clic en el botón Resolver símbolos no definidos para definir toggleOn y toggleOff como eventos locales. En las acciones entry y las transiciones, toggleOn y toggleOff se vuelven de color naranja, lo que indica un evento.

Simular el modelo

El modelo registra dos valores en Simulation Data Inspector:

  • La actividad del estado Empty en MainBattery, donde 1 es activo y 0 es inactivo.

  • El nombre del estado secundario activo de EmergencyBattery.

Simule el modelo y observe estos valores.

  1. Regrese al modelo de Simulink de nivel superior. El bloque Manual Switch cambia el modo de funcionamiento de la batería principal. Cuando el valor es 1, la batería se carga. Cuando el valor es 0, la batería se descarga.

  2. Para simular el modelo, en la pestaña Simulation, haga clic en Run. El bloque Chart muestra la ejecución del gráfico.

  3. Haga doble clic en el bloque Manual Switch para descargar la batería. Después de unos segundos, cuando la batería principal pasa a Empty, haga doble clic en el bloque Manual Switch para cargar la batería. Repita este proceso varias veces.

  4. Para detener la simulación, en la pestaña Simulation, haga clic en Stop.

  5. Para abrir Simulation Data Inspector, en la pestaña Simulation, haga clic en Data Inspector.

  6. Para mostrar la actividad del estado Empty, en la pestaña Inspect, haga clic en MainBattery.Discharge.Empty:IsActive.

  7. Para mostrar el estado secundario activo del estado EmergencyBattery, en la pestaña Inspect, haga clic en EmergencyBattery:ActiveChild.

Cuando la batería principal esté agotada, la batería de emergencia se descarga. Cuando la batería principal salga del estado Empty y comience a cargarse, la batería de emergencia pasa al estado en espera.

Consulte también

Temas