Programación Basada en Autómatas

20
Sistemas Electrónicos Programables Facultad de Ingeniería, Universidad de Deusto Programación Basada en Autómatas

Transcript of Programación Basada en Autómatas

Sistemas Electrónicos Programables Facultad de Ingeniería, Universidad de Deusto

Programación Basada en Autómatas

Sistemas Electrónicos Programables

Patrones de Diseño Software

Para programa correctamente un sistema embebido, un desarrollador software debe conocer y dominar gradualmente los patrones o métodos de programación más usados porque

proporcionan catálogos de elementos reusables en el diseño de sistemas software,

evitan la reiteración en la búsqueda de soluciones a problemas ya conocidos,

estandarizan el modo en el que se realiza el diseño, entre otras cosas

Un Patrón de Diseño Software es una solución

efectiva y reutilizable a un problema de diseño

software

No pretenden imponer ciertas alternativas de diseño

ni eliminar la creatividad del proceso de diseño

Sistemas Electrónicos Programables

Patrón Singleton

Por medio de este patrón se pretende garantizar la existencia de una única instancia para una clase; y la creación de un mecanismo de acceso global a dicha instancia. Se basa en el uso de un constructor privado y un atributo

estático con la única instancia posible de la clase.

class Singleton {

private static Singleton instance;

private Singleton(){

}

public static Singleton GetInstance() {

{

if (instance == null)

instance = new Singleton();

return instance;

}

}

Sistemas Electrónicos Programables

Patrón Código Espagueti

En realidad, es un anti-patrón, y es un término utilizado para los programas computacionales que tienen una estructura de control de flujo compleja e incomprensible. Suele asociarse a lenguajes de programación antiguos o

básicos y a programadores nóveles.

Se identifica fácilmente cuando: se realiza un uso recurrente de sentencias condicionales

anidadas (if-then-else, while…),

se crean situaciones de bloqueo del sistema (while(1), delay()…) y

se realizan las mismas comprobaciones una y otra vez a lo largo del programa.

No hay nada malo en escribir código espagueti inicialmente

si facilita la compresión de un problema; lo incorrecto es

considerar el código como definitivo

Sistemas Electrónicos Programables

Código Espagueti (continuación…)

Ejemplo 2:

Programar una luz frontal de atletismo con la siguiente

funcionalidad:

Por medio de un botón se puede pasar entre 4 modos

diferentes: apagado, encendido, parpadeo y regulación de luz.

Con cada pulsación, se pasa de un modo al siguiente, y del último al

primero.

En el estado de parpadeo; la luz se encenderá y apagará cada

500mS.

En el estado de regulación de luz; la intensidad de luz será ajustada

por medio de un potenciómetro.

Sistemas Electrónicos Programables

Código Espagueti (continuación…)

void setup() {

pinMode(2, INPUT);

pinMode(6, OUTPUT);

}

void loop() {

digitalWrite(6, LOW);

while (digitalRead(2) == LOW);

delay(200);

digitalWrite(6, HIGH);

while (digitalRead(2) == LOW);

delay(200);

while (digitalRead(2) == LOW)

{

digitalWrite(6, LOW);

delay(500);

digitalWrite(6, HIGH);

delay(500);

}

delay(200);

while (digitalRead(2) == LOW)

{

int val = analogRead(A1);

analogWrite(6, (val * 255.0) / 1023.0);

}

delay(200);

}

Anidamiento de

Condicionales

Comprobación Repetitiva

Situación de Bloqueo

Sistemas Electrónicos Programables

Máquina de Estados

Se llamará máquina de estados finitos si el conjunto de estados de la máquina es finito; siendo éste el único tipo de máquina de estados que es

posible modelar con un computador.

La representación gráfica se realiza por medio de Grafos o Diagramas de Estados;

aunque es posible utilizar diagramas de secuencia.

Se denomina Máquina de Estados al

comportamiento de un sistema con entradas y

salidas; donde las salidas dependen tanto de las

entradaS actuales como de las anteriores

Sistemas Electrónicos Programables

Autómatas Finitos

Formalmente, un autómata finito es una 5-tupla (Q,

Σ, q0, δ, F) donde:

Q es un conjunto finito de estados

Σ es un alfabeto finito

q0 ∈ Q es el estado inicial

δ: Q x Σ Q es una función de transición

F ⊆ Q es un conjunto de estados finales

Un Autómata Finito es un modelo matemático

para la representación de una máquina de

estados finitos.

Sistemas Electrónicos Programables

Autómatas Finitos (continuación…)

Representación formal de un autómata:

Como Diagrama de Estados

Como tabla de transiciones

S2 S1

1 1

1

0

Salida

Q ∈ Q

Símbolo

δ ∈ Σ

Llegada

δ(q,σ) ∈ Q

S1 0 S2

S1 1 S1

S2 0 S1

S2 1 S2

0 1

S1 S2 S1

S2 S1 S2 ó

Sistemas Electrónicos Programables

Diagramas de Estados

Se componen de 3 elementos principales:

Estado: es una condición o situación estable en el tiempo, donde se puede realizar alguna actividad, o no, a la espera de algún tipo de evento.

Evento: es un acontecimiento significativo que puede, o no, activar una transición entre estados.

Transición: es una relación entre dos estados por medio del cual se indica qué evento debe producirse para pasar de un estado a otro.

Los Diagramas de Estados modelan el

comportamiento de un sistema a lo largo de su

ciclo de vida; mostrando el flujo de control entre

los diferentes estados

Sistemas Electrónicos Programables

Diagramas de Estados (continuación…)

Ejemplo 3:

Definición del funcionamiento de una puerta:

Secuencia de Eventos:

1. Abrir con Llave

2. Abrir Puerta

3. Cerrar Puerta

4. Abrir Puerta

5. Cerrar Puerta

6. Cerrar con Llave

Estado

Transición

Evento

Abrir con Llave

Cerrar con Llave

Abrir Puerta

Cerrar Puerta Cerrada

Cerrada

con llave

Abierta

Sistemas Electrónicos Programables

Diagramas de Estados (continuación…)

Ventajas:

Los diagramas de estado son intuitivos y fáciles de entender.

Su uso está muy extendido (por ejemplo, en protocolos de

comunicación).

El sistema se divide en subsistemas más pequeños y

manejables.

Es posible ampliar la funcionalidad del sistema con sólo añadir

nuevos estados y transiciones (sin cambiar lo implementado).

Desventajas:

No es aplicable al 100% de los casos.

Es fácil caer en el error de definir demasiados estados lo que

complicará el sistema se puede solucionar con jerarquías.

Sistemas Electrónicos Programables

Programación de un Autómata

Ejemplo 4:

Especificar el diagrama de estados de la luz frontal del

ejemplo 2. Pulsar Botón

Encendido Apagado

Parpadeo Regulación

Pulsar Botón

Pulsar

Botón

Pulsar

Botón

Sistemas Electrónicos Programables

Programación de un Autómata (continuación…)

Ejemplo 4 (continuación…):

Analizar los eventos que generan las transiciones y las

acciones a realizar en cada estado.

Evento Significado

Pulsar Botón Cuando la señal pasa de nivel bajo a nivel alto

Estado Acciones Se realiza…

Apagado* Apagar la luz 1 vez

Encendido Encender la luz 1 vez

Parpadeo Apagar la luz cuando hayan transcurrido 500 mS todo el tiempo

Encender la luz cuando hayan transcurrido500 mS todo el tiempo

Regulación Regular la luz en base al valor del potenciómetro todo el tiempo

* Estado inicial

Sistemas Electrónicos Programables

Programación de un Autómata (continuación…)

Ejemplo 4 (continuación…):

Identificar los requisitos de cada evento y cada estado.

Evento Requisitos

Pulsar Botón R1. Problema de rebotes con el sistema mecánico del pulsador

R2. Es posible utiliza la interrupción externa

Estado Requisitos

Apagado R3. La luz debe estar apagada al arrancar el sistema

R4. La luz se apaga en la transición hacia este estado

Encendido R5. La luz se enciende en la transición hacia este estado

Parpadeo

R6. Se debe guardar el tiempo del último cambio que se ha realizado

R7. Se cogerá el primer valor en la transición hacía este estado

R8. Se pueden crear dos sub-estados: Apagado y Encendido

Regulación Ninguno

Sistemas Electrónicos Programables

Programación de un Autómata (continuación…)

Ejemplo 4 (continuación…):

Codificar el programa en base a toda la información

obtenida previamente: #define LUZ 6

#define PULSADOR 2

#define POTENCIOMETRO A1

#define APAGADO 0

#define ENCENDIDO 1

#define PARPADEO 2

#define REGULACION 3

byte estado = APAGADO;

byte subestado;

unsigned long tiempoAnterior;

void setup() {

pinMode(PULSADOR, INPUT);

pinMode(LUZ, OUTPUT);

attachInterrupt(0, intPulsador, RISING);

digitalWrite(LUZ, LOW);

}

Definición de los Estados

Requisito R3

Requisito R1

Variables para el Autómata

Sistemas Electrónicos Programables

Programación de un Autómata (continuación…)

void loop() {

switch(estado)

{

case APAGADO:

break;

case ENCENDIDO:

break;

case PARPADEO:

if ((millis() - tiempoAnterior) > 500) {

tiempoAnterior = millis();

if (subestado == ENCENDIDO) {

digitalWrite(LUZ, LOW);

subestado = APAGADO;

}

else {

digitalWrite(LUZ, HIGH);

subestado = ENCENDIDO;

}

}

break;

case REGULACION:

int val = analogRead(POTENCIOMETRO);

analogWrite(LUZ, (val * 255.0) / 1023.0);

break;

}

}

Requisito R6

Clasificación de Estados

Requisito R8

Sistemas Electrónicos Programables

Programación de un Autómata (continuación…)

void intPulsador() {

delay(20);

switch(estado)

{

case APAGADO:

digitalWrite(LUZ, HIGH);

estado = ENCENDIDO;

break;

case ENCENDIDO:

tiempoAnterior = millis();

subestado = ENCENDIDO;

estado = PARPADEO;

break;

case PARPADEO:

estado = REGULACION;

break;

case REGULACION:

digitalWrite(LUZ, LOW);

estado = APAGADO;

break;

}

}

Requisito R4

Clasificación de Estados

Requisito R5

Requisito R7

Sistemas Electrónicos Programables

Programación de un Autómata (continuación…)

Ejemplo 4 (continuación…):

Añadir un nuevo modo de funcionamiento donde la luz se

encienda a un 50% de la potencia:

¿Cómo de complicado y

costoso sería este cambio?

Esta presentación está sujeta a la licencia de Reconocimiento

de Creative Commons mediante la cual se permite la copia, la

distribución, la comunicación pública y la generación de obras

derivadas sin ninguna limitación siempre que se cite al autor y

se mantenga el aviso de la licencia.

© 2014, Jonathan Ruiz de Garibay

Algunos derechos reservados