Cómo diseñar un simulador LIFT utilizando FSM (máquina de estados finitos)

1

Quiero diseñar un LIFT con la ayuda de una máquina de estados finitos.

Hay cuatro pisos. Así que los tomé como 0, 1,2,3 y correspondientemente los estados. Los 0,1,2,3 botones están presentes dentro del ascensor. Si alguien los presiona en consecuencia, cambia de un estado (piso) a otro.

Pero también hay flechas ARRIBA, ABAJO presentes fuera del elevador en cada piso.    No hay flecha ABAJO en el piso 0 y no hay flecha ARRIBA en el 3er piso

No entiendo cómo incorporarlas al diseño. Con solo cuatro estados 0,1,2,3 y digamos que una persona presionó el botón 3 dentro del elevador desde el 1er piso, le estamos enviando el estado 3 directamente. Ahora, si en el segundo piso alguien presiona la flecha hacia ARRIBA, el elevador debe detenerse en el segundo piso antes de ir directamente al tercer piso, que me estoy perdiendo.

Puede estar tomando señales de ARRIBA, ABAJO ya que asíncrono puede ayudar. Pero son 6 tales señales. Así que me está metiendo en problemas.

¿Puede alguien ayudarme? Un diagrama de estado me ayuda más.

    

2 respuestas

3

Estás confundiendo los destinos de piso con los estados. No son los mismos.

Para un levantamiento, los estados serían:

  • inactivo
  • Subiendo
  • Bajando

Los estados se cambiarían por eventos como:

  • botón de llamada presionado
  • botón de piso presionado
  • Llegó al piso objetivo

Al FSM no le importa qué piso es qué, solo a qué piso quiere llegar cuando está en estado de movimiento.

Lea más acerca de las FSM aquí: enlace

    
respondido por el Majenko
0

No representaría cada piso como un estado separado. Los estados están asociados con un conjunto de comportamiento que es diferente del comportamiento de otros estados. En general, un ascensor no se comporta de manera diferente en el piso 1 en comparación con el piso 2. Por lo tanto, no creo que los pisos sean buenos estados.

Comenzaría con tres estados: inactivo, cargando y moviendo. El estado inactivo es cuando no hay destinos. El estado de carga es mientras los pasajeros están cargando o descargando. Al ingresar al estado de carga, el elevador abrirá las puertas. Al salir de Loading, cierre las puertas. El estado de movimiento es mientras el ascensor viaja a un destino. Al entrar / salir del estado de movimiento, el elevador arranca / detiene el motor.

Los eventos que causan transiciones entre estados incluyen los botones del piso (dentro del elevador) y los botones de llamada (los botones arriba / abajo) en cada piso. Otro evento ocurre cuando el elevador en movimiento llega a cada piso. El número de piso es información que se incluye con estos eventos.

Cuando el estado Inactivo recibe un evento de botón, compara el número de piso con el piso actual. Si el número del piso del evento del botón es igual al piso actual, entonces pase al estado Cargando. Si el número de piso del evento del botón es diferente del piso actual, agregue el número de piso a la lista de destino y pase al estado de movimiento.

Cuando el estado de Carga recibe un evento de botón, compara el número de piso con el piso actual. Si el número del piso del evento del botón es diferente del piso actual, agregue el piso a la lista de destino y pase al estado de movimiento.

Cuando el estado en movimiento recibe un evento de botón, agrega el piso a la lista de destinos. Cuando el estado en movimiento recibe el evento de piso alcanzado, actualiza el piso actual y se compara con la lista de destinos. Si el piso alcanzado es un destino, elimine el destino de la lista y pase al estado de Carga.

La parte difícil será administrar la lista de destinos. Mi primer pensamiento fue que una estructura de datos de lista enlazada sería útil. Los destinos se pueden priorizar y ordenar a medida que se agregan a la lista, de modo que el primer elemento de la lista sea el siguiente destino. Pero eso puede ser demasiado complicado. Una idea más simple puede ser mantener dos matrices separadas de destinos, una matriz para cada dirección. Hay un elemento en la matriz para cada piso. Si el piso es un destino mientras viaja en una dirección particular, entonces el elemento de la matriz correspondiente es verdadero. El punto es que hay más de una forma de hacerlo y no sé qué funcionará mejor. Vas a tener que iterar sobre el diseño y la lógica.

Una de las cosas buenas de este diseño de máquina de estado es que se extiende fácilmente para soportar cualquier número de pisos. En otras palabras, no tiene que agregar nuevos estados y eventos cuando agrega pisos.

    
respondido por el kkrambo

Lea otras preguntas en las etiquetas