Cómo interactúan los objetos de Stateflow durante la ejecución
Durante la ejecución, los objetos de Stateflow® interactúan entre sí para simular el comportamiento del mundo real. En este ejemplo se utiliza el proceso para registrarse en un hotel para explicar cómo interactúan los objetos gráficos y no gráficos comunes en un gráfico de Stateflow durante la ejecución.
Modelo del proceso para registrarse en un hotel
Este modelo contiene un gráfico de Stateflow denominado Hotel
. El gráfico recibe los eventos de entrada de cuatro bloques Manual Switch (Simulink) entre los que se alterna:
Registrarse en el hotel
Llamar al servicio de habitaciones
Activar una alarma de incendios
Enviar una señal de que no hay peligro después de una alarma de incendios
Un bloque Mux (Simulink) combina estos eventos de entrada en un vector de entradas que se conecta al puerto activador en la parte superior del gráfico.
El gráfico también recibe una señal de entrada denominada room_type
de un bloque Multiport Switch (Simulink). El valor de esta señal se corresponde con el tipo de habitación en la que desea alojarse. Las opciones posibles son "Executive"
para una suite ejecutiva, "Family"
para una suite familiar y "Single"
para una habitación individual.
Durante la simulación, el importe total adeudado, incluidos los cargos por servicio de habitaciones, aparece en el bloque Display (Simulink).
El gráfico Hotel
contiene objetos gráficos, como estados e intersecciones históricas, y objetos no gráficos, como datos y eventos. Para ver una imagen que etiqueta los objetos de este gráfico, consulte Stateflow Objects.
Cuando se inicia la simulación, el gráfico no se activa hasta que detecta un flanco ascendente o descendente en uno de sus eventos de entrada.
Cuando se alterna un bloque Manual Switch, se activa un evento de entrada que a su vez activa el gráfico. Mientras el gráfico está activo, lee un valor para la entrada del gráfico room_type
del bloque Multiport Switch, realiza cualquier acción de estado o transición válida y da salida al nuevo valor de fee
al bloque Display.
Después de concluir todas las fases posibles de ejecución, el gráfico vuelve a su estado de inactividad y espera el siguiente evento de entrada.
Inicialización del gráfico
Inicie la simulación y active uno de los eventos de entrada. Esta acción corresponde a entrar en el hotel e ir a la recepción.
Como la propiedad del gráfico Execute (enter) chart at initialization está desactivada, el gráfico permanece desactivado hasta que detecta un flanco ascendente o descendente en uno de sus eventos de entrada. A continuación, el gráfico se activa y ejecuta sus transiciones predeterminadas. Se produce la transición predeterminada al estado Check_in
, lo que hace que se active ese estado. Luego tiene lugar la transición predeterminada al subestado Front_desk
, lo que hace que se active ese estado. A continuación, el gráfico se desactiva. Para obtener más información, consulte Execution of a Chart at Initialization y Acceder a un gráfico o un estado.
Transición entre estados
Mientras está activo el subestado Front_desk
, se activa el evento de entrada check_in
. Esta acción corresponde a registrarse en el hotel. Toma las maletas, va de la recepción a la habitación y deja las maletas.
En el gráfico, el evento check_in
guarda la transición saliente del subestado Front_desk
al subestado Checked_in
. Cuando se activa el evento, la transición se convierte en válida. La acción exit de Front_desk
establece el valor del objeto de datos local move_bags
en 1 y el subestado pasa a estar inactivo. A continuación, se activa Checked_in
y la acción entry establece move_bags
en 0. Para obtener más información, consulte How Stateflow Charts Respond to Events, Salir de un estado y Acceder a un gráfico o un estado.
Evaluación de las rutas de transición predeterminadas
Después de que el gráfico ejecuta las acciones entry
en el estado Checked_in
, evalúa la ruta de transición predeterminada a uno de los subestados. El subestado que se activa corresponde al tipo de habitación. Si elige una suite ejecutiva, el precio base es de 1500 dólares. Si elige una suite familiar, el precio base es de 1000 dólares. Si elige una habitación individual, el precio base es de 500 dólares.
El gráfico prueba las ramas de la ruta de transición predeterminada en este orden:
Si la entrada del gráfico
room_type
es igual a"Executive"
, la transición superior es válida. La acción de condición establece la salida del gráficofee
en 1500 y se activa el subestadoExecutive_suite
.Si la entrada del gráfico
room_type
es igual a"Family"
, la transición intermedia es válida. La acción de condición establece el precio en 1000 y se activa el subestadoFamily_suite
.En caso contrario, la entrada del gráfico
room_type
es igual a"Single"
y la transición inferior es válida. La acción de condición establece el precio en 500 y el subestadoSingle_room
se convierte en activo.
Para obtener más información, consulte Order of Execution for a Set of Flow Charts.
Ejecución de estados con subestados exclusivos
Si activa el evento de entrada check_in
mientras el valor de la entrada del gráfico room_type
es "Executive"
, se activa el subestado Executive_suite
. Este subestado corresponde a la estancia en la suite ejecutiva. Esta suite tiene zonas de dormitorio y comedor separadas, por lo que puede estar en una única zona de la suite en cada momento. Al llegar a la suite ejecutiva, se entra primero en el dormitorio. Cuando se pide el servicio de habitaciones, se entra en la zona de comedor para comer. Cuando quiera que la comida se retire del comedor, llame de nuevo al servicio de habitaciones y vuelva al dormitorio.
El estado Executive_suite
tiene una descomposición exclusiva (OR). El estado tiene dos subestados, Bedroom
y Dining_area
. Cuando se activa Executive_suite
por primera vez, tiene lugar la transición predeterminada a Bedroom
, lo que hace que se active ese subestado. Una transmisión del evento de entrada room_service
activa la transición de Bedroom
a Dining_area
, con lo que se desactiva Bedroom
y se activa Dining_area
. Una transmisión posterior de room_service
activa la transición que la devuelve del estado Dining_area
a Bedroom
, por lo que se activa Bedroom
y se desactiva Dining_area
. Para obtener más información, consulte Acceder a un gráfico o un estado.
Ejecución de un estado con subestados paralelos
Si activa el evento de entrada check_in
mientras el valor de la entrada del gráfico room_type
es "Family"
, se activa el subestado Family_suite
. Este subestado corresponde a la estancia en la suite familiar. Cuando la familia llega a la suite, los integrantes pueden pasar el tiempo en dos dormitorios. Por ejemplo, los padres pueden ver una película en el primer dormitorio mientras los niños duermen en el segundo.
El estado Family_suite
tiene una descomposición paralela (AND). El estado tiene dos subestados, First_bedroom
y Second_bedroom
. Cuando se activa Family_suite
, se activan los estados paralelos según su orden de ejecución, como indica el número que se muestra en la esquina superior derecha de cada estado. Los subestados permanecen activos al mismo tiempo. Para obtener más información, consulte Orden de ejecución para estados paralelos y Acceder a un gráfico o un estado.
Llamada a función desde una acción de estado
Mientras está activo el subestado Checked_in
, se activa el evento de entrada room_service
. Esta acción corresponde a llamar al servicio de habitaciones. La factura del hotel depende del tipo de habitación y del número de solicitudes de servicio de habitaciones que realice.
Cuando el gráfico detecta un flanco ascendente o descendente en el evento de entrada room_service
, el estado Checked_In
ejecuta la acción on
para dicho evento. El estado aumenta el objeto de datos local service
y llama a la función de MATLAB® expenses
. Esta función toma el número total de solicitudes de servicio de habitaciones como entrada y devuelve la factura actual del hotel como salida. Para obtener más información, consulte Controlar la ejecución de gráficos usando acciones de eventos en un superestado.
Ejecución de estados con intersecciones históricas
Mientras está activo el subestado Checked_in
, active el evento de entrada fire_alarm
, lo que corresponde a la activación de una alarma de incendios. Sale del edificio y espera fuera en la zona de espera designada. A continuación, active el evento de entrada all_clear
, lo que corresponde al envío de una señal de no peligro que permite volver a su ubicación anterior dentro del hotel.
Cuando el gráfico recibe una transmisión de eventos para fire_alarm
, tiene lugar la transición de Check_in
a Waiting_area
. Las intersecciones históricas en Check_in
, Checked_in
y Executive_suite
registran los últimos subestados activos en cada uno de esos estados. Los estados activos se convierten en inactivos en orden ascendente de jerarquía, empezando por los subestados más internos. Después de que Check_in
pase a estar inactivo, se activa Waiting_area
.
Cuando el gráfico recibe una transmisión de eventos para all_clear
, tiene lugar la transición de Waiting_area
al subestado previamente activo de Check_in
. Waiting_area
pasa a estar inactivo antes de que se activen los subestados de Check_in
en orden jerárquico descendente, empezando por Check_in
.
Para obtener más información, consulte How Stateflow Charts Respond to Events, Salir de un estado y Acceder a un gráfico o un estado.
Consulte también
Manual Switch (Simulink) | Mux (Simulink) | Multiport Switch (Simulink) | Display (Simulink)
Temas relacionados
- Stateflow Semantics
- How Stateflow Charts Respond to Events
- Execution of a Chart at Initialization
- Acceder a un gráfico o un estado
- Salir de un estado
- Order of Execution for a Set of Flow Charts
- Orden de ejecución para estados paralelos
- Controlar la ejecución de gráficos usando acciones de eventos en un superestado