Introducción A Las Máquinas de Estado Finito
Introducción A Las Máquinas de Estado Finito
Introducción A Las Máquinas de Estado Finito
Estado Finito
Escrito por Ral Alvarez.
Sistemas Reactivos
Un Sistema Reactivo es aquel que interacta constantemente con su medio ambiente, tiene
la caracterstica de ser conducido por eventos (event driven), la respuesta de tiempo es
crtica y una vez que el sistema se activa permanece en ese estado de manera indefinida.
En estos sistemas los eventos llegan en tiempos impredecibles y el sistema debe tener la
capacidad de responder de manera inmediata, en el orden de los milisegundos o
microsegundos, sobre todo en sistemas donde la seguridad es crtica (ejemplo: un piloto
automtico en un avin o una mquina para soporte de vida en un hospital).
La gran mayora de los sistemas embebidos (en base a microcontroladores o
microprocesadores) corresponden a esta categora, debido a que estos sistemas estn
tpicamente conectados a varios tipos de sensores y transductores de entrada encargados
de captar los estmulos del medio ambiente (temperatura, presin, luz, magnetismo,
fuerza / peso, etc.), procesar dicha informacin y generar una respuesta del sistema hacia
el medio ambiente a travs de transductores de salida y actuadores.
Sistemas Transformacionales
A diferencia de los Sistemas Reactivos un Sistema Transformacional es aquel que recibe
cierta informacin de entrada, realiza una cierta cantidad de cmputo, produce cierta
informacin de salida y luego termina. No muchos sistemas embebidos caen en esta
categora; ejemplo ms tpicos son las aplicaciones para PC, como por ejemplo: Un
procesador de texto.
Una pseudo transicin inicial del punto rojo al estado DETENIDO identifica a este
ltimo como el estado inicial de la MEF.
Codificacin en Lenguaje C
El sistema de control del ascensor se puede codificar en Lenguaje C de la siguiente
manera:
/* Ejemplo de Mquina de Estado Finito para un ascensor simplificado */
enum eEstados {
DETENIDO,
YENDO_ARRIBA,
YENDO_ABAJO
} estado;
while (TRUE) {
switch (estado) {
case DETENIDO:{
//
piso_actual = comprobacion_piso();
if (piso_nuevo == piso_actual)
estado = DETENIDO;
} break;
case YENDO_ABAJO:{
piso_actual = comprobacion_piso();
if (piso_nuevo == piso_actual)
estado = DETENIDO;
} break;
}
}
}
estado = YENDO_ARRIBA;
estado = DETENIDO;
Las condiciones de transicin se codifican mediante sentencias condicionales "if else" asociadas a una determinada transicin:
En este ejemplo el nico patrn que la MEF aceptar y reconocer es: 57936. (En
realidad cualquier patrn ms largo que contenga la secuencia anterior, como:
1257936 o 5793688 ser tambin reconocido por la MEF, sin embargo la
verificacin de estos casos se ha omitido en el ejemplo por simplicidad).
El estado inicial de la MEF es el denominado "Ninguno". Cualquier evento (nmero)
diferente a 5 causar una transicin al mismo estado y slo la recepcin de un "5"
causar la transicin al estado "1 Bueno". La recepcin de un "7" en el estado "1
Bueno" causar una transicin al estado "2 Buenos", cualquier otro valor diferente
causar una transicin a "Ninguno", lo cual obliga a reiniciar todo el proceso; y as
sucesivamente hasta llegar al estado "4 Buenos".
En el estado "4 Buenos", un "6" causar una transicin a "Abierto". A dicha
transicin est asociada una accin (salida) del sistema, la cual consiste en
"desasegurar" (por ejemplo: abrir una cerradura). Cualquier otro valor diferente de
"6" obliga a reiniciar el proceso desde "Ninguno".
En el estado "Abierto", un evento "cerrar" (por ejemplo, cerrar la puerta asociada a
la cerradura) causar que el sistema transicione a "Ninguno" y a dicha transicin
viene tambin asociada una accin o salida del sistema que consiste en "asegurar"
el sistema (cerrojo).
Transductoras: Las MEFs transductoras se caracterizan por generar acciones o
salidas dependiendo de las entradas y/o estados; se implementan en sistemas
embebidos tpicamente para aplicaciones de control. Un ejemplo de este tipo de
sistema es el ejemplo del ascensor ya analizado en la primera parte de este
artculo.
Finalmente
Casi todos los que trabajamos, estudiamos o experimentamos con sistemas
embebidos hemos dado nuestros primeros pasos en la programacin de sistemas
embebidos escribiendo el llamado "cdigo espagueti". Algunos hemos llegado a
usar con relativa seguridad el patrn de programacin conocido como "Plano
Principal / Plano Secundario" (Backgroud / Foreground) el cual implica el uso de
interrupciones; aunque la realidad prueba que muchos estudiantes universitarios o
egresados de electrnica o otras carreras afines que tienen que ver con diseo
embebido no han llegado a dominar adecuadamente el uso de interrupciones
(hago nfasis en la palabra "adecuadamente").
Cunto menos conocido y entendido es el uso del patrn de programacin con
Mquinas de Estado Finito, las cuales, no es de sorprenderse, son una herramienta
cuyo uso est ampliamente extendido en el mbito del desarrollo de sistemas
embebidos de primer nivel. Muchos desarrolladores profesionales han
recomendado en repetidas ocasiones que, cualquier sistema reactivo que se preste
al diseo con Mquinas de Estado Finito (pues, obviamente, no todos se prestan,
pero s una mayora), debera hacer uso de este patrn de programacin, debido a
que ste provee un abstraccin del sistema que resulta natural, segura, fcil de
entender y que puede ser muy eficiente.
Si an no lo has hecho, es hora de darle a las Mquinas de Estado Finito un uso
ms frecuente. Con toda seguridad encontrars que tus proyectos se simplifican en
gran manera, aunque por supuesto, dominar el uso de las Mquinas de Estado
Finito requiere que uno pase un buen tiempo estudindolas y usndolas.