Modelando el ascensor como una máquina de estados finitos

2

Este es mi primer post aquí. Encantado de conocerlos a todos!

He leído una pregunta relacionada Aquí y todavía tengo problemas.

La tarea:

Hay un edificio que consta de 7 pisos (indexado 0-6). Diseñe un sistema que controle el ascensor en este edificio.

Detalles de diseño:

  1. Hay botones de navegación en cada piso (arriba / abajo).

  2. Dentro del ascensor hay botones para seleccionar el destino. (Para simplificar, puedo asumir que solo se puede seleccionar un destino)

  3. Las siete pantallas de segmentos indican la posición del elevador. Estos están presentes en cada piso y dentro del ascensor.

  4. Hay indicadores LED que indican la dirección de movimiento del elevador en cada piso. (flechas, supongo?)

  5. Hay botones dentro del ascensor para controlar el ventilador y las luces. (Los ventiladores y las luces están apagados de forma predeterminada. Se encienden automáticamente si el elevador está en movimiento).

Lo que he hecho hasta ahora :

Sistema # 1 : control de la pantalla de siete segmentos

Deja que el ascensor esté en el piso 'x'. Para la selección de destino (por ejemplo, y) desde el interior del ascensor, usamos un codificador para obtener el piso de destino en binario. Luego lo pasamos al controlador, que compara x e y, y decide la dirección del movimiento. A medida que se mueva, siga actualizando x y envíelo a las pantallas de siete segmentos en cada piso y dentro del elevador.

Sistema # 2 : ventiladores y luces. Estado por defecto: OFF. Si se selecciona el destino, enciéndalo. Encienda / apague según la elección del pasajero.

Sistema # 3 : la unidad de control de movimiento (aquí es donde tengo problemas):

Ya que estamos modelando el ascensor como una máquina de estados finitos, tengo los siguientes estados.

  1. Resto: ( RST )

  2. Subiendo ( UP )

  3. Bajando ( ABAJO )

Los siguientes cambios causan transiciones de estado:

1.El ascensor se llama desde uno de los pisos.

2.El destino ha sido alcanzado.

3.El destino ha sido seleccionado.

Caso # 1: El destino ha sido seleccionado (y). Si y > x (piso actual) luego ARRIBA. más si y

Caso # 2: El ascensor se está moviendo de, por ejemplo, el 3er piso al 6to piso. Alguien en el cuarto piso quiere bajar. En el quinto piso, alguien quiere subir. La solución obvia, deténgase en el piso 5. vaya al piso 6 y luego vaya al cuarto piso.

Problema # 1 : ¿Cómo manejo las prioridades?

Problema # 2 : ¿Cómo almaceno la información? (Soy consciente de los flip-flops y los elementos de memoria relacionados. No estoy seguro de los detalles más precisos de la implementación)

Problema nº 3 : ¿Cómo puedo codificar los estados y crear la tabla de transición de estado? (No puedo visualizarlo).

PD: Dado que la pregunta estaba redactada de manera ambigua, creo que es seguro hacer algunas suposiciones para simplificar el problema.

La ayuda sería muy apreciada. Gracias de antemano.

EDIT 1 : para la unidad de control de movimiento, hay 19 entradas (1 cada una desde los pisos 0 y 6, 2 cada una desde los pisos 1-5, 7 desde el interior del ascensor) y 1 salida señal al motor (ARRIBA, ABAJO).

    
pregunta user37420

2 respuestas

1

Obviamente hay muchas formas de diseñar esto, aquí hay un posible enfoque.

Para cualquier diseño, las señales no son menos críticas que la lógica de control en el proceso de diseño. Por ejemplo, hay sugerencias opuestas de asignación de estados para representar la posición (qué piso) del elevador y de no asignar. Mi opinión es que, de todos modos, debería haber señales que indiquen dónde se encuentra el ascensor, así que también podría definir las señales para indicar la posición. Parece que debería ser la forma más simple y más robusta.

Así que ahora la máquina de estado de movimiento del ascensor probablemente tendría al menos el siguiente estado: inactiva, arriba, abajo, parada. Las señales de entrada serían al menos la posición actual y el destino actual. La posición actual es la señal que está incorporada en el mecanismo del ascensor, como se explicó en el párrafo anterior. Al decir que el destino actual es una señal de entrada (interna) es otra opción de diseño: particionar la lógica de control. Para un modelado más realista, se pueden agregar aquí estados adicionales de movimiento de ascensores, como desaceleración, aceleración, apertura de puertas ...

Para generar el destino actual (señal), podría ser algo completo en función de algún tipo de mecanismo de cola. O podría ser una máquina de estado mucho más simple impulsada por algunas opciones de prioridad sin colas. La elección prioritaria de continuar en una dirección hasta que no haya más solicitudes pendientes en esa dirección (como lo sugiere Supercat) puede ser una de las opciones clave. En mi opinión, esta máquina tendría 7 estados, uno para cada piso de destino posible, y algunos más. Entre las entradas para esto se encuentran las señales de solicitud de los botones.

Las señales de solicitud para los botones probablemente serán generadas por simples máquinas de estado. 19 máquinas de estado para las 19 entradas como mencionó en EDITAR 1. Las máquinas de estado para los botones dentro del elevador serían algo así como: Cuando está inactivo, si se presiona el botón, vaya a Solicitar; Cuando se solicita si se detiene & & Current_position == Button_location goto Idle. Los botones de dirección en cada piso serían un poco más complicados.

    
respondido por el rioraxe
0

Sugeriría que el elevador tiene 12 estados que combinan posición y dirección. Un ascensor debe continuar en su dirección actual si se presionan los botones de destino o de llamada entre su ubicación actual y el final del viaje. Debe invertir la dirección si no se presionan botones entre su ubicación actual y el final del viaje, pero algunos botones se presionan en otra parte.

Si, por ejemplo, el elevador acaba de entregar a alguien al sexto piso desde abajo, no se presionan los botones del séptimo piso, pero los botones "arriba" se presionan en los pisos tercero y quinto, el elevador debe comenzar a bajar. No debe detenerse en el quinto piso porque está bajando y ese es un botón "arriba", pero debe continuar más allá de ese piso porque hay otro botón debajo. Una vez que llegue al tercer piso, ya no habrá botones entre él y el final del viaje, sino que habrá botones que se presionarán en otros lugares, por lo que debe invertir la dirección. En ese momento, estará en el tercer piso hacia arriba, por lo que debe responder a la llamada del tercer piso.

    
respondido por el supercat

Lea otras preguntas en las etiquetas