El problema del ascensor

 Ascensor hecho en Illustrator Judavi.com

Se trata de diseñar un controlador para un ascensor que atienda a las llamadas desde los pisos o la cabina, haciendo que el ascensor suba o baje en función de las mismas, y ocupándose también de que el ascensor se detenga en los pisos en que se haya solicitado parada y se abran y cierren las puertas. El dispositivo físico que el controlador debe manejar es el motor que mueve el ascensor.

Hace algún tiempo ya modele un problema acerca de un ascensor, hoy buscando entre mis viejos apuntes decidí revivirlo y colocarlo a evaluación. No es algo fuera de este mundo, pero puede ser de ayuda para alguien que este investigando sobre el asunto.

Se trata de diseñar entonces un controlador del ascensor que atienda a las llamadas desde los pisos o la cabina, haciendo que el ascensor suba o baje en función de las mismas, y ocupándose también de que el ascensor se detenga en los pisos en que se haya solicitado parada y se abran y cierren las puertas. El dispositivo físico que el controlador debe manejar es el motor que mueve el ascensor.

El controlador recibirá la información de los sensores para determinar la posición del ascensor y deberá ocuparse de la parada del mismo cuando corresponda, siempre en función de las llamadas pendientes. Si el ascensor debe detenerse en un piso se debe ordenar la parada en el momento en que se detecte el paso por el sensor correspondiente a ese piso.

Las puertas deben abrirse automáticamente al llegar a un piso en que realice una parada. Las puertas se cierran automáticamente cuando se pulsa un botón de petición de piso desde el panel del ascensor, o, si no se pulsa ningún botón dentro del ascensor, cuando hayan transcurrido T segundos desde la apertura de las puertas. De haber alguna petición pendiente, el ascensor debe ponerse en marcha inmediatamente después del cierre de las puertas.

Cuando se realice una llamada desde un piso cuando el ascensor está detenido con las puertas abiertas, no debe cerrarlas, pero debe quedar registrada la llamada.

Finalmente el ascensor no debe estar en movimiento a menos que haya alguna petición pendiente.

Análisis del problema por partes

Para facilitar el análisis se partió el problema en componentes. A continuación se verán los componentes, su descripción y su respectivo diagrama de estado.

analisis del problema ascensor judavi.com

Vale la pena aclarar que la notación usada para describir los diagramas de estado será la siguiente:

 

maquina de estados del ascensor judavi.com

El controlador

Este componente posee solo dos estados, motor en marcha y motor detenido. Cuando el motor esta en el estado detenido el controlador puede recibir paso(Destino) del elevador donde Destino es el numero del piso destino. El controlador pasa entonces al estado en marcha.

Dependiendo entonces de la dirección deseada el controlador sube o baja un piso.

Adicionalmente usando un contador, el controlador pasa automáticamente al estado detenido cuando pasa el tiempo que se considera tarda el ascensor en desplazarse de un piso a otro. Esta transición tiene explicito un mensaje adicional. Cuando ocurre envía un mensaje al elevador indicando en que piso se esta en el momento y se hace la comparación si destino es igual al piso en el que se encuentra en el momento.

Maquina de estados del ascensor Judavi.com

El piso

El piso posee tres estados: No ascensor llamado, ascensor llamado pero aun no ha llegado y puertas abiertas.

Los pisos reciben el mensaje de llamada por parte del usuario, el mensaje de arribo del ascensor y el mensaje de un temporizador interno para saber cuando cerrar las puertas.

Adicionalmente los pisos mandan un mensaje al ascensor solicitándolo.

El tiempo como mensaje para el contador no ha sido determinado, se deja como parámetro. Es el tiempo que se necesitaría dejar las puertas abiertas para que ingresen los usuarios al ascensor.

El piso problema del ascensor judavi.com

El ascensor

El ascensor posee cuatro estados:

Calendario_vacio : Es un estado donde no tiene ningun destino aun planeado.

Esperar_puertas1 : Es un estado donde lo unico que hace es esperar las puertas pues se encontraba inactivo y recibio un llamado en el piso en que se encontraba.

Calendario : El ascensor tiene destino planeado

Esperar_puertas2 : El ascensor tiene un plan y ha llegado a uno de sus destinos y esta esperando a que los usuarios salgan o entren.

El ascensor puede recibir dos mensajes: de llamada(p)(por parte del piso) y Estoyen(x) (por parte del controlador).

A su vez el ascensor puede enviar dos mensajes. Llegada(para el piso) y paso(destino)(a su controlador).

Cuando el ascensor manda el mensaje de llegada debe esperar a la activación de las puertas para permitir el ingreso o salida de los usuarios.

Finalmente vale la pena notar algunas consideraciones:

P es una variable global, el controlador y el ascensor hacen uso de ella para saber en la posición que se encuentran y actualizarla en caso de ser necesario.

Plan es una lista que contiene los destinos a los que debe ir el ascensor. Esta lista hace uso del algoritmo del ascensor (Usualmente utilizado para el acceso a discos). El uso de esta lista esta detallado mas adelante. Cuando se refiere a Plan.1 se habla de la primera posición de la lista o Plan.2 a la segunda.

Algunas notaciones usadas: /= (Para distinto) ==(Para comparación) =(Para asignación).

El ascensor problema del ascensor judavi.com

1. Llamado(N) / Nuevo_plan : [Viejoplan + N]

2. Estoyen(PosN) & PosN/= Plan.1 / Paso(Plan.1) al controlador & P=PosN

3. Estoyen(PosN) & PosN== Plan.1 / Llegada a Plan.1 (El mensaje solo llega al piso indicado en la primera posición del plan)

4. Continuar & Plan.2/=Vacio / Paso(Plan.2) al controlador P=PosN

Nuevo_plan : [Viejoplan – Plan.1]

5. Continuar & Plan.2==Vacio / P=PosN

Plan y el algoritmo del ascensor

El plan es una lista, y como tal es posible acceder a las posiciones de ella usando las notaciones comunes. Así pues un plan se vería de la siguiente manera:

Plan algoritmo del ascensor judavi.com

Lo importante es que al momento de ingresar un nuevo destino al plan este se organiza según una condición que es producida en el controlador. Cuando el destino es menor que la posición actual del controlador, este suma uno a su posición y envía un mensaje de que esta subiendo. De ocurrir el caso contrario enviaría un mensaje de que esta bajando. Esto puede observarse en el diagrama de estado del controlador.

Ahora bien, los mensajes de bajando o subiendo son los que organizan la lista para utilizar el algoritmo del ascensor. Este consiste en que el ascensor sube y baja alternativamente. Mientras va en una dirección se efectúan las paradas necesarias en esa dirección. Cuando no quedan más peticiones en la dirección actual, se invierte el sentido de la marcha. Si no hay ninguna petición pendiente, el ascensor se detiene.

Si el ascensor esta subiendo la lista se organiza en forma ascendente a partir de su posición actual si hay destinos menores a su posición actual estos se organizan al final de forma descendente, si esta bajando, esta se organiza de forma descendente a partir de la posición actual y si hay destinos mayores a su posición actual estos se organizan de forma ascendente al final de la lista. Esto se puede ver claramente en la siguiente tabla:

tabla del plan problema del ascensor judavi.com

Share and Enjoy:
  • Print
  • Digg
  • StumbleUpon
  • del.icio.us
  • Facebook
  • Yahoo! Buzz
  • Twitter
  • Google Bookmarks
  • Add to favorites
  • Live

Tags: , , ,

9 Responses to “El problema del ascensor”

  1. Juan C. Gutiérrez dice:

    Este ejercicio ha adquirido su valor al haberlo compartido. !
    Gracias.

  2. alvaro joseth dice:

    gracias me a sido de mucha utilidad te agradesco

  3. judavi dice:

    a ti Alvaro por tú comentario 🙂

  4. javier dice:

    Que buena información, breve y precisa. Felicidades al autor.

  5. judavi dice:

    Hola Javier, muchas gracias a ti por el comentario 🙂

  6. Chan dice:

    Cuando un ascensor va lleno, y no hay parada solicitada desde dentro(cabina), no debe de haces caso a las solicitudes de fuera (pisos),porque parar para no salir ni entrar nadie es perder tiempo.

  7. judavi dice:

    Tienes razón, muchas gracias por el comentario.

  8. yaz dice:

    Muchas gracias, necesitaba esta informacion, que bien que no eres egoista al compartir tu conocimiento, saludos!!

  9. judavi dice:

    Hola Yaz! Gracias por tu comentario! Me alegra mucho que te haya sido de utilidad 😉

Leave a Reply