Main Content

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 de salida 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 de entrada 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áfico fee en 1500 y se activa el subestado Executive_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 subestado Family_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 subestado Single_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 Execution Order for Parallel States 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

(Simulink) | (Simulink) | (Simulink) | (Simulink)

Temas relacionados