lunes, 27 de febrero de 2012

LABORATORIO No.1 DE SIMULACION


Presentado Por: Jorge Andrés Prada.

Presentado A: Profesor Cesar Aceros


Diseño y Programación de un Cronómetro Digital de un Reloj de Pulso en StateChart Usando BetterState Lite 6.0.1



RESUMEN LABORATORIO No.1:

En el laboratorio No.1  se realizó el diseño del control de un cronómetro digital de un reloj de pulso convencional implementado en statechart utilizando el software  betterstate Lite 6.0.1, pasando por cada una de las etapas de construcción, describiendo cada uno de los estados, transiciones, acciones y eventos que conforman el control del cronómetro.

Se ilustrará gráficamente el diseño del cronómetro en bettersatate Lite 6.0.1 así como el código generado en lenguaje C por el software.


DESARROLLO DEL LABORATORIO

A continuación se explicará en detalle el diseño e implementación propuestos del control de un cronómetro digital de un reloj de pulso convencional en la herramienta BetterState Lite6.0.1.

El reloj de pulso utilizado es un reloj genérico, el cual se ilustra en la figura1.


Fig.1.

Para iniciar la descripción del trabajo realizado empezaremos por mencionar que los botones de mando del reloj de pulso están referenciados con las letras a, b, c y d como se ilustra en la figura 1.

Al iniciar el diseño se planteó la filosofía de funcionamiento del cronómetro como sigue:

(a) Debe comenzar estando en 00 minutos y 00 segundos. Sin embargo, para comprobar su funcionamiento, deberá poder partir en cualquier valor. De esta forma se podrá ver si cambia en forma correcta a todos los valores posibles sin tener que esperar mucho tiempo.

(b) Al presionar un botón (cuando comienza el evento a medir), debe partir contando en forma ascendente.

(c) Cada vez que totaliza 60 segundos, el contador de segundos debe pasar a 00 y el contador de minutos debe incrementarse en uno.

(d) Cuando se presiona el botón por segunda vez el cronometro se detiene indicando el tiempo transcurrido.

(e) Otro botón resetea el timer a cero.

Definida la filosofía de operación se empezó por definir el estado general que alberga todos los estados subordinados con el nombre “cronómetro”.

Se definieron dos estados subordinados llamados Habilitado y Deshabilitado, los cuales son activos vía la transición causada por el botón “d” del reloj, luego se le asignó la entrada por defecto al estado “Deshabilitado” como se ilustra en la figura2 tomada del software BetterState Lite 6.0,1


Fig.2.

El estado por defecto como se ilustra en la figura 3 posee una flecha arrivando, lo cual significa que cada vez que el operador del reloj acceda a la función cronómetro, el estado deshabilitado será visitado siempre por defecto.

El estado “Deshabilitado” es activo cuando el cronómetro esta deshabilitado, por lo tanto corresponde al estado de inactividad de la función cronómetro, este estado no contiene bloques subordinados.

El otro estado mostrado en la figura 2 es el “Habilitado”, este estado representa la función del cronómetro activa y contiene todos los estados subordinados que definen el control de este.

El cronómetro solo posee los campos Segundos y Minutos mostrados en el siguiente formato “00:00” y dado que se quiere manejar en tiempo real los incrementos de estos campos que están estrechamente relacionados, se crearon dos hilos de ejecución concurrentes dentro del estado “Habilitado”, uno de ellos se refiere al procesamiento y conteo de los segundos y el otro se refiere al procesamiento y conteo de los minutos este diagrama de estados es extraído de la programación realizada en BetterState Lite 6.0.1 y se ilustra en la figura 3.



Fig.3.


A continuación se procede a detallar el estado “Segundos”, este estado posee los estados, acciones, eventos y actividades necesarias para realizar el control del conteo de los segundos del cronómetro.

De acuerdo a la filosofía de funcionamiento planteada se consideró que este estado debía contener los siguientes estados subordinados:



ü  InicialSeg.
ü  ConteoSeg.
ü  Congelar.


A continuación se ilustrará en la siguiente figura 4 el detalle tomado de BetterState Lite 6.0.1 del estado “Segundos”.

Fig.4.


InicialSeg: Este estado es el estado por defecto del bloque ya que representa el estado inicial del conteo de segundos (“00”), por donde debe empezar el conteo del cronómetro, este estado es abandonado por primera vez cuando es pulsado el botón “a” del reloj, además posee la programación de una acción de salida del estado que realiza un seteo o ajuste a “1” de la variable “r”, esta acción tiene la finalidad de servir como bandera que indica que el conteo ya ha sido iniciado y posteriormente cuando el estado “InicialSeg” sea alcanzado se ejecute el cambio automático al estado “ConteoSeg”.

Cuando el botón de reset es presionado botón “b” este estado es alcanzado nuevamente y las banderas de los eventos y acciones son reseteadas así como el conteo de segundos a “00”.

ConteoSeg: El estado “ConteoSeg” realiza la función de la cuenta de los segundos que se van sumando por cada flanco de reloj del sistema ejecutado cada segundo, este estado es alcanzado por primera vez tras la pulsación del boton “a” partiendo de “InicialSeg”, y posee configurado una acción de entrada al estado que realiza la suma de los segundos. Cada vez que este estado es alcanzado el contador cs se incrementa en “1” mediante la fórmula “cs =cs +1”.

Tal como se observa en la figura 4 el estado posee una transición que sale y entra al mismo abandonando y alcanzando dicho estado cada flanco de reloj de un segundo y bajo la condición que el valor de “cs” sea menor a 59, dado que si este valor es alcanzado a la siguiente cuenta el conteo deberá ser reiniciado a “00” y continuar automáticamente, por tal motivo se programó una transición al estado inicial “InicialSeg” cada vez que el contador “cs” alcance el 59, el sistema activará el “InicialSeg” y retornará automáticamente al estado “ConteoSeg” ya que la bandera “r” ya ha sido seteada a 1.

Si estando en este estado el botón “a” es presionado el sistema hará una transición al estado “Congelar”, donde se detendrá el conteo y se mantendrá el valor contado hasta el momento.

Cuando el botón de reset es presionado botón “b” el estado inicial es alcanzado “InicialSeg” independiente de cualquier circunstancia y las variables “cs” y “r” son reseteadas.


Congelar: El estado congelar realiza la función de mantener el conteo logrado hasta el momento que este es alcanzado. Este estado es alcanzado si estando ya sea en “InicialSeg” o “ConteoSeg” y “r=1” el botón “a” es presionado.

Ahora procedamos a detallar el estado “Minutos”, este estado posee los estados, acciones, eventos y actividades necesarias para realizar el control del conteo de los minutos del cronómetro, los estados subordinados del estado “Minutos” son:

ü  InicialMin.
ü  ConteoMin

A continuación se ilustrará en la siguiente figura 5 el detalle tomado de BetterState Lite 6.0.1.


Fig.5.


InicialMin: Este estado es el estado por defecto del bloque, ya que representa el estado inicial del conteo de Minutos “00”, por donde debe empezar el conteo del cronómetro, este estado es abandonado por primera vez cuando la acción “cs=59” lograda en el estado concurrente “Segundos” es alcanzada.

Cuando el botón de reset es presionado “Botón b” este estado es alcanzado nuevamente y las banderas de los eventos y acciones son reseteadas, y el conteo de minutos es reseteado a “00”.

ConteoMin: El estado “ConteoMin” realiza la función de la cuenta de los minutos que se van sumando por cada evento “cs = 59” que es alcanzado en el bloque concurrente (Segundos), Cada vez que este estado es alcanzado el contador min se incrementa en 1 mediante la fórmula “min=min +1”, el estado es abandonado y alcanzado cada vez que la acción “cs=59” es alcanzada, ya que al alcanzar este valor deberá ser reiniciado a “00” y continuar con el conteo automáticamente, por tal motivo se programó una transición al estado inicial “InicialSeg” cada vez que el contador min alcance el valor 59. El sistema activará el estado “InicialMin” y retornará automáticamente al estado “ConteoMin” cuando la acción “cs=59” sea nuevamente alcanzada.

Cuando el boton de reset es presionado botón “b” el estado inicial es alcanzado (InicialMin) independiente de cualquier circunstancia y la variable “min” es reseteada.

Ya definido el diseño, e implementado el cronómetro del reloj de pulso en el software BetterState Lite 6.0.1. , este automáticamente permite generar el código en C mediante el software BetterState Lite 6.0.1, los archivos son:

ü  Cronómetro.c
ü  Cronómetro.h

CONCLUSIONES:

Los resultados obtenidos fueron satisfactorios ya que se logró el objetivo propuesto, se planteó el diseño de un cronómetro para un reloj de pulso y se implementó en statechart utilizando BetterState Lite 6.0.1 de una manera sencilla y eficaz.

No hay comentarios:

Publicar un comentario