universidad aut~noma metropolitana148.206.53.84/tesiuami/uam3569.pdf · mediante listas doblemente...

72
UNIVERSIDAD AUT~NOMA METROPOLITANA UNIDAD IZTAPALAPA DIVISIóN DE CIENCIAS BÁSICAS E INGENIERÍA PROYECTO DE INGENIERÍA I Y 11 CONTROL AUTOMÁTICO DE SERVICIOS PRESENTADO POR 93319445 FREGOSO FARRERAFERNANDO 92219851 FRANCO RAMOSLUISMIGUEL 9521 5460 PACHECO VALENCIA VkTOR HUGO PARA LA OBTENCIóN DEL GRADO DE LICENCIATURA EN INGENIER~A ELECTR~NICA ASESOR M. EN C. FAUSTO CASCO SANCHEZ t/ .- TRIMESTRE 2001-P

Upload: lykhuong

Post on 02-Nov-2018

219 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

UNIVERSIDAD AUT~NOMA METROPOLITANA UNIDAD IZTAPALAPA

DIVISIóN DE CIENCIAS BÁSICAS E INGENIERÍA

PROYECTO DE INGENIERÍA I Y 11 CONTROL AUTOMÁTICO DE SERVICIOS

PRESENTADO POR 93319445 FREGOSO FARRERA FERNANDO 92219851 FRANCO RAMOS LUISMIGUEL

9521 5460 PACHECO VALENCIA VkTOR HUGO

PARA LA OBTENCIóN DEL GRADO DE LICENCIATURA EN INGENIER~A ELECTR~NICA

ASESOR M. EN C. FAUSTO CASCO SANCHEZ t/

.-

TRIMESTRE 2001-P

Page 2: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

ÍNDICE

2 2 5 8 8 9 1 Introducción Objetivo Acerca del sistema Software de la PC

Programación utilizada Diseño utilizado Interfaz del usuario Operación del sistema y mensajes en caso de error

Protocolo de comunicación Sistema mínimo

Conector BUS ISA Hardware del sistema mínima Software del sistema mínimo

Equipo periférico Interfaz de comunicación Periférico sensor de infrarrojo

Periférico sirena de alarma Periférico control de iluminación

Descripción a bloques del circuito Funcionamiento del pergérico Circuito implementado

Software de la PC Structs.cpr Io-vhpv. cpr Cmdseria. cpr Mb. cpr Tareaxcpr Pci. cpr Pled. cpr Preg.cpr . Perifs. cpr Cas. c

Mbs. cpr F82552. cpr F8255. cpr Simula. c Smcir. c Sm. cir

Interfaz para sensor de infrarrojo

Software del sistema m’nimo

1 1 2 2 2 2 4 5 6 6 7 8 9 10 11 11 15 16 16 16 17 19 19 19 28 28 32 37 39 43 46 53 56 56 59 60 61 64 65

Page 3: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

Conclusiones Bibliografia

68 69

Page 4: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

CONTROL AUTOMÁTICO DE SERVICIOS

Es un hecho que la tecnología electrónica digital ha llegado a nosotros para ofrecemos toda una gama de facilidades y hacernos la vida mucho más cómoda. Si hay un dispositivo al cual podemos agradecerle todo este desarrollo, es al microprocesador y/o microcontrolador, que mediante un programa y operaciones lógicas, hace posible que, con sólo presionar un botón, todo un sistema pueda llevar a cabo de manera automática toda una tarea.

Hasta hoy, muchos de los equipos electrónicos como lo son la televisión, la videocasetera y modulares, son controlados y automatizados por medio de la electrónica digital; s i embargo, aún hay muchas cosas por automatizar, para así, por un lado tener un mayor control de nuestros gustos y necesidades, y por el otro, un mayor control de la energía y recursos.

OBJETIVO

Controlar todo equipo eléctrico y/o electrónico que tenga una interfa de comunicación electrónica, ya sea desde una PC, sistema mínimo, equipo periférico y/o mediante un control remoto.

ACERCA DEL SISTEMA

Este proyecto pretende el control de los equipos eléctricos y electrónicos mediante un sistema controlado por un microprocesador, una computadora personal y periféricos.

Computadora +] Figura: Diagrama a bloques del sistema

Con periféricos, se refiere a un conjunto de tarjetas que, dependiendo su labor, se encargará de activar o desactivar algunas funciones como también de proporcionar o recibir información del usuario.

1

Page 5: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

CONTROL AUTOMÁTICO DE SERVICIOS

SOFTWARE DE LA PC

Programación utilizada El lenguaje utilizado para este proyecto se le conoce, como: “Lenguaje C“; y el tipo de programación es el “estructurado”. Se maneja principalmente con memoria dinámica mediante listas doblemente enlazadas.

Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

I Structs.cpr 1 Contiene la5 estructuras utilizadas dentro del programa, para el manejo de listas

Diseño del promama La estructura principal de este programa está formada por una “lista de periféricos” dados de alta, y una “lista de tareas” en espera para la ejecución y envío de información al sistema mínimo.

Adjunto existen archivos pertenecientes para cada tipo de periférico, que contienen los procedimientos y fbnciones para el manejo y control de los mismos así como los de interfaz con e1 usuario; con esto es posible que no haya un límite de periféricos por conectar, y con el simple hecho de incluir el archivo perteneciente al periférico a dar de alta, es posible controlarlo.

Interfaz del usuario La pantalla principal cuenta con dos ventanas: una es la lista de periféricos y la otra la lista de tareas por realizar.

2

Page 6: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

E

CONTROL AUTOMÁTICO DE SERVICIOS

Lista de periféricos

I

n la “list

Imagen: Pantalla principal del programa para la PC

:a de tareas” se muestra la dirección, la función y una identificación de periférico de todas las tareas por realizar. Su funcionamiento es simple, pues se encarga de enviar y recibir el primer elemento de la lista a través del puerto serial en formato MODBUS al sistema mínimo.

En la “lista de periféricos” se muestra la dirección, el tipo de periférico y un texto abierto como referencia de cada periférico. Su manejo es simple, pues sólo se necesitan las teclas “Ins” para dar de afta un nuevo periférico, “Supr” para darlo de baja> las “teclas de cursor” para escogerlo y para abrir su pantalla de interfaz, la. tecla “Return”.

Una vez que se ha seleccionado un periférico, se abre una ventana con los campos y botones respectivos para recibir y/o enviar información, según sea el caso para cada circuito a controlar.

3

Page 7: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

CONTROL AUTOaTICO DE SERVICIOS

Imagen: Interfaz del usuario para el control de iluminación de una lámpara.

Operación del sistema Y mensajes en casos de error. El programa cuenta con una rutina cíclica para la atención del usuario o de las tareas por realizar, de este modo se garantiza que en todo momento, la PC esté en constante revisión de cualquier petición solicitada, ya sea por control automático o por algún movimiento hecho manualmente.

Debido a que el protocolo utilizado cuenta con un byte para la detección de errores, y se contempla la posibilidad de comunicar al equipo principal, el tipo de error encontrado, t

se han integrado rutinas para comunicar al usuario que durante la intercomunicación entre la PC y el sistema mínimo ha ocurrido algún error.

Por otro lado, la comunicación con el sistema mínimo es del tipo Pregunta-Respuesta, es decir, que antes de formular la siguiente pregunta, debo recibir una respuesta. Si esta por cualquier circunstancia no llegara a recibirse, la PC intenta preguntar dos veces más, pues es posible que el sistema minimo no haya recibido la tram de infartnacibn anterior. Si este último no respondiera a lo más en tres intentos, entonces se notifica en la pantalla que Ia comunicación entre la PC y el sistema m'nimo no existe.

: !

I, .

I - S -

.. t' . =

Imagen: IVotlficaciÓn al usuario que no hay comunicación con el sistema ntinimo

4

Page 8: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

CONTROL AUTOMÁTICO DE SERVICIOS

PROTOCOLO DE COMUNICACI~N

El protocolo utilizado a lo largo del proyecto ha sido modificado con la finalidad de tener uno óptimo para nuestro sistema.

Inicialmente se propuso uno propio que se dedicaba solamente a enviar una trama de 3 caracteres, compuesta por un caracter de bandera “@”, un carácter de dirección y otro de fünción, tal como se muestra en la siguiente figura:

1 BANDERA I DlRECCION 1 FUNCION 1

Este protocolo solamente sirvió para probar a nuestro primer prototipo del proyecto. Contaba con muchas deficiencias, pues no se podía tener la seguridad de que la información llegaba correctamente a su destino, y sólo podía enviar información ai sistema mínimo mas no recibir.

El siguiente protocolo utilizado es conocido como “MODBUS”

Una de las razones por las cuales se decidió cambiar, es debido a que no es lo mismo utilizar un protocolo creado por cuenta propia, a otro que actualmente se usa en la industria.

Las diferencias principales que tiene este protocolo con el anterior, son el manejo de un número mayor de direcciones y fünciones, la capacidad de enviar “n” caracteres de datos, el envío de dos caracteres para la detección de error y su capacidad del receptor de comunicar al equipo emisor el tipo de error que hubo al recibir una trama.

La configuración de enlace que se utiliza es “Desbalanceada” y el soporte de transmisión utilizada es semidúplex.

El modo de transmisión utilizada es el modo ASCCI, debido a la facilidad de uso en la PC a través del serial.

La trama utilizada por “MODBUS es la siguiente:

1 BANDERA I DIRECCION 1 FLTNCION 1 DATOS I SVT 1 TERMNACION I

Dentro de las características de MODBUS tenemos que el número máximo de direcciones es de 249, el de fbnciones de 255 y el número de datos es tan amplio como el sistema lo necesite. Para este último se utilizaron 81 caracteres como máximo debido a que se pensó que éste sería una cantidad bastante amplia para la transmisión.

Los únicos caracteres que pueden viajar en esta trama son: ‘:’, ‘O’, ‘1’’ ...,’ S’,‘9’, ‘ A , ‘B’, ...,’ E’, ‘F’, ‘CR’ y ‘LF’. Estos dos últimos son los caracteres ‘l3d’ y ‘10d’ respectivamente y representan a los comandos ‘Carry Return’ y ‘Line Feed’.

Page 9: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

CONTROL AUTOMÁTICO DE SERVICIOS

PROTOCOLO DE COMUNICACIóN

El protocolo utilizado a lo largo del proyecto ha sido modificado con la finalidad de tener uno óptimo para nuestro sistema.

Inicialmente se propuso uno propio que se dedicaba solamente a enviar una trama de 3 caracteres, compuesta por un caracter de bandera “@?, un carácter de dirección y otro de fbnción, tal como se muestra en la siguiente figura:

BANDERA

Figuro: Trclmn del Ier. Protocolo urilizndo

FUNCIóN DR!3CCION (3 1 Caracter I Caracter

Este protocolo solamente sirvió para probar a nuestro primer prototipo del proyecto. Contaba con muchas deficiencias, pues no se podía tener la seguridad de que la información llegaba correctamente a su destino, y sólo podía enviar información al sistema mínimo mas no recibir.

El siguiente protocolo utilizado es conocido como “MODBUS”

Una de las razones por las cuales se decidió cambiar, es debido a que no es lo mismo utilizar un protocolo creado por cuenta propia, a otro que actualmente se usa en la industria.

Las diferencias principales que tiene este protocolo con el anterior, son el manejo de un número mayor de direcciones y funciones, la capacidad de enviar “n” caracteres de datos, el envio de dos caracteres para la detección de error y su capacidad del receptor de comunicar al equipo emisor el tipo de error que hubo al recibir una trama.

La configuración de enlace que se utiliza es “Desbalanceada” y el soporte de transmisión utilizada es semidúplex.

El modo de transmisión utilizada es el modo ASCCI, debido a la facilidad de uso en la PC a través del serial.

La trama utilizada por “MODBUS” es la siguiente:

I BANDERA I DJRECCI~N I FUNCION I DATOS I

Dentro de las características de MODBUS tenemos que el número mkximo de direcciones es de 249, el de hnciones de 255 y el número de datos es tan amplio como el sistema lo necesite. Para este último se utilizaron 81 caracteres como máximo debido a que se pensó que éste sería una cantidad bastante amplia para la transmisión.

Los únicos caracteres que pueden viajar en esta trama son: ‘:’, ‘O’, ‘l’, ...,’8’,‘9’, ‘A’, ‘B’, ...,’ E’, ‘F’, ‘CR’ y ‘LF’. Estos dos últimos son los caracteres ‘13d’ y ‘10d’ respectivamente y representan a los comandos ‘Carry Return’ y ‘Line Feed’.

6

Page 10: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

CONTROL AUTOMÁTICO DE SERVICIOS

Para nuestro proyecto se utilizará del puerto 300h hasta el 303h.

Hardware del sistema mínimo Como hardware tenemos principalmente a una PC, que entre sus diversos periféricos se le agregará un circuito interfaz de entrada-salida, mismo que nos proporcionará el bus de datos y direcciones.

Figura: Circuito interfm en frada-salida

El circuito entrada-salida cuenta con dos circuitos integrados: un 8255 y un 74688. El primero es una interf'az con 3 puertos programables, y el segundo es un decodificador.

7

Page 11: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

CONTROL AUTOMÁTICO DE SERVICIOS

Una vez que el CI 74688 recibe el direccionamiento de parte del sistema mínimo, es comparada con el encendido del dip switch. Si estas coinciden y la señal de AEN se encuentra en nivel bajo, proporciona una salida de OV (nivel bajo). Esta señal habilita al CI 8255 que a su vez analiza el estado de las líneas AO, A l , RD y WD y opera en consecuencia.

El CI debe ser programado para poder fbncionar correctamente, dado que sus 24 bits de salida pueden ser configurados en 3 modos diferentes como entrada o salida. Estos 24 bits están organizados como 3 bytes de 8 bits cada uno, que corresponden a las direcciones logradas por A0 y AI; la cuarta dirección corresponde al byte de control, el cual nos permite configurar el chip según nuestras necesidades.

Palabra de control PA@-PA7 PC7-PC1 PC3-PCO PB7-PBO 128 Sal Sal Sal Sal 129 130 131 136 137

I39 144 145 14G 147 152 153 159

138

Sal Sal Sal Sal Sal Sal Sal Ent Ent Ent Ent Ent Ent Ent

Sal Sal Sal Ent E nt Ent Ent Sal Sal Sal Sal Ent Ent Ent

Ent Sal E nt Sal Ent sal Ent Sal Ent Sal Ent Sat Ent Sal

Sal Ent Ent Sal Sal Ent Ent Sal Sal Ent Ent Sal Sal Ent

155 Ent Ent Ent Ent Tabla: .Isignacionespara la programación del 8,755

Software del sistema mínimo Dentro del software se tienen 3 programas que ejecutan una fbnción diferente cada una que finalmente se integrarán en una sola. El primero es una simulación de lo que de momento pudiera realizar el sistema mínimo, el segundo es un programa que maneja y controla la interfaz de entrada-salida, y el tercero es un programa que consulta si hay información por recibir en los diferentes circuitos controlados por la interfaz de entrada- salida.

En el primer programa se tiene la simulación de dos dip switch . y dos leds. Cada dip switch contiene una palabra que será leída por la PC, y por su parte, cada led se encenderá o apagará cuando se le dé esa instrucción. El programa utilizado analiza la trama recibida por el serial, y si se llegara a encontrar algún error, el sistema minimo no tomará ninguna acción y le reporta a su emisor el tipo de error encontrado.

8

Page 12: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

CONTROL AUTOMÁTICO DE SERVICIOS

Por otro lado, el circuito interf'az mencionado, también cuenta con su programa de prueba, el cual por el momento enciende 8 ieds del puerto B, lo que indica que dentro de la simulación ya es posible integrar a dos dip switch y dos leds reales.

El tercer programa está por probarse, pero para ello se requieren los circuitos de interfaz PC-periféricos, mismos con los que no se cuenta por el momento. Su hncionamiento es simple, pues mediante una encuesta se van solicitando datos a cada periférico a fin de saber si tiene información para el sistema mínimo, y por consiguiente atender a dicha petición.

Figura: Programa que realiza la debida encuesta a cada perlfirico interconectado

EOUIPO PERIFÉRICO

Un equipo periférico, es un circuito que tiene como misión el controlar algún dispositivo, sea eléctrico o electrónico.

Para llevar a cabo su tarea, deberá contener una interfaz de comunicación, un circuito digital y un analógico.

Pigura: Diagrama a bloques del equipo perlfirico.

9

Page 13: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

CONTROL AUTOMÁTICO DE SERVICIOS

INTERFAZ DE COMUNICACI~N

Esta interfaz nos sirve para entregar o recibir inforrnacibn a los periféricos instalados. Cada uno tendrá asignada una dirección y contará con circuitos que controlarán el acceso de datos provenientes del sistema mínimo y el periférico.

.

wp Switch Figura: Esquema del circuiro interjaz de comunicacidn

Como puede verse, a la entrada se tienen 3 bytes provenientes de la interfaz entrada- salida instalado dentro del sistema mínimo. En el puerto C exclusivamente se recibirá tanto el direccionamiento como las palabras de control para el manejo de esta interfq mientras que por el puerto A y €3, se pretende manejar la entrada y salida de las fhciones y datos provenientes del periferko instalado.

También puede incluirse una memoria EPROM con información que pudiera ser uti1 correspondiente al periférico conectado. Para el manejo de su dirección y datos se usará a los puertos A y B respectivamente.

La configuración utilizada entonces para el manejo de esta interfaz se muestra en la siguiente tabla.

Configuración Puerto A Puerto B Puerto C Palabra de control del Palabra de Control d e l puerto c 8235

Leer EPROM Write Read Write 1 OOODDDD 130 Data (In) XRcad Read Write OlOODDDD Fn y Data (Out) Write Write Write O0 1 ODDDD

146 128

FII (In) Read X,& Write OOOlDDDD 146 Tahkr: ConJgurncirin de los puertos A, B y C y palabra de control de C de parte

del sisfenm minimo, donde DDDD es In direccirln del perviriico

10

Page 14: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

CONTROL AUTOMÁTICO DE SERVICIOS

PERIFÉRICO SENSOR DE INFRARROJO

Este circuito basa su operación en el C.I. 556, el cual esta compuesto por 2 generadores de pulso equivalente a tener 2 C.I. 555, un fototransistor, un emisor de infrarrojo y conjunto de resistencias y capacitores.

Este circuito opera con un VCC de S volts, que al ser aplicados inician el fincionamiento del circuito lo cual es una gran ventaja, ya que dicho voltaje puede ser suministrado por medio de la computara lo cual podría activar o desactivar el sensor mandando un uno constante al mismo.

Primeramente se colocan el emisor de infrarrojo y el fototransistor a cierta distancia el uno del otro de tal modo que la señal proporcionada por emisor de infrarrojo incida en el fototransistor, mientras dicha se6a.l no sea interrumpida el circuito genera un tren de pulsos, de ocurrir lo contrario el circuito manda un uno lógico durante todo el tiempo que esto ocurra.

A continuación se muestra un diagrama del mismo:

OUT THR

Interfaz Dara sensor de infrarro-io Uno de los problemas con los que nos enffentamos una vez desarrollado el sensor de infrarrojo h e encontrar la forma de poder establecer una comunicación adecuada con la computadora es decir, que la computadora detectara cuando el sensor estaba activado y cuando no en un momento dado, que la computadora mediante una señal enviada por ésta decidiera ignorar la activación o desactivación de la nlisma.

Todo esto resultaba algo dificil ya que la señal entregada por el circuito era un tren de pulsos bien un uno lógico, lo cual es dificil de ser interpretado por la computadora o en caso de haber varios sensores, determinar cual de todos h e el que se activó.

La soiución a este problema &e implementar un detector de 2 unos lógicos consecutivos el cual genera un uno 16gico a ía salida después de la ocurrencia de los mismos y un cero lógico en caso contrario.

1 1

Page 15: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

CONTROL AUTOMÁTICO DE SERVICIOS

INTERFAZ DE COMUNICACIóN

Esta interfa nos sirve para entregar o recibir información a los periféricos instalados. Cada uno tendrá asignada una dirección y contará con circuitos que controlarán el acceso de datos provenientes del sistema mínimo y el periférico.

Como puede verse, a la entrada se tienen 3 bytes provenientes de la interfaz entrada- salida instalado dentro del sistema mínimo. En el puerto C exclusivamente se recibirá tanto el direccionamiento como las palabras de control para el manejo de esta interfaz, mientras que por el puerto A y B, se pretende manejar la entrada y salida de las knciones y datos provenientes del periférico instalado.

También puede incluirse una memoria EPROM con información que pudiera ser útil correspondiente al periférico conectado. Para el manejo de su dirección y datos se usará a los puertos A y B respectivamente.

La configuración utilizada entonces para el manejo de esta interfaz se muestra en la siguiente tabla.

""."-"-.'."I___" Configuración Puerto A Puerto B Puerto C Palabra de control del Palabra de Control del

"I-

. - ..... --- I."..". - - - ..... ................................ ~ puerto C ~ I I 2252"- Leer EPROM Write Read Write l00ODDDD Data (In) XRead Read Write OlOODDDD Fn y Data (Out) Write Write Write O0 1 ODDDD Fn (In) Read X,,, Write O00 1 DDDD

130 146 128

"- 146 Tabla: ConJguracicin de los puertos A, B y C y palabra de control de C de parte

del sistenra mínimo, donde DDDD es In direccicin del perférico

12

Page 16: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

CONTROL AUTOMÁTICO DE SERVICIOS

r Esencial. Omional.

MAPAS DE KARNAUGH.

Para A:

O o o x P 1 o 01 x 1 1

Ja= x Qb

Ka= x -

Para B: 1 1 WQaQb O0 O 1 11 10

- Jb= x Qa Kb= 1

Para Z:

Z= x Qa

O 0 0 x 1 I 0 0 x 0

Una vez obtenidas las hnciones del flip-flop se obtuvo el siguiente circuito:

13

Page 17: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

- ”. - I_- - ”“ ” . . .. . .

CONTROL AUTOMÁTTCO DE SERVICIOS

I

Mediante este circuito y con ayuda de algunas compuertas OR podemos indicarle a la computadora exactamente cual o cuales sensores que se encuentran activados en determinado instante, (esto es, mediante el manejo de palabras de control que identifican a cada sensor de acuerdo a su posición), además si la computadora envía un cero a las terminales “clear” del “flip-flop” aunque el sensor siga activado la interfa es deshabilitada.

A continuación se presenta un diagrama a bloques que ilustra el modo de como se lleva a cabo lo anterior

TNTERFAZ DE DETECTOR DE DETECTOR DE

A

PALBRA nF

J CONTROL I HABILIT.UDESHAJ3ILITA 1NTERF.U

14

Page 18: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

CONTROL AUTOMÁTICO DE SERVICIOS

PER~F’ÉRICO SIRENA DE ALARMA

Este circuito es en realidad un oscilador en cascada y genera tonos de frecuencias bajas y altas, que al ser enviados a una bocina genera un sonido molesto.

Este circuito puede ser empleado como complemento a cualquier dispositivo que requiera de atención, como una alarma a cualquier caso de emergencia.

Figura: í’ircuito interfaz implementado como sirena.

Dentro de la implementación se tiene contemplada una interfaz basada en un relevador para poder ser activado o desactivado por la computadora, mediante el envío de un “cero” o un “uno” lógico, e incluso acoplarlo a un reloj, para provocar que esta variación de frecuencias de la más baja a la más alta se realice por ciclos.

15

Page 19: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

CONTROL AUTOMÁTICO DE SERVICIOS

PERIFÉRICO PARA CONTROL DE ILUMINACI~N

Descripción a bloques del circuito

Resistencia digital: se construyó partir de un multiplexor TC05 1, su fbncionamiento es similar a un selector de entradas, es decir, al mandarle un control lógico en su entrada, se selecciona uno de los ocho interruptores de salida. Lo anterior se resume en la siguiente tabla de verdad.

1 INPUT 1 1 SWITCH OF COMMON TERMINAL, TNHIBlT CHANEL INPUT/ OUTPUT

Tabla: Tabla de verdndpara el control de la resistencia digital.

Oscilador y optoacoplador: Su función es variar la intensidad del led dentro del CI MOC3011. El modo como opera es mediante la diferencia de potencial regulada por la resistencia digital, que oscila entre O y 5 Volts.

Una vez obtenido un nivel de voltaje, se genera un pulso de ancho variable proporcional al valor recibido. De este modo se controla el disparo en el diac, también dentro del CI MOC3011, y así éste conduce comente eléctrica para el control de la compuerta del triac, que se encuentra en la etapa siguiente.

Etapa de potencia: Está formado principalmente por un triac, que se encarga de conducir comente eléctrica recibida de la línea de energía, y algunos elementos pasivos. Al hacer que el diac, dentro del optoacoplador, conduzca corriente eléctrica, se logra encender el foco a cierta intensidad de l u z .

Funcionamiento del periféricg El modo de interacción con este periférico es mediante una palabra de 4 bits (del O000 a l 1 1 1 1) que servirá para indicar el grado de iluminación que el foco emitirá.

Con una palabra de O000 el foco estará apagado totalmente, y por el contrario en 1 1 1 1 estará encendido a su máxima potencia.

16

Page 20: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

CONTROL AUTOMÁTICO DE SERVICIOS

Circuito imdementado

............ - ..........

..... . l.l- ........ ............................................

~

, I

COM

17

Page 21: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

CONTROL AUTOMÁTICO DE SERVICIOS

Colocando resistencias en la salida del multliplexor, obtenemos un potenciómetro controlado mediante lógica (en este caso el conteo del O al 7).

~1 MULTIPLEXOR ~

Figura: Multiplexor HEF4051 y resistencias conectadas

18

Page 22: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

CONTROL AUTOMÁTICO DE SERVICIOS

SOFTWARE DE LA PC

STRUCTS.CPR

typedef struct nodoperiferico / * DeclaraciCn de una estructura * / 1 char dir [ 31 ; / / clave de la periferico int tipo; / / tipo de periferico char texto[47]; / / texto abierto de periferico char control [51] ; / / Palabra de control de periferico struct nodoperiferico *ant; struct nodoperiferico * s i g ; //struct nodosubdito *abajo; Iperiferico;

typedef struct nodotarea / * DeclaraciCn de una estructura * / 1 int destino; / / ( - ) : S.Minimo, ( + ) : Control del periferico char direccion[3]; / / posible adresses 0..247dec O=All slaves char instruccion[3]; / / posible functions l..255dec char data [ 811 ; / / n caracteres (max 80 definido personalmente) struct date fecha; / / Fecha de inicio de tarea struct time hora; / / Hora de inicio de tarea struct nodotarea *ant; / / struct nodotarea *sig; / / }tarea;

char KBCC, KBcc; / / VARIABLES GLOBALES PARA CAPTURAR TECLA OPRIMIDA int KB=O; / / Y ESTA PARA ACTIVAR. Y/O DESACTIVAR EL TECLADO

void resultados-tarea(); char key-manager(char *KBCC);

IO-VHPV. CPR

/ * Procedimientos Básicos Input/Output Entrada/Salida * /

#include #include #include #include #include #include #include #include #include #include

<dos. h> iconio. h> <string.h> idir. h> <stdio.h> <math. h> ialloc. h> <stdlib.h> <io. h> iprocess.h>

int KBst=O; / / teclado asignado=l inasignado=O int KBsinocan=O; / / teclado asignado=l inasignado=O

/ * Procedimiento que en un rango enmarcado por xl,yl x2,y2, dependiendo del type, rellena con un caracter * /

void escribe-lento(char * S )

{ int 1=0; while (S[¡] !='\O') {putch(s [il ) ; i++; delay(20) ;

1 I

/ * Impreso de caracteres * /

19

Page 23: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

CONTROL AUTOMÁTICO DE SERVICIOS

void empastado(int xl, int yl, int x2, int y2, int type) I /* types * / int i, j,k; / * """""""_ * / for (j=yl; j<y2+1; j++) / * O Escritorio * /

i / * 1 Ventana Normal*/ for (i=xl;i<xZ+l;i++) /* 2 Ventana negra * /

{ k=i+2. if (k==O&&type==O) { textbackground(9); textcolor(7) ; } if (k==l&&type==O) { textbackground(9) ; textcolor(8) ; 1 if (type==l) {textcolor (7) ; textbackground (9) ; 1 if (type==2) {textcolor (15) ; textbackground (O) ; ] if (type==4) {textcolor (LIGHTGRAY) ; textbackground(0);) gotoxy (i, j) ; if (type==O) cprintf ( " z " ) ;

if (type==l I I type==2 I I type==4) cprintf ( " " ) ; 1

1 1

/ * Procedimiento que crea una ventana para despliegue de informacitn, pero para evitar p,rdida de informacitn contenida en la pantalla, se guarda en un buffer. La ventana est delimitada por las coordenadas xl,yl-x2,y2 y su titulo se inserta en la cadena msg. Al cerrar la ventana, se reescribe la informacitn que se habia guardado con anterioridad en el buffer * /

void ventana (int xl,int yl,int x2,int y2,char *msg,char *buffer,int type) I int z, i, j; / * types * / if (type==O) / * """"""" */

I / * O Cerrar * / puttext(x1, yl, x2, y2, buffer); / * 1 Normal ON * /

I / * 2 Negra * / if (type==3) / * 3 Empastado * /

I / * 4 Normal OFF * /

1 empastado(x1, yl, x2, y2,O) ;

if (!(type==Ol Itype==3)) I

gettext(x1, yl, x2, y2, buffer); empastado(xl+l,yl+l,x2-l,y2-l,type); if (type==l)

if (type==4 )

if (type==Z )

gotoxy(x1,yl) ; cprintf ( "É" ) ;

{ textcolor (10) ; textbackground (9) ; ]

(textcolor ( 9 ) ; textbackground ,(O) ; }

{textcolor (7); textbackground (O);]

Page 24: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

CONTROL AUTOMÁTICO DE SERVICIOS

/ * Se usan para especificar las opciones de men€ * /

void boton (int xl, int y1,char *msg,int type) / * DIBUJA BOTON * / i gotoxy(x1, yl) ; / * types * / if (type==l) / * """"""" */

{ textcolor (7) ; textbackground (O) ; ] / * 1 boton inactiv * / if (type==O) / * O boton activo * /

{textcolor(LIGHTRED); textbackground(BLACK);] cprintf ("%c", 91) ; if (type==l)

if (type==O)

cprintf (msg) ; if (type==l)

if (type==O)

cprintf ("%c", 93) ;

{textcolor(7) ; textbackground(0); ]

(textcolor(YELL0W); textbackground(BLACK);}

{ textcolor (7) ; textbackground (O) ; ]

(textcolor(L1GHTRED); textbackground(BLACK);]

I

2 2 5 9 8 9

/ * Se usan para dar animaciones a botones sobre el men€, haciendo visible sobre la pantalla que se ha pulsado esa opciCn * /

void a-boton (int xl, int y1,char *msg, int S , int type) / * animacion boton * / { if (s==l) / * types * /

/ * =============== * / { gotoxy (Xl, yl) ; textcolor(WH1TE); textbackground(L1GHTRED); cprintf ("Wc", 123) ; cprintf (msg) ; cprintf ("$c", 125) ; delay(200) ; boton (xl, yl, msg, type) ;

I I

/ * Despliega una cadena en la parte inferior de la pantalla * /

void mensaje(char * S )

I int i; textcolor(0); textbackground(7); for (i=l;i<8O;i+t)

gotoxy(i, 25) ; cprintf ( " " ) ;

I

I gotoxy(2,25); cprintf ( " % S " , S ) ;

I

/ * Despliega una cadena en la parte superior de la pantalla * /

void pmenu (char * S )

{ int i; textcolor (O) ; textbackground(7) ; for (i=l;i<8O;itt)

21

Page 25: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

CONTROL AUTOMÁTICO DE SERVICIOS

{ gotoxy(i, 1) ; cprintf (I ' " ) ;

I

I gotoxy(2,l) ; cprintf ( " + s " , s ) ;

/ * Presenta una barra de porcentaje de progreso sobre en una ventana * /

void porcentaje (double cantidad, double total, char *buffer) { double percent, cuadros, i; / * el buffer tiene que ser : * / cuadros=O; / * char buffer [136] * / percent=( (cantidad*100) /total) ; cuadros= ( (13*percent) /loo) ; if (percent==O)

I ventana(32,12,48,15," W ",buffer,l); textbackground (9) ; textcolor (15) ;

I gotoxy(34,14); for (i=l; i< (cuadros+l) ; i++) cprintf ("O") ;

for (i=(cuadros+l) ;i<14;i++) cprintf ( " " " ) ;

gotoxy (42,13) ; if (percent<lO) cprintf ( " ' I ) ;

if (percent<100) cprintf ( " ' I ) ;

cprintf ("%3. Olf %c",percent, 37) ; delay (20) ; if (percent==100) i / * delay(750); * / ventana(32,12,48,15," ",buffer,O);

I I

/ * Sustituye a gech(), es decir, recibe un caracter del teclado. La razCn de usar esta funcion, es para detectar cualquier tecla sobre el teclado * /

char key (char *x) { char c; c = getch() ; if ( c==O ) *x=getch ( ) ; / / gotoxy(60,l) ; printf ("c=%d CC=%d", c, *x) ; delay(200) ; //ver caracter return c;

1

/ * Ventana que se despliega en la parte superior en la cual las opciones para responder son... Si, No Cancelar . . . Esta €ltima opcitn depende de la variable "q". * /

char sinocan (int xx, int yy, int q) / * type * /

int SI,NO,CAN,M; char c, C, OPCION; /* q=1 cancelar * / SI=M=O; NO=CAN=1; c=' ' ; OPCION=' ' ; boton (xx, yy, "Si", SI) ; boton (xx+5, yy, "No",NO) ; mensaje(" Elije con flechas l a opcitn que deseas y presiona ENTER"); If (q==l)

22

Page 26: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

"

CONTROL AUTOMÁTICO DE SERVICIOS

boton(xx+lO, yy, "Cancelar", CAN) ; textcolor (LIGHTRED) ; textbackground (BLACK) ; do { c=key-manager (&C) ; M=O ; if (c==O&&c==77) / * si tecla == cursor derecha * / { if (q==l) i if (SI==O & & M==O) [SI=l;NO=O;M=l;) if (NO==O & & M==O) {NO=l;CAN=O;M=l;I

1 else (

I if (SI==O & & M==O) [SI=l;NO=O;M=1;)

I

I if (c==O&&C==75) / * si tecla == ci * /

If (q==l)

if (NO==O & & M==O) {NO=l;SI=O;M=1;} if ( W = = O & & M==O) {CAN=l;NO=O;M=l;]

I else [

1 if (NO==O & & M==O) {NO=1;SI=O;M=1;}

1 if (c=='S' I Ic=='s') ( SI=O; NO=1; c9N=1; } if (c=='N'I Ic=='n') ( SI=1; NO=O; CAN=l;j

if (c==13) / * si tecla == ENTER * / I

if ((c=='c'I Ic=='c')&&q==l) { SI=l; NO=l; CAN=O;I

if (SI==O) {a-boton(xx,yy, "Si",SI, 1) ; OPCION='S';] if (NO==O) {a_boton(xx+5,yyf "No",NO, 1 ) ; OPCION='N';] if (cm==O) [a-boton(xx+lO,yy,"Cancelar",CAN, 1) ; OPCION='C' ;

I if (c==27&&q==l) / * si tecla == ESC * / I SI=NO=l; CAN=o; a-boton(xx+lO,yy,"Cancelar",CAN,l); OPCION='C';

I if ((c==o&&c==75)1 I (c==O&&C==77)1 I (~==27&&q==l)I IC=='S'I /C=='S'I I

c=='N' I /c=='n'I Ic=='C'l Ic=='c') I boton (xx, yy, "Si", SI) ; boton (xx+5, yy, "No", NO) ; If (q==l) boton(xx+lO, yy, "Cancelar", CAN) ;

I } while ( ! ( OPCION=='S' I I OPCION=='N' I return OPCION;

}

I OPCION=='C'));

/ * sustituye a gets, es decir, sirve para corregir o introducir una cadena de caracteres en la cadena " S " . . . "ab" determina si la cadena es numerica o alfanumerica ..., * /

char st(int x, int y, char * S , int longitud, char *XX, int ENTER, int ab) I / * TYPES * / char C, cancela [ 8 0 ] , c; /* RETURN=l enter automatic0 al

int punto=O,i,nulo, lon, j = O ; / * ab=l: alfanumerico, ab=O numeric0 * / final del st * /

23

Page 27: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

CONTROL AUTOMÁTICO DE SERVICIOS

1 on=longi tud- 1 ; / * longitud=mismo valor que se asigne en " /

- setcursortype (-NORMALCURSOR) ; gotoxy (x, Y) ; textcolor (1) ; textbackground (15) ; strcpy (cancela, S ) ; for (i=O;i<lon;it+) cprintf ( " " ) ;

gotoxy (x, Y) ; if (ab==O) I i=O; while (s[i] !='\O') ( if (((s[i]>='O'&&s[i]<='9') 1 1 (s[i]=='. I if (s[i]=='.'&&punto==l)

if (s[i]=='. '&&punto==O) punto=2 ;

punto=l; } else punto=2 ;

/ * Colores de Caracteres * /

/ * Impreso de Fondo * /

/ * Rutina que revisa que la * / / * Cadena s e l o contenga * / / * Nfmeros y un punto * / / * en caso de no serlo, * / / * punto=2, para que sea * / I ) ) &&punto!=2) / * borrada la cadena * /

i+t ; 1

} if (punto==2) I 1

strcpy(s, " " ) ; strcpy (cancela, " " ) ; punto=O;

I i=O; while (s[i] !='\O') I if (s[i]=='. '&&&==O) punto=l ;

putch(s[i]); 1tt;

1 nul o=i ; i=O ; gotoxy (x, Y) ; for (;;) I c=key-manager(&C); if (c==O&&C==79) i i=nulo; gotoxy (x+i, y) ;

/* en caso de no aprobar la prueba * / / * de lq cadena para modo numeric0 * / / * borra la cadena * /

/ * Impreso de caracteres * /

/ * Comienza rutina * /

/ * Si c= Fin * /

} if (c==O&&C==71) I i=O ; gotoxy(x+i, y) ;

1

I i f (nul o==l on) for (j=nulo-2; j>=i;j--)

if (c==O&&C==82&&ab==l)

t s [j+ll =S [j I ; gotoxy(x+jtl,y); putch(s[j+l]);

/ * Si c= Inicio * /

/* Si c= Insert * /

I if (nulo<lon)

24

Page 28: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

CONTROL AUTOMÁTICO DE SERVICIOS I

for (j=nulo; j>=i; j--) { s[~+ll=s[jl; if ((j+l) !=Ion) { gotoxy(x+j+l,y); putch(s[j+l]); }

I nulo++;

I gotoxy(x+i,y); s[i]=' I ; putch(' ' ) ; gotoxy (x+i, y ) ;

I if (c==O&&C==83) / * Si c= Supr I / * Corregido if ( S [ ¡ ] !='\O')

I if (ab==O&&s [i]==' . ' )

for ( j = i + l ; j<=nulo;j++) punto=O;

I s[j-l]=s[j]; gotoxy(x+j-1,y); putch(s[j-11);

I gotoxy (xti, y) ; nulo=nulo-1;

I 1 if (c==O&&C==-93)

{ strcpy(s,""); punto=O; gotoxy (x, Y) ; for (i=O; i<lon; i++) cprintf ( " " ) ;

*xx=c; return c;

I if (c==8) I lf (i>=l) { if (ab==O&&s [i-1] == I . ' )

for ( j = l ; ]<=nulo; j++) punto=O;

i . .

s[j-l]=s[j]; gotoxy(x+j-1,y) ; putch(s[j-l] ) ;

I nulo=nulo-1; 1"; gotoxy (x+i, y) ;

I if (c==27) i

I

if (strcmp(s,cancela)==O) { *xx=c; return c;

I else { strcpy ( S , cancela) ; gotoxy (x, Y) for (i=O;i<lon;i++) cprintf ( " " ) ;

gotoxy (x, Y) ;

*/ con modo ab * /

/ * Si c= Alt Supr * /

/ * Si c= Backspace * / / * Corregido con modo ab * /

/ * Si c= Esc * /

I

25

Page 29: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

CONTROL AUTOMÁTICO DE SERVICIOS

i=O; while (s[i] !='\O') I putch(s [i] ) ; i++ ;

1 nulo=i ; 1=0 ; gotoxy (x, y ) ;

1 if (c==O&&C==77) I if (i+l<=nulo)

1

I i++;

I gotoxy (x+i, y) ;

I if (c==O&&C==75)

/ * Si c= Derecha * /

/ * Si c= Izquierda * /

t if ( (i==nulo) & & (nulo!=lon) )

I s[i+l]='\O'; nulott;

if (i ! =lon)

S [i] =c; gotoxy (xti, y) ; putch ( S [ i] ) ; i++ ;

1

I

I else

I if (ENTER==l)

I

1 else I

1

c=13;

printf ("%c", 007) ;

I 1 if ((ab==O)&&((c>='O'&&c<='9') I I (c=='.'))) I if (s[i]=='. ' )

pLmto=o; if (c=='.'&&punto==O) I punto=l; if ( (i==nulo) & & (nulo!=lon) )

I s[i+l]='\O'; nul o++ ;

26

Page 30: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

" "~

CONTROL AUTOMÁTICO DE SERVICIOS

I

I if (i ! =lon)

s [i] =c; gotoxy(x+i,y); putch(s[i]); i++ ;

I else

I if (ENTER==l)

else c=13;

printf ("%c", 007) ; I

I if (c>='O'&&c<='9') I if ( (i==nulo) & & (nulo!=lon) )

I s[1+1]='\0'; nulott;

if (i ! =lon)

s [i] =c; gotoxy(x+i,y); putch(s[i]); i++ ;

I

I

I else

I if (ENTER==l)

else c=13;

printf ("%c", 007) ; I

I I

I

I if (c==131 I (c==O&&C==72) I I (c==O&&C==80)) / * Si c=Enter Arriba Abajo * /

if ( strcmp(s,cancela) !=O) I s[i]='\O'; for (j=i; j<lon; j++)

I gotoxy(x+j,y); putch(' ' ) ; I I gotoxy (x, Y) ; textcolor (14); textbackground(1); / * Colores de Caracteres * / f o r (1=0; i<lon; it+) / * Impreso de Fondo * /

gotoxy (x, Y) ; i=O; while (s[i] !='\O') / * Impreso de caracteres * / Iputch(s[il ) ; i++;

I *xx=c; - setcursortype (-NOCURSOR) ;

1

cprintf ( " " ) ;

return c;

I I

27

Page 31: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

CONTROL AUTOMÁTICO DE SERVICIOS

CMDSERIA.CPR #define ESPERA 15

char cin; char cout; int status;

void micializaserial(vo1d) I struct REGPACK reg; reg.r-ax = Ox00E6; //ah=OOh al=11100110b=E6h; reg.r-dx = 0x0000; //dx=OOh intr ( OxOOOE, &reg) ; / / Interrupcion 14h=000E puerto serial

1

/ * inicializa serial * / / / Velocidad Paridad Bit parada Longitud palabra / / bits 7-5 4-3 2 1-0 / / / / OOO= 110 OO=ninguna 0=1 10=7 bits / / 001= 150 Ol=impar 1=2 11=8 bits / / 010= 300 10=ninguna / / 011= 600 ll=par / / 100=1200 / / 101=2400 / / 110=4800 / / 111=9600 / / dx=O puerto serial 1, dx=l puerto serial 1

"""" """"" """"" """"_

void sendserial (void) / * envla un caracter por el serial * / { asm ( mov dx,03f8h mov al, cin out dx, al

I 1

void receiveserial (void) / * recibe un caracter del serial * / 1 asm ( mov dx, 03f 8h m al, dx mov cout, al

1 1

MJ3.CPR

void inicializa-modbus() / / INICIALIZA LOS PARAMETROS Y VARIABLES I / / PARA COMUNICACION CON PROTOCOLO MODBUS

\ inicializaserial ( ) ;

void finalizamodbus() / / LIBERA MEMORIA Y DEJA LAS CONDICIONES DEL { / / SISTEMA EN CORRECTO ESTADO

I / / Se requiere esperar un tiempo t para

void calcula-lrc (char adress [3], char function[3], char DATA[81], char lrc[3] 1 I int suma=O, i=O;

28

Page 32: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

" . . " . . -

CONTROL AUTOMÁTICO DE SERVICIOS

char c; suma=suma+adress [ 11 +adress [ 11 ; suma=suma+function[O]tf~mction[l] ; while (DATA[i] !='\O') / / ENVIO DE DATOS; n caracteres I c=(DATA[i]>>4) &15; / / M ximo nfmero de caracteres = 80 if (c<lO) c=c+48; else c=c+55; suma=suma+c; c=DATA [ i] & 15 ; / / M ximo nfmero de caracteres = 80 if (c<lO) c=c+48; else c=c+55; suma=suma+c; it+;

I suma=suma&255; / / Me quedo con los 8 bits menos significativos suma=255-suma; / / PASO 2 255d=FFh suma=suma++; / / PASO 3 i=suma>>4 ; / / reutilizo variable i y guardo el valor de suma if ( (i&15 j <lo)

else

if ( (suma&15 j <lo)

else

lrc[2]='\0';

lrc[0]=48+(i&15); / / Conversion a ASCCI: 48=0 49=1 ... 57=9 lrc[0]=55+(i&15); / / 65=A 66=B . . . 70=F lrc[l]=48+(suma&15) ; / / Conversion a ASCCI: 48=0 49=1 . . . 57=9 lrc [I] =55+ (suma&15) ; / / 65=A 66=B . . . 70=F

I

/ / ENVIO DE INFORMACION EN PROTOCOLO MODBUS AL PUERTO SERIAL void modbus-serial (char ADRESS [3] , char FUNCTION [3] , char DATA[81] ) I int i; int suma=O; c m = ' : ' ; / / START sendserial ( ) ; delay (ESPERA) ; cin=ADRESS[O]; / / ENVIO DE DIRECCION; Primer caracter y pasol-LRC sendserial ( ) ; suma=suma+ADRESS [O] ; delay (ESPERA) ; cin=ADRESS[l]; / / ENVIO DE DIRECCION; Segundo y fltimo caracter sendserial ( ) ; suma=suma+ADRESS [ 11 ; delay (ESPERA) ; cln=FUNCTION[O]; / / ENVIO DE FUNCION; Primer caracter sendserial ( ) ; suma=suma+FUNCTION[O]; delay(ESPERA) ; cin=FUNCTION[l]; / / ENVIO DE FUNCION; Segundo y fltimo caracter sendserial ( ) ; suma=suma+FUNCTION[ 11 ; delay (ESPERA) ; 1=0 ; while (DATA[i] !='\O') / / ENVIO DE DATOS; n caracteres { cin=(DATA[i]>>4) & E ; / / M ximo nfmero de caracteres = 80 if (cin<lO) cin=cint48; else cin=cin+55; sendserial ( ) ; / / y se envian hasta encontrar suma=suma+cin; delay (ESPERA) ; cin=DATA[i] & E ; / / M ximo nfmero de caracteres if (cin<lO) cin=cin+48; else cin=cin+55; sendserial ( ) ; / / y se envian hasta encontrar suma=suma+cin; delay (ESPEFA) ;

29

caracter NULO

= 80

caracter NULO

Page 33: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

CONTROL AUTOMÁTICO DE SERVICIOS

i++; i suma=sma&255; / / Me quedo con los 8 bits menos significativos suma=255-suma; / / PASO 2 suma++; / / PASO 3 i=suma>>4 ; / / reutilizo variable i y guardo el valor de suma if ( (i&15) <lo)

else

sendserial ( ) ; delay (ESPERA) ; if ( (suma&15) <lo)

else

sendserlal() ; delay (ESPERA) ; cin=13; / / END (CR); Primer caracter 13_dec=ODhex sendserial ( ) ; / / Carry Return delay (ESPERA) ; cin=10; / / END (LF); Segundo y fltimo caracter lO-dec=OAhex sendserial ( ) ; / / Line feed delay (ESPERA) ;

cin=48+(i&15); / / Conversion a ASCCI: 48=0 49=1 . . . 57=9

cin=55+(i&15) ; / / 65=A 66=B . . . 70=F

cin=48+(suma&15); / / Conversion a ASCCI: 48=0 49=1 ... 57=9

cin=55+(suma&15); / / 65=A 66=B . . . 70=F

}

void traduce (char *original, char *ascci) { int i=O, j=O, h, 1; for(;;) i if (ascci [i] =='\O' ) I original [ j] = ' \O ' ; break;

I h=ascci [ i] ; if (h<=57) h=h-48; else h=h-55; h=h< < 4 ; i++ ; l=ascci [ i] ; if (1<=57) 1=1-48; else 1=1-55; original[ j] =h+l; i++; j++;

I I

/ / RECEPCION DE INFORMACION EN PROTOCOLO MODBUS DEL PUERTO SERIAL int serial-modbus(char ADRESS[3], char FUNCTION[3], char DATA[81], char LRC[3]) i char supertrama[l66], lrc[3] ; m t u l = l , band=O, suma=O; while (band==O) t status=bioscom(3,0,0); if (status & 0x100) i receiveserial ( ) ; band= 1 ;

I I ADRESS [O] =cout; suma=suma+cout; band=O;

/ / PRIMER CARACTER DE DIRECCION / / paso 1 para lrc

30

Page 34: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

CONTROL AUTOMÁTICO DE SERVICIOS

whlle (band==O) i status=bioscom (3, O, O) ; if (status & 0x100) { receiveserial ( ) ; band= 1 ;

I i ADRESS [ 11 =cout; suma=suma+cout; band=O; whlle (band==O) ( status=bioscom(3,0,0); if (status & 0x100) I receiveserial ( ) ; band= 1 ;

I I FUNCTION [ O 1 =cout ; suma=suma+cout; band=O; while (band==O) I status=bioscom(3,0,0); if (status & 0x100) i receiveserial ( ) ; band= 1 ;

I I FUNCTION [ 11 =cout; suma=suma+cout; band=O; while (band==O) I status=bioscom(3, O, O) ; if (status & 0x100) I receiveserial ( ) ; band=l ;

i i supertrama[O]=cout; / / RECIBIENDO 1ER CARACTER DE (DATOS Y LRC) suma=suma+cout; band=O ; while (band==O)

/ / SEGUNDO CA€?ACTER DE DIRECCION

2 2 5 8 8 9 / / PRIMER CARACTER DE FUNCION

/ / SEGUNDO CARACTER DE FUNCION

status=bioscom(3,0,0) ; if (status & 0x100) I receiveserlal ( ) ; band= 1 ;

I I supertrama[l]=cout; / / RECIBIENDO 2DO CARACTER DE (DATOS Y LRC) suma=suma+cout; band=O ; for ( ; ; ) I if (supertrama [ul-1] ==13&&supertrama[ul] ==lo) break; ul++ ; while (band==O)

31

Page 35: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

CONTROL AUTOMÁTICO DE SERVICIOS

i status=bioscom(3, O, O) ; If (status & 0x100) I receiveserial ( ) ; band=l ;

I 1 supertrama[u~]=cout; / / RECIBIENDO CARACTER DE (DATOS Y LRC) suma=sumatcout ; band=O ;

I LRC [O] =supertrama [ul-3] ; / / SEPARANDO LRChi DE DATOS suma=suma-supertrama[ul-3]; LRC [ 11 =supertrama [ul-2] ; / / SEPARANDO LRClow DE DATOS suma=suma-supertrama[ul-2]; suma=suma-supertrama[ul-11; suma=suma-supertrama[ul]; suma=255-suma; / / PASO 2 suma=sumat+; / / PASO 3 supertrama[ul-3]='\0'; traduce (DATA, supertrama) ; / / COPIANDO DATOS EN SU CADENA ADRESS [Z] =' \O ' ; FUNCTION[Z]='\O'; LRC[2]='\0'; ul=suma; / / reutilizo variable i y guardo el valor de suma ul=u1>>4; if ( (ul&15) <lo)

else

if ( (suma&15)<10)

else

lrc[2]='\0'; if (strcmp(LRC,lrc)==O) return 1; else return O;

lrc[0]=48+(ul&15); / / Conversion a ASCCI: 48=0 49=1 ... 57=9

lrc[0]=55+(ul&15) ; / / 65=A 66=B . . . 70=F

lrc [1]=48+ (suma&15) ; / / Conversion a ASCCI: 48=0 49=1 . . . 57=9

lrc[l]=55+(suma&15); / / 65=A 66=B . .. 70=F

1

TAREAS.CPR

/ " PROCEDIMIENTOS PARA EL MANEJO DE DATOS DE TAREAS. . .

Todos los procedimientos de listas doblemente enlazadas inserta nodos con informacien en listas enlazadas procedimientos para despliegar la informacien contenida en la lista borrado y liberacien de memoria

* / #define TOLERANCIA 5 / / en segundos; Tolerancia de espera para la recepcicn de la respuesta #define INTENTOS 3 / / No. de intentos para recibir la respuesta / * VARIABLES GLOBALES PARA EL MANEJO DE tareas * / tarea *tareaini='\O'; / / tarea *tareafin='\O'; / / int wintarea=O; / / char wtarea [ 40961 ; / / int Postarea; / / tarea *PANTtarea; / / int XXtarea=70,YYtarea=2; / / int dxxtarea=lO,dYYtarea=ZZ; char filetarea [ 131 ; / /

Apuntador al inicio de la lista Apuntador al final de la lista Ventana activa O=No l=Si buffer de la ventana principal posicion de cursor Primer nodo a despliegar en pantalla Valores X,Y posicion de la ventana

Nombre de archivo

32

Page 36: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

CONTROL AUTOMÁTICO DE SERVICIOS

char tareaadress [3], tareafunction[3], tareadata[81], tarealrc[3] ; int tareaok=O;

/ * Borra todos l o s nodos de la lista enlazada y libera memoria * /

void libera-tarea() I tarea *nodollbre; while (tareaini) { nodolibre=tareaini; if (tareaini->slg) I tareaini=tareaini->sig; tareaini->ant=NULL;

I else

free (nodolibre) ; tareainl=tareafin=NuLL;

I I

/ * Inserta un nodo al final de la lista enlazada * /

void ins-tarea(tarea *nuevonodo) I if ( ! tareaini) I nuevonodo->sig=NULL; nuevonodo->ant=NULL; tareaini=nuevonodo; tareafin=nuevonodo;

I else I nuevonodo->ant=tareafin; nuevonodo->sig=NULL; tareafin->sig=nuevonodo; tareafin=nuevonodo;

/ * Da de baja m nodo de la lista enlazada * /

void baja-tarea(tarea **nodo) I tarea *nodobaja; nodobaja=*nodo; if (tareainl==tareafin) I tareaini=NULL; tareafin=NULL; (*nodo) =NULL; free (nodobaj a j ; return;

1

I if (nodobaja==tareaini)

tareaini=tareaini->sig; tareaini->ant=NULL; (*nodo) =tareaini; free (nodobaja) ; return;

I

I

33

Page 37: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

CONTROL AUTOMÁTICO DE SERVICIOS

if (nodobaja==tareafin) I tareafin=tareafln->ant; tareafin->sig=NULL; (*nodo) =tareaf in; free (nodobaja) ; return;

I ( (*nodo) ->ant) ->sig= (*nodo) ->sig; ( (*nodo) ->sig) ->ant= (*nodo) ->ant; (*nodo) =(*nodo) ->sig; free (nodobaja) ; return;

I

/ * ------------ PROCEDIMIENTOS DE INTERFAZ ------------- * /

void alta-tarea(int des, char *dir, char *ins, char *data) I char CC, ventaalta[4096], tipo[3] ; tarea *nodo; struct date d ; / / Fecha de inicio de tarea struct time t; / / Hora de inicio de tarea nodo= (tarea*) malloc (sizeof (tarea) ) ; If ( !nodo) ( mensaje("ERR0R en alta-tarea: No se efectuC operaciCn por falta de memoria 1

getch ( ) ; Ok! ] " ) ;

I else I gettime (&t) ; nodo->hora.ti-hour=t.ti-hour; nodo->hora.ti-min=t.ti-min; nodo->hora.ti sec=t.ti-sec; nodo->hora. tiIhund=t. ti-hund; getdate (&d) ; nodo->fecha.da-year=d.da-year; nodo->fecha.da-day=d.da-day; nodo->fecha.da-mon=d.da-mon; nodo->destino=des; strcpy (nodo->direction, dir) ; strcpy(nod0->instruccion,ins); strcpy (nodo->data, data) ; ins-tarea (nodo) ;

I I

/ * Escribe la informaclCn de un nodo en el despliege de inf. enlistada * / void escribe-tarea(int POSICION, tarea *nodo, int i) { if (i==l&&wintarea==l) / * i= cursor * / (textcolor(1); textbackground(7);j else [ textcolor (7) ; textbackground (9) ; 1 gotoxy(71,4+POSICION) ; cprintf ("#3d",nodo->destino); gotoxy (75,4+POSICION) ; cprintf ("%2s", nodo->direction) ; gotoxy(78,4+POSICION) ; cprintf ("%2s",nodo->instruccion) ;

I

/ * Despliega sobre la pantalla parte de la informacitn que est en la lista enlazada, es decir, dependiendo del tamano de la lista y del tamano de la ventana de despliegue ... * /

34

Page 38: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

CONTROL AUTOMÁTICO DE SERVICIOS

int despliegar-tarea(int *position, tarea *nodo) I int i, ya=l; /* "ya=l" existe registro adelante * / tarea *p; / * posicion=en que renglon esta el cursor * / p=nodo; /* nodo= medemi inicial de la p gina * / if (p !=NULL)

I for (i=l;i<l8;i++)

if (ya==O) I

i textcolor(7); textbackground(9); gotoxy (XXtarea+l, 4+i) ; cprintf ( I ' " 1 ;

I

I if (ya==l)

if (p->sig==NULL&&*posicion>i) *posicion=i; if (*posicion==i) escribe-tarea (i,p, 1) ; else escribe-tarea (i,p, O) ; if (p->sig==NULL)

else p=p->sig;

ya=O ;

1 I

I else

I

I for (i=l;i<l8;i++)

textcolor(7); textbackground(9); gotoxy(XXtarea+l, 4+i) ; cprintf ( "

I ya=O ;

I return ya;

1

void abrirventana-tarea() I int i; ventana (XXtarea, YYtarea,XXtarea+dXXtarea, YYtarea+dYYtarea, "TAREAS",wtarea, 1) ; textcolor (10) ; textbackground (9) ; for (i=XXtarea+l;i<=XXtarea+dXXtarea-I;¡++) ( gotoxy (i, YYtareafZ) ; cprintf ("A") ; gotoxy(i,YYtarea+dYYtarea-Z) ; cprintf ( " t i " ) ;

I textcolor (1) ; textbackground(7) ; gotoxy(71,3) ; cprintf ( " Id") ; gOtOxy(75,3); cprintf ("Ad") ; gotoxy(78,3); cprintf ("Fn") ;

1

void cerrarventana-tarea() I

I ventana (XXtarea,YYtarea,XXtarea+dXXtarea, YYtarea+dYYtarea, "Cerrar2",wtareaI O) ;

void inicializa-tarea() { POStarea=l; PANTtarea=tareaini;

35

Page 39: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

CONTROL AUTOMÁTICO DE SERVICIOS

I strcpy(tareaadress, " ' I ) ; strcpy (tareafunction, " " ) ; strcpy ( tareadata, ' I " ) ;

1

void finaliza-tarea() {

I libera-tarea ( ) ;

/* Procedimiento interfaz con el usuario para el despliegue de la informacien . . . dependiendo de la tecla presionada . . . este programa ejecuta el desplazamiento indicado por el usuario * /

void resultados-tarea() ( int i, secs, criterio=O, intentos=O; struct time t; if (PANTtarea==NULL) PANTtarea=tareaini; if (PANTtarea!=NULL) i if (wintarea==l) despliegar-tarea(&POStarea, &*PANTtarea); if (PANTtarea->destino<O) i do i intentos++; pmenu ( " " ) ; mensaje("Nbmer0 de intento para la comunicaciCn con sistema minimo: " ) ; printf ("#d", intentos) ; modbus-serial(PANTtarea->direccion,PANTtarea->instruccion,PANTtarea->data); gettime (&t) ; secs=(t.ti-hour*3600)+(t.ti-min*60)+t.ti-sec; for(;;) ( status=bioscom(3, O, O) ; / / SE CHECA SE SERIAL HA RECIBIDO CARACTER if (status & 0x100) / / SI SE CUMPLE CONDICION receiveserial ( ) ; / / RECIBO CARACTER

if (tout==':') //SE HA RECIBIDO START Y SE INICIA RECIBIMIENTO I tareaok=serial_modbus(tareaadress,tareaf~ction,tareadata,tarealrc); / /

escribe-respuesta-tarea(); criterio=l; break;

recibo cadena del serial

I gettime (&t ) ; if ( ( (t.ti~hour*3600)+(t.ti~min*60)+t.ti~sec)>=(secs+TOLERANCIA)) / / tiempo

i

}

transcurrido segun tolerancla

break;

1

I if (intentos==INTENTOS) / / esto termina

criterio=l; tareaok=2; //NO SE RECIBIO RESPUESTA DESPUES DE1 no. INTENTOS

I

36

Page 40: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

CONTROL AUTOMÁTICO DE SERVICIOS

}while(crlterio==O);

I if (PANTtarea->destino>O)

/ / delay(200); / / retardo para ver el funcionamiento de tareas baja-tarea (&PANTtarea) ; if (wintarea==l) despliegar-tarea(&POStarea, &*PANTtarea);

( 1

void flipflop-tarea() { int banderita=O; if (wintarea==O) ( wintarea=l; abrirventana-tarea ( ) ; banderita=l;

} if (wintarea==l&&banderita==O) I wintarea=O; cerrarventana-tarea();

I 1

PCI.CPR

/ * PC1 = PERIFERICO DE CONTROL DE ILUMINACION

INTERFACE DE USUARIO

- - - - - - - - DEFINICION DE PALABRA DE CONTROL PARA PC1 ---------

PALABRA DE CONTROL = 50 Caracteres O0 ... O1 = %Luminicidad: 00-50

PALABRA DE INSTRUCCION FUNCION=O lh AUMENTAR FlJNCION=02h DISMINUIR FUNCION=03h MAXIM0 FUNCION=04h MINIM0

POR EL MOMENTO NO SE UTILIZARA NINGUN DATO PAR?. EFECTUAR ESTA OPERACION

* /

int xpospci=8, ypospci=8;

/ * ------------ PROCEDIMIENTOS DE INTERFAZ ------------- * /

void formato-pci (int XX, int YY) i

gotoxy (XX+1, YY+ 1) ; printf ('I UBICACION: ' I ) ;

' I ) ; .............................................................. gotoxy (XX+l, YY+ 3) ; printf ( I ' Ú Intensidad de luz I¿ " 1 ;

gOtoxy(XX+l,YY+ 2) ; printf ( "

gotoxy(XX+l, YY+ 4) ; printf ( " Off 3

On " ) ; ..................................................................................................... gotoxy(XX+l,YY+ 5); printf ( " nu " ) ;

37

Page 41: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

CONTROL AUTOMÁTICO DE SERVICIOS

void status-pci(int XX, int YY, int ivalor) I int i; for (i=l;l<=ivalor;i++) ( gotoxy (XX+6+i, YY+4) ; printf ("+c", I @ ' ) ;

I for (i=ivalor+l;i<=5O;i++) i gotoxy (XX+6+i, YYt4) ; printf ("%c", ' ) ;

I I

/ * Crea un nodo, con la informacien y la inserta al final de la lista doblemente enlazada con la ayuda del procedimiento ins-tarea * /

void pci (periferico *nodo) { char wpci[4096], titulo[50], valor[3], cc, CC; int ivalor, bandera=O; if (strcmp(nod0->control, "")==O) I

I else

strcpy(nod0->control,"OO"); / / Inicializacien del periferico

t strcpy (titulo, " ' I ) ; strcat (titulo," Control de luz: " ) ; strcat (titulo, nodo->dir) ; strcat (titulo, " " ) ; ventana(xpospci, ypospci,xpospci+62,ypospci+9, titulo,wpci, 1) ; formato-pci (xpospci, ypospci) ; gotoxy (xpospci+l4, ypospci+l) ; printf (nodo->texto) ; do I valor [O] =nodo->control [O] ; valor [ 13 =nodo->control [ 11 ; valor [2]='\0' ; ivalor=atoi (valor) ; status-pci (xpospci, ypospci, ivalor) ; if (ivalor<50) I boton (xpospci+l4, ypospci+6, 'I- M ximo", O) ; boton(xpospci+2l,ypospci+7, "Aumentar " I , O) ;

I else ( boton(xpospci+l4, ypospci+6, "- M ximo", 1) ; boton(xpospci+21, ypospci+7, "Aumentar ' I , 1) ; -

I if (ivalor>O) I boton(xpospci+l4, ypospci+8," M;nimo", O) ; boton(xpospci+05, ypospci+7, "O Disminuir", O) ;

I 38

Page 42: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

CONTROL AUTOMÁTICO DE SERVICIOS

else i boton(xpospci+l4,ypospci+8," M;nimo",l); boton(xpospci+05, ypospci+7, ' 'E Disminuir", 1) ;

1 boton(xpospci+51, ypospci+8, " Salir ' I , O) ; cc=key-manager (KC) ; if (cc==O&&CC==77&&ivalor<50) / / tecla derecha; AUMENTAR ( ivalor+t ; alta-tarea (-2,nodo->dir, " 0 1 " 1 " " ) ;

1 if (cc==O&&CC==75&&ivalor>O) / / tecla izquierda; DISMINUIR I ivalor--; alta-tarea (-2, nodo->dir, "02", " " ) ;

1 if (cc==O&&CC==72&&ivalor<50) / / tecla arriba; MAXIM0 ( ivalor=50; alta-tarea (-2,nodo->dir, "03" , " " ) ;

I if (cc==O&&CC==80&&ivalor>O) / / tecla abajo; MINIM0 ( ivalor=O ; alta-tarea (-Z,nodo->dir, "04", " " ) ;

1 itoa(ivalor, valor, 10) ; nodo->control [O] =valor [O] ; nodo->control [ 11 =valor [ 11 ; if (cc==27) / / tecla Esc bandera=l;

]while (bandera!=l) ; ventana(xpospci,ypospci,xpospci+62, ypospci+9, titulo,wpci, O) ; 1

1

PLED. CPR

/ * LED = PERIFERICO PARA ENCENDIDO Y APAGADO DE UN LED

INTERFACE DE USUARIO

- - - - - - - - DEFINICION DE PALAERA DE CONTROL PARA LED ---------

PALABRA DE CONTROL: OO=STATUS DEL LED; ENCENDIDO=l APAGADO=o

FUNCION=Olh ENCENDER FUNCION=OOh APAGAR

ENVIO: NO SE REQUIERE NINGUN DATO PARA EFECTUAR ESTA OPERACION RESPUESTA: NO SE REQUIEREN DATOS . . . * /

int xpospled=8, ypospled=8;

/ * --------"-- PROCEDIMIENTOS DE INTERFAZ ---"---""- * /

void formato-pled (int XX, int YY) (

' I ) ;

" 1 ;

gotOXy (xx+1,YY+ 1) ; printf ( " PERIFERICO:

gotoxy(XX+l,YY+ 2) ; printf ( "

39

Page 43: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

CONTROL AUTOMÁTICO DE SERVICIOS

/ / Botones: [Encender/Apagar] , [Salir]

void status-pled(int XX, int YY, int ivalorj [ if (ivalor==O) I gotoxy (XX+3, YY+4) ; printf ( " APAGADO ' I ) ;

I if (ivalor==l) { gotoxy (XX+3, YY+4 ) ; printf ( " ENCENDIDO ' I ) ;

1 I

int analiza-respuesta-pled(char ma[3], char mf[3], char md[81])

char error [ 40961 , m1 [ 31 ; int a=O, f = O , ¡=O; if (tareaok==l) / / comunicacion correcta i if ( (strcmp("OO", tareafunction) !=O) I I (strcmp("01", tareafunction) !=O) ) { / / huboo una excepcion pmenu ( " " ) ; mensaje ("Presionar cualquier tecla para continuar. . . " ) ; if (strcmp ("U", tareadata) ==O) i ventana(3,3,78,23,"EXCEPCION",error,Z); gOtoxy(9,10); printf("E1 perif,rico ha enviado una respuesta de EXCEPCION DE

FUNC I ON, " ) ; gotoxy(9,ll); printf("1o que quiere decir que el equipo no ha tomado ninguna

acciCn. " ) ; gotoxy(9,12) ; printf ("Se requiere que se verifique si la funciCn solicitada

al equipo") ; gotoxy(9,13) ; printf ("es correcta y/o el equipo perif, rico est capacitado

para recibir") ; gotoxy (9,14) ; printf ("dicha instrucciCn. " ) ; getch ( ) ; ventana (3,3,78,23, "EXCEPCION", error, O) ; return o ; / / DEBIDO A QUE HUBO UNA EXCEPCION

I if (strcmp ("U", tareadata) ==O) { ventana(3,3,78,23,"EXCEPCION",error,2); gotoxy(9,10); printf("E1 perif,rico ha enviado una respuesta de EXCEPCION DE

gotoxy(9,ll); printf("1o que quiere decir que el equipo no ha tomado ninguna

gotoxy(9,lZ); printf("Se requiere que se verifique si la direcciCn solicitada

gotoxy(9,13) ; printf ("es correcta, si est instalada, dada de alta o

DIRECCION, " ) ;

acciCn. " ) ;

al equipo") ;

disponible. " ) ; getch ( ) ; ventana(3,3,78,23,"EXCEPCION",error,O); return o ; / / DEBIDO A QUE HUBO UNA EXCEPCION

I

so

Page 44: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

CONTROL AUTOMÁTICO DE SERVICIOS

if (strcmp ("E", tareadata) ==O) i ventana (3,3,78,23, "EXCEPCION ",error, 2 ) ; gotoxy(9,lO); printf("E1 perif,rico ha enviado una respuesta de EXCEPCION DE

gotoxy(9,ll); printf("1o que quiere decir que el equipo no ha tomado ninguna

gotoxy(9,lZ); printf("Se requiere que se verifique si los datos enviados al

gotoxy(9,13); printf("son correctos. Para este perif,rico especificamente no

gotoxy(9,14) ; printf ("enviarse ningfn dato para el encendido y/o apagado de

DATOS, " ) ;

acciCn.") ;

equipo") ;

debe") ;

2 2 5 8 8 9

un LED") ; getch ( ) ; ventana (3,3,78,23, "EXCEPCION", error, O) ; return 0; / / DEBIDO A QUE HUBO UNA EXCEPCION

1 1

1 if (tareaok==O) / / hubo un error en el lrc I pmenu ( " " ) ; mensaje("Presionar cualquier tecla para continuar.. . ' I ) ; if (strcmp (ma, tareaadress) !=O) a=l ; if ( (strcmp("03",tareafunction) !=O) I I (strcpy("83", tareafunction) !=O)) f=

ventana(3,3,78,23,"ERROR DE TRANSMISION",error,Z); gotoXy(4, 4 ) ; printf("Ha habido un error en la recepciCn de la respuesta

gotoxy(4, 5 ) ; printf("solicitada, por lo que se ha analizado a la respue

gotoxy (4, 6) ; printf ("en fmciCn de la que se debiC haber obtenido.. . " ) ; gotoxy(4, 8) ; printf ("PeticiCn enviada al perif,rico:") ; gOtOXy(4, 9) ; printf ( " DIRECCION:%s, FUNCION:%s, DATOS:Bs

//micas posibles funciones

funciCn") ;

obtenida " ) ;

LRC:%s",ma,mf,md,ml) ; gOtOXy (4,lO) ; printf ("Respuesta recibida del perif,rico: " ) ; gOtOXy(4,11); printf ( " DIRECCION:ks, FUNCION:Bs, DATOs:?s

LRC: % S " , tareaadress, tareafunction, tareadata, tarealrc) ;

I

a la

ta

gotoxy (4,13) ; printf ("Observaciones: " ) ; if (a==l) { gotoxy(4,14+i); printf ("La direcciCn de envio y la de respuesta son

if (f==l) { gotoxy (4,14+i) ; printf ("La respuesta recibida en el campo funciCn no

it+; getch ( ) ; ventana(3,3,78,23, "ERROR DE TRANSMISION", error, O ) ; return 1; / / DEBIDO A QUE HUBO UN ERROR, SIN EMBARGO HUBO UNA RESPUESTA

1 / / POR PARTE DEL PERIFERICO, POR LO QUE DEBE TOMARSE EN CUENTA

{

diferentes") ; i++; ]

es valida"); i++; }

if (tareaok==Z) / / no se pudo recibir respuesta

pmenu ( " " ) ; mensaje("Presionar cualquier tecla para continuar.. . " ) ; ventana (3,3,78,23, "NO SE RECIBIO RESPUESTA",error, 2) ; gotOxy(l0, 5); printf("No se recibiC respuesta por parte del perif,rico despu,s

gotOXy(l0, 6); printf("haber1e pedido una PeticiCn por %d veces de #d s. de

gotOxy(l0, 7); printf("Esto pudo haber sucedido porque el Irc enviado en la

gotoxy ( 1 0 , 8) ; printf ("el lrc calculado por el equipo no coinciden debido a un

gOtOxy(l0, 9); printf("de comunicaciCn serial; como tambi,n puede ser que el

gotoxy ( 1 0 , l O ) ; printf ("no este listo para recibir informaciCn o no est,

de") ;

tolerancia", INTENTOS , TOLERANCIA) ;

trama y " ) ;

error") ;

equlpo" ) ;

conectado al") ;

41

Page 45: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

CONTROL AUTOMÁTICO DE SERVICIOS

gotoxy ( 1 0 , l l ) ; printf ("cable serial. " ) ; getch ( ) ; ventana (3,3,78,23, "ERROR DE TRANSMISION", error, O) ; return O; / / DEBIDO A QUE HUBO UN ERROR, SIN EMBARGO HUBO UNA RESPUESTA

I / / POR PARTE DEL PERIFERICO, POR LO QUE DEBE TOMARSE EN CUENTA return 1; / / NO HUBO NINGUN ERROR Y NINGUNA EXCEPCION

1

void pled(periferic0 *nodo) ( char wpled[4096], titulo[50], cc, CC; char adress [ 3 ] , function[3], data [ S 1 1 ; int ivalor, bandera=O, resp; if (strcmp(nod0->control, "")==O) I

1 else i

strcpy (nodo->control, "O") ; // Inicializacien del periferico

strcpy (titulo, " ' I ) ; strcat (titulo, " Led: " ) ; strcat (titulo, nodo->dir) ; strcat (titulo, " " ) ; ventana (xpospled, ypospled, xpospledt62, ypospledt9, titulo, wpled, 1) ; formato-pled (xpospled, ypospled) ; gotoxy (xpospled+l4, ypospled+l) ; printf (nodo->texto) ; do { pmenu ("Esc=Salir de perif, rico LED") ; mensaje ( " ' I ) ; if (nodo->control [O]=='O' ) ivalor=O; if (nodo->control[O]=='l') ivalor=l; statusgled (xpospled, ypospled, ivalor) ; if (ivalor==l)

else

boton(xpospled+5l,ypospled+8, " Salir ' I , O) ; cc=key-manager(&CC); if (cc==O&&CC==82&&ivalor==O) / / Tecla Ins (Encender led) I

boton(xpospled+4l,ypospled+5, " Del: Apagar ' I , O) ;

boton(xpospled+4l,ypospled+5, " Ins: Encender", O) ;

alta-tarea(-l0,nodo->dir, "Ol", " " ) ; resultados-tarea ( ) ; / / provisional resp=analiza-respuestagled(nodo->dir, "Ol", " " ) ; if (resp==l) ivalor=l;

1

i if (cc==O&&CC==83&&ivalor==l) / / Tecla Supr (Apagar led)

alta-tarea (-l0,nodo->dir, "OO", " " ) ; resultados-tarea ( ) ; / / provisional resp=analiza-respuestagled(nodo->dir, "OO", "'I) ; if (resp==l) ivalor=O;

1 if (ivalor==l) nodo->control [O] = ' 1 ' ; if (ivalor==O) nodo->control [O] = ' O' ; if (cc==27) / / tecla Esc I

1 bandera=l;

}while (bandera!=l) ; ventana(xpospled,ypospled,xpospled+62,ypospledt9,titulo,wpled,O); 1

Page 46: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

CONTROL AUTOMÁTICO DE SERVICIOS

P E G . CPR

/ * REGISTRO = PERIFERICO PARA SOLICITAR UN REGISTRO INTERFACE DE USUARIO

- - - - - - - - DEFINICION DE PALABRA DE CONTROL PARA REG --------- PALABRA DE CONTROL: OO=ULTIMO CARACTER RECIBIDO; CARACTER

FUNCION=03h LEER REGISTRO

ENVIO: NO SE REQUIERE NINGUN DATO PAF?.A EFECTUAR ESTA OPERACION RESPUESTA: SE RECIBIRA EL PAR DE CARACTERES QUE REPRESENTA AL VALOR

* / int xpospreg=8, ypospreg=8;

/ * "---------- PROCEDIMIENTOS DE INTERFA2 ------------- * / void formato-preg(int XX, int YY) {

" ) ;

" 1 ;

' I ) ;

gOtOXy(XX+1,YY+ 1); printf ( " PERIFERICO:

gotoxy(XX+l, YY+ 2) ; printf ( "

gotoxy(XX+1,~~+ 3); printf ( " U Caracter fiiiiLziAAiii

gotoxy(XX+l,YY+ 4); printf ( " 3

; gotoxy(XX+l,YY+ 5 ) ; printf (,, . .................................. Pfi " ) ;

EN REGISTRO

/ / Botones: [ leer 1 , [Salir]

void statuspreg(int XX, int YY, char ivalor) { gotoxy (XX+8, YY+4) ; printf ( " % e " , Ivalor) ;

int analiza-respuesta-preg(char ma[3], char mf[3], char md[81] ) { char error [ 40961, m1 [ 31 , pl[3] ; int a=O, f = O , i=O; if (tareaok==l) / / se recibio correctamente la trama { if (strcmp ("03", tareafunction) !=O) / / hubo una excepcion { pmenu ( " " ) ; mensaje("Presi0nar cualquier tecla para continuar.. . " ) ; if (strcmp ("O", tareadata) ==O) { ventana(3,3,78,23,"EXCEPCION",error,Z); gOtoxy(4, 4); printf("E1 perif,rico ha enviado una respuesta de excepcion de

funcien, " ) ; gOtOXy(4, 5); printf("1o que quiere decir que el equipo no ha tomado ninguna

accien. " ) ; gotoxy(4, 6); printf("Se requiere que se verifique si la funciCn solicitada

al equipo") ; gOtOXy(4, 7) ; printf ("es correcta y/o el equipo perif, rico est capacitado

para recibir") ; gotoxy (4, 8) ; printf ("dicha instruccien. " ) ; getch ( 1 ; ventana (3,3,78,23, "EXCEPCION", error, O) ; return o ; / / DEBIDO A QUE HUBO UNA EXCEPCION

43

Page 47: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

CONTROL AUTOMÁTICO DE SERVICIOS

if (strcmp ( "U" , tareadata) ==O) 1 ventana(3,3,78,23,"EXCEPCION",error,2); gOtOXy(4, 4); printf("E1 perif,rico ha enviado una respuesta de exception de

gOtOXy(4, 5); printf("1o que quiere decir que el equipo no ha tomado ninguna

gotoxy(4, 6); printf("Se requiere que se verifique si la direcci.Cn solicitada

gotoxY(4, 7 ) ; printf ("es correcta, si est instalada, dada de alta o

getch ( ) ; ventana(3,3,78,23, "EXCEPCION", error, O) ;

direcciCn, " ) ;

acciCn. " ) ;

al equipo") ;

disponible. " ) ;

return o; / / DEBIDO A QUE HUBO UNA EXCEPCION I if (strcmp ("O", tareadata) ==O) I ventana(3,3,78,23,"EXCEPCION ",error,2); gotoxy(4, 4); printf("E1 perif,rico ha enviado una respuesta de excepcion de

gotoxy(4, 5 ) ; printf("1o que quiere decir que el equipo no ha tomado ninguna

gotoxy(4, 6); printf("Se requiere que se verifique si los datos enviados al

gotoxy(4, 7 ) ; printf("son correctos. Para este perif,rico especificamente no

gOtOXy (4, 8) ; printf ("enviarse ningfn dato para la solicitud del caracter en

gotoxy(4, 9); printf ("registro."); getch ( 1 ; ventana(3,3,78,23, "EXCEPCION", error, O) ;

datos, " ) ;

acciCn.") ;

equipo") ;

debe") ;

el") ;

return o ; / / DEBIDO A QUE HUBO UNA EXCEPCION }

} I if (tareaok==O) / / error en el lrc { pmenu ( " " ) ; mensaje ("Presionar cualquier tecla para continuar.. .Ir) ; if (strcmp(ma, tareaadress) !=O) a=l; if ((strcmp("03",tareafunction) !=O) I I (strcpy("83",tareafuction) !=O) ) f=l;

ventana(3,3,78,23,"ERROR DE TRANSMISION",error,2); gotoxy (4, 4) ; printf ("Ha habido un error en la recepciCn de la respuesta a l a

gOtoxy(4, 5 ) ; printf("solicitada, por lo que se ha analizado a la respuesta

gOtoxy(4, 6); printf ("en funciCn de la que se debiC haber obtenido.. ."); gotoxy(4, 8) ; printf ("PeticiCn enviada al perif,rico:"); gOtoxy(4, 9 ) ; printf ( " DIRECCION:Bs, FUNCION:%s, DATOS:%s

gotoxy (4 , 10) ; printf ("Respuesta recibida del perif, rico: " ) ; gotoxy (4,11) ; printf ( " DIRECCION: % S , FUNCION: % S , DATOS : % S

gotoxy (4,13) ; printf ("Observaciones : " ) ; if (a==l) { gotoxy(4,14+i); printf("La direcciCn de envio y la de respuesta son

if (f==l){ gotoxy(4,14+i); printf("La respuesta recibida en el campo funciCn no

i++; gotoxy (4 , 14+i) ; printf ("ConclusiCn") ; getch ( ) ; ventana (3,3,78,23, "ERROR DE TRANSMISION", error, O) ;

//micas posibles funciones

funciCn") ;

obtenida " ) ;

LRC:Ps",ma,mf,md,ml);

LRC: % S " , tareaadress, tareafunction, tareadata, tarealrc) ;

diferentes") ; i++; }

es valida"); i++; ]

return 1 ; / / DEBIDO A QUE HUBO UN ERROR, SIN EMBARGO HUBO UNA RESPUESTA 1 / / POR PARTE DEL PERIFERICO, POR LO QUE DEBE TOMARSE EN CUENTA

41

Page 48: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

CONTROL AUTOMÁTICO DE SERVICIOS

if (tareaok==Z) / / no se pudo recibir respuesta ( pmenu ( " " ) ; mensaje("Presi0nar cualquier tecla para continuar..."); ventana(3,3,78,23,"NO SE RECIBIO RESPUESTA",error,2); gotoxy(l0, 5); printf("No se recibit respuesta por parte del perif,rico despu,s

gotoxy(l0, 6); printf("haber1e pedido una peticitn por %d veces de %d s. de

gotoxy(l0, 7); printf("Esto pudo haber sucedido porque le lrc enviado en la

gotoxy(l0, 8); prlntf("e1 lrc calculado por el equipo no coinciden debido a un

gotoxy(l0, 9); printf("de comunicacitn serial; como tambi,n puede ser que el

gotoxy(10,lO); printf("no este listo para recibir informacitn o no est,

gotoxy(10,ll); printf ("cable serial.") ; getch ( ) ; ventana(3,3,78,23, "ERROR DE TRANSMISION",error, O) ; return O; / / DEBIDO A QUE HUBO UN ERROR, SIN EMBARGO HUBO UNA RESPUESTA

de") ;

tolerancia", INTENTOS, TOLERANCIA) ;

trama y ' I ) ;

error") ;

equipo") ;

conectado al") ;

I / / POR PARTE DEL PERIFERICO, POR LO QUE DEBE TOMARSE EN CUENTA return 1 ; / / NO HUBO NINGUN ERROR Y NINGUNA EXCEPCION

I

void preg(periferic0 *nodo) { char wpreg[4096], titulo[50], cc, CC, ivalor=' '; int bandera=O, decision=O; if (strcmp(nod0->control, "")==O) (

} else

strcpy(nod0->control," " ) ; / / Inicializacitn del periferico

I

strcpy (titulo, " " ) ; strcat (titulo, " Registro: " ) ; strcat (titulo, nodo->dir) ; strcat (titulo, " " ) ; ventana(xpospreg, ypospreg, xpospreg+62, ypospreg+9, titulo,wpreg, 1) ; formato-preg(xpospreg,ypospreg); gotoxy (xpospreg+l4 , ypospreg+l) ; printf (nodo->texto) ; do { pmenu ("Esc=Salir de perif, rico REGISTRO") ; mensaje ( " ' I ) ; lvalor=nodo->control[O]; statuspreg(xpospreg,ypospreg,Ivalor); boton (xpospreg+41, ypospreg+5, "INS: Leer ", O) ; boton (xpospreg+51, ypospreg+8, " Salir ", O) ; cc=key-manager (KC) ; if (cc==O&&cc==82) / / Tecla Ins (Leer Registro) I alta~tarea(-1l,nodo->dir,"03",""); resultados-tarea ( ) ; / / provisional decis ion=anal iza-respuestagreg(nod0->dir , "03", "'I) ; if (decision==l) strcpy(nod0->control, tareadata) ; / / provisional

} if (cc==27) / / tecla Esc bandera=l;

}while (bandera!=l) ; ventana (xpospreg, ypospreg, xpospreg+62, ypospreg+9, titulo,wpreg, O) ;

Page 49: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

CONTROL AUTOMÁTICO DE SERVICIOS

PERIFS.CPR

/ " PROCEDIMIENTOS PARA EL MANEJO DE DATOS DE PERIFERICOS. . . Todos los procedimientos de listas doblemente enlazadas inserta nodos con informacien en listas enlazadas procedimientos para despliegar la informacien contenida en la lista borrado y liberacien de memoria lectura y escritura a disco magn,tico.

* /

/* VARIABLES GLOBALES PARA EL MANEJO DE perifericos * / periferico *perifericoini='\O'; / / pointer lista enlazada periferico *perifericofin='\O'; / / pointer lista enlazada int winperiferico=O; / / ventana activa=l inactiva=@ int KBperiferico=@; / / teclado asignado=l inasignado=O char wperiferico [4096] ; //buffer de la ventana principal int POSperiferico,Aperiferico,Cperiferico,Eperiferico,Fperiferico; periferico *PANTperiferico, *CURSORperiferico; //pointers control int XXperiferico=l,YYperiferico=Z; //variables ubicacion ventana int dXXperiferico=66,dYYperiferico=22; / / variables tamano ventana char fileperiferico[l3]; / / nombre de archivo base de datos

/ * Borra todos los nodos de la lista enlazada y libera memoria * /

void libera-perifericoo I periferlco *nodolibre; while (perifericoini) I nodolibre=perifericoini; if (periferlcoini->sig) i perifericoini=perifericoini->sig; perifericoini->ant=NLL;

I else

free (nodolibre) ; perifericoini=perifericofin=MJLL;

I 1

/ * Inserta un nodo al final de la lista enlazada * /

void i n s g e r i f e r i c o ( p e r i f e r i c o *nuevonodo) [ if (!perifericoini) I nuevonodo->sig=NULL; nuevonodo->ant=NULL; perifericolni=nuevonodo; perifericofin=nuevonodo;

I else i nuevonodo->ant=perifericofin; nuevonodo->sig=NULL; perifericofin->sig=nuevonodo; perifericofin=nuevonodo;

} \

Page 50: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

CONTROL AUTOMÁTICO DE SERVICIOS

void salvarperifericos (char *nombre) I periferico *primero; FILE *fp; primero=perifericoini; mensaje ("Escribiendo informacitn sobre disco magn,tico.. .") ; fp=fopen(nombre, "wb") ; if (!fp)

I mensaje ("NO se puede abrir archivo en disco magn, tico.. . ' I ) ;

getch ( ) ; return;

I while (primero)

i fwrite (primero, sizeof (periferico) ,1, fp) ; primero=primero->sig;

I mensaje ( " " ) ; libera-periferico ( ) ; f close (fp) ;

void obtener-perifericos(char *nombre) i periferico "nuevonodo; FILE *fp; mensaje ("Leyendo informacitn del disco magn, tico.. . ' I ) ; fp=fopen(nombre, "rb") ; if (!fp)

libera-periferico ( ) ; while (!feof (fp))

salvarperifericos (nombre) ;

I nuevonodo=(periferico*)malloc (sizeof (perifericc if ( ! nuevonodo)

I mensaje ( " Falta de memoria. .. DE UN ENTER" getch ( ) ; return;

I if ( 1 !=fread (nuevonodo, sizeof (periferico) , 1 , fp) )

I mensaje ( " " ) ; fclose (fp) ; return;

} ins-periferico (nuevonodo) ;

I

/ * Da de baja un nodo de la lista enlazada * /

void baja-perlferico (periferico **nodo) I periferico "nodobaja; nodobaj a=*nodo; if (perifericoini==perifericofin) i perlfericoini=NULL; perifericofin=NULL; (*nodo) =NULL; free (nodobaj a) ; return;

Page 51: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

CONTROL AUTOMÁTICO DE SERVICIOS

1 if (nodobaja==perifericoini) I perifericoini=perifericoini->sig; perifericoini->ant=NULL; (*nodo) =perifericoini; free (nodobaj a) ; return;

1 if (nodobaja==perifericofin) I perifericofin=perifericofin->ant; perifericofin->sig=NULL; (*nodo)=perifericofin; free (nodobaja) ; return;

1 ( (*nodo) ->ant) ->sig= (*nodo) ->sig; ( (*nodo) ->sig) ->ant= (*nodo) ->ant; (*nodo) = (*nodo) ->sig; free (nodobaja) ; return;

I

void ejecuta-periferico(periferic0 *GELLY) { if (GELLY->tipo==Z) pci(GELLY); / / control de iluminaciCn if (GELLY->tipo==lO) pled(GELLY); / / led if (GELLY->tipo==ll) preg(GELLY); / / Leer informacion de 8 bits

1

/ * """_""_ PROCEDIMIENTOS DE INTERFAZ ------------- * /

void pantalla-capturagerifericoo(int XX, int yy) ( gOtOXy(XXf2, YY+2) ; printf ("DirecciCn: (hex) " ) ; gotoxy ( X X + 2 , YY+3) ; printf ( r' Tipo: " ) ;

1

/ * Crea un nodo, con la informacitn y la inserta al final de la lista doblemente enlazada con la ayuda del procedimiento insgeriferico * /

void altageriferico ( ) { int xX=15,YY=lO; char CC, ventaalta[4096], tipo[3] ; periferico *nodo; pmenu ( " " ) ; nodo=(periferico*)malloc(sizeof(periferico)); if ( !nodo) { mensaje("ERR0R en alta-periferico: No se efectuC operaciCn por falta de memoria

[ Ok! I " ) ; getch ( ) ;

I else { ventana (XX, YY, XXC49, YY+7, "Alta", ventaalta, 1) ; pantalla-capturagerifericoO(XX,YY); strcpy (nodo->dir, " ' I ) ; strcpy (tipo, I"') ; strcpy (nodo->texto, " " ) ; strcpy (nodo->control, ' I " ) ; mensaje ("Escribe la direccicn del perif, rico. . . " ) ; st (XX+13,YY+2,nodo->dir, 3, &CC, O, 1) ;

48

Page 52: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

CONTROL AUTOMÁTICO DE SERVICIOS

nodo->dir [ O] =toupper (nodo->dir [O] ) ; nodo->dir [ 11 =toupper (nodo->dir [ 11 ) ; mensa3e ("Escribe el nfmero de tipo del perif, rico. . . " 1 ; st(XX+13,YY+3,tipo,3,&CC,O,O); mensaje ("Escribe la ubicacien del perif, rico.. . " ) ; st (XX+2,YY+S,nodo->text0,47, &CC, O, lj ; nodo->tipo=atoi (tipo) ; insgeriferico (nodo) ; ventana (XX, YY, XX+49, YY+7, "Cerrar",ventaalta, O) ; ejecuta-periferico (nodo) ;

I I

/ * Escribe la informacien de un nodo en el despliege de inf. enlistada * /

void escribegeriferico(int POSICION, periferico *nodo, int i) { if (i==l&&winperiferico==l) / * i= cursor * / (textcolor(1); textbackground(7);] else { textcolor (7) ; textbackground (9) ; } gotOXy(3,4+POSICION) ; cprintf ("%ls",nodo->dir) ; gotoxy ( 6,4+POSICION) ; cprintf ("%2d", nodo->tlpo) ; gotOXy(21,4+POSICION) ; cprintf ("8-46sf',nodo->textoj ;

I

/ * Despliega sobre la pantalla parte de la informacien que est en la lista enlazada, es decir, dependiendo del tamano de la lista y del tamano de la ventana de despliegue ... * /

int despliegar-periferico(int *position, periferico *nodo)

int i, ya=l; / * "ya=l" existe registro adelante * / periferico *p; / * posicion=en que renglon esta el cursor * / p=nodo; / * nodo= medemi inicial de la p gina * / if (p!=NULL)

I for (i=l;i<l8;i++)

I

{ if

if

(ya==O)

textcolor(7); textbackground(9); gotoxy(2,4+i) ; cprintf ( ' I

( ya==l)

if (p->sig==NULL&&*posicion>i) *posicion=i; if (*posicion==i)

else

if (p->sig==NULL)

else p=p->sig;

escribegeriferico(i,p, 1) ;

escribegerif erico (i, p, O j ;

ya=O ;

t I

I else

( for (i=l;i<lE;i++) I textcolor(7); textbackground(9);

Page 53: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

CONTROL AUTOMÁTICO DE SERVICIOS

gotoxy (2,4+i) ; cprintf ( " ;

I gotOxy(31,10) ; printf ( " No hay registros periferico") ; ya=O ;

1

1 return ya;

void a b r i r v e n t a n a g e r i f e r i c o ( ) I int i;

ventana(XXperiferico,YYperiferico,XXperiferico+dXXperiferico,YYperif~rico+dYYperi ferico," periferico ",wperiferico, 1) ; textcolor (10) ; textbackground (9) ; for (i=XXperlferico+l;i<=XXperiferico+dXXperiferico-l;i++)

void cerrarventanaperi fer ico() I

ventana(XXperiferico,YYperiferico,XXperiferico+dXXperiferico,YYperiferico+dYYperi ferico, "Cerrar2",wperiferico, O) ; I

void inicializaTODOSlosperifericos() { periferico *ANGY; ANGY=perifericoini; while (ANGY) i strcpy (ANGY->control, " ' I ) ; ejecuta-periferico (ANGY) ; ANGY=?iNGY->sig;

1 1

void inicializa-perlferico0 { POSperiferico=l; obtenerperifericos ("A: \PERIFS. C A S " ) ; PANTperiferico=CURSORperiferico=perifericoini; inicializaTODOSlosperifericos ( ) ; winperiferico=O; KBperiferico=O;

1

void finalizageriferico ( ) I salvar-perifericos ("A: \PERIFS. C A S " ) ; c e r r a r v e n t a n a p e r i f e r i c o ( ) ; i

/ * Procedimiento interfaz con el usuario para el despliegue de la informacien . . . dependiendo de la tecla presionada ... este programa

50

Page 54: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

CONTROL AUTOMÁTICO DE SERVICIOS

ejecuta el desplazamiento indicado por el usuario * /

void resultados-periferico ( ) i int i, XX; char cc, CC; if (winperiferico==l) I pmenu ("Ins=Alta Del=Baj a Enter=Abrir Esc=Salir") ; mensaje("Usa flechas, Av.Pag. C Re.Pag para ver la informaciCn, ENTER C ESC

if (CURSORperiferico==NLL) CURSORperiferico=perifericoini; if (PANTperiferico==NULL) PANTperiferico=perifericoini; XX=despliegarperiferico(&POSperiferico, &*PANTperiferico); if (XX==l) Fperiferico=Z; else Fperiferico=O; if (CURSORperiferico!=NLL) 225889

para salir") ;

( if (CURSORperiferico->sig!=NLL) Cperiferico=2; else Cperiferico=O; if (CURSORperiferico->ant!=NULL) Aperiferlco=2; else Aperiferico=O;

} else { Cperiferico=O; Aperiferico=O;

1 if (PANTperiferico->ant!=NULL) Eperiferico=2; else Eperiferico=O; if (KBperiferico==l&&KB==lj I cc=KBcc; cc=KBcc; If (cc==O&&CC==72&&Aperiferico==2) / * si tecla == cursor arriba I KB=O; / / Se inhabilita la tecla oprimida if (POSperiferico>l) ( escribe_periferico(POSperiferico,CURSORperiferico,O); CURSORperiferico=CURSORperiferico->ant; POSperiferico--; escrlbegeriferico (POSperiferico, CURSORperiferico, 1) ;

I else if (POSperiferico==l) i CURSORperiferico=CURSORperiferico->ant; PANTperiferico=PANTperiferico->ant; XX=despliegar-periferico(&POSperiferico, &*PANTperiferico); if (XX==l) Fperiferico=2; else Fperiferico=O;

1

* /

if if if

(CURSORperiferico->sig!=NULL) Cperiferico=2; else Cperiferico=O; (CURSORperiferico->ant!=NULL) Aperiferico=2; else Aperiferico=O; (PANTperiferico->ant!=NULL) Eperiferico=Z; else Eperiferico=O;

I if (cc==O&&CC==80&&Cperiferico==Z) / * si tecla == cursor abajo * / { m=O; / / Se inhabilita la tecla oprimida if (POSperiferico<l7) I escribegeriferico(POSperiferico,CURSORperiferico,o); CURSORperiferico=CURSORperiferico->sig; POSperiferico++; escribeperiferico(POSperiferico,CURSORperiferico,l);

1 else if (POSperiferico==17) {

51

Page 55: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

CONTROL AUTOMATIC0 DE SERVICIOS

CURSORperiferico=CURSORperiferico->sig; PANTperiferico=PANTperiferico->sig; XX=despliegar-periferico(&POSperiferico, &*PANTperiferico); if (XX==1) Fperiferico=Z; else Fperiferico=O;

1 if (CURSORperiferico->sig!=NULL) Cperiferico=2; else Cperiferico=O; if (CURSORperiferico->ant!=NULL) Aperiferico=2; else Aperiferico=O; if (PANTperiferico->ant!=NULL) Eperiferico=Z; else Eperiferico=O;

1

{ if (cc==O&&CC==73&&Eperiferico==2) / * si tecla == Pg Up * /

KB=O; / / Se inhabilita la tecla oprimida for (i=l;i<lE;i++) ( PANTperiferico=PANTperiferico->ant; CURSORperiferico=CURSORperiferico->ant; if (PANTperiferico->ant==NULL) break;

1 XX=despliegar-periferico(&POSperiferico, &*PANTperiferico); if (XX==l) Fperiferico=2; else Fperiferico=O; if (CURSORperiferico->sig!=NULL) Cperiferico=2; else Cperiferico=O; if (CURSORperiferico->ant!=NULL) Aperiferico=2; else Aperiferico=O; if (PANTperiferico->ant!=NULL) Eperiferico=Z; else Eperiferico=O;

1

I if (cc==O&&CC==El&&Fperiferico==2) / * si tecla == Pg Dn * /

KB=O; / / Se inhabilita la tecla oprimida for (i=l;i<l8;i++) { PANTperiferico=PANTperiferico-,sig; if (CURSORperiferico->sig!=NULL) CURSORperiferico=CURSORperiferico->sig;

I XX=despliegargeriferico(&POSperiferico, &*PANTperiferico); if (XX==l) Fperiferico=2; else Fperiferico=O; if (CURSORperiferico->sig!=NULL) Cperiferico=2; else CperiferiCO=O; if (CURSORperiferico->ant!=NULL) Aperiferico=2; else Aperiferico=O; if (PANTperiferico->ant!=NULL) Eperiferico=2; else Eperiferico=O;

1 if (cc==O&&CC==82) / * Ins = Uta5 * / I KB=O; / / Se inhabilita la tecla oprimida pmenu ( " " ) ; winperiferico=O; alta-perifericoo; winperlferico=l;

1 if (cc==O&&CC==83) / * Del = Bajas * / { KB=O; / / Se inhabilita la tecla oprimida if (PANTperiferico==CURSORperiferico) { baja-periferico (&CURSORperiferico) ; PANTperiferico=CURSORperiferico;

1 else baja-periferico (&CURSORperiferico) ;

1 if (cc==13) / * Enter = Escoger * / ( KB=O; / / Se inhabilita la tecla oprimida winperiferico=O; ejecuta-periferico (CURSORperiferico) ; winperiferico=l;

52

Page 56: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

CONTROL AUTOMÁTICO DE SERVICIOS

1 if (PANTperiferico==NULL) PANTperiferico=perifericoini; XX=despliegar-periferico(&POSperiferico, &*PANTperiferico);

I 1

I

/ * Proc. que busca inf. dentro de la lista enlazada

struct nodoperiferico *buscanodo(int dir) I periferico *nodo; nodo = perifericoini; for(;;) { If (dir==nodo->dir)

else I

break;

if (nodo->siy!=NULL) nodo=nodo->sig;

else I nodo=NULL; break;

I I

1

return nodo; 1 * /

void flipflop-perifericoo I int banderita=O; if (winperiferico==O) I winperiferico=l; KBperiferico=l; abrirventana-perifericoo; banderita=l;

I if (winperiferico==l&&banderita==O) I winperiferico=O; KBperiferico=O; cerrarventanageriferico ( ) :

I I

CAS.C

/ * PROYECTO MODBUS EN CAS """"__""""""

Pacheco Valencia Victor Hugo Fregoso Farrera Fernando Franco Ramos Luis Miguel

* /

#include <bios.h> #include <dos.h> #include <conio.h> #include <striny.h> #include <dir.h>

53

Page 57: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

CONTROL AUTOMÁTICO DE SERVICIOS

#include #include #include #include #include #include #Include #include #include #include #include #include #include #include #include #include

<stdio.h> <math. h> <alloc. h> <stdlib.h> <io. h> <process.h> <ctype. h> <a:\structs.cpr> / / declaracion de estructuras <a:\io-vhpv.cpr> / / Procedimientos de entrada y salida Vhpv <a:\cmdseria.cpr> / / Proced. de puerto serial <a:\mb.cpr> / / Proc. MODBUS <a:\tareas.cpr> / / Proc. de tareas. <a:\pci.cpr> / / Proc. periferico control de iluminacion <a: \pled. cpr> / / Proc. led <a: \preg. cpr> / / Proc. Reg <a:\perifs.cpr> / / Proc. de perifericos.

/ * Procedimiento que muestra una ventana con la bienvenida y los nombres de los integrantes del equipo * /

void bienvenidaivoid) / * Muestra cuadro de bienvenida * / i char welcome[1342]; ventana(10,7,70,17," C ",welcome,2);

gOtoxy(25,10) ; escribe-lento("CONTR0L AUTOMATIC0 DE SERVICIOS") ; delay (200 j ; gOtOXy(32,13); escribe-lento("Franc0 Ramos Luis Miguel..."); gotoxy (32,14) ; escribe-lento ("Fregoso Farrera Fernando. . . " ) ; gotoxy( 3 2 , 1 5 ) ; escribe-lento ("Pacheco Valencia V; ctor Hugo. . . " ) ; delay(2000) ; ventana(10,7,70,17," Hi ",welcome,O);

gOtOXy(l7, 9 ) ; printf ("BIENVENIDO AI. PROYECTO TERMINAI. DE INGENIERIA 11") ;

1

void tabs() / / programa para el paso de ficha de ventana y teclado I if (KBcc==9&&KB==1) I

1 KB=O; / / Se inhabilita la tecla oprimida

1

void funciones ( ) I //resultados-tarea(); resultados-periferico ( ) ;

1

char key-manager(char *KMANCC) I char KMANcc; for(;;) { if (kbhit ( ) ) break; funciones ( ) ;

1 KMANcc=key(&*KMANCC); return KMANcc;

1

void manager ( ) I for (;;) I if (kbhit ( ) )

Page 58: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

CONTROL AUTOMÁTICO DE SERVICIOS

I KJ3cc=key (&KBCC) ; m=1;

I funciones ( ) ; if (KBcc==O&&KBCC==59&&KB==l) ( KB= O ; flipflop-perifericoo ;

I if (KBcc==O&&KBCC==-122&&KI3==1) I KB=O; flipflop-tarea();

1 if (KBcc==27&&KB==l) break;

I m=o ;

1

/ * main * / void main (void) I - setcursortype(-NOCURSOR); textbackground (7) ; textcolor (O) ; iniclalizaserial(); clrscr ( ) ; textbackground (9) ; textcolor (15) ; empastado(1,2,80,24,0); bienvenida ( ) ; inicializa-tarea ( ) ; / / Inicializacion de funciones inicializa-periferico ( ) ; manager ( ) ; / / Programa principal finaliza-tarea(); / / Finalizacien de funciones f inaliza-periferico ( ) ; textbackground(0); textcolor (7); - setcursortype(-NORMALCURSOR); clrscr ( ) ;

1

55

Page 59: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

CONTROL AUTOMÁTICO DE SERVICIOS

SOFTWARE DEL SISTEMA MÍNIMO

MBS.CPR

Page 60: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

CONTROL AUTOMÁTICO DE SERVICIOS

57

Page 61: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

C O ~ O L AUTOMÁTICO DE SERVICIOS

58

Page 62: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

CONTROL AUTOMÁTICO DE SERVICIOS

Page 63: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

CONTROL AUTOMÁTICO DE SERVICIOS

F8255.CPR (Versión completa d e l archivo F82552.CPR)

60

Page 64: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

CONTROL AUTOMÁTICO DE SERVICIOS

SIMULA. C (Simulación del sistema mínimo: " leds y dos registros)

/ - """""" PROCEDIMIENTCIS DE 1NTEKFF.Z ------------- - I

61

Page 65: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

CONTROL AUTOMÁTICO DE SERVICIOS

Page 66: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

CONTROL AUTOMÁTICO DE SERVICIOS

m o d b u s - s e r i a l I A D R E S S , FUNCTICN, ZATA; ; / / F~ESFUEL'TA A P E T I C I O N o a n l = l ;

63

Page 67: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

CONTROL AUTOMÁTICO DE SERVICIOS

SMCIR. C (Programa inicial que controla la tarjeta

entrada-salida instalada en el sistema mínimo)

,+ """"-"- PZOCEDIMIENTOS 3E INTERFAZ ------------- e /

Page 68: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

CONTROL AUTOMÁTICO DE SERVICIOS

SM.C (Programa que encuesta el estado de cada periférico, según

la fbnción de entrada leída en el periférico de comunicaciones)

65

Page 69: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

CONTROL AUTOMÁTICO DE SERVICIOS

66

Page 70: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

CONTROL AUTOMÁTICO DE SERVICIOS

i

67

Page 71: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

CONTROL AUTOMÁTICO DE SERVICIOS

CONCLUSIONES

Durante el desarrollo de la etapa final del proyecto surgieron algunos inconvenientes, tales como el hecho de que algunos componentes requeridos para implementar ciertos circuitos son dificiles de conseguir, debido a que no son de uso común y en algunos casos ya están descontinuados o en su defecto son de costo elevado.

Esta limitante se superó implementando las diferentes interfases mediante el uso de componentes alternos, que aunque requerían una mayor circuitería, lograban llevar a cabo la misma tarea, además de resultar estos de relativa baja complejidad, lo cual al mismo tiempo permite detectar fallas con mayor facilidad.

Por otra parte algunos de los módulos propuestos inicialmente, a pesar de funcionar correctamente, no permitían llevar a cabo una comunicación apropiada con otros módulos o con el sistema, que es lo que finalmente se deseaba, por lo cual fueron desechados.

A pesar de todas las dificultades que surgieron durante el desarrollo del presente proyecto, estamos convencidos de que la idea planteada en un inicio puede ser desarrollada a mayor escala, acoplando mayor número de periféricos de acuerdo a las necesidades requeridas, ya que a pesar de que no se efectuó una comunicación real entre los diferentes módulos, se realizó una simulación tanto de los módulos al sistema como de modo inverso, lo cual operaba de un modo adecuado.

68

Page 72: UNIVERSIDAD AUT~NOMA METROPOLITANA148.206.53.84/tesiuami/UAM3569.pdf · mediante listas doblemente enlazadas. Cuenta con 10 archivos que aquí se mencionan en la siguiente tabla:

CONTROL AUTOMÁTICO DE SERVICIOS

BIBLIOGRAFÍA

1. Control del Enlace de Datos “onoprafia- Universidad Autómoma Metropolitana César Jalpa V., Ricardo Marcelin J., Oreste Téllez A. Noviembre de 1994.

2. Saber Electr6nica -Revista- Editorial Saber del Uruguay, S.R.L. Edición Andina, Número de colección 53 Aiio 6, Número 10 Octubre 1995.

3. Saber Electr6nica -Revista- Editorial Televisión S.A. de C.V. Edición mexicana, Numero de colección 27 Año 3, Número 11 1992.

4. Saber Electr6nica -Revista- Editorial Televisión S.A. de C.V. Edición mexicana, Numero de colección 88 Aiio 8, Número 12 1997.

5. Saber Electr6nica -Revista- Editorial Televisión S.A. de C.V. Edición mexicana, Numero de colección 83 Aiio 8, Número 7 1997.

6. Saber Electr6nica -Revista- Editorial Televisión S.A. de C.V. Edición mexicana, Numero de colección 40 Aiio 4, Número 12 1993.

7. Radio Electronics -Revista- Editorial Radio Electronics Volumen 63, Número 2 1992.

8. Manual de ECG Aiio 1997, tercera edición

9. L6Pica Dipital v Disefio de comDutadores M. Morris Mano Editorial Prentice Hall

69