Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
INFORMÁTICA 2 Máquina de Estados Ing. Gustavo Fresno - Profesor Ing. Jorge Manganiello - Ayudante Máquina de Estados Informática II - UTN-FRBA 2011 - Ing. Fresno Gustavo 2 ¿ Qué es una Máquina de estados ? Es un MODELO que describe a un sistema en estudio mediante: – Estados (comportamiento estático) – Transiciones (evolución entre estados) – Excitaciones (que condicionan las transiciones) – Acciones (asociadas a las transiciones) ¿ Sistema de qué ? – De Control en Tiempo Real – Protocolos – Circuitos Eléctricos/Electrónicos (Lógica Secuencial) – Arquitectura de Software – Etc., etc., etc. Informática II - UTN-FRBA 2010 - Ing. Fresno Gustavo 3 ¿ Por qué usarlas ? – Brinda una rigurosa descripción del comportamiento del sistema – Ofrece sobre situaciones muy complejas soluciones ridículamente sencillas. Incluso compuestas por la operación en paralelo de múltiples máquinas – Su implementación genera código simple, eficiente y preciso. – Fácil de depurar, modificar, expandir y bien organizado. – Sin duda facilitan el análisis, el diseño y la implementación Casos típicos de estudio Surgen de la combinación de los siguientes factores: – Excitaciones por Eventos – Excitaciones por Sincronismos (time-out, timer-tick) – Excitaciones por Semáforos/Variables/Colas (mensajes) – Interacción con Entradas/Salidas – Composición en paralelo de múltiples máquinas Máquina de Estados Informática II - UTN-FRBA 2010 - Ing. Fresno Gustavo 4 • Mediante diversos métodos de representación – Funciones matemática – Diagramas de globos – Tablas de Estados y Transiciones ¿Cómo se formalizan? • Mediante diversos lenguajes de programación – Assembler, – C para micros o PCs – C++, Java, UML – VHDL, etc., etc., etc. Máquina de Estados Informática II - UTN-FRBA 2010 - Ing. Fresno Gustavo 5 Diagrama de Globos Semántica. • Los nodos (globos) representan los posibles estados estáticos. Ejemplo: 1,2 y 3 • Las etiquetas representan eventos que provocan un cambio. Ejemplo: a y b • Las aristas (flechas) determinan de qué manera cada estado, dado un evento, deriva en otro estado. Máquina de Estados Informática II - UTN-FRBA 2010 - Ing. Fresno Gustavo 6 Ejemplo Supongamos que se quiere modelar el comportamiento de una puerta. La puerta, inicialmente cerrada, puede pasar a estar abierta tras el evento “abrir puerta”. Una vez abierta, puede pasar al estado cerrada, tras el evento “cerrar puerta”. Máquina de Estados Informática II - UTN-FRBA 2010 - Ing. Fresno Gustavo 7 Extensión de la Semántica original Condiciones Son expresiones booleanas que determinan si una transición entre estados puede realizarse. Acciones Inmediatamente después de ejecutar una transición y antes de arribar al siguiente estado, la máquina de estado ejecuta una o varias acciones. Condiciones / Acciones Máquina de Estados Informática II - UTN-FRBA 2010 - Ing. Fresno Gustavo 8 Ejemplo 1: Encendido y apagado de una luz cada vez que presiono una tecla Tecla encendido presionada / Encender Luz Luz ON Luz OFF Tecla encendido presionada / Apagar Luz Microcontrolador Máquina de Estados Informática II - UTN-FRBA 2010 - Ing. Fresno Gustavo 9 Ejemplo 2: Se desea realizar un contador ascendente y descendente de forma periódica, el contador debe comenzar contando de forma ascendente hasta llegar al LIMITE SUPERIOR y luego descender hasta el LIMITE INFERIOR. ASC DES cuenta == LIMITE_SUP/ cuenta-- cuenta == LIMITE_INF / cuenta++ cuenta < LIMITE_SUP / cuenta++ cuenta > LIMITE_INF / cuenta -- RESET / cuenta = LIMITE_INF Máquina de Estados Informática II - UTN-FRBA 2010 - Ing. Fresno Gustavo 10 // Propósito: Análisis del contador // cuando asciende // Recibe: void // Retorna: void void Ascendiendo(void) { if (cuenta < LIMITE_SUP) cuenta++; if (cuenta == LIMITE_SUP) { estado = DESCENDENTE; cuenta--; } return; } // Propósito: Análisis del contador // cuando desciende // Recibe: void // Retorna: void void Descendiendo (void) { if (cuenta > LIMITE_INF) cuenta--; if( cuenta == LIMITE_INF) { estado = ASCENDENTE; cuenta++; } return; } Vamos a comenzar a programar!! Comencemos codificando cada uno de los estados Máquina de Estados Informática II - UTN-FRBA 2010 - Ing. Fresno Gustavo 11 Sigamos con la inicialización de nuestra maquina de estados // Propósito: Inicializar // Recibe: void // Retorna: void void Inicializar_Maquina_Estados(void) { estado = DESCENDENTE; cuenta = LIMITE_INF; return; } Máquina de Estados Informática II - UTN-FRBA 2010 - Ing. Fresno Gustavo 12 unsigned char data estado; // Estado de Contador unsigned int data cuenta; // Valor instantáneo del Contador void main (void) { Inicializar_Maquina_Estados(); while(1) { Analisas_Maquina_Estados(); } } Máquina de Estados Informática II - UTN-FRBA 2010 - Ing. Fresno Gustavo 13 Para implementar el análisis de la maquina de estados tengo varios métodos: – Switch’s – Múltiples if – Punteros a función Máquina de Estados Informática II - UTN-FRBA 2010 - Ing. Fresno Gustavo 14 // Propósito: Analisis Maquina Estados // Recibe: void // Retorna: void void Analisis_Maquina_Estados(void) { switch (estado) { case ASCENDENTE: Ascendiendo(); break; case DESCENDENTE: Descendiendo (); break; } return; } Máquina de Estados Informática II - UTN-FRBA 2010 - Ing. Fresno Gustavo 15 // Propósito: Analisis Maquina Estados // Recibe: void // Retorna: void void Analisis_Maquina_Estados(void) { if( estado == ASCENDENTE ) { Ascendiendo(); return; } if( estado == DESCENDENTE) { Descendiendo (); return; } return; } Máquina de Estados Informática II - UTN-FRBA 2010 - Ing. Fresno Gustavo 16 unsigned char data estado; // Estado de Contador unsigned char data cuenta; // Valor instantáneo del Contador code void (code *ArrayFuncionesEstadoContador [ ]) (void) = {Ascendiendo , Descendiendo}; void main (void) { Reset(); while(1) { Display (cuenta); (*ArrayFuncionesEstadoContador [estado]) (); } } Máquina de Estados
Compartir