· diseÑo e implementaciÓn de un sistema de monitoreo y control automÁtico (embebido) con...

249
DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO TCP/IP RONALD FEDRICK LINERO PINTO JORGE DANIEL MUÑOZ GALVIS CORPORACIÓN UNIVERSITARIA RAFAEL NÚÑEZ PROGRAMA DE INGENIERIA DE SISTEMAS AREA DE AUTOMATIZACIÓN INDUSTRIAL CARTAGENA DE INDIAS D.T. Y C. 2005

Upload: others

Post on 26-Apr-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y

CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET

BAJO EL PROTOCOLO TCP/IP

RONALD FEDRICK LINERO PINTO

JORGE DANIEL MUÑOZ GALVIS

CORPORACIÓN UNIVERSITARIA RAFAEL NÚÑEZ

PROGRAMA DE INGENIERIA DE SISTEMAS

AREA DE AUTOMATIZACIÓN INDUSTRIAL

CARTAGENA DE INDIAS D.T. Y C.

2005

Page 2:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y

CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET

BAJO EL PROTOCOLO TCP/IP

RONALD FEDRICK LINERO PINTO

JORGE DANIEL MUÑOZ GALVIS

Monografía para optar al título de Ingeniero de Sistemas

Director

Ing. Luís Fernando Murillo Fernández

Ingeniero Eléctrico Especializado en Informática Industrial

CORPORACIÓN UNIVERSITARIA RAFAEL NÚÑEZ

PROGRAMA DE INGENIERIA DE SISTEMAS

AREA DE AUTOMATIZACIÓN INDUSTRIAL

CARTAGENA DE INDIAS D.T. Y C.

2005

Page 3:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

Nota de aceptación:

________________________________

________________________________

________________________________

________________________________

___________________________

Firma del presidente del jurado

___________________________

Firma del jurado

___________________________

Firma del jurado

Cartagena de Indias D.T. Y C, 8 de abril de 2005

Page 4:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

A Dios por la vida, salud y sabiduría que me ha

dado en el logro de esta meta, a mi madre linda

Sara Pinto Cuesta por todo el esfuerzo y apoyo

que me ha brindado para ser de mí una persona

educada y hacer posible el triunfo que obtengo

hoy, a mi hijo y a Lorena por comprenderme y

por darme su amor, a mis hermanos Luís y Yerlis,

mi abuelita, mi tío Luís, Pedro Guzmán, la Sra.

Piedad y Consuelo por su apoyo incondicional en

todo momento y a todas las demás personas que

contribuyeron con mi crecimiento personal e

intelectual..

RONALD FEDRICK LINERO PINTO

RONALD FEDRICK LINERO PINTO

Page 5:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

A Dios por darme la voluntad, la fortaleza y la

salud diaria, sin él jamás habría terminado, a

mis padres Jorge y Andrea, que con su apoyo y

sus oraciones persistentes incentivaron mi

espíritu a seguir en esta ardua tarea, a mis

hermanos Leonard, Deysi, y Andrea Carolina

por su gran interés demostrado en todo momento.

Además expreso mis más sinceros

agradecimientos a los docentes que creyeron en

mí, orientándome adecuadamente para la

consecución de este logro personal, y a todos mis

compañeros y demás familiares que

contribuyeron con esta causa directa e

indirectamente...

JORGE DANIEL MUÑOZ GALVIS

Page 6:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

AGRADECIMIENTOS

Los autores expresan su sincero agradecimiento a:

Dios, nuestro padre celestial por habernos iluminado en los momentos más felices

y difíciles de nuestras vidas y por este triunfo que obtenemos hoy día.

A nuestros padres, por el apoyo incondicional que nos han brindado durante todo

el transcurso de esta profesión.

Ing. Luís Fernando Murillo Fernández, director de este trabajo de grado, por su

valiosa orientación y dedicación en cada una de las etapas de desarrollo del

proyecto.

Ing. Juan Pablo Paz, docente del programa de Ingeniería de Sistemas de la

CURN y asesor del proyecto, por compartir sus conocimientos y guiarnos en la

consecución del proyecto.

Ing. Juan Contreras Montes, docente del programa de Ingeniería de Sistemas de

la CURN y asesor del proyecto, por su orientación y colaboración desde un

principio en el desarrollo de este proyecto.

Ing. Maria Claudia Bonfante, coordinadora del programa de Ingeniería de

Sistemas de la CURN por su apoyo incondicional.

Ing. Lisbeth Urueta, docente del programa de Ingeniería de Sistemas de la CURN,

por los conocimientos y asesoría proporcionada en el área de la Ingeniería de

Software.

Page 7:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

CONTENIDO

pág.

INTRODUCCIÓN 23 EL PROBLEMA Y OBJETIVOS DE LA INVESTIGACION 24 ANTECEDENTES DEL PROBLEMA 24 PLANTEAMIENTO DEL PROBLEMA 26 JUSTIFICACION DEL PROBLEMA 27 OBJETIVOS DE LA INVESTIGACION 28

OBJETIVO GENERAL 28

OBJETIVOS ESPECIFICOS 28 METAS DE LA INVESTIGACION 29 1. SISTEMAS DE CONTROL DIGITAL 30 1.1 SISTEMAS DE CONTROL 30 1.1.1 Clasificación de los sistemas de control. 31 1.1.2 Acciones de control. 33 1.1.3 Control proporcional integrativo derivativo. 34 1.2 CONTROLADORES ANÁLOGOS 35 1.3 CONTROLADORES DIGITALES 36 1.3.1 Diagrama de bloque de un controlador digital. 38 1.3.2 Módulo de control digital Rabbit. 39 1.3.3 Implementación del algoritmo de control PID digital. 41

Page 8:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

2. REDES DE COMUNICACIÓN INDUSTRIALES 43 2.1 NIVELES EN UNA RED INDUSTRIAL 44 2.1.1 Nivel de gestión. 44 2.1.2 Nivel de control. 44 2.1.3 Nivel de campo y proceso. 44 2.1.4 Nivel de E/S. 44 2.2 TIPOS DE REDES INDUSTRIALES 45 2.2.1 Bus de campo. 45 2.2.1.1 Buses de campo reconocidos. 47 2.2.2 Redes LAN industriales. 48 2.2.2.1 Protocolo de automatización de manufactura (MAP). 48 2.2.2.2 Ethernet. 48 2.3 GENERALIDADES DE LA RED ETHERNET 49 2.3.1 Especificaciones Ethernet IEEE 802.3 a 10 Mbps. 50 2.3.2 Especificaciones Ethernet IEEE 802.3 a 100 Mbps. 51 2.3.3 Direcciones Ethernet. 51 2.4 PROTOCOLO TCP/IP 52 2.4.1 Arquitectura de protocolos TCP/IP. 52 2.4.2 Familia de protocolos TCP/IP. 54 2.4.3 Protocolos de la capa de aplicación. 54 2.4.4 Protocolos de la capa de transporte. 56 2.4.5 Protocolo de la capa internet. 57 2.4.6 Protocolo de la capa acceso a la red. 60

Page 9:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

3. IMPLEMENTACIÓN DE PROTOCOLOS TCP/IP 61 3.1 PROTOCOLO HTTP 61 3.2 PROTOCOLO SMTP 72 3.3 PROTOCOLO TELNET 75 3.4 PROTOCOLO UDP 84 3.4.1Servidor UDP. 84 3.4.2 Cliente UDP. 88 3.5 SERVICIO DNS 92 4. ANALISIS Y DISEÑO DEL SISTEMA DE MONITOREO Y CONTROL 94 4.1 GENERALIDADES DEL SISTEMA 94 4.2 ANÁLISIS ESTRUCTURADO DEL SISTEMA 96 4.3 DICCIONARIO DE DATOS 101 4.3.1 Procesos. 101 4.3.2 Flujo de datos. 102 4.4 DISEÑO DE LA INTERFAZ DE MONITOREO SCAM WEB 105 4.4.1 Diseño arquitectónico. 105 4.4.2 Diseño de plantillas de la interfaz de usuario. 106 4.4.3 Diseño de entrada de datos. 108 4.4.4 Diseño de controles. 111 4.4.5 Diseño de salida. 112 4.5 DISEÑO APLICACIÓN DE ALMACENAMIENTO SCAM SERVER 114 4.5.1 Diseño de módulos. 114 4.5.2 Diseño de la base de datos. 114

Page 10:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

5. PRUEBAS E IMPLEMENTACIÓN DEL SISTEMA 116 5.1 ASPECTOS METODOLÓGICOS 116 5.2 PRUEBAS DEL SISTEMA 119 5.2.1 Prueba de recuperación. 119 5.2.2 Prueba de seguridad. 120 5.2.3 Prueba de resistencia. 120 5.2.4 Prueba de rendimiento. 121 5.3 IMPLEMENTACIÓN DEL SISTEMA 121 5.3.1 Descripción de la plataforma. 121 6. CONCLUSIONES 123 7. RECOMENDACIONES 124 BIBLIOGRAFIA 125 ANEXOS 127

Page 11:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

LISTA DE TABLAS

pág.

Tabla 1. Valores de configuración predefinidos de TCPCONFIG 63

Tabla 2. Tabla Variables de la base de datos SCAM 115

Tabla 3. Especificaciones Físicas RCM2200 131

Tabla 4. Configuración de pines del conector J5 135

Tabla 5. Configuración de pines del conector J4 136

Tabla 6. Configuración de red del RCM2200 en conexión directa 137

Tabla 7. Configuración de red Inalámbrica 139

Tabla 8. Comandos Ctrl del teclado 144

Tabla 9. Comandos Inicio del teclado 145

Tabla 10. Comandos Fin del teclado 145

Tabla 11. Familia de microcontroladores de Microchip 205

Tabla 12. Nomenclatura de la familia de microcontroladores de Microchip 206

Tabla 13. Rango de voltaje de los microcontroladores 206

Tabla 14. Familia del PIC 16Fxxx 207

Tabla 15. Selección del banco mediante el direccionamiento indirecto 219

Tabla 16. Selección del banco mediante el direccionamiento directo 219

Tabla 17. Archivo de registros del PIC 16F87X 222

Tabla 18. Asignación de los bits CHS2:0 del registro de control ADCON0 225

Tabla 19. Configuración de los pines del PIC según el valor de <PCFG3 - 0 > 227

Page 12:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

LISTA DE FIGURAS

pág.

Figura 1. Elementos de un sistema de control 31

Figura 2. Diagrama de bloque de un sistema de lazo abierto 32

Figura 3. Sistema de control de nivel de líquido 33

Figura 4. Diagrama de bloque de un sistema de control de nivel liquido 33

Figura 5. Esquema simplificado del controlador PID análogo 36

Figura 6. Esquema general de un controlador digital 37

Figura 7. Diagrama de bloques de un sistema de control digital 39

Figura 8. Modulo de control Rabbit RCM 2200 40

Figura 9. Niveles en una red industrial 45

Figura 10. Capas del protocolo TCP/IP 53

Figura 11. Estructura de los protocolos de la familia TCP/IP 54

Figura 12. Esquema de una dirección IP 59

Figura 13. Autenticación Digest para ingresar a una página Web 71

Figura 14. Autenticación básica 71

Figura 15. Ventana Ejecutar de Windows XP 83

Figura 16. Ventana de salida de texto de Dynamic C 83

Figura 17. Diseño arquitectónico de la aplicación SCAM Web 105

Figura 18. Plantilla pagina inicio de sesión 106

Figura 19. Plantilla pagina principal 106

Figura 20. Plantilla paginas de configuración parámetros PID y usuarios 107

Figura 21. Plantilla pagina de ayuda 107

Figura 22. Plantilla para mensajes de alarma o error de ingreso de datos 108

Figura 23. Diseño de entrada de los datos nombre de usuario y contraseña 109

Figura 24. Diseño de entrada de datos gestión de usuario 110

Page 13:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

Figura 25. Diseño de entrada de datos parámetros del controlador PID 111

Figura 26. Mensaje de error de introducción de datos 112

Figura 27. Mensaje de error indicando que un campo es obligatorio 112

Figura 28. Salida del valor del variable controlada 113

Figura 29. Salida de un mensaje de error 113

Figura 30. Módulos de la interfaz SCAM Server 114

Figura 31. Plataforma del sistema SCAM 122

Figura 32. Vista posterior y anterior del módulo Rabbit RCM2200 130

Figura 33. Subsistemas del módulo RCM2200 132

Figura 34. Configuración de los pines del microprocesador Rabbit 2000 133

Figura 35. Pines de E/S del módulo RCM2200 134

Figura 36. Configuración del RCM2200 en una Red LAN Ethernet 138

Figura 37. Entorno de desarrollo de Dynamic C 142

Figura 38. Menú principal de Dynamic C 145

Figura 39. Menú archivo de Dynamic C 146

Figura 40. Menú edición de Dynamic C 148

Figura 41. Menú compilar de Dynamic C 150

Figura 42. Mensaje de la BIOS 152

Figura 43. Menú ejecutar de Dynamic C 152

Figura 44. Menú opciones de Dynamic C 154

Figura 45. Caja de dialogo opciones de proyecto de Dynamic C 155

Figura 46. Selección del módulo Rabbit 157

Figura 47. Menú de ayuda de Dynamic C 158

Figura 48. Ventana de descripción de funciones de Dynamic C 159

Figura 49. Barra de direcciones navegador Web 163

Figura 50. Botón inicio de Windows XP 164

Figura 51. Acceso a SCAM Web a través de la ventana ejecutar 164

Figura 52. Iniciando SCAM Server 165

Figura 53. Página inicio de sesión de SCAM Web 166

Figura 54. Mensaje de error del campo nombre de usuario 166

Page 14:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

Figura 55. Mensaje de verificación nombre de usuario y/o contraseña 167

Figura 56. Página principal de SCAM 167

Figura 57. Ventana de autenticación páginas Configuración PID y usuarios 168

Figura 58. Ventana de parámetros del controlador PID 169

Figura 59. Mensaje de error del campo valor de referencia (setpoint) 169

Figura 60. Mensaje valor de referencia (setpoint) es requerido 170

Figura 61. Ventana de configuración de usuarios 171

Figura 62. Campo de nueva contraseña es requerido 171

Figura 63. Mensaje de error de contraseñas inconsistentes 172

Figura 64. Mensaje de error del campo correo electrónico 172

Figura 65. Página de ayuda de SCAM Web 172

Figura 66. Pantalla principal de SCAM Server 173

Figura 67. Menú Operación 174

Figura 68. Pantalla históricos de variables 174

Figura 69. Pantalla de configuración de parámetros de variable 175

Figura 70. Pantalla Acerca de SCAM Server 175

Figura 71. Esquema Interno del PIC16F877/874 209

Figura 72. Esquema de pines del PIC16F877/874 210

Figura 73. Ciclo de instrucción de PC 211

Figura 74. Configuración de bits del registro STATUS 212

Figura 75. Operación con el archivo de registros orientada a bytes 213

Figura 76. Operación con el archivo de registros orientada a bits 213

Figura 77. Formato general 213

Figura 78. Formato para CALL y GOTO 213

Figura 79. Organización de la memoria de programa 214

Figura 80. Registro contador de programa 215

Figura 81. Actualización del registro PCH a través del registro PCLATH 216

Figura 82. Actualización del registro PCH a través del registro PCLATH 216

Figura 83. Asignación del contenido del registro PC a la pila 216

Figura 84. Asignación del contenido de la pila al registro PC 217

Page 15:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

Figura 85. Direccionamiento directo e indirecto de la memoria de datos. 220

Figura 86. Asignación de los bits del registro de control ADCON0 224

Figura 87. Asignación de los bits ADCS1:0 del registro de control ADCON0 224

Figura 88. Asignación de los bits del registro de control ADCON1 225

Figura 89. Alineación izquierda y derecha del resultado digital de 10 bits 226

Figura 90. Estructura interna del convertidor análogo digital 228

Figura 91. Conexiones al bus I2C 232

Figura 92. Condiciones de inicio y parada de I2C 233

Figura 93. Bit de reconocimiento ACK 234

Figura 94. Formato de transmisión de datos de I2C 234

Figura 95. Conexiones de SDA y SCL de Rabbit 2000 y el PIC 16f877 235

Figura 96. Bits del registro SSPSTAT 238

Figura 97. Bits del registro SSPCON 239

Figura 98. Bits del registro SSPCON2 240

Page 16:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

LISTA DE DIAGRAMAS

pág.

Diagrama 1. Diagrama de flujo del algoritmo PID Digital 41

Diagrama 2. DFD de contexto del sistema SCAM 96

Diagrama 3. DFD Nivel 1 del sistema SCAM 98

Diagrama 4. DFD Nivel 2 que refina el proceso de interactuar con operador 99

Diagrama 5. DFD Nivel 2 que refina el proceso de configuración parámetros

sistema 99

Diagrama 6. DFD Nivel 2 que refina el proceso de control de variables 100

Diagrama 7. DFD Nivel 3 que refina el proceso de iteración algoritmo de control

PID 100

Page 17:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

LISTA DE ANEXOS

pág.

Anexo A. Manual de usuario del módulo Rabbit RCM2200 128

Anexo B. Manual de usuario de Dynamic C v8.1 140

Anexo C. Manual de usuario del sistema SCAM v1.0 160

Anexo D. Manual del sistema 177

Anexo E. Funcionamiento del PIC 16F877 204

Anexo F. Funcionamiento del bus I2C en el módulo Rabbit y PIC 16F877 229

Anexo G. RabbitCore RCM2200 Getting Started manual

Anexo H. Póster de referencia del procesador Rabbit 2000

Anexo I. Licencia del Software Dynamic C v. 8.1

Page 18:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

GLOSARIO

A/D: acrónimo de Análogo/Digital.

ACTUADOR: es un dispositivo de potencia que produce la entrada para la planta,

de acuerdo con la señal de control, de tal forma que la señal de salida se aproxime

a la señal de entrada de referencia. Un actuador o accionador, puede ser un

motor o una válvula neumática, un motor hidráulico o uno eléctrico.

CANAL: medio de transmisión por el que viajan las señales portadoras de datos o

información.

CGI: acrónimo de Interfaz de Pasarela Común.

CMOS: acrónimo de Semiconductor de Óxido Metálico Complementario. Tipo

específico de tecnología de semiconductor que requiere muy poca energía.

CONTROL: significa medir el valor de la variable controlada del sistema, y aplicar

al sistema la variable manipulada para corregir o limitar la desviación del valor

medido, respecto al valor deseado.

CONTROL AUTOMÁTICO: es el mantenimiento de un valor deseado dentro de

una cantidad o condición, midiendo el valor existente, comparándolo con el valor

deseado, y utilizando la diferencia para proceder a reducirla.

CONTROLADOR: es el dispositivo hardware mediante el cual se lleva a cabo la

acción de control de regulación de energía suministrada al sistema.

Page 19:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

CONTROL PID: es un controlador que con base en el error del sistema calcula la

acción del control que se deba tomar, esta compuesto de tres partes que son:

Una acción proporcional, una acción integral y una acción derivativa.

DATAGRAMAS: paquete o unidad de información que incluye información de

entrega relevante, como la dirección de destino, que se envía a través de una red

de conmutación de paquetes.

DNS: sistema de nombres de dominio. Base de datos jerárquica y distribuida que

contiene asignaciones de nombres de dominio DNS para varios tipos de datos,

como direcciones IP. DNS permite la búsqueda de equipos y servicios mediante

nombres descriptivos.

E/S: acrónimo de Entrada y Salida

ERROR: diferencia algebraica entre el valor leído o transmitido por el instrumento

y el valor real de la variable medida.

FTP: acrónimo de Protocolo de Transferencia de Archivos. Miembro del conjunto

de protocolos TCP/IP que se utiliza para copiar archivos entre dos equipos en

Internet. Ambos equipos deben admitir sus funciones FTP correspondientes: uno

debe ser un cliente FTP y el otro un servidor FTP.

HTTP: acrónimo de Protocolo de Transferencia de Hipertexto. Utilizado para

transferir información en Internet o una Intranet. Una dirección HTTP tiene el

siguiente formato: http://www.microsoft.com.

PAQUETE DE DATOS: unidad de información que se transmite de una vez entre

dos dispositivos de una red de computadores.

Page 20:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

PIC: acrónimo de Controlador de Interface Periférico.

PLANTAS: unidad física o edificio en que se realizan los procesos de producción

industriales. Puede ser una parte de un equipo, tal vez un conjunto de las partes

de una maquina que funcionan juntas, el propósito de la cual es ejecutar una

operación particular.

PROCESOS: es una operación voluntaria o artificial progresivamente continua,

que consiste en una serie de acciones controladas o movimientos dirigidos

sistemáticamente hacia determinado resultado o fin.

PROTOCOLO: conjunto de normas y convenciones para enviar información a

través de una red.

PUNTO DE CONSIGNA: variable de entrada en el controlador que fija el valor

deseado de la variable controlada.

SISTEMAS: es una combinación de componentes que actúan conjuntamente y

cumplen determinado objetivo. El termino sistema hay que interpretarlo como

referido a sistemas físicos, biológicos y otros.

SENSOR: instrumento o sistema, capaz de percibir una señal, ya sea mecánica,

acústica, luminosa, calorífica, eléctrica o electrónica.

SMTP: acrónimo de Protocolo Simple de Transferencia de Correo. Miembro del

conjunto de protocolos TCP/IP que controla el intercambio de correo electrónico

entre agentes de transferencia de mensajes.

TCP: acrónimo de Protocolo de Control de Transmisión.

Page 21:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

TCP/IP: acrónimo de Protocolo de Control de Transmisión/Protocolo de Internet.

Conjunto de protocolos de red muy utilizados en Internet que permiten la

comunicación entre redes interconectadas formadas por equipos con distintas

arquitecturas de hardware y sistemas operativos.

TELNET: protocolo de emulación de terminal muy utilizado en Internet para iniciar

sesión en equipos de red. Telnet hace referencia también a la aplicación que

utiliza el protocolo Telnet para los usuarios que inician sesión desde ubicaciones

remotas.

TFTP: acrónimo de protocolo trivial de transferencia de archivos. Protocolo

utilizado para descargar los archivos iniciales necesarios para comenzar el

proceso de instalación.

UDP: acrónimo de Protocolo de Datagramas de Usuario. Complemento de TCP

que ofrece un servicio de datagramas sin conexión que no garantiza la entrega o

la secuencia correcta de los paquetes entregados (de forma similar a IP).

UTP: acrónimo de par trenzado sin apantallar (Unshielded Twister Pair). Medio de

transmisión (cable) que se usa en las redes de área local.

VARIABLE CONTROLADA: es la cantidad o condición que se mide y controla,

esta es la señal de salida del sistema. Dentro del bucle de control es la variable

que se capta a través del transmisor y que origina una señal de realimentación.

VARIABLE MANIPULADA: es la cantidad o condición modificada por el

controlador, a fin de afectar la variable controlada.

Page 22:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

RESUMEN

En este documento se presenta detalladamente las etapas de análisis, diseño e

implementación de un sistema integrado para la supervisión y control de procesos

industriales con comunicación vía Ethernet SCAM, basado en un módulo de

control digital RCM2200 que permite hacer control a bajo costo en un pequeño

microprocesador Rabbit 2000, y comunicación con dispositivos Rabbit/Z-World y

computadores en una red Ethernet bajo el protocolo TCP/IP.

Se da a conocer el soporte teórico del proyecto, relacionado a los sistemas de

control digital y las redes de comunicación industrial, haciendo mayor énfasis en la

red de comunicación Ethernet y el protocolo TCP/IP.

Palabras claves: control PID, ethernet, módulo de control digital, protocolo, Rabbit,

red, sistema, TCP/IP.

Page 23:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

23

INTRODUCCIÓN

Hoy en día, muchos de los procesos de producción de las fábricas, están ligados a

sistemas que controlan cada una de las fases de producción de forma autónoma,

los cuales permiten minimizar costos y aumentar la eficiencia de estos procesos.

El inconveniente de estos sistemas de control es su elevado costo de

implementación para las pequeñas y medianas empresas del sector industrial.

Siendo una necesidad creciente para estas empresas se diseñó e implementó un

sistema como “SCAM” que permite hacer control y/o monitoreo de procesos

industriales a bajo costo y brinda conectividad a otros sistemas a través de redes

ethernet, gracias a que utiliza un módulo de control embebido RCM 2200 basado

en un microprocesador Rabbit 2000.

Este módulo se caracteriza por poseer canales de entradas y salidas digitales y

un canal de entrada análoga adoptada por medio de un conversor A/D, para la

conexión de los elementos de medición y control; además tiene un puerto de

comunicación serial (para la programación del módulo), y un puerto Ethernet para

la comunicación del sistema con otros dispositivos en una red. La programación

del modulo de control se realizó utilizando el entorno de desarrollo de Z-World

denominado Dynamic C, siendo éste un compilador basado en el lenguaje de

programación C ANSI, para uso especifico de la familia de microprocesadores

Rabbit 2000 y 3000.

Por otro lado, el sistema SCAM determina una alternativa factible para las

empresas de nuestra región, que busquen una solución integral para el control y

supervisión de procesos.

Page 24:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

24

EL PROBLEMA Y OBJETIVOS DE LA INVESTIGACIÓN

ANTECEDENTES DEL PROBLEMA

En la actualidad el programa de Ingeniería de Sistemas de la Corporación

Universitaria Rafael Núñez CURN, ha realizado varias investigaciones en el área

de Automatización Industrial, principalmente en sistemas de control y monitoreo

con comunicación vía serial RS-232, como: la implementación de un sistema de

control de nivel de líquidos, controlador PID para regulación de un

servomecanismo de posición y un software para monitoreo de análisis en tiempo

real de la prensa multiuso digital del laboratorio de suelos del programa de

Ingeniería Civil de la CURN.

Igualmente en instituciones de educación superior en la ciudad como la

Universidad Tecnológica de Bolívar, Universidad Antonio Nariño, SENA Industrial,

Escuela Naval Almirante Padilla, etc. han realizado proyectos de sistemas de

control de temperatura, nivel de líquidos, entre otros, pero no se tiene información

acerca del desarrollo de sistemas de control embebidos con comunicación vía red

Ethernet, en Cartagena y en la región de la costa Caribe.

En el ámbito nacional se han realizado investigaciones relacionadas con sistemas

de control embebido con comunicación a una red, pero no se tiene evidencia del

uso de los microprocesadores Rabbit o Z-World en la implementación de estos,

entre las que cabe mencionar:

“Ajuste de controladores PID para sistemas de control en red”, realizada por

un estudiante de la Maestría en Ingeniería con énfasis en Automática de la

Universidad del Valle.

Page 25:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

25

“Diseño e Implementación de un sistema de Control Distribuido para el

laboratorio de Automática de la Universidad del Valle”, ejecutado por

estudiantes de Ingeniería Electrónica de la Universidad del Valle.

“Sistema de Adquisición de Datos con PIC y PLD para un sistema

embebido", estudiante de Ingeniería Electrónica de la Universidad del Valle.

“Desarrollo de un controlador difuso para sistemas embebido utilizando

lenguaje C”, realizado en la Universidad de Antioquia

Page 26:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

26

PLANTEAMIENTO DEL PROBLEMA

Actualmente la mediana y pequeña empresa del sector industrial de la ciudad de

Cartagena, tienen que recurrir a grandes inversiones en equipos de control y

medición para poder controlar sus respectivos procesos de producción y/o control

de calidad, con el fin de estar en un nivel de competitividad alto, la cual permita a

éstas competir con calidad en el mercado nacional e internacional por razones de

la globalización económica.

Sin embargo, muchas de estas PYMES (Pequeñas y Medianas empresas) no

poseen el capital económico ni la infraestructura tecnológica suficiente que

demanda implantar un sistema de control moderno y eficiente. Debido a esto, los

procesos son controlados casi por completo de manera manual, basándose en el

conocimiento y experiencia del personal. A pesar de que los resultados obtenidos

del proceso de control manual son relativamente buenos, la falta de monitoreo y

automatización del proceso impide minimizar costos y aumentar la calidad del

producto final, siendo estos dos argumentos factores primordiales para ser

competitivos en los mercados.

Page 27:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

27

JUSTIFICACIÓN DE LA INVESTIGACIÓN

La problemática planteada anteriormente, evidencia la necesidad de desarrollar un

sistema de control automático y monitoreo de bajo costo en implementación,

embebido en una tarjeta con microprocesador de última generación y con

comunicación a una Red Ethernet (Intranet Corporativa), la cual a pesar de no

tener las mismas prestaciones que ofrecen los dispositivos de control que se

venden en el mercado, permite suplir las necesidades básicas de automatización y

monitoreo de los procesos de producción de estas PYMES, sin la necesidad de

acudir a grandes inversiones en equipos de elevado costo y con la ventaja de

utilizar una infraestructura de comunicación vía Ethernet, siendo ésta la mas

ampliamente utilizada en el sector empresarial en el campo de la ofimática y de

muy recientemente uso en la industria con un crecimiento vertiginoso debido a su

fácil implementación y configuración.

De igual forma, se determinó que el sistema de monitoreo y control automático

con comunicación vía Ethernet, se proyecta como una herramienta tecnológica

gestora de nuevos conocimientos, aplicando la Ingeniería de Sistemas al campo

de la Automatización Industrial, que es una de las áreas de profundización e

investigación que se promueve en el programa de Ingeniería de Sistemas de la

CURN. Además este proyecto, servirá de base a nuevas investigaciones

tecnológicas propiciadas por estudiantes y personas comprometidas con el

desarrollo de esta línea de investigación.

Page 28:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

28

OBJETIVOS DE LA INVESTIGACIÓN

OBJETIVO GENERAL

El objetivo principal del proyecto es el diseño e implementación de una

herramienta hardware software para el control y supervisión de variables de un

proceso empleando un controlador PID digital, y con conectividad a una red

Ethernet, a fin de transmitir los datos obtenidos en la ejecución del sistema.

OBJETIVOS ESPECÍFICOS

Implementar un controlador PID embebido en el módulo de control

RabbitCore RCM2200.

Desarrollar la interfaz de monitoreo que permita la configuración de

parámetros en el módulo de control digital y la captura de dato(s)

provenientes de éste.

Documentar el uso de los protocolos de comunicación de la familia de

protocolos TCP/IP como son HTTP, SMTP, TELNET, el protocolo de

transporte UDP y el servicio DNS a través de ejemplos prácticos aplicados

al módulo de control RCM2200.

Implementar una librería de funciones que permita configurar los

parámetros de configuración de red (IP, Mascara de Red, Puerta de Enlace,

entre otros) y funciones básicas para los protocolos de comunicación

descritos anteriormente.

Page 29:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

29

META DE LA INVESTIGACIÓN

Realizar un sistema de control y monitoreo con comunicación a una red Ethernet

que sea factible económica y técnicamente implementarlo a largo plazo en las

empresas del sector industrial a nivel local y regional, debido a que sus costos de

ejecución son mínimos en comparación con otros sistemas desarrollados por

multinacionales del sector que implican elevados costos en equipamiento de

desarrollo, medición y control.

Page 30:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

30

1. SISTEMAS DE CONTROL DIGITAL

En el desarrollo del sistema de control automático del proyecto se empleó un

módulo de control digital basado en un microprocesador Rabbit1 2000 de última

generación, que mediante la implementación del algoritmo de control PID

embebido en la memoria de éste, permite hacer control directo y avanzado a un

proceso. Por tal motivo en este capitulo se describe las características principales

de un controlador digital, haciendo primeramente una introducción a los sistemas

de control y controladores análogos.

1.1 SISTEMAS DE CONTROL

Los procesos industriales a controlar pueden dividirse ampliamente en dos

categorías: procesos continuos y procesos por eventos. En ambos tipos, deben

mantenerse en general las variables (presión, caudal, nivel, temperatura, etc.), ya

sea en un valor deseado fijo, o en un valor variable con el tiempo de acuerdo con

una relación predeterminada, o bien guardando una relación determinada con otra

variable.

El sistema de control que permite regular estas variables puede definirse como

aquel que compara el valor de la variable o condición a controlar con un valor

deseado (punto de consigna o referencia) y toma una acción de corrección de

acuerdo con la desviación existente sin intervención humana (automáticamente).

Por consiguiente, para la comparación de estos dos valores y correspondiente

corrección sean posibles, se debe incluir en un sistema de control una unidad de

medida, una unidad de control, un elemento final de control (actuador) y el propio

1 Vea Anexo A “Manual de usuario del módulo Rabbit RCM2200”

Page 31:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

31

proceso a controlar. Este conjunto de unidades forman un bucle o lazo que recibe

el nombre de lazo de control.

Figura 1. Elementos de un sistema de control

1.1.1 Clasificación de los sistemas de control. Los sistemas de control se

clasifican en sistemas de control de lazo abierto y de lazo cerrado. La distinción la

determina la acción de control, que activa al sistema para producir la salida.

Igualmente, estos sistemas de control pueden ser neumáticos, análogos y digitales

o discretos, siendo este último el de mayor trascendencia tecnológica en

aplicaciones informáticas de uso industrial recientemente.

Sistema de control de lazo abierto. Es aquel en el cual la acción de

control es independiente de la salida. Los sistemas de control a lazo

abierto tienen dos rasgos sobresalientes:

o La habilidad que éstos tienen para ejecutar una acción con exactitud

está determinada por su calibración. Calibrar significa establecer o

+

Valor de consigna

Suministro

-

Variable controlada

Proceso

Medición

Control

Actuador final

Page 32:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

32

restablecer una relación entre la entrada y la salida con el fin de obtener

del sistema la exactitud deseada.

o Estos sistemas no tienen el problema de la inestabilidad, que presentan

los de lazo cerrado.

Un esquema de este sistema se muestra en la siguiente figura.

Figura 2. Diagrama de bloque de un sistema de lazo abierto

Sistema de control de lazo cerrado. Es aquel en donde la acción de

control es en cierto modo dependiente de la salida. Los sistemas de control

de lazo cerrado se llaman comúnmente sistemas de control por

realimentación (o retroacción).

Un sistema de control de nivel líquido es un ejemplo claro de un sistema de

lazo cerrado, debido a que aquí el controlador automático regula el nivel

del líquido comparando el nivel efectivo (real) con el deseado, y corrigiendo

cualquier error por medio del ajuste de la apertura de la válvula neumática.

Esto se puede ver claramente en la figura 3 y 4.

Controlador Indicador o registrador

Valor

deseado

Punto de

consigna

Elemento primario de medida

Proceso

Page 33:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

33

Figura 3. Sistema de control de nivel de líquido

Figura 4. Diagrama de bloque de un sistema de control de nivel liquido

1.1.2 Acciones de control. La forma como el controlador automático produce la

señal de control, se denomina acción de control. En controladores industriales es

muy común encontrar los siguientes seis tipos de acción básica de control, según

lo manifestado por Katsuhiko Ogata en el libro Ingeniería de Control Moderna2

2 KATSUHIKO, Ogata. Ingeniería de Control Moderna. Madrid : Prentice Hall, 1999. p. 194 - 203

Señal de control

Controlador Válvula neumática

Deposito de Agua

Flotador

Nivel

deseado Nivel

real

Corrección

Controlador

Flujo de

entrada

Válvula

neumática

Page 34:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

34

Control de dos posiciones o de encendido-apagado (On/Off).

Control proporcional.

Control integral.

Control proporcional e integral.

Control proporcional y derivativo.

Control proporcional integrativo derivativo.

En la implementación del controlador automático del proyecto se empleó el control

proporcional integrativo derivativo PID, para realizar las acciones correctivas al

proceso que se este controlando, dado que es eficaz si se emplea de manera

adecuada, posee una estructura simple y se adapta muy bien a numerosos tipos

de procesos.

1.1.3 Control proporcional integrativo derivativo. Es la combinación de los

efectos de acción proporcional, integral y derivativa. Esta combinación tiene las

ventajas de cada una de las tres acciones de control individuales. La ecuación

matemática general para ésta acción de control es:

t

dipdt

tdeTdtteTteKtu

0

)()()()(

Donde:

u(t) es la señal de salida del controlador o acción correctora de control.

e(t) es la señal de error siendo la diferencia entre el valor de referencia y el valor

de la variable controlada. e(t) = referencia – variable controlada.

Kp es la ganancia proporcional.

Ti es el tiempo integral.

Td es el tiempo derivativo.

Page 35:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

35

1.2 CONTROLADORES ANÁLOGOS

Los controladores análogos actuales utilizados para obtener los diversos tipos de

control mencionados anteriormente hacen uso del amplificador operacional. Éste

es un dispositivo amplificador de la diferencia de sus dos entradas, con una alta

ganancia, una impedancia de entrada muy alta y una baja impedancia de salida, el

cual mediante la conexión de componentes electrónicos adecuados dispuestos en

forma de realimentación positiva o negativa, constituye el corazón de estos

controladores. Necesita sólo una corriente de entrada del orden de los 0.5 nA

(0.5*10-9 A) para dar lugar a un cambio total de la señal de salida (un valor

próximo a la corriente de alimentación).

La mayor parte de los amplificadores operacionales son amplificadores

diferenciales que, en esencia disponen de tres terminales, dos en la entrada y uno

de salida. Una señal de entrada aplicada al terminal denominado “no inversor”

hará que la salida cambie en la misma dirección: el símbolo aplicado es +Ve. Una

variación de señal en la otra entrada hará que la señal de salida cambie en

dirección inversa. Este segundo terminal se denomina “inversor” y se representa

por el símbolo -Ve.

Un ejemplo de la utilización del amplificador operacional es un controlador PID

análogo, que consiste en un módulo proporcional más integral, donde se fija la

ganancia o banda proporcional, se amplifica la desviación entre la variable de

proceso y el punto de consigna, se fija el valor del punto de consigna y se

selecciona la acción directa o la inversa del controlador, y un módulo de acción

derivada modificada. En la figura 5 puede verse un esquema simplificado del

controlador PID análogo.

Page 36:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

36

Figura 5. Esquema simplificado del controlador PID análogo

1.3 CONTROLADORES DIGITALES

El controlador digital se basa para su funcionamiento de uno o más

microprocesadores, el cual permite realizar operaciones de cálculo complejas a

una alta velocidad de procesamiento, apoyándose en dispositivos como la

memoria RAM o Flash para poder almacenar datos y comunicarse con periféricos

a través de canales de señales o buses: bus de datos, de direcciones y el bus de

control. En la figura 6 puede verse el esquema general de un controlador digital.

Page 37:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

37

Existen controladores digitales individuales, en particular para procesos continuos

(en línea) y por eventos (por lote), que llevan a cabo control multifunción3, actúan

como instrumentos reguladores (para variables como la presión, el caudal, el nivel,

la temperatura, etc.), con control lógico y control secuencial, efectúan operaciones

aritméticas, monitorizan entradas y salidas, y tienen capacidad gráfica con

representación de balance de materia. Este tipo de controladores permite incluso

la creación de software para definir todas las situaciones y secuencias de la

operación, como es el caso del módulo de control digital Rabbit 2200 empleado

en este proyecto.

Figura 6. Esquema general de un controlador digital

3 CREUS SOLÉ, Antonio. Instrumentación industrial. 6 ed. Bogotá : Alfaomega, 2001. p. 571

Page 38:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

38

Los controladores digitales permiten el ajuste de sus acciones de control ante las

perturbaciones periódicas del proceso. Por este motivo pueden trabajar con varios

algoritmos de control como por el ejemplo el P, PI, PID.

Entre las funciones más relevantes de un controlador digital se encuentran:

a) Leer las variables de entradas analógicas o digitales.

Selección Control

BU

S

Microcontrolador analógico

A D

Analógico / Digital

Selección de control

Microcontrolador

Digital

Registro de almacenamiento

Selección de control

Datos

Salida Digital Microcontrolador

Digital

Selección Control

Salida

Analógica D

A

Registro de almacenamiento

Datos

Teclado Conversión

serie-paralelo

Selección Control

Digital / Analógico

Monitor

Unidad de control

A.L.U

Reloj

Microprocesador

ROM

RAM

Memoria

En

tra

das

an

álo

gas

En

tra

das

dig

ita

les

Page 39:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

39

b) Comparar las señales leídas con los puntos de consigna e introducir la

señal de error en el algoritmo de control correspondiente.

c) Enviar las señales de salidas a través de los actuadores de control del

proceso.

1.3.1 Diagrama de bloque de un controlador digital. En la figura 7 se muestra

un diagrama de bloques de un sistema de control digital, que se compone de un

sensor, el convertidor A/D, el controlador o procesador digital, un convertidor D/A

y la planta o proceso a controlar. En este caso el controlador digital incluye el

detector de error y el control discreto del sistema. También se observa que la

señal de referencia r(t) es una señal digital.

La señal del sensor y(t) es convertida a digital continuamente por medio del

conversor A/D para ser retroalimentada al controlador digital. Luego la señal digital

y’(t) es comparada con la señal de entrada de referencia r(t). La señal de error

e(t)=r(t) - y’(t) se introduce en el algoritmo de control del controlador digital, el

cual maneja o trata la señal e(t) de la manera deseable para producir la señal de

control u(t). Ésta señal por medio del convertidor D/A se convierte a una señal

continua (análoga) u’(t), que se alimenta al proceso.

Figura 7. Diagrama de bloques de un sistema de control digital

Page 40:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

40

1.3.2 Módulo de control digital Rabbit. Como se mencionó al principio del

capitulo, para el desarrollo del sistema de control automático y monitoreo se

empleó un módulo de control digital RCM2200 con procesador Rabbit 2000 a 8

bits. Implementándose en éste el algoritmo de control PID digital a través del

entorno de desarrollo de Z-World denominado Dynamic C v.8.1. Las

especificaciones de hardware y de configuración del módulo se detallan

ampliamente en el anexo A de este documento.

Como el módulo Rabbit RCM2200 trabaja únicamente entradas y salidas

digitales, y el sistema requiere de entradas análogas, se vio la necesidad de

implementar un conversor análogo/digital que digitalice la señal proveniente de un

sensor análogo. Como solución a este inconveniente, se utilizó un

microcontrolador PIC 16F877 que además de tener conversión de señales

análogas a digitales, posee comunicación serial para interconectarlo al módulo

RCM2200. La comunicación de estos dos dispositivos se estableció mediante el

protocolo serial I2C. La configuración del conversor A/D en el microcontrolador se

presenta en el Anexo E y la comunicación I2C en el anexo F respectivamente.

Controlador Digital

Conversor D/A

Planta o Proceso

Conversor A/D

y(t)

u’(t)

y’(t)

u(t)

Monitoreo

Sensor

r(t) Variable

controlada

Page 41:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

41

Este módulo a la vez permitió crear el software de monitoreo del proceso a

controlar, hallándose embebido en la memoria Flash de éste. Por tal razón el

software admite visualizar el valor de la variable controlada y configurar los

parámetros del algoritmo de control PID directamente.

Además, el software tiene la ventaja de ejecutarse desde cualquier computador

siempre y cuando se esté conectado al módulo Rabbit RCM2200 a través de una

red ethernet. Esto es debido a que el módulo posee un puerto ethernet integrado

con conector RJ-45 y soporta el protocolo de comunicación TCP/IP, pudiendo de

esta manera desarrollar aplicaciones basadas en los protocolos que conforman

TCP/IP como por ejemplo HTTP, TELNET, SMTP, TCP, UDP, entre otros. En el

capitulo 3 se describe la manera de implementar estos protocolos en el módulo,

siendo esta una de sus características mas relevantes.

Figura 8. Módulo de control Rabbit RCM2200

Page 42:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

42

1.3.3 Implementación del algoritmo de control PID digital. El algoritmo PID

utilizado para realizar la acción de regulación de la variable a controlar en el

proceso, se representa de forma gráfica por medio del siguiente diagrama de flujo.

Diagrama 1. Diagrama de flujo del algoritmo PID Digital

Inicio

error=0, error_ant =0, derror=0, sumerror=0

setpoint, kp, ti, td

error = setpoint – var_proceso

sumerror = sumerror + error

derror = error - error_ant

U = (kp error) + (ti sumerror) + ( td derror)

Envía señal de control al actuador

error_ant = error

var_proceso = sensor

Page 43:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

43

En base al diagrama de flujo anterior, se muestra a continuación la codificación

correspondiente del algoritmo de control PID implementado en el módulo de

control digital Rabbit RCM 2200.

Primero se define la estructura de datos PID que almacenará los valores de los

respectivos parámetros de este algoritmo.

typedef struct{

float setpoint; // Valor de referencia

float kp; // Costante Proporcional

float ti; // Costante Integral

float td; // Costante Derivativa

float error_ant; // Error[-1]

float SumError; // Suma de Error

} PID;

PID sPID;

La función principal de este algoritmo es Iteración_PID(), que ejecuta iteraciones

sucesivas indefinidamente para realizar la acción correctiva de la variable que se

está leyendo a través del sensor.

float Iteracion_PID(float var_proceso)

{ float dError, Error, U_PID ;

Error = sPID.setpoint - var_proceso ; / /cálculo del error

sPID.SumError += Error; // sumatoria del error para la fase de integración

dError = Error - sPID.error_ant; /* diferencia de los errores para la fase derivativa*/

// Cálculo de la señal de control U

U_PID = ((sPID.kp * Error) + (sPID.ti * sPID.SumError) + (sPID.td * dError));

sPID.error_ant = Error;

return U_PID ;

} //cierra función

Page 44:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

44

2. REDES DE COMUNICACIÓN INDUSTRIALES

En las empresas coexisten una serie de equipos y dispositivos dedicados al

control de una máquina o una parte cerrada de un proceso. Entre estos

dispositivos están los autómatas programables, controladores digitales o análogos,

variadores de velocidad, computadoras de diseño y gestión, sensores, actuadores,

etc., los cuales muchas veces se encuentran aislados entre sí, formando “islas”

automatizadas.

El desarrollo de las redes industriales ha establecido una forma de unir todos

estos dispositivos, aumentando el rendimiento y proporcionando nuevas

posibilidades de comunicación. Las ventajas que se aportan con una red industrial

son, entre otras, las siguientes:

Visualización y supervisión de todo el proceso productivo.

Toma de datos del proceso más rápida o instantánea.

Mejora del rendimiento general de todo el proceso.

Posibilidad de intercambio de datos entre sectores del proceso y entre

departamentos.

Programación y configuración a distancia de los dispositivos de control, sin

necesidad de estar a pie de fábrica.

Page 45:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

45

2.1 NIVELES EN UNA RED INDUSTRIAL

En una red industrial coexistirán equipos y dispositivos de todo tipo, los cuales

suelen agruparse jerárquicamente para establecer conexiones lo más adecuadas

a cada área. De esta forma se definen cuatro niveles básicos dentro de una red

industrial.

2.1.1 Nivel de gestión. Es el nivel más elevado y se encarga de integrar los

niveles siguientes en una estructura de fábrica, e incluso de múltiples factorías.

Las máquinas aquí conectadas suelen ser estaciones de trabajo que hacen de

puente entre el proceso productivo y el área de gestión, en el cual se supervisan

las ventas, inventarios, procesos de producción y/o control de calidad, etc. Se

emplea una red de tipo LAN (Red de Área Local) o WAN (Red de Área Extensa).

2.1.2 Nivel de control. Se encarga de enlazar y dirigir las distintas zonas de

trabajo. A este nivel se sitúan los autómatas de gama alta y los ordenadores

dedicados a diseño, control de calidad, programación, etc. Se suele emplear una

red de tipo LAN.

2.1.3 Nivel de campo y proceso. Se encarga de la integración de pequeños

automatismos (autómatas compactos, multiplexores de E/S, controladores PID,

etc.) dentro de subredes o "islas". En el nivel más alto de estas redes se suelen

encontrar uno o varios autómatas modulares de gama alta, actuando como

maestros de la red o maestros flotantes. En este nivel se emplean los buses de

campo.

2.1.4 Nivel de E/S. Es el nivel más próximo al proceso. Aquí están los sensores y

actuadores, encargados de manejar el proceso productivo y tomar las medidas

necesarias para la correcta automatización y supervisión.

Page 46:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

46

Figura 9. Niveles en una red industrial

Esta estructura citada no es universal, habrá casos en los que conste de un

número mayor o menor de niveles, dependiendo del tamaño del proceso y la

propia industria.

2.2 TIPOS DE REDES INDUSTRIALES

En las redes de comunicación industriales se manejan tres tipos de red4, que

pueden ir desde un grado de complejidad bajo a uno más alto, entre los cuales

están el bus de campo, las redes LAN y las redes WAN respectivamente.

2.2.1 Bus de campo. El bus de campo constituye el nivel de red más simple y

próximo al proceso dentro de la estructura de comunicaciones industriales, y se

4 BALCELLS, Joseph y ROMERAL, José Luís. Autómatas programables. Madrid : Alfaomega,

1998. p. 296 - 327.

Page 47:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

47

encarga de la integración de pequeños automatismos en las llamadas “islas” que

controlan distintas zonas de un proceso. Está basada en procesadores simples y

utiliza un protocolo mínimo para gestionar el enlace entre ellos. Los buses de

campo más recientes permiten la comunicación con buses jerárquicamente

superiores y más potentes.

La característica básica para que una red de comunicación pueda denominarse

propiamente bus de campo es que permita intercambiar órdenes y datos entre

productos de un mismo o de distintos fabricantes a través de un protocolo

reconocido por cada uno de los nodos.

En un bus de campo se engloban las siguientes partes:

Estándares de comunicación: cubren los niveles físico, de enlace y de

aplicación establecidos en el modelo OSI (Sistemas de Interconexión

Abiertos).

Conexiones físicas: en general, las especificaciones de un determinado bus

admiten más de un tipo de conexión física. Las más comunes son bus

semidúplex (comunicación en banda base tipo RS-485), RS-422 y

conexiones en bucle de corriente.

Protocolo de acceso al medio (MAC) y de enlace (LLC): consiste en la

definición de una serie de funciones y servicios de la red mediante códigos

de operación estándar.

Nivel de aplicación: es dirigido al usuario y la aplicación suele ser propia de

cada fabricante, apoyándose en las funciones estándar antes mencionadas

para crear programas de gestión y presentación, permitiendo a lo sumo la

programación en un lenguaje estándar.

Page 48:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

48

2.2.1.1 Buses de campo reconocidos. Hay diversos buses según fabricantes y

agrupaciones de fabricantes, siendo los más empleados en la industria los

siguientes:

MODBUS MODICON. Marca registrada de GOULD INC. Define un

protocolo de comunicación de topología maestro-esclavo. Muchas de las

marcas de equipos industriales del mercado ofrecen productos compatibles

con este bus o módulos que enlazan una red propia de nivel superior con

este estándar. Su principal inconveniente reside en la falta de

reconocimiento explicito por parte de alguna normal internacional.

BITBUS. Marca registrada por Intel. De bajo coste y altas prestaciones en

velocidad. Intel cedió a dominio público el estándar, por lo que se considera

un estándar abierto. Está reconocido por la normativa IEE 1118. Se trata de

un bus síncrono, cuyo protocolo se gestiona completamente mediante el

microcontrolador 8044, un ASIC basado en la arquitectura de la familia

8051 dotado de una USART y con las funciones de protocolo integradas en

ROM.

PROFIBUS. Impulsado principalmente por los fabricantes alemanes. El

protocolo es un subjuego de MINIMAP, utilizado en redes de más altas

prestaciones. A pesar de ser un estándar abierto, es uno de los pocos que

concretan bastante el nivel de aplicación y está progresando rápidamente

con el apoyo de marcas importantes del sector y bajo la norma DIN 19.245

S-BUS. No es un bus de campo propiamente dicho, sino un sistema

multiplexor/demultiplexor que permite la conexión de E/S remotas (digitales

y/o analógicas) a través de dos pares trenzados. Ha sido adoptado por

fabricantes europeos de autómatas y periféricos de entrada/salida.

Page 49:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

49

2.2.2 Redes LAN industriales. A nivel de esta red se puede decir que los

estándares más conocidos y de uso más extendido son básicamente dos, MAP y

ETHERNET.

2.2.2.1 Protocolo de automatización de manufactura (MAP). Nació como un

producto especialmente diseñado para el entorno industrial, lo que hace que sea

de mayor éxito en LAN industriales. Fué impulsado por General Motors y

normalizado por el IEEE (Instituto de Ingeniero Electrónicos y Electricistas). No

actúa a nivel de bus de campo, pero establece pasarelas hacia estos buses

mediante terminales. También permite integración en redes WAN.

2.2.2.2 Ethernet. Esta red se basa en una topología en bus o estrella. Ethernet

es una red diseñada por Xerox Corporation, para poder compartir una serie de

recursos en su centro de investigación. En la década de los 80 se convirtió en un

estándar para los niveles físico, enlace y red de numerosas redes locales en el

campo de la ofimática. El propósito inicial de la red era el de poner a disposición

de múltiples usuarios una serie de recursos costosos como discos duros,

impresoras de calidad, plotters, etc., de forma que pudiera ser compartidos por

todos ellos como si estuvieran directamente conectados a su terminal. Hoy día se

utiliza en las redes de comunicación industriales proporcionando las siguientes

prestaciones más relevantes:

Compatibilidad con el modelo OSI y el protocolo TCP/IP.

Simplicidad. La gestión de la red no debe aumentar la complejidad de uso

por parte del usuario.

Bajo costo y fácil mantenimiento.

Page 50:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

50

Agilidad de direccionamiento. La red permite la comunicación punto a

punto, los mensajes de un punto a otros (Multicast) y los mensajes de

difusión, es decir, de un punto a todos los demás (Broadcast).

Equidad y fiabilidad. No existe ninguna prioridad entre las distintas

estaciones y, además, la avería o desconexión de una estación no

interfiere en el funcionamiento de la red.

Alta velocidad. La velocidad prevista en la norma básica es de 10 Mbps

(Mega bits por segundo) aunque actualmente con la Ethernet de alta

velocidad (Fast Ethernet), se logra alcanzar transmisiones de datos a 100

Mbps a bajo costo.

2.2.3 Red WAN. Este nivel es el más próximo al área de gestión y se encarga de

integrar las redes LAN industriales de una ó múltiples fábricas con instalaciones

dispersas. Esta red hace uso de redes, generalmente públicas, de propósito

general, capaces de transmitir datos, voz, etc.

2.3 GENERALIDADES DE LA RED ETHERNET

La red Ethernet basada en la norma IEEE 802.3 define un modelo de red de área

local utilizando la técnica de control de acceso al medio más ampliamente usada

para topologías en bus/árbol y en estrella, la cual es la CSMA/CD (Detección de

Portadora con Acceso Múltiple y Detección de Colisiones), cuyo principio de

funcionamiento consiste en que un computador para transmitir, debe detectar la

presencia de una señal portadora y, si existe, comienza la transmisión. Si dos

estaciones empiezan a transmitir al mismo tiempo, se produce una colisión, y

ambas deben repetir la transmisión, para lo cual esperan un tiempo aleatorio antes

de proceder, evitando de este modo una nueva colisión, ya que ambas no

escogerán el mismo tiempo de espera.

Page 51:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

51

Los nodos de esta red están conectados por tarjetas de red unidas ya sea,

mediante cable coaxial (en sus dos variedades, grueso y fino), por cable de par

trenzado con clavija tipo RJ-45, y las más avanzadas mediante fibra óptica,

basándose en las especificaciones IEEE 802.3 a 10 y 100 Mbps.

2.3.1 Especificaciones Ethernet IEEE 802.3 a 10 Mbps. Este es el estándar

Ethernet original que permite la transmisión en banda base a 10 Mbps en

diferentes medios de transmisión, dependiendo de la topología de red

implementada. De esta manera el comité IEEE ha desarrollado una notación

concisa con el fin de distinguir las diversas implementaciones que se encuentran

disponibles, la cual es:

<razón de datos en Mbps><método de señalización><máxima longitud del

segmento en centenas de metros>

Las implementaciones definidas son:

10BASE5. Especificación original Ethernet que utiliza un cable coaxial

grueso de 50 ohmios para el transporte de las señales en una topología de

red bus. Tiene una longitud máxima de segmento de 500 metros con la

posibilidad de conectar hasta 100 nodos en cada segmento.

10BASE2. Esta especificación utiliza un cable coaxial delgado de 50

ohmios y de menos costo que 10BASE5. Tiene un límite de distancia

máxima de 185 metros por segmento, soportando hasta 30 nodos. Las

conexiones se hacen mediante conectores en T en una topología de bus.

10BASE-T. Utiliza cable de par trenzado no apantallado (UTP) para

producir transmisiones de hasta 10 Mbps en una topología de red en

estrella. Las estaciones se conectan a un concentrador o HUB central

mediante un enlace punto a punto, que consta generalmente de dos pares

trenzados, uno par para transmitir datos y el otro para recibirlos. Debido a

Page 52:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

52

la alta velocidad y pobre calidad de la transmisión de este cable, la longitud

de un enlace se encuentra limitada a 100 metros. Actualmente es la

especificación más usada en las redes de área local, dado su flexibilidad y

facilidad de implementación.

10BASE-F. Esta especificación se refiere a los estándares 10BASE-FB

(núcleo), 10BASE-FL (enlace) y 10BASE-FP (pasivo) para Ethernet a través

de cableado de fibra óptica en topología estrella.

2.3.2 Especificaciones IEEE 802.3 a 100 Mbps (Ethernet de alta Velocidad).

Ethernet a alta velocidad se refiere a un conjunto de especificaciones

desarrolladas por el comité IEEE 802.3 con el fin de proporcionar una red

compatible con Ethernet, preservando los formatos de los paquetes y las

interfaces, y funcionando a 100 Mbps. La designación global para estas

normalizaciones es 100BASE-T. Al igual que la Ethernet original ésta emplea

como medios de transmisión el cable de par trenzado no apantallado (UTP) y

apantallado (STP) categoría 5, y la fibra óptica, en una topología de red en

estrella.

Muy recientemente, se han presentado las denominadas Gigabit Ethernet, que

alcanzan velocidades de hasta 1 Gbps (Gigabit por segundo), se trata del estándar

IEEE 802.3z.

2.3.3 Direcciones Ethernet. Todas las interfaces Ethernet (dispositivos o tarjetas

de red) tienen una única dirección de 48 bits (6 bytes) que es proporcionada por el

fabricante de la misma. Estas direcciones son conocidas también como

direcciones MAC (Control de Acceso al Medio). Las direcciones MAC son

escritas como una secuencia de seis números hexadecimal de dos dígitos cada

uno, separado por dos puntos, por ejemplo, 00:90:20:33:00:A3. Esto los distingue

de las direcciones IP, que son escritas con números decimales punteados.

Page 53:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

53

2.4 PROTOCOLO TCP/IP

El protocolo TCP/IP que significa protocolo de control de transmisión/protocolo de

Internet, es un conjunto de protocolos independientes del medio físico usados para

la transmisión y/o control de datos en Internet o subredes, los cuales permiten que

diferentes tipos de computadoras se comuniquen a través de redes heterogéneas.

TCP/IP es la arquitectura más adoptada para la interconexión de sistemas abiertos

actualmente, ya que hace posible la comunicación entre dos computadores, desde

cualquier parte del mundo, mientras que OSI se ha convertido en el modelo

estándar para clasificar las funciones de comunicación5. TCP/IP es compatible con

cualquier sistema operativo y con cualquier tipo de hardware, proporcionando una

abstracción total del medio.

2.4.1 Arquitectura de protocolos TCP/IP. A diferencia del modelo OSI, no existe

un modelo oficial de referencia para el protocolo TCP/IP según William Stallings6.

Sin embargo, éste caracteriza el conjunto de protocolos TCP/IP como si tuviera

cinco capas, estas capas son:

Capa de aplicación. Proporciona una comunicación entre procesos o

aplicaciones en computadores distintos.

Capa de transporte. Proporciona un servicio de transferencia de datos

extremo a extremo. Esta capa puede incluir mecanismos de seguridad.

Oculta los detalles de la red, o redes, subyacente a la capa de aplicación.

5 STALLINGS, William. Comunicaciones y redes de computadores. 5 ed. Madrid : Prentice Hall,

1999. p. 17. 6 Ibíd., p. 17 – 18, 519.

Page 54:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

54

Capa internet. Relacionada con el encaminamiento de los datos del

computador origen al destino a través de una o más redes conectadas por

dispositivos de encaminamiento (Routers).

Capa de acceso a la red. Es responsable del intercambio de datos entre el

sistema final y la red a la cual se está conectando. El emisor debe

proporcionar a la red la dirección de destino, de tal manera que la red

pueda encaminar los datos hasta el destino apropiado.

Capa física. Define las características del medio de transmisión, la tasa de

señalización y el esquema de codificación de las señales.

Figura 10. Capas del protocolo TCP/IP

Cada capa en el conjunto de protocolos TCP/IP interacciona con sus capas

inmediatas adyacentes. En el origen (emisor), la capa de aplicación hace uso de

los servicios de la capa de transporte y pasa los datos a esa capa. Una relación

similar existe entre las capas de transporte e internet y en la interfaz de la capa

internet con la de acceso a la red. En el destino (receptor), cada capa entrega los

datos a la capa superior siguiente. Esto se ve claramente en la figura 10.

5 Aplicación

4 Transporte

3 Internet

2 Acceso a red

1 Física

5 Aplicación

4 Transporte

3 Internet

2 Acceso a red

1 Física

Origen Destino

Page 55:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

55

2.4.2 Familia de protocolos TCP/IP. El protocolo TCP/IP esta compuesto por un

conjunto de protocolos independientes los cuales interactúan entre si con el

objetivo de establecer una comunicación segura entre dos computadores, un

cliente y un servidor. En la figura 11 se muestra la organización de algunos de los

protocolos de la familia TCP/IP de acuerdo a la capa a la que pertenecen.

Figura 11. Estructura de los protocolos de la familia TCP/IP

2.4.3 Protocolos de la capa de aplicación. Los protocolos de esta capa,

permiten que un usuario establezca comunicación de una forma transparente con

otras aplicaciones o procesos en otro computador. Estos protocolos son:

FTP. Protocolo de Transferencia de Archivos que se utiliza en Internet y

otras redes para transmitir archivos entre servidores o entre un usuario y un

servidor. El protocolo asegura que el archivo se transmite sin errores, para

TCP UDP

FTP HTTP SMTP TELNET

MIME

TFTP

ARP, RARP

5

4

3

ICMP

DNS

Medio físico (ETHERNET)

PING

2

1

IP

Page 56:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

56

lo que dispone de un sistema de corrección basado en un control de

redundancia de datos y, en su caso, de la capacidad de retomar la

descarga en el punto en que falló la conexión o el envío o la recepción de

datos. El sistema que almacena archivos que se pueden solicitar por FTP

se denomina servidor de FTP. Los programas que son capaces de acceder

a servidores FTP y descargar archivos de ellos y, en su caso, enviar otros

al servidor, se denominan clientes FTP. Por defecto el protocolo FTP

establece comunicación por el puerto lógico 20 o 21.

HTTP. El Protocolo de Transferencia de Hipertexto, es el protocolo base

para transferir información en el World Wide Web. HTTP es un protocolo

cliente-servidor orientado a transacciones. El uso más común de HTTP es

entre un cliente (navegador) Web y un servidor Web. Para proporcionar

seguridad, HTTP hace uso de TCP. Sin embargo, HTTP es un protocolo

“sin estados”: cada transacción se trata independientemente. Por

consiguiente, una implementación típica creará una conexión nueva entre el

cliente y el servidor con cada transacción y después la cerrará tan pronto

como se complete ésta. Por defecto el protocolo HTTP recibe las

peticiones y envía las correspondientes respuestas por el puerto lógico 80.

SMTP. El Protocolo Simple de Transferencia de Correo, hace referencia al

protocolo más utilizado en Internet para el envío de mensajes de correo

electrónico. Los programas gestores de correo electrónico y los servidores

de Internet (o de una intranet corporativa) lo utilizan como un tipo de

protocolo TCP/IP que define el modo de envío y cuál es el agente

encargado de gestionar la entrega, que inicialmente almacenará y

posteriormente remitirá el mensaje al o a los destinatarios.

En sus inicios, el protocolo SMTP trabajaba sólo con texto en formato ASCII

(texto plano), pero posteriormente se le han añadido posibilidades de

Page 57:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

57

encriptación, como el formato MIME (Ampliación para correo internet

multiobjetivo), muy extendido, que lo dotan de capacidad para gestionar

elementos multimedia, gráficos y otros elementos, como archivos adjuntos

al propio texto. El número de puerto predefinido por el que se establece

comunicación con el servidor de correos SMTP es el 25.

TELNET. El protocolo TELNET facilita la posibilidad de conexión remota,

mediante la cual el usuario de un computador se conecta a una terminal

remota a través de una red y trabaja como si estuviera conectado

directamente a ese terminal. TELNET está implementado en dos módulos:

un cliente TELNET interactúa con el módulo de E/S de terminal para

comunicarse con el terminal local. Éste convierte las características del

terminal real en una normalización de red y viceversa. El servidor TELNET

interactúa con una aplicación, actuando como un sustituto del gestor de

terminal para que el terminal remoto aparezca como local en la aplicación.

El protocolo TELNET establece comunicación por el número de puerto 23.

DNS. El Sistema de Nombre de Dominio es una base de datos distribuida

de nombre de dominio y direcciones IP ligadas a estos nombres. Un

nombre de dominio es simplemente una cadena de caracteres alfanumérica

separada en los segmentos por puntos, que representa un lugar específico

y único en el "espacio de nombre de dominio”. Cada nombre DNS consta

de dos partes. La primera identifica al nodo dentro de una subred y la

segunda a la subred, y se llama dominio. El puerto predefinido para el

servicio DNS es el 53.

2.4.4 Protocolos de la capa de transporte. Los protocolos de esta capa regulan

el flujo de información para garantizar la conectividad de extremo a extremo entre

aplicaciones de computadores de manera confiable y precisa. Estos son:

Page 58:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

58

TCP. El Protocolo de Control de Transmisión es un protocolo orientado a

conexión, es decir, diseñado para realizar comunicaciones seguras entre

procesos paritarios (usuarios TCP) en redes seguras e inseguras así como

a través de un conjunto de redes interconectadas. TCP es un protocolo

adecuado para interactuar contra el protocolo IP en la capa de internet. La

seguridad del protocolo TCP lo convierte en idóneo para la transmisión de

datos por sesiones, para aplicaciones cliente -servidor y para servicios

críticos, como el correo electrónico.

Los puntos de acceso al servicio en la capa de transporte en TCP/IP se

llaman socket o conectores TCP/IP, siendo útiles en la programación de

aplicaciones de red. Las primitivas (funciones, estructura de datos, etc.) de

la capa de transporte en TCP/IP permiten crear sockets, asociar nombres

ASCII a sockets previamente creados, establecer y liberar conexiones,

enviar y recibir mensajes a través de los sockets, etc. Estos sockets TCP se

emplearon en la implementación de los protocolos HTTP, TELNET y SMTP

en el módulo Rabbit,…Véase los numerales 3.1, 3.2 y 3.3…

UDP. El Protocolo de Datagramas de Usuarios proporciona un servicio no

orientado a conexión para los procedimientos de la capa de aplicación, es

decir, permite la transmisión de mensajes sin necesidad de establecer

ninguna conexión y, por tanto, sin garantía de entrega. Actúa simplemente

como una interface entre los procesos de los usuarios de la red y el

protocolo IP. Se utiliza en transmisiones rápidas que no necesitan

seguridad en la transmisión.

2.4.5 Protocolo de la capa internet. En este nivel de TCP/IP existe solamente el

protocolo Internet IP, independiente de la aplicación que solicita servicios de red o

del protocolo de transporte que se utiliza. La función de la capa internet es

averiguar cómo encaminar paquetes o tramas de información a su destino final, lo

Page 59:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

59

que se consigue mediante el protocolo IP. Para hacer esto posible, cada

dispositivo en la red necesita una dirección IP que lo identifique de forma única.

IP. El protocolo internet es parte de la familia de protocolos TCP/IP y es el

protocolo más usado de interconexión entre redes7. IP no es orientado a

conexión, por tanto, carece de seguridad en la entrega de paquetes.

Cuando una comunicación que utiliza el protocolo IP para transferir los

paquetes de datos necesita seguridad, ésta debe ser proporcionada por el

protocolo TCP de la capa de transporte, que se encargará de los

mecanismos de verificación de entrega y de la comprobación de errores.

Este protocolo es usado por los de la capa de transporte para encaminar los

datos a su destino, siendo ésta su última misión, por lo que no se preocupa

de la integridad de la información que contienen los paquetes. Para poder

direccionar los datagramas, IP introduce una nueva cabecera de longitud

variable en los mismos, formada de una parte fija de 160 bits (20 bytes) y

de un resto variable, que contienen los diferentes datos necesarios para

poder enrutar los paquetes, como la longitud de la cabecera internet, la

longitud total del datagrama, un número de identificación, tipo de protocolo

al que pertenece el datagrama (TCP o UDP), tiempo de vida, campo de

comprobación (checksum), dirección de origen, dirección de destino, datos,

etc.

Direcciones IP. Una dirección IP especifica un número de 32 bits (4 bytes)

expresado en forma decimal en cuatro grupos de tres dígitos separados por

puntos. Cada número entre los puntos estará entre 0 y 255 que

corresponde a 8 dígitos binarios (00000000 a 11111111). Como IP es un

protocolo pensado para la interconexión de subredes, cada dirección IP

7 STALLINGS, Op.cit., p. 540.

Page 60:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

60

consta de un identificador de red y un identificador de host dentro de la

misma, como se ve en la figura 12.

Figura 12. Esquema de una dirección IP

A la hora de asignar direcciones IP a una red se considera el tamaño y las

necesidades de ésta, por lo que se distinguen 3 tipos de redes.

o Redes de clase A. Son aquellas redes que precisan un gran número

de direcciones IP, debido al número de host que comprenden. A este

tipo de redes se les asigna un rango de direcciones IP identificado

por el primer grupo de 3 dígitos (primer octeto de la IP), de tal forma

que disponen de los otros 3 grupos siguientes para asignar

direcciones a host. Su primer byte tiene un valor comprendido entre 1

y 126, es decir, hay 126 subredes posibles de tipo A y cada una de

ellas puede contener16.777.214 hosts distintos.

o Redes de clase B. A este tipo de redes se les asigna un rango de

direcciones IP identificado por los dos primeros grupos de 3 dígitos

(primer y segundo octetos de la IP), de tal forma que disponen de los

otros 2 grupos siguientes para asignar direcciones a hosts. Sus dos

primeros bytes deben estar entre 128.1 y 191.254, por lo que el

número de direcciones resultante es de 65.534.

192. 8 . 3 . 101

red dominio

subred estación

Page 61:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

61

o Redes de clase C. A este tipo de redes se les asigna un rango de

direcciones IP identificado por los tres primeros grupos de 3 dígitos,

de tal forma que disponen de un sólo grupo para asignar direcciones

a hosts. Sus 3 primeros bytes deben estar comprendidos entre

192.1.1 y 223.254.254. Es posible codificar 2.097.151 subredes

distintas de 254 hosts distintos cada una.

2.4.6 Protocolo de la capa acceso a la red. Como TCP/IP no especifica

claramente un protocolo de nivel de enlace de datos, eran necesarios unos

mecanismos para traducir las direcciones IP a direcciones que entendieran el

software de capa de enlace de datos por sobre el que corre TCP/IP y para

controlar posibles errores a nivel de subred.

ARP. Como el protocolo IP utiliza un sistema de direccionamiento que no

tiene nada que ver con las direcciones MAC de las LAN, hay que arbitrar un

mecanismo de asignación de direcciones IP (lógicas) a direcciones MAC

(físicas) propias del nivel de enlace. De esto se encarga el protocolo de

resolución de direcciones ARP8, que funciona del siguiente modo: cuando

un host quiere transmitir un paquete IP, necesita averiguar la dirección MAC

del host destinatario, cuya dirección es la dirección de destino del campo

<< dirección de destino>> del paquete IP. Para ello genera un paquete de

petición ARP que difunde por toda la red. Todos los nodos de la red

detectan este paquete y solo aquel host que tiene la dirección IP

encapsulada en el paquete ARP contesta con otro paquete ARP de

respuesta con su dirección MAC. De este modo, el host emisor relaciona

dirección IP y MAC, guardando estos datos en memoria para su uso en

transmisiones posteriores.

8 ABAD, Alfredo y MADRID, Mariano. Redes de área local. Madrid : McGraw Hill, 1997. p. 131.

Page 62:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

62

3. IMPLEMENTACIÓN DE LOS PROTOCOLOS TCP/IP

El objetivo de este capitulo es documentar el empleo de los protocolos de

comunicación de la familia TCP/IP como son HTTP, SMTP, TELNET, el protocolo

de transporte UDP y el servicio DNS, a través de ejemplos prácticos

implementados al módulo Rabbit RCM2200. Sirviendo para mostrar la

aplicabilidad de los conceptos teóricos de los protocolos TCP/IP vistos en el

capitulo anterior.

Sin embargo, se recomienda que antes de compilarse y ejecutarse cualquier

programa ejemplo, se deba establecer la respectiva configuración de

comunicación del software Dynamic C con el módulo de control RCM2200, para

así transferir el programa a este módulo. La configuración realizada fue la

siguiente: En el menú Opciones (Options) de Dynamic C se escoge Opciones de

proyecto (Proyect Options) y luego la pestaña Comunicaciones

(Communications), activándose la opción Usar conexión serial (Use Serial

Connection) debido a que se trabaja con un cable de programación serial,

dejando los valores por defectos como se muestra en la figura 45 del Anexo B

“Manual De Usuario De Dynamic C”

3.1 PROTOCOLO HTTP

El Protocolo de Transferencia de Hipertexto HTTP, permite configurar el módulo

Rabbit RCM2200 como un servidor Web, para que reciba peticiones desde un

navegador Web (cliente) en una intranet corporativa o de internet, y responda con

el recurso solicitado, es decir, páginas Web en las que el usuario puede visualizar

y configurar variables parametrizables de un proceso en ejecución. Esta

Page 63:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

63

configuración como servidor HTTP se utilizó en la implementación del sistema de

monitoreo y control automático SCAM.

A continuación se hace mención a la configuración del servidor HTTP en el

módulo Rabbit mediante el siguiente ejemplo a describir “Autenticacion_usuario.c”.

Éste programa se refiere básicamente a los modos de autenticación de usuarios

para acceder las páginas del servidor Web, por medio de la validación de usuarios

predefinidos.

El programa proporciona tres usuarios, donde los nombres de usuario son:

"Admin", "Ingenieria", y "Operario", y las contraseñas son "Ronald", "Jorge", e

"Invit" respectivamente. Cada uno de los tres usuarios puede ser valido y no valido

oprimiendo en el teclado la opción 1, 2, 3. Pueden emplearse dos modos de

autenticación de usuario, la autenticación básica y la autenticación digest, las

cuales permiten el soporte de múltiples usuarios, esto se puede configurar en el

programa presionando las teclas 'b' , 'd', o 'n' para no utilizar los modos de

autenticación descritos.

Inicialmente en el código de la aplicación se debe fijar la configuración de red9 del

módulo Rabbit RCM2200, debido a que ésta trabajará como un servidor Web.

Para esto el usuario puede asignar valores de configuración de red (IP, mascara

de red, etc.) acorde a su red Ethernet ó puede establecer una configuración

predefinida, a través de la librería TCP_CONFIG.LIB de Dynamic C, utilizando el

macro TCPCONFIG. Los valores que toma TCPCONFIG pueden variar hasta 6,

donde cada uno de estos representa un tipo de configuración diferente, como se

muestra en el tabla 1.

9 Véase sección A.3 del Anexo A

Page 64:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

64

Tabla 1. Valores de configuración predefinidos de TCPCONFIG

TCPCONFIG ETHERNET PPP DHCP DESCRIPCIÓN

1

SI

NO

NO

Representa una configuración de

red estática para el módulo Rabbit

en una red Ethernet

2

NO

SI

NO

Permite que el módulo Rabbit

establezca una comunicación serial

por el puerto serial C bajo el

protocolo PPP (protocolo punto a

punto)

3

SI

NO

SI

Establece una configuración de red

dinámica en una red Ethernet

utilizando el protocolo DHCP

4 SI SI NO Admite la configuración 1 y la 2

sobre el puerto serial C.

5

SI

NO

SI

Presenta la misma configuración de

la opción 3, con la excepción de

que el usuario pueda configurar los

parámetros de conexión al

servidor DHCP de su organización.

6

SI

NO

NO

Permite realizar una configuración

de red Ethernet en tiempo de

ejecución en el módulo Rabbit.

Page 65:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

65

/***********************************************************************************************

HTTP / Autenticacion_usuario.c

**********************************************************************************************/

#define TCPCONFIG 1

#define HTTP_MAXBUFFER 512

Se incluye el macro HTTP_MAXBUFFER, que permite que el servidor Web

soporte el recibo y transferencia de información a través de las rutinas CGI, el cual

asigna en la memoria un espacio en bytes máximo para almacenar cada línea de

cabecera recibida del cliente Web.

Ahora se debe especificar el tipo de autenticación a utilizar, estableciendo la

autenticación Digest a 1, para activarla a través del macro siguiente.

#define USE_HTTP_DIGEST_AUTHENTICATION 1

El siguiente macro permite la asignación de múltiples usuarios a un recurso

particular, por ejemplo una página Web, definiendo cuantos usuarios pueden

asociarse con la página Web.

#define SSPEC_USERSPERRESOURCE 3

Ahora se deshabilita el código que soporta la estructura http_flashspec[ ], esto es,

por que se utilizarán las funciones de la librería ZSERVER.LIB.

#define HTTP_NO_FLASHSPEC

La siguiente directiva del compilador, le informa a éste como encargase de

controlar el área de memoria predefinida para las funciones. La opción xmem,

hace que todas las funciones C no declaradas como la raíz vayan a la memoria

extendida

Page 66:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

66

#memmap xmem

Se incluyen las librerías principales de gestión de red de TCP/IP con la librería

dcrtcp.lib y la del servidor HTTP respectivamente.

#use "dcrtcp.lib"

#use "http.lib"

Se debe incluir todos los archivos de la aplicación Web, tales como, páginas Web,

imágenes etc. en la memoria flash del módulo RCM2200, esto a través de la

directiva #ximport “ubicación del archivo”, como se muestra:

#ximport "C:/SCAM/paginas/principal.shtml" principal_shtml

#ximport "C:/SCAM/paginas/principal_image.shtml" princimage_shtml

#ximport "C:/SCAM/paginas/principal_text.shtml" princtext_shtml

//Imagenes

#ximport "C:/SCAM/paginas/logo_scan.PNG" logo_scan_PNG

#ximport "C:/SCAM/paginas/butpid.PNG" butpid_PNG

#ximport "C:/SCAM/paginas/butusuario.PNG" butusuario_PNG

#ximport "C:/SCAM/paginas/butayuda.PNG" butayuda_PNG

#ximport "C:/SCAM/paginas/chipbkgrnd.gif" chipbkgrnd_gif

La estructura HttpType10 le da al servidor HTTP indicaciones sobre como manejar

peticiones entrantes. Ésta asocia una extensión de archivo con un tipo MIME

(Ampliación de Correo Internet Multiuso) y una función que se ocupa del tipo del

MIME. El servidor compara la extensión de la petición entrante con la lista de

extensiones definidas en el arreglo http_types y retorna el segundo campo como el

tipo de campo contenido.

10

Véase sección D.1.2 del Anexo D “Manual del Sistema”

Page 67:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

67

const HttpType http_types[] =

{

{ ".shtml", "text/html", NULL},

{ ".html", "text/html", NULL},

{ ".PNG", "image/PNG", NULL},

{ ".gif", "image/gif", NULL}

};

Una vez terminada la configuración del servidor, se empieza con la función

principal main(), donde se declararán las variables y se ejecutan las funciones del

servidor HTTP.

void main(void)

{

int user1; int user2; int user3; int user1_enabled;

int user2_enabled; int user3_enabled; int pag1; int pag2;

int ch;

printf("Presione '1', '2', ó '3' para desactivar/activar a los tres usuarios.\n");

printf("Presione 'b', 'd', ó 'n' para fijar la autenticación básica, digest, ó ninguna.\n\n");

sock_init(); // La función sock_init inicializa la conexión TCP/IP.

http_init(); // La función http_init inicializa el servidor Web.

http_setauthentication(HTTP_DIGEST_AUTH);

printf("Usando la autenticación digest \n");

HTTP_DIGEST_AUTH es el tipo de autenticación predefinido cuando la

autenticación digest se ha habilitado, así que esta línea no es estrictamente

necesaria. Los otros posibles valores son HTTP_BASIC_AUTH y

HTTP_NO_AUTH.

Page 68:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

68

Las líneas de código siguientes agregan a tres usuarios mediante la función

sauth_adduser(“nombre usuario”, ”contraseña”, “nombre de servidor valido” ). Se

usa las variable userx_enabled para guardar rastro de los usuarios que están

habilitados actualmente.

user1_enabled = 1;

user2_enabled = 1;

user3_enabled = 1;

user1 = sauth_adduser("Admin", "Ronald", SERVER_HTTP);

user2 = sauth_adduser("Ingenieria", "Jorge", SERVER_HTTP);

user3 = sauth_adduser("Operario", "Invit", SERVER_HTTP);

La siguiente línea agrega un archivo a la lista de objetos del servidor, en este caso

el objeto es una página Web, a través de la función sspec_addxmemfile( ).

pag1 = sspec_addxmemfile("/", principal_shtml, SERVER_HTTP);

Se agrega cada usuario a la lista de usuario que tiene acceso a la entrada

especificada, en este caso una página Web

sspec_adduser(pag1, user1);

sspec_adduser(pag1, user2);

sspec_adduser(pag1, user3);

La siguiente función fija el campo realm de una estructura ServerSpec (es una

estructura que contiene una lista de objetos que serán trasferidos por el servidor)

para propósitos de autenticación de HTTP.

sspec_setrealm(pag1, "Admin");

Page 69:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

69

Nuevamente se agregan otros archivos a la lista de objetos del servidor,

asignándose estos recursos a los usuarios creados.

pag2 = sspec_addxmemfile("principal.shtml", principal_shtml, SERVER_HTTP);

sspec_adduser(pag2, user1);

sspec_adduser(pag2, user2);

sspec_adduser(pag2, user3);

sspec_setrealm(pag2, "Admin");

sspec_addxmemfile("logo_scan.PNG", logo_scan_PNG, SERVER_HTTP);

sspec_addxmemfile("butpid.PNG", butpid_PNG, SERVER_HTTP);

sspec_addxmemfile("butusuario.PNG", butusuario_PNG, SERVER_HTTP);

sspec_addxmemfile("butayuda.PNG", butayuda_PNG , SERVER_HTTP);

sspec_addxmemfile("chipbkgrnd.gif", chipbkgrnd_gif, SERVER_HTTP);

La función tcp_reserveport hace que el servidor Web ignore las peticiones cuando

no hay un socket disponible. Esto permite al servidor ocuparse de múltiples

peticiones fácilmente aun cuando se asignen pocos sockets.

tcp_reserveport(80);

El siguiente bloque de código realiza varias tareas, la primera es que espera que

el usuario presione el teclado y acorde a este valor, poder saber cual es el usuario

que se esta conectando con la aplicación y asignarle recursos.

De acuerdo con la tecla presionada, esto es validado para cada uno de los tres

usuarios permitidos. Como se mencionó anteriormente la función sspec_adduser

agrega un usuario a un recurso particular y la función sspec_removeuser elimina

a los usuarios asignados a ese recurso particular.

while (1) {

if (kbhit()) {

Page 70:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

70

ch = getchar();

switch (ch) {

case '1':

user1_enabled = !user1_enabled;

if (user1_enabled) {

sspec_adduser(pag1, user1);

sspec_adduser(pag2, user1);

printf("Usuario 1 activo\n");

}

else { sspec_removeuser(pag1, user1);

sspec_removeuser(pag2, user1);

printf("Usuario 1 inactivo \n");

} break;

Los dos casos siguientes hacen la misma validación como en el caso anterior,

siendo específica para cada uno de los usuarios restantes.

case '2':

user2_enabled = !user2_enabled;

if (user2_enabled) {

….. }

else {

….. }

break;

case '3':

user3_enabled = !user3_enabled;

if (user3_enabled) {

…. }

else {

…. }

break;

Page 71:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

71

Ahora en el siguiente código se puede observar los diferentes tipos de

autenticación que los usuarios pueden digitar desde la aplicación. La función

http_setauthentication() permite definir el tipo de autenticación, ya que, recibe

como parámetro a estos niveles de autenticación (HTTP_NO_AUTH,

HTTP_BASIC_AUTH, ó HTTP_DIGEST_AUTH).

case 'b':

http_setauthentication(HTTP_BASIC_AUTH);

printf("Usando autenticación básica \n");

break;

case 'd':

http_setauthentication(HTTP_DIGEST_AUTH);

printf("Usando autenticación Digest \n");

break;

case 'n':

http_setauthentication(HTTP_NO_AUTH);

printf("No usa autenticación \n");

break;

}

}

http_handler();

} // Llave que cierra while infinito

} //fin de main

La función http_handler() necesita ser llamada para manejar el servidor HTTP

activo a fin de recibir peticiones desde un navegador en cualquier momento.

A continuación se muestra la interfaz correspondiente al código descrito

anteriormente. Se puede apreciar cual es el usuario que se conectó y la ventana

de inicio de sesión para validar el nombre de usuario y contraseña, y así poder

asignar los recursos al mismo.

Page 72:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

72

Figura 13. Autenticación digest para ingresar a una página Web

En la Autenticación básica se envía el nombre de usuario y contraseña en texto

claro, mientras que en la Digest, estos datos se envían de forma cifrada

criptográficamente. Con la no autenticación se accede a la página Web sin ningún

método de acceso.

Figura 14. Autenticación básica

Page 73:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

73

3.2 PROTOCOLO SMTP

El protocolo SMTP se puede emplear en el módulo Rabbit, para enviar mensajes

de advertencia al correo electrónico del operador/usuario de un sistema dedicado

que se basa en este módulo, con el propósito de indicar sobre alguna anormalidad

en el sistema.

SMTP es el protocolo estándar para transferir correo entre computadores. Dada

su importancia se implementará con un pequeño ejemplo la funcionalidad de éste

en el módulo de control RCM2200.

El siguiente programa SMTP.c configura el módulo Rabbit para enviar un correo

electrónico a una dirección de correo específica que se encuentra predefinida en

el programa. Para esto primero se debe definir un nombre de dominio al módulo,

el cual lo identificará ante un servidor de correo.

/***********************************************************************************************

SMTP /smtp.c

Page 74:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

74

**********************************************************************************************/

#class auto

#define TCPCONFIG 1

Se establece la forma cómo se almacenarán las variables, en este caso es auto

donde se ubican a nivel local en una pila en la memoria todas las variables.

Ahora se escriben los siguientes macros para configurar las direcciones de correo

del remitente y destinatario, al igual que el asunto y cuerpo del mensaje a enviar.

Los valores de los macros deben cambiarse acorde a la referencia que el usuario

utilizará.

#define DE "[email protected]"

#define PARA "[email protected]"

#define ASUNTO "ya obtuviste la noticia!"

#define CUERPO "Visita el portal web Rabbit Semiconductor .\r\n" \

"Allí usted encontrará las últimas noticias sobre Dynamic C."

Se define el macro SMTP_SERVER el cual informa a la librería DCRTCP.LIB

donde se encuentra el servidor de correo destino. Este servidor de correo debe

configurarse para recibir el correo desde módulo Rabbit. Este valor puede ser el

nombre o la dirección de IP

#define SMTP_SERVER “curn.edu.co” / /192.168.0.6

El macro SMTP_DOMAIN indica el nombre de dominio del módulo Rabbit. Este

valor puede ser el nombre o la dirección de IP. En este caso el nombre de

dominio de correo es: rabbit2200.org.co

#define SMTP_DOMAIN “rabbit2200.org.co” // "controlador.midominio.com"

Page 75:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

75

El macro siguiente registra la comunicación entre el servidor de correo y el

módulo Rabbit.

#define SMTP_VERBOSE

Nuevamente se utilizan la directiva que se encarga de controlar el área de

memoria predefinida para las funciones, al igual que, la librería principal dcrtcp.lib

y la de soporte del protocolo SMTP.

#memmap xmem

#use dcrtcp.lib

#use smtp.lib

Luego de realizar la configuración previa de SMTP se escribe el código principal,

donde están las funciones que realizan el envío del mensaje

void main()

{

sock_init(); // se inicializa un socket para la conexión con el servidor de correo

La siguiente función inicia el envío del mensaje, la cual recibe como parámetros

los macros predefinidos anteriormente,

smtp_sendmail(DE, PARA, ASUNTO, CUERPO);

La función smtp_mailtick(), realiza un llamado repetido de la misma función

verificando que el mensaje se haya enviado completamente. Donde los valores de

retorno son: SMTP_PEDING, el cual indica que aun no se ha enviado el mensaje,

SMTP_SENT indicando que el mensaje se ha enviado, entre otros valores.

Partiendo de dichos valores cuando la comparación no se cumpla continuará con

la siguiente línea de código.

Page 76:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

76

while(smtp_mailtick()==SMTP_PENDING)

continue;

La siguiente condición indica que la función smtp_status() verifica el estado del

mensaje si no se ha enviado (SMTP_PENDING), si ya se envió

(SMTP_SUCCES), si esta fuera del tiempo del envío (SMTP_TIME) ó si recibe

una respuesta no valida del servidor SMTP (SMTP_UNEXPECTED). De acuerdo

con estos valores de retorno se emitirá un mensaje.

if(smtp_status()==SMTP_SUCCESS)

printf("Mensaje enviado\n");

else

printf("Error enviando mensaje \n");

} // fin de main

3.3 PROTOCOLO TELNET El protocolo TELNET se podría emplear en el módulo Rabbit para enviarle

órdenes o datos a éste desde una terminal remota conectada a la red Ethernet,

como por ejemplo, enviar una orden para establecer una nueva dirección IP o

máscara de red con el objetivo de poder asignar la configuración de red del

módulo en tiempo de ejecución.

El siguiente es un ejemplo en el cual un servidor TELNET escucha por el puerto

lógico 23 una conexión entrante, para recibir datos desde un cliente TELNET

remoto.

Específicamente el ejemplo consiste en recibir una conexión, prepararle una

entrada y almacenar los datos dentro del búfer.

Page 77:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

77

Inicialmente se realiza la configuración del servidor Telnet

/***********************************************************************************************

TELNET /telnet.c

**********************************************************************************************/

#class auto

#define TCPCONFIG 1

El macro INPUT_COOKED prepara la entrada de datos, define el código de

control Telnet indispensables para activar un código de compilación para el

funcionamiento del programa.

#define INPUT_COOKED

#memmap xmem

#use "dcrtcp.lib" // se incluye la librería principal TCPIP

A continuación se muestra el código correspondiente a la parte de la interfaz de

usuario. La siguiente es una función que recibe datos de entrada desde el búfer.

Como parámetros recibe un puntero de tipo caracter al búfer buf y un entero len

que representa el número de datos de entrada. Cuando esta función retorna, el

búfer es borrado. Si se desea conservar estos datos, deberían ser copiados en

una variable diferente de buf antes de ingresar a la función.

void receive_data(char *buf, int len)

{ auto int i;

for(i=0;i<len; i++)

printf("%c",buf[i]); //imprime los caracteres por pantalla

}

int init_recv(int port);

void recv_tick(void);

Page 78:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

78

void main()

{

sock_init() ;//Se inicializa el socket para la conexión con el equipo remoto .

/* Escuchando el puerto */

if(init_recv(23) !=0) {

printf("Error en init_recv – No puede escuchar (conectarse)

al puerto \n");

exit(0);

}

while(1) {

recv_tick();

}

}

El macro MAX_BUFLEN indica el tamaño máximo del búfer en bytes. La

estructura de datos denominada telnet_recv, se encarga de manipular una serie

de variables indispensables para el estado de la conexión entre el cliente y el

servidor Telnet y el almacenamiento del búfer recibido. Los campos de la

estructura pueden observarse a continuación.

#define MAX_BUFLEN 256

typedef struct {

tcp_Socket sock; //asignación del socket TCP

tcp_Socket *s;

int lport; //Puerto local de escucha

int estado; //estado del socket

char buf[MAX_BUFLEN]; //buffer para almecenar datos

char cmdbuf[10];

} telnet_recv;

Ahora se crea la variable tr_state que es un tipo de dato de la estructura

telnet_recv:

Page 79:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

79

telnet_recv tr_state;

En la siguiente instrucción se crea un puntero constante state de tipo telnet_recv,

el cual apunta al contenido de la variable antes declarada tr_state. La palabra

reservada const declara una valor que es almacenado en la memoria flash, es un

tipo de calificador que puede ser usado en cualquier tipo de datos específico, tanto

estático como global (carácter, entero o tipo estructura).

const telnet_recv *const state = &tr_state;

Se declaran los macros indispensables para la función de inicialización del socket.

#define STATE_INIT 0

#define STATE_STEADY 1

La función init_recv utiliza la estructura antes declarada para iniciar la conexión,

entonces se debe recurrir a que el puerto sea reconocido. Esta función recibe

como único parámetro el número del puerto de escucha.

int init_recv(int puertoloc)

{

state->s = &state->sock;

state->lport = puertoloc;

Las sentencias anteriores son apuntadores a las variables que almacena el estado

del socket y el número de puerto de escucha, (recuerde que el socket es un

espacio en memoria que guarda el estado de la conexión entre el cliente y el

servidor, y por lo tanto requiere el número del puerto que se manipula para lograr

dicha conexión).

Page 80:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

80

tcp_listen() llama a la librería dcrtcp.lib que entra en sesión para que un puerto

particular sea aceptado. Esta retorna 1 para aceptar el puerto ó 0 si existe un

error.

tcp_listen(state->s, puertoloc, 0, 0, NULL, 0);

state->estado = STATE_INIT;

return 0;

} // fin función init_recv()

La siguiente instrucción activa el código de compilación que se encuentra entre su

dominio, esta empieza con #ifdef nombre y termina #endif, pero para poder

utilizar el nombre debe ser declarado con anterioridad con la directiva #define

nombre

#ifdef INPUT_COOKED

La función cook_cmd() emplea una función para escribir el número de bytes en el

socket TCP a enviarse por la red.

void cook_cmd(void)

{

auto int len;

len = 3;

La función sock_fastwrite() escribe tantos bytes posibles al socket y retorna el

número de bytes o -1 si existe algún error, se utiliza sólo para sockets TCP y

UDP. El primer parámetro de la función es el socket donde se escribirán los bytes,

el segundo son los bytes que se van a escribir en el socket y el tercero el número

máximo de bytes que se escribirán en el socket.

while(len > 0) {

len -= sock_fastwrite(state->s, state->cmdbuf + 3 - len, len);

Page 81:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

81

}

} // fin función cook_cmd()

La función cook_input() prepara la entrada de los datos, recibe el tamaño de los

bytes, los manipula y los almacena en el búfer de estado, y retorna el nuevo

tamaño de los bytes almacenados en el búfer:

int cook_input(int len)

{ auto int newlen, i;

newlen = len;

for(i=0; i<(len-2); i++) {

if(state->buf[i] == 255) {

/* código de control */

Antes de escribir los bytes en el búfer debe verificarse que éstos no excedan el

tamaño predefinido del búfer que es de 256.

switch(state->buf[i + 1] ) {

case 251:

case 252: {

sprintf(state->cmdbuf, "%c%c%c",255, 254, state->buf[i + 2]);

cook_cmd();

La función memcpy() copia los bytes en la memoria, toma el número de bytes del

segundo parámetro y los asigna al primer parámetro tomando como número

máximo de bytes a escribir el valor numérico del tercer parámetro y retorna los n

bytes escritos en el primer parámetro.

memcpy(state->buf + i, state->buf + i + 3, len - (i + 3));

newlen -= 3;

break;

}

Page 82:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

82

case 253:

case 254:

sprintf(state->cmdbuf, "%c%c%c",255, 252, state->buf[i + 2]);

cook_cmd();

memcpy(state->buf + i, state->buf + i + 3, len - (i + 3));

newlen -= 3;

break;

case 255:

break;

default:

/* comando desconocido */

memcpy(state->buf + i, state->buf + i + 2, len - (i + 2));

newlen -= 2;

break;

}

}

}

return newlen;

}// fin función cook_input()

#endif

void recv_tick(void)

{ auto int retval;

La siguiente función se encarga de procesar el paquete recibido y verificar el

estado de la conexión del socket, el cual recibe como parámetro un puntero al

estado del socket.

tcp_tick(state->s);

Page 83:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

83

El siguiente switch verifica a través de los macros state_init ó state_steady el

estado de la conexión del socket.

switch(state->estado) {

case STATE_INIT:

La función sock_established() retorna verdadero si se establece la conexión del

socket, el valor retornado es uno (1).

if(sock_established(state->s)) {

printf("Conexión establecida.\n");

state->estado = STATE_STEADY;

}

break;

En caso de que el estado del socket sea igual al valor del macro STATE_STEADY

se verifica nuevamente el estado de la conexión con la función sock_established(),

para saber si se perdió la conexión. Si ocurre esto se trata de reestablecer la

comunicación a través de la función init_recv(), la cual recibe como parámetro el

puerto de escucha 23 definido en el campo lport de la estructura telnet_recv.

case STATE_STEADY:

if(!sock_established(state->s)) {

printf("Conexión perdida.\n\n");

init_recv(state->lport);

break;

}

La siguiente función sock_fastread() lee los bytes posibles del socket y retorna el

número de bytes leídos ó -1 si existe algún error, se utiliza sólo para sockets TCP

y UDP. El primer parámetro de la función es el socket donde se leerán los bytes, el

Page 84:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

84

segundo son los bytes que se van a leer en el socket y el tercero es el número

máximo de bytes que se leerán en el socket.

retval = sock_fastread(state->s, state->buf, MAX_BUFLEN);

if(retval != 0) {

/* Se obtienen los datos en la variable retval*/

#ifdef INPUT_COOKED

retval = cook_input(retval);

#endif

receive_data(state->buf, retval);

/* Se entregan los datos de usuario */

} //fin if

break;

default:

/* No debe llegar aquí */

/* reestablece el control */

exit(-1);

} /cierra switch/

} // //fin funcion recv_tick(void)

Después de haber implementado el código de la aplicación Telnet, se compila y se

ejecuta en el módulo de control. Luego en la ventana Ejecutar el comando Telnet

es ejecutado indicando la dirección IP del host remoto al que se va conectar, como

se muestra en la figura.

Figura 15. Ventana Ejecutar de Windows XP

Page 85:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

85

Al establecer la conexión TELNET con el equipo remoto, que en el caso es el

módulo Rabbit, se imprime en la ventana de salida de texto de Dynamic C, el

mensaje de “Conexión Establecida” sí se logra la conexión, de lo contrario se

mostrará el mensaje “Conexión Perdida”. Por consiguiente, en la consola de

TELNET que es abierta al ejecutar éste comando, se escribe el texto u orden que

aparecerá en esta misma ventana.

Figura 16. Ventana de salida de texto de Dynamic C

3.4 PROTOCOLO UDP

El Protocolo de Datagramas de Usuario es un protocolo de la capa de transporte

TCP/IP alternativo del protocolo TCP, el cual se puede emplear para la difusión

de mensajes desde el módulo Rabbit a los demás equipos conectados a la red, es

decir, un Broadcast, como en el caso del servicio DNS, que difunde un mensaje a

toda la red preguntando por el nombre de un host particular.

3.4.1 Servidor UDP. En el ejemplo a describir a continuación se establece una

conexión con socket UDP, dónde esta vez el módulo Rabbit trabaja como un

servidor UDP y recibe un paquete de información desde un cliente determinado.

/***********************************************************************************************

UDP /udp_srv.c

**********************************************************************************************/

#class auto

#define TCPCONFIG 1

Page 86:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

86

Se define el búfer que almacenará el número máximo de conexiones desde un

cliente remoto, a través del siguiente macro.

#define MAX_UDP_SOCKET_BUFFERS 1

Ahora se define el puerto local que se utilizará para el envío de paquetes desde el

cliente, es decir, se debe especificar en el servidor que puerto local se utilizará

para el recibo de paquetes, donde únicamente se recibirán paquetes desde este

puerto.

#define LOCAL_PORT 1234

El siguiente macro especifica una dirección IP remota. Colocando el valor del

macro a cero (0) se indica que cualquier cliente se puede conectar al servidor,

determinando que el primer cliente que se conecte completará la conexión con su

dirección IP, número del puerto y, el socket local se limitará sólo a ese host. De lo

contrario si se especifican como se muestra todo a "255", se recibirá toda la

transmisión de todos los clientes en lugar de los paquetes enviados por un sólo

cliente. Con esto se termina la configuración del servidor.

#define REMOTE_IP "0"

// #define REMOTE_IP "255.255.255.255"

#memmap xmem

#use dcrtcp.lib // librería principal de TCPIP

Se inicializa un socket tipo UDP para la transmisión de datagramas de usuario el

cual permitirá establecer la conexión cliente – servidor.

udp_Socket sock;

Page 87:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

87

La siguiente función retorna valores enteros acorde a la recepción de paquetes o

no por parte del servidor, retorna 0 (cero) si no recibe el paquete de lo contrario

retorna el valor 1.

int receive_packet(void)

{

static char buf[128]; /*Se inicializa una variable arreglo estática buf de 128 caracteres*/

#GLOBAL_INIT

{

memset(buf, 0, sizeof(buf));

}

El macro GLOBAL_INIT realiza una inicialización global de la función memset( ),

con el objetivo de que el bloque de código que se encuentra encerrado en las

llaves ({ }) se inicialice automáticamente una vez se ejecute el programa, donde

dicha función se encarga de fijar el arreglo buf a cero.

La siguiente instrucción utiliza la función udp_recv( ), que permite la recepción de

datagramas de usuarios a través de un socket UDP. El primer parámetro de la

función es el socket UDP donde se recibirá el datagrama, el segundo es el búfer

donde se almacenará el datagrama UDP, el tercero es el tamaño del búfer.

if (-1 == udp_recv(&sock, buf, sizeof(buf))) {

/* retorna paquete no leído. */

return 0;

}

printf("Recibido -> %s\n",buf);

return 1;

}

Page 88:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

88

Esta función tiene tres valores de retorno que son mayor igual que cero (>=0)

cuando el paquete es recibido, menos uno (-1) cuando el datagrama se está

esperando, menor que menos uno (< -1) cuando existe la posibilidad de error en la

transmisión. Si el búfer buf no es lo suficientemente grande para el datagrama,

entonces éste será truncado, y el resto será eliminado.

Ahora en el main se inicializa la conexión con la sentencia sock_init().

void main()

{

sock_init();

/*printf("Abriendo socket UDP \n");*/

La función udp_open() abre un socket UDP en el puerto local dado

(LOCAL_PORT). Si la dirección IP remota es especificada (REMOTE_IP),

entonces se aceptarán sólo datagramas UDP de ese host. Si REMOTE_IP es

cero, el primer datagrama recibido en el puerto local completará la conexión, para

que sólo el host y el puerto remoto puedan consecuentemente enviar datagramas

a este socket. Los datagramas no se pueden enviar hasta que la conexión esté

completa. Si REMOTE_IP es -1 entonces, todos los hosts remotos pueden enviar

datagramas a este socket. Todos los datagramas salientes se enviarán a la

dirección de transmisión en el puerto especificado.

El primer parámetro de esta función es el socket, el segundo es el puerto local

(LOCAL_PORT) adónde serán enviados los datagramas, el tercer parámetro es la

dirección IP remota aceptable (REMOTE_IP), el cuarto es puerto remoto aceptable

(REMOTE_PORT), si se coloca a cero (0) establece conexión con el primer host

que envíe un datagrama, el quinto es el llamado a la función manejador de datos

(datahandler) cuando los datos son recibidos ó NULO para localizar los datos

recibidos por el búfer del socket.

Page 89:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

89

La función como tal retorna dos tipos de valores: diferente cero ( !0 ) si el socket

esta abierto correctamente ó cero ( 0 ) si hay error abriendo el socket.

if(!udp_open(&sock, LOCAL_PORT, resolve(REMOTE_IP), 0, NULL)) {

printf("udp_open fracasado!\n"); // falla abriendo el socket udp

exit(0);

}

La función tcp_tick() se encarga de procesar el paquete recibido y verificar el

estado de la conexión del socket. Luego se hace el llamado infinitas veces a la

función recibir paquete receive_packet(), declarada antes del main().

for(;;) {

tcp_tick(NULL);

receive_packet();

} } //fin de main()

3.4.2 Cliente UDP. El programa udp_cli.c es el opuesto del programa anterior

udp_srv.c, donde ahora el módulo Rabbit está configurado como un cliente UDP.

El programa se refiere al envío de datagramas de usuario mediante paquetes,

desde un cliente a un servidor remoto dentro de una subred local.

/***********************************************************************************************

UDP /udp_srv.c

**********************************************************************************************/

#class auto

#define TCPCONFIG 1

Se define el número máximo de sockets búfer que serán asignados por el socket

UDP, aquí solo se necesitara un socket UDP.

Page 90:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

90

#define MAX_UDP_SOCKET_BUFFERS 1

#define HEARTBEAT_RATE 4 // valor de la tasa de envió de paquetes en segundos

El macro LOCAL_PORT permite definir el puerto local UDP desde donde se

iniciará la transmisión del paquete.

.

#define LOCAL_PORT 1234

#define REMOTE_IP "10.10.6.177" //se define la dirección IP remota:

Se escribe el macro para determinar el puerto de destino.

#define REMOTE_PORT 1234 // se debe escribir un valor real

#memmap xmem

#use "dcrtcp.lib" // librería principal de TCPIP

udp_Socket sock ; // socket UDP para establecer la conexión con el servidor:

La siguiente función es la que permite enviar paquetes al servidor remoto,

retornando el valor de 1 si se establece el envío.

int send_packet(void)

{ // se declaran variables fundamentales para la función:

static long sequence;

auto char buf[128];

auto int length, retval;

A través del macro GLOBAL_INIT la variable sequence se inicializa en cero

siempre que se haga el llamado a la función.

#GLOBAL_INIT

{ sequence = 0; }

Page 91:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

91

Se llena el paquete con datos importantes (una secuencia de números), la

instrucción sprintf da formato a los caracteres digitados por el usuario

almacenados en el búfer, devolviendo un número de caracteres escritos.

sequence++;

sprintf(buf, "SEQ=%ld", sequence);

length = strlen(buf) + 1;

Ahora se envía el paquete, a través de la función udp_send( ), la cual transmite el

datagrama al socket UDP. Los parámetros de la función son el socket UDP en el

que se envía el datagrama, el búfer donde se almacena el datagrama y el tamaño

del datagrama.

Dicha función tiene unos valores de retorno, si el valor es mayor igual que cero

(>=0), entonces el número de bytes han sido enviado, pero si el valor es menos

uno (-1) ha ocurrido una falla. Este valor de retorno es almacenado en la variable

entera retval, para así poder establecer una serie de comparaciones y emitir

mensajes acorde a este valor.

retval = udp_send(&sock, buf, length);

if (retval < 0) {

printf("Error enviando datagrama! Cerrando y volviendo a abrir el

Socket..\n");

if (sequence == 1) {

printf(" (La petición inicial ARP puede no haber terminado)\n");

}

sock_close(&sock); // esta instrucción cierra el socket:

La siguiente función abre un socket UDP en un puerto local dado, al igual que en

ejemplo anterior udp_srv.c, pero con la diferencia que el cuarto parámetro es un

macro con la dirección de un puerto remoto, esto significa que al abrir el socket se

Page 92:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

92

debe especificar tanto el puerto local para enviar los datagramas como el puerto

remoto que recibirá dichos datagramas.

if(!udp_open(&sock, LOCAL_PORT, resolve(REMOTE_IP),

REMOTE_PORT, NULL)) {

printf("Falla de udp_open\n");

exit(0); }

}//fin de if retval

tcp_tick(NULL); /* procesa el paquete rápidamente y verificar el estado de la conexión

del socket.*/

return 1; // valor de retorno de la función send_paket( ).

} //ciera send_paket()

void main()

{ // Ahora en el main se inicializa el socket para la conexión con el servidor

sock_init();

printf("Abriendo el socket UDP \n");

if(!udp_open(&sock,LOCAL_PORT,resolve(REMOTE_IP), REMOTE_PORT, NULL))

{ printf(" Falla abriendo el socket UDP!\n");

exit(0);

}

Se inicia un ciclo infinito para mantener el estado de la conexión del socket a

través de la función tcp_tick

for(;;) {

tcp_tick(NULL);

costate {

waitfor(IntervalSec(HEARTBEAT_RATE));

waitfor(send_packet());

}

Page 93:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

93

} //cierra ciclo for

} //cierra main

La estructura costate proporciona varias sentencias que representan para este

caso, los estados que puede tomar la transmisión de un paquete entre el cliente y

el servidor. La sentencia (waitfor) identifica un punto de suspensión pendiente o un

retraso.

Para la primera sentencia se hace el llamado a la función intervalsec( ), la cual

tiene el objetivo de proporcionar un retraso periódico basado en el tiempo de la

llamada anterior del waitfor, aquí se dará un retraso de 4 segundos, ya que, el

valor del macro HEARTBEAT_RATE es 4. En la segunda sentencia, de igual

modo se presentará un retraso en el envío del paquete, dado que el parámetro de

la función waitfor es la función send_packet().

3.5 SERVICIO DNS

El programa a describir es un ejemplo que permite establecer conexión a un

servidor DNS en una red LAN Ethernet con el objetivo buscar un nombre de un

host particular.

Inicialmente se establece el macro para la configuración de red utilizando la

configuración TCP/IP predefinida y la directiva que se en carga de controlar el

área de memoria predefinida para las funciones como en los ejemplos anteriores.

/***********************************************************************************************

DNS /dns.c

**********************************************************************************************/

#define TCPCONFIG 1 .

#memmap xmem

#use dcrtcp.lib

Page 94:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

94

Se incluye la librería principal TCP/IP la cual hace el llamado a la librería de

funciones dns.lib, entre otras,

En el programa principal se declaran las variables que se utilizarán para

almacenar la dirección IP del nombre de dominio que será buscado.

void main()

{ longword ip;

char buffer[20];

sock_init(); // se inicializa la conexión

La función resolve( ), convierte una cadena de texto que contiene cualquier

dirección IP decimal punteada o un nombre de host a su correspondiente dirección

IP binaria. La cual retorna cero (0) si no resuelve el nombre de host, de lo contrario

devuelve diferente de cero (!0), es decir, la dirección IP encontrada. Si la función

recibe como parámetro una dirección IP punteada esta retornará la misma

dirección IP en su formato binario.

ip = resolve("www.curn.edu.co");

if(ip==0)

printf("no encontró www.curn.edu.co \n");

else

printf("%s esta es la dirección IP de www.curn.edu.co.\n",

inet_ntoa(buffer,ip));

} //cierra main

Luego de retornarse la dirección IP en formato binario se almacena en la variable

de tipo cadena ip, que sirve como uno de los parámetros de la función inet_ntoa(),

la cual convierte una dirección IP binaria a su formato decimal punteado, es decir,

cuatro (4) números decimales cada uno con valor que va de 0 a 255 separados

Page 95:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

95

por punto "." , almacenándose este valor en el arreglo buffer que se declaró al

inicio del programa.

4. ANALISIS Y DISEÑO DEL SISTEMA DE MONITOREO Y CONTROL

4.1 GENERALIDADES DEL SISTEMA

En el proceso de recopilación de información relacionada a este proyecto y la

investigación correspondiente a los módulos de control embebidos Rabbit, surgió

la necesidad de diseñar e implementar un sistema integrado para la supervisión y

control de procesos industriales con comunicación vía red Ethernet SCAM.

Este sistema debe permitir monitorear, configurar y registrar información de la

variable controlada de un determinado proceso de control y, que a la vez sea de

bajo costo y de fácil implementación para las empresas del sector industrial local.

Teniendo en cuenta estos requerimientos, se optó por realizar dos aplicaciones:

una en formato Web para la interfaz de monitoreo y configuración del sistema,

aprovechando la funcionalidad que nos ofrece el módulo Rabbit de configurarse

como un servidor HTTP. La segunda es una aplicación de escritorio para

almacenar en una base de datos información de la variable controlada.

Page 96:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

96

Las aplicaciones Web disminuyen los costos de implementación, mantenimiento y

manejo de recursos de sistema en una organización, debido a que fácilmente se

ejecutan en cualquier sistema operativo que tenga un navegador Web (Internet

Explorer, Netscape, otros) con conexión a una red LAN ethernet o a Internet.

Esta aplicación Web llamada SCAM Web, consiste en monitorear la(s) variable(s)

de un proceso automatizado, en este caso el monitoreo de temperatura y

configurar los parámetros del controlador PID digital, introduciendo los valores de

Kp (constante proporcional), Ti (tiempo integrativo), Td (tiempo derivativo),

Frecuencia de Muestreo y Valor de Referencia (Setpoint) de temperatura desde el

teclado, para así afectar el valor de la variable controlada. La lectura de esta

variable, es proporcionada al módulo de control Rabbit RCM2200 mediante un

sensor de señal análoga. Esta señal análoga es convertida a señal digital

mediante un conversor A/D, para así entregar un valor adecuado que el módulo

pueda procesar, ya que éste solo tiene entradas y salidas digitales. Luego de que

se compare el valor de entrada de la variable controlada con el valor de referencia

introducido y se realice el respectivo cálculo de error, se visualiza el nuevo valor

de la variable controlada en la aplicación Web.

Por otro lado, el procesamiento de las órdenes del operador/usuario desde la

aplicación Web se realiza por medio de CGI (interfaz de pasarela común) que es

una rutina que se ejecuta en tiempo real en un servidor Web o HTTP en respuesta

a una solicitud de un navegador Web (cliente). Cuando esto sucede el servidor

Web (Rabbit RCM2200) ejecuta una rutina programada especifica que recibirá los

datos que envía el operador/usuario para luego procesarlos en forma de variables

y responder con el recurso solicitado si es necesario.

Para llevar a cabo las etapas del proceso de software se utilizó el modelo lineal

secuencial como estrategia de desarrollo de software, en el cual se busca un

Page 97:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

97

desarrollo de software de manera lineal, dando como resultado final la culminación

de un sistema completo. Esto es debido a que la naturaleza del sistema ameritó

emplear un modelo de proceso de ingeniería de software que comprendiera las

etapas de análisis, diseño, codificación, prueba y depuración para el sistema a

desarrollar.

Por consiguiente, para el análisis del sistema se apoyo del método de análisis

estructurado a fin de determinar los requerimientos funcionales de éste. En la

etapa de diseño se plasmó los requerimientos identificados durante la fase de

análisis, a través de bosquejos que representan el formato o pantalla que se

espera que aparezca cuando el sistema esté terminado. En la codificación se

utilizó el paradigma de programación estructurada (convencional) para desarrollar

el software, ya que éste es el empleado en la programación del módulo de control

Rabbit RCM2200.

4.2 ANÁLISIS ESTRUCTURADO DEL SISTEMA

Para el análisis de requerimientos y/o especificaciones del sistema desarrollado,

se empleó el análisis estructurado como método de modelado clásico, el cual

utiliza símbolos gráficos y diccionarios de datos para modelar un sistema nuevo o

existente. En la actividad de análisis de este sistema se aplicó las notaciones

ampliadas por Ward y Mellor11 para el análisis de flujo de datos en sistemas de

control o de tiempo real.

Diagrama 2. DFD de contexto del sistema SCAM

11 PRESSMAN, Rogers. Ingeniería del software: Un enfoque práctico. 5 ed. Madrid: McGraw Hill, 2002. p. 207 – 214.

Page 98:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

98

El diagrama de contexto anterior es la representación a alto nivel del sistema de

control y monitoreo SCAM, en la cual elementos externos (fuentes) afectan con

sus entradas de alguna manera el proceso de software. Los elementos que hacen

parte de este modelo contextual son los siguientes:

Panel de Control. Este elemento externo, permite al usuario/operador

interactuar directamente con el sistema a través del teclado y el ratón del

equipo de computo, es decir, le proporciona a éste la posibilidad de digitar y

enviar datos y ordenes respectivamente al sistema de monitoreo y control.

Sensores. Son los elementos o dispositivos que perciben las señales

eléctricas, luminosas, mecánicas, etc. de las variables que se están

controlando en el sistema, para luego convertirlas en variables adecuadas

que se compararán con los valores de entrada de referencia de dichas

variables.

Page 99:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

99

Monitor del panel de control. Es el dispositivo hardware del equipo de

cómputo que visualiza toda la información relacionada a la(s) variable(s)

que se controla(n), los parámetros de configuración del controlador PID,

etc., la cual es producida en la ejecución y operación del sistema.

Alarma. Mecanismo de prevención que indica al usuario/operador del

sistema posibles anormalidades, ya sea en algún proceso de control de

variable(s). Se presenta en forma de mensajes al correo electrónico del

operador/usuario o mensajes por pantalla.

Planta. Es la unidad física en la que se realiza el proceso control.

El siguiente diagrama de nivel 1 describe los respectivos procesos que son

ejecutados en el sistema de control y monitoreo. El operador/usuario

inicialmente interactúa con la interfaz de monitoreo SCAM Web para poder

ejercer la tarea de supervisión y operación del sistema o especificar los

parámetros de configuración del algoritmo de control PID que reside en la

memoria del módulo de control digital. Este módulo lee la señal proveniente

del sensor y la convierte en una señal adecuada para poderla interpretar y así

de esta manera realizar la acción de control de la variable de entrada al

sistema.

Diagrama 3. DFD Nivel 1 del sistema SCAM

Page 100:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

100

Diagrama 4. DFD Nivel 2 que refina el proceso de interactuar con operador

Page 101:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

101

Diagrama 5. DFD Nivel 2 que refina el proceso de configuración parámetros

sistema

Diagrama 6. DFD Nivel 2 que refina el proceso de control de variables

Page 102:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

102

Diagrama 7. DFD Nivel 3 que refina el proceso de iteración algoritmo de control

PID

4.3 DICCIONARIO DE DATOS

Page 103:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

103

4.3.1 Procesos. Descripción de los procesos de primer nivel.

PROCESO 1. Interactuar con operador

DESCRIPCIÓN Proceso por el cual el usuario/operador se pone en contacto con el software a través del teclado y ratón, para dar inicio al proceso de monitorización y operación de la planta o proceso.

ENTRADA Datos de operador

SALIDA Orden de inicialización Petición de configuración

PROCESO 2. Configurar parámetros sistema

DESCRIPCIÓN Permite al usuario/operador establecer parámetros de configuración de: gestión de usuarios, Valor(es) de referencia de la(s) variable(s) a controlar, constantes Kp, Ti, Td y Frecuencia de muestreo.

ENTRADA Petición de configuración

SALIDA Datos de configuración

PROCESO 3.Supervisión y operación sistema

DESCRIPCIÓN Permite visualizar el estado de la(s) variable(s) que se controla en el sistema de control, a través de valores reales proporcionados en cada instante por el módulo de control.

ENTRADA Orden de inicialización Estado de variable(s)

SALIDA Información a visualizar

Page 104:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

104

PROCESO 4. Enviar parámetros al controlador vía red

DESCRIPCIÓN Los datos que han sido introducidos en el proceso de configuración de parámetros del sistema, son enviados a través de la red Ethernet al módulo de control RCM2200, el cual se encuentra conectado a un punto de red, para así ajustar o modificar los parámetros preestablecidos en este módulo.

ENTRADA Datos de configuración

SALIDA Ajuste de parámetros

PROCESO 5. Control de variable

DESCRIPCIÓN En este proceso se lee continuamente las señales que son enviadas por los distintos sensores, es decir los valores de las variables que se están controlando, que a su vez se comparan con los valores de referencia de dichas variables, para así emitir señales correctivas y de alarma al sistema en general.

ENTRADA Señale(s) de sensor(es) Ajuste de parámetros

SALIDA Estado de variable(s) Tipo de alarma Señal de control

4.3.2 Flujo de datos. Descripción de los flujos de datos de primer nivel.

NOMBRE DEL FLUJO DE DATOS Datos de operador/usuario

DESCRIPCIÓN Representa los datos de inicio de sesión como cuenta de usuario y contraseña

PROVENIENTE DE LA FUENTE Panel de control

PARA EL PROCESO Interactuar con operador

NOMBRE DEL FLUJO DE DATOS Señal de sensor

DESCRIPCIÓN Impulsos eléctricos que son enviados a un módulo de conversión de datos análogo/digital

PROVENIENTE DE LA FUENTE Sensor

PARA EL PROCESO Control de variable

Page 105:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

105

NOMBRE DEL FLUJO DE DATOS Petición de configuración

DESCRIPCIÓN Permite que el operador/usuario asigne y/o modifique parámetros de referencia en el sistema, para el control de los diferentes eventos que han sido preestablecidos en éste.

PROVENIENTE DEL PROCESO Interactuar con operador

PARA EL PROCESO Configurar parámetros sistema

NOMBRE DEL FLUJO DE DATOS Orden de inicialización

DESCRIPCIÓN Orden que se le da al sistema de monitoreo para que inicialice el proceso de supervisión y operación.

PROVENIENTE DEL PROCESO Interactuar con operador

PARA EL PROCESO Supervisión y operación sistema

NOMBRE DEL FLUJO DE DATOS Estado de variable

DESCRIPCIÓN Indica el valor que toma la variable controlada en un instante de tiempo determinado. Este valor es enviado desde el módulo de control RCM2200 a la aplicación Web a través de la red Ethernet

PROVENIENTE DEL PROCESO Control de variable

PARA EL PROCESO Supervisión y operación sistema

NOMBRE DEL FLUJO DE DATOS Información a visualizar

DESCRIPCIÓN Conjunto de datos reales procesados desde el módulo de control o resultado de la configuración de parámetros del controlador con el fin de que el operador/usuario los observe de una manera clara y detallada.

PROVENIENTE DEL PROCESO Supervisión y operación sistema

PARA EL DESTINO Monitor panel de control

Page 106:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

106

NOMBRE DEL FLUJO DE DATOS Tipo de alarma

DESCRIPCIÓN Representa un nivel de prioridad de la alarma cuando suceden anomalías en el normal desempeño del sistema de monitoreo y control. Se presenta en forma de mensajes al correo electrónico del operador/usuario o mensajes por pantalla.

PROVENIENTE DEL PROCESO Control de variable

PARA EL DESTINO Alarma

NOMBRE DEL FLUJO DE DATO Datos de configuración

DESCRIPCIÓN Representa cada uno de los datos parámetrizados en el sistema, como punto de ajuste de la variable a controlar, valores Kp, Ti, Td, frecuencia de muestreo, y datos de gestión de usuario.

PROVENIENTE DEL PROCESO Configuración parámetros sistema

PARA EL PROCESO Enviar parámetros al controlador vía red

NOMBRE DEL FLUJO DE DATO Ajuste de parámetros

DESCRIPCIÓN Son los datos que han sido introducidos previamente en el proceso de configuración del sistema, los cuales modificaran los valores de las variables preestablecidas en el módulo de control, como son Kp, Ti, Td, Ts, setpoint, etc

PROVENIENTE DEL PROCESO Enviar parámetros al controlador vía red

PARA EL PROCESO Control de variable

NOMBRE DEL FLUJO DE DATO Registro de variable

DESCRIPCIÓN Representa la información de la variable controlada que se registra en la base de datos, como lo es nombre de variable, valor, unidad, estado, hora y fecha de almacenamiento.

PROVENIENTE DEL PROCESO Control de variable

PARA EL ALMACEN Bases de Datos SCAM

Page 107:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

107

4.4 DISEÑO DE LA INTERFAZ DE MONITOREO SCAM WEB

4.4.1 Diseño arquitectónico. Para el diseño de la aplicación Web se empleó la

notación de estructura jerárquica12 que es la arquitectura de aplicaciones Web

más común.

Figura 17. Diseño arquitectónico de la aplicación SCAM Web

12

PRESSMAN, Op.cit., p. 529

Page 108:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

108

4.4.2 Diseño de plantillas de la interfaz de usuario. En el diseño de la interfaz

de usuario (pantallas) de una aplicación se comienza por reconocer que ésta está

compuesta por diferentes áreas. Por consiguiente en el diseño de la interfaz de

usuario de la aplicación SCAM Web, se elaboró una serie de plantillas que

esbozan como quedarán definidas las diferentes áreas de esta interfaz.

La plantilla de la página de inicio de la aplicación SCAM Web, consta de tres

zonas o áreas, las cuales son mostradas en la siguiente figura.

Page 109:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

109

Figura 18. Plantilla página inicio de sesión

Área de Logotipo

Área de Contenido

Área de inicio de Sesión

En la plantilla de la página principal, también se encuentra establecida un área de

logotipo que es común para las demás, una de vínculo que son los enlaces a las

otras páginas de la aplicación y un área de supervisión respectivamente, como se

observa a continuación.

Figura 19. Plantilla página principal

Área de Logotipo

Área de Vínculos

Área de Supervisión

Para las páginas de configuración de parámetros PID y configuración de usuarios,

se tomó como base la misma plantilla, ya que ambas le proporcionan al

usuario/operador configurar parámetros en el sistema.

Figura 20. Plantilla páginas de configuración parámetros PID y de usuarios

Page 110:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

110

El diseño de la plantilla de la página de ayuda, incluye un área de contenido en

donde se visualizará la información que solicita el usuario/operador sobre el

manejo de la aplicación Web e información pertinente de los desarrolladores de

ésta. Además contiene un área de vínculos como en las anteriores.

Figura 21. Plantilla página de ayuda

Por último, se diseño la

plantilla para mostrar los

mensajes de alarma o error

de ingreso de datos, para así

indicarle al usuario/operador que se presenta una anormalidad en el sistema.

Figura 22. Plantilla para mensajes de alarma o error de ingreso de datos

Área de Logotipo

Área de Vínculos

Área de Configuración

Área de

Vínculos

Área de contenido

Page 111:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

111

4.4.3 Diseño de entrada de datos. El diseño de entrada se basa en el desarrollo

de especificaciones y procedimientos para la preparación de los datos que se

ingresarán en el sistema; de forma que puedan ser utilizables para el

procesamiento de información valiosa para el usuario. En el diseño de entrada de

datos de la aplicación SCAM Web, se tuvo presente el tipo de datos que se

ingresa en los respectivos formularios de captura de datos, para así aplicar

procedimientos como la validación de datos, es decir si la entrada tiene un formato

sólo numérico, texto o alfanumérico.

Para la entrada de los datos de identificación nombre de usuario y contraseña en

la página de inicio de sesión, se empleó cajas de texto básicas (Textbox) como se

muestra en la figura 23. Se consideró que estos datos pueden ser alfanuméricos y

con un tamaño máximo de veinte cinco (25) caracteres por campo, para una

mayor seguridad en el acceso al sistema. Además el campo contraseña es

definido como dato confidencial o privado, en donde el texto introducido se

sustituye por viñetas para ocultar éste a otras personas que pueden estar

mirándolo. Sin embargo las contraseñas que se envían al servidor Web mediante

campos de contraseña no están cifradas.

Figura 23. Diseño de entrada de los datos nombre de usuario y contraseña

Área de titulo

Área de mensaje

Page 112:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

112

Igualmente, para los datos de configuración de usuario se emplea el mismo diseño

de entrada, cajas de texto para los datos de modificación de contraseña y correo

electrónico en formato alfanumérico, y una caja de selección para indicar el tipo

de usuario al que se le cambiarán los parámetros anteriores, como se muestra en

la figura 24.

Figura 24. Diseño de entrada de datos gestión de usuario

Datos Proporcionado por

el operador/usuario

Page 113:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

113

En la siguiente figura se observa el área de configuración de los parámetros del

controlador PID. Aquí se introducen los valores de tipo numérico de las variables

valor de referencia de la variable controlada, Kp, Ti, Td y frecuencia de muestreo,

en cajas de texto para ser enviadas a través de la red Ethernet a la memoria del

módulo de control RCM2200, para así dar inicio o restaurar el proceso de control

automático.

Figura 25. Diseño de entrada de datos parámetros del controlador PID

Datos Proporcionado por

el operador/usuario

Page 114:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

114

4.4.4 Diseño de controles. En esta aplicación, se han diseñado controles de

validación en la entrada de datos, con el fin de presentar mensajes de error y

advertencias al usuario/operador cuando éste introduce datos erróneos o se

contiene de ingresar datos en campos obligatorios.

En los campos de entrada nombre de usuario y contraseña se validó que estos

dos sean obligatorios para poder ingresar a la página principal de la aplicación.

Del mismo modo se validaron los campos de los parámetros de entrada del

controlador PID como obligatorios y solo números, para comprobar que los

campos contengan solamente caracteres numéricos; en caso contrario se

visualiza en pantalla un mensaje de error, como se muestra en las figura 26.

Figura 26. Mensaje de error de introducción de datos

Datos Proporcionado por

el operador/usuario

Page 115:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

115

Figura 27. Mensaje de error indicando que un campo es obligatorio

En el campo correo electrónico de la página configuración de usuarios, se

comprueba por ejemplo, si la dirección de correo ingresada contiene un símbolo

arroba @.

4.4.5 Diseño de salida. En la aplicación SCAM Web las salidas del sistema

pueden ser: mensajes de alarma o error de ingreso de datos para informarle al

usuario/operador de cualquier anormalidad en el normal funcionamiento del

sistema de control y monitoreo, o la salida por pantalla del valor actual y valor de

referencia de la variable que se está controlando, en este caso la temperatura.

Page 116:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

116

Figura 28. Salida del valor del variable controlada

Figura 29. Salida de un mensaje de error

4.5 DISEÑO DE LA APLICACIÓN DE ALMACENAMIENTO SCAM SERVER

Datos Proporcionados por

el sistema

Page 117:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

117

La funcionalidad básica de SCAM Server es almacenar en una base de datos los

valores y estados de la variable controlada enviadas desde el módulo de control

RCM2200 a través de la red.

4.5.1 Diseño de módulos. La aplicación SCAM Server es un módulo del sistema

integrado SCAM, que a la vez esta constituido por los siguientes módulos.

Figura 30. Módulos de la interfaz SCAM Server

4.5.2 Diseño de la base de datos. La base de datos del sistema SCAM está

conformada por una tabla que almacena información de la variable controlada en

el módulo de control Rabbit RCM2200. Esta información permitirá crear históricos

de la variable, a fin de proporcionarle al usuario/operador del sistema la manera en

que se comporta ésta en un cualquier lapso de tiempo. La tabla llamada Variables

se compone de los campos nombre de la variable, valor, unidad, estado, hora y

fecha en que se tomo la lectura de la variable.

SCAM Server

Archivo Configuración Operación Ayuda

Salir C. Parámetros Iniciar escucha

Desconectar

Históricos

Acerca de

Page 118:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

118

Tabla 2. Tabla Variables de la base de datos SCAM

Variable Valor Unidad Estado Hora Fecha

Texto Numérico Texto Texto Formato

corto

Formato

corto

5. PUEBAS E IMPLEMENTACIÓN DEL SISTEMA

Page 119:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

119

5.1 ASPECTOS METODOLÓGICOS

En la realización de este proyecto de automatización de procesos industriales, se

utilizaron diversas metodologías en cada etapa que abarca el diseño e

implementación del sistema de control automático y monitoreo SCAM, estas

etapas se mencionan a continuación.

Recopilación de información. Inicialmente se realizó una recopilación de

información sobre los diferentes dispositivos de hardware disponibles en el

mercado que se emplean en el control de procesos industriales, de manera

que se ajustara a las necesidades básicas de automatización de las

pequeñas y medianas empresas a nivel local, y que presentara

características como bajo costo de implementación, conectividad con redes

Ethernet, programación a alto o bajo nivel, entre otras. Teniendo en cuenta

estos aspectos se decidió escoger el módulo de control digital Rabbit

RCM2200.

Documentación del dispositivo Rabbit RCM2200. Después de haber

seleccionado y adquirido el dispositivo, se realizó el estudio y

documentación de este sistema con el propósito de conocer su

funcionalidad y características más relevantes. Por ejemplo la forma de

programación, la conexión a redes Ethernet, los protocolos de

comunicación de red que soporta y compatibilidad con otros dispositivos

electrónicos.

Selección del algoritmo de control PID. Una vez conocida las

funcionalidades del módulo Rabbit RCM2200, se realizó un estudio sobre

los diferentes tipos de algoritmos de control que se podrían implementar en

este módulo, observando cual de los algoritmos se ajustaba mejor a las

necesidades del controlador a desarrollar. Finalmente se decidió escoger el

Page 120:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

120

algoritmo de control Proporcional Integral Derivativo (PID) básico, dado que

es sencillo, ampliamente utilizado en el control de procesos industriales,

además se adapta muy bien a numerosos tipos de procesos.

Diseño del sistema de control. Luego de seleccionar el algoritmo de

control, se inició el diseño del sistema de control, con el propósito de definir

los principales componentes del software a desarrollar, como la

implementación del algoritmo PID, la interfaz de monitoreo, la interfaz de

almacenamiento de datos y la librería de funciones que permitan configurar

los parámetros de red (IP, Mascara de Red, Puerta de Enlace, entre otros)

y funciones básicas para los protocolos de comunicación.

Diseño y desarrollo de las interfaces de monitoreo y de

almacenamiento. Después de analizar los requerimientos del sistema de

monitoreo, se decidió realizar una aplicación en formato Web que pudiera

aprovechar las características y ventajas que ofrecen este tipo de aplicación

en un contexto empresarial, ya que se ejecutan en cualquier sistema

operativo que tenga un navegador Web con conexión a una red LAN

Ethernet o a Internet. Por consiguiente, para el diseño de la interfaz de

monitoreo se basó en la notación de estructura jerárquica, propia para el

diseño de aplicaciones Web. Luego para convertir este diseño a páginas

Web se utilizó la herramienta de desarrollo Web Macromedia Dreamweaver

MX 2004, que nos permitió desarrollar el código de las páginas en lenguaje

HTML incorporándole eventos JavaScript.

Además, se realizó el diseño y desarrollo de la aplicación de

almacenamiento, encargada de almacenar los valores de la variable

controlada registrados por el módulo de control. Esta aplicación de

escritorio se desarrolló con la herramienta Microsoft Visual Basic 6.0,

acoplándose a una base de datos desarrollada en Microsoft Access

Page 121:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

121

mediante el objeto de datos ActiveX ADO. La característica principal de

esta aplicación es que presenta conectividad vía Ethernet con el sistema de

control por medio de la programación de socket's TCP.

Documentación e implementación de los protocolos TCP/IP. En esta

etapa se realizó la documentación de la familia de protocolos de

comunicación TCP/IP que se pueden implementar en el módulo de control

Rabbit RCM2200, siendo los de mayor aplicabilidad HTTP, UDP, SMTP,

TELNET, DNS. La implementación de los protocolos en este módulo

consistió en el desarrollo de programas ejemplos codificados en el entorno

de desarrollo Dynamic C v8.1013, cuyo objetivo primordial fue observar el

funcionamiento de cada programa y el comportamiento del módulo Rabbit

RCM2200 antes éstos.

Desarrollo de la librería de funciones. Esta librería contiene las librerías

de gestión de red del protocolo TCP/IP y funciones básicas de conexión con

otros sistemas empleando este protocolo. Para la escritura del código de la

librería se utilizó el entorno de programación de Dynamic C v8.10, el cual

posee funciones predefinidas propias para la implementación de este tipo

de librerías.

Programación del PIC 16F877. En esta etapa se efectuó la programación

del dispositivo que realiza la conversión de la señal análoga a señal digital,

proveniente del elemento de medición (sensor), antes que llegue al módulo

de control, debido a que éste maneja señales de E/S digital. La

programación del PIC fue realizada en código ensamblador utilizando la

herramienta MPLAB.

13

Vea Anexo B “Manual de usuario de Dynamic C”.

Page 122:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

122

Integración del sistema de control y monitoreo. En esta etapa se verificó

el funcionamiento correcto de todo el sistema, integrando todos los

componentes tanto de hardware como de software, realizándose las

pruebas correspondientes. Inicialmente se adaptó el conversor A/D

PIC16F877 al módulo de control comprobándose el funcionamiento

adecuado entre estos dispositivos a través del protocolo I2C. Luego se

ejecutó todo el sistema de control y monitoreo, y la aplicación de

almacenamiento, con la finalidad de confirmar que se realizaran todos los

procesos de comunicación acorde a lo planteado en el diseño.

5.2 PRUEBAS DEL SISTEMA

La prueba del sistema, ésta constituida por una serie de pruebas diferentes cuyo

propósito primordial es ejercitar profundamente el sistema basado en

computadora. Aunque cada prueba tiene un propósito diferente, todas trabajan

para verificar que se han integrado adecuadamente todos los elementos del

sistema y que realizan las funciones apropiadas. A continuación se describirán los

resultados obtenidos en las pruebas que se le hicieron al sistema SCAM.

5.2.1 Prueba de recuperación. Con el propósito de saber que tan tolerante a

fallos es el sistema SCAM, conformado por las aplicaciones SCAM Web y SCAM

Server; se forzó al fallo de ambos, a fin de verificar que la recuperación se lleve a

cabo apropiadamente.

Primeramente, se interrumpió el suministro de energía al módulo de control

Rabbit, con el objetivo de constatar de que éste se recupere sin problemas al

momento del reestablecimiento de la energía, observándose que el módulo Rabbit

inicializa automáticamente el proceso de control; sin embargo la aplicación de

monitoreo SCAM Web debe inicializarse nuevamente de manera manual para

establecer la conexión con el módulo de control. Independientemente a esto, el

Page 123:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

123

software SCAM Server continuará a la espera de establecer la comunicación con

el módulo de control cuando se reestablezca la energía. La forma como se

inicializa las aplicaciones SCAM Web y SCAM Server se explica en el anexo C.

El otro caso de prueba, es cuando falla la comunicación en el sistema, ya sea por

desconectar físicamente el cable de red en un punto de red donde está conectado

el módulo Rabbit o por congestión de la red. Se comprobó en este caso, que el

módulo Rabbit continúa realizando normalmente el proceso de control, siendo

interrumpida la comunicación entre las aplicaciones de monitoreo SCAM Web y

SCAM Server, por lo que los datos obtenidos en el proceso de control no serán

transmitidos a estas aplicaciones.

5.2.2 Prueba de seguridad. El sistema SCAM presenta mecanismos de

protección de accesos, a través de la validación de nombres de usuarios y

contraseñas, con el fin de evitar el ingreso al sistema de usuarios no autorizados.

Para confirmar lo anterior se le permitió a varias personas no comprometidas con

el desarrollo de este sistema a que digitaran claves de acceso seguidamente para

romper la barrera de seguridad del sistema, quienes después de varios intentos

fallidos no lograron ingresar al sistema.

5.2.3 Prueba de resistencia. Esta prueba determina la resistencia del sistema

ante situaciones anormales o que demanden recursos en cantidad. Al aplicar esta

prueba al sistema SCAM, se comprobó que el módulo rabbit (servidor Web)

funciona satisfactoriamente cuando recibe múltiples peticiones por parte de los

usuarios de la aplicación SCAM Web, presentando un tiempo de respuesta

considerable a estas peticiones. Igualmente se verificó que al ingresar datos al

sistema con una frecuencia mayor a la normal, las funciones de entrada de datos

respondieron de manera adecuada, sin alterar el normal desempeño del sistema.

Page 124:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

124

5.2.4 Prueba de rendimiento. En base a las pruebas de resistencia realizadas

se observó el rendimiento del sistema SCAM en tiempo de ejecución. En este

caso el rendimiento del sistema se evidenció a través de la medición de los

tiempos de respuesta del servidor Web (Rabbit RCM2200). Estos tiempos de

respuesta fueron aproximadamente inferiores a los tres (3) segundos cuando el

tráfico de la red es relativamente bajo. Por lo tanto se puede afirmar que el

rendimiento del sistema es eficiente.

5.4 IMPLEMENTACIÓN DEL SISTEMA

En la implementación del sistema SCAM se utilizaron varios recursos de hardware

y software para lograr la integración y funcionamiento completo de éste, como por

ejemplo, equipos de cómputo con sistema operativo Windows XP y navegador

Web Internet Explorer, el módulo de control y un concentrador o Switch para la

conexión de estos equipos en una red Ethernet de topología estrella.

5.3.1 Descripción de la plataforma. El sistema de control y monitoreo SCAM

está conformado por los siguientes componentes: una aplicación Web de

monitoreo que se puede ejecutar desde cualquier equipo conectado a la red, un

módulo de control Rabbit RCM2200 que a la vez funciona como un servidor Web y

un software que permite el almacenamiento de los datos provenientes del módulo

de control en una base de datos realizada en Microsoft Access 2000, como se

muestra en la figura 31.

Figura 31. Plataforma del sistema SCAM

Page 125:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

125

Page 126:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

126

6. CONCLUSIONES

Con el desarrollo del sistema de control automático y monitoreo SCAM se observó

que los sistemas de control se pueden optimizar cada vez más gracias al

aprovechamiento de los avances tecnológicos en hardware y a la optimización y

mejoras en el software, consiguiendo una integración de tecnologías y una alta

funcionalidad para la medición y control de variables de procesos industriales.

La utilización del módulo Rabbit RCM2200 en este proyecto permitió enriquecer

los conocimientos relacionados con los sistemas de control embebidos, pues se

tuvo la oportunidad de interactuar con un dispositivo de alta tecnología que

soporta la programación de estrategias de control complejas, además brinda una

gran versatilidad en comunicaciones por la disponibilidad de puerto Ethernet,

siendo esta su mayor ventaja en el desarrollo y la implementación de sistemas de

control y monitoreo de bajo costo.

El desarrollo de SCAM dio como resultado un producto innovador, de gran interés

para las empresas del sector industrial, a razón de, que es una herramienta

eficiente en el monitoreo y control de procesos, y los costos de implementación no

son tan elevados en comparación con otros sistemas similares que ofrece

actualmente el mercado. Además se espera que este sistema sea de gran utilidad

en el laboratorio de automatización industrial de la CURN y se afiance como una

herramienta educativa para los estudiantes y docentes comprometidos con la

búsqueda de nuevos conocimientos en ésta área, tan importante de la ingeniería

de sistemas.

Page 127:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

127

7. RECOMENDACIONES

Tras haber finalizado este proyecto, se sugiere las siguientes recomendaciones

con el propósito de realizar futuras mejoras al sistema desarrollado y poder brindar

así una herramienta que ofrezca más capacidades tanto de hardware y software

de las que ofrece esta versión inicial.

Se recomienda que para el desarrollo de futuros sistemas de control

embebidos basados en el módulo Rabbit RCM2200 se realice la expansión

de la memoria flash de éste, ya sea, a través del módulo SF1000 de

Z-World que tiene una capacidad de almacenamiento de 8 MB o con un

chip de memoria accesible en el mercado local; con la finalidad de

implementar programas que requieran mayor recurso de memoria.

Poder implementar nuevas estrategias de control utilizando algoritmos de

control difuso y control adaptativo, con el objetivo de evaluar el desempeño

de éstos con respecto al algoritmo de control PID convencional.

Poder efectuar la integración de varios módulos de control basados en la

familia de microprocesadores Rabbit, con el fin de desarrollar un sistema

completo para el control de varios procesos industriales en una

determinada planta.

Implementar una función al sistema de control que permita almacenar en la

memoria del módulo Rabbit los valores registrados por éste en un lapso de

tiempo determinado mientras no se establezca comunicación con la

aplicación de almacenamiento, con el objetivo de que una vez reestablecida

la comunicación estos datos se envíen a la base de datos.

Page 128:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

128

BIBLIOGRAFIA

ABAD, Alfredo y MADRID Mariano. Redes de área local. Madrid : McGraw Hill,

1997. 238 p.

BALCELLS, Joseph y ROMERAL, José Luís. Autómatas programables. Madrid :

Alfaomega, 1998. 439 p.

BERRIO, Tatiana; JEREZ, Emilio y MONTIEL, Jesús. Diseño e implementación

de un sistema de control de nivel liquido. Cartagena, 2002, 140 p. Trabajo de

grado (Ingeniero de Sistemas). Corporación Universitaria Rafael Núñez. Facultad

de Ingeniería de Sistemas. Área de automatización industrial

CREUS SOLÉ, Antonio. Instrumentación industrial. 6 ed. Bogotá : Alfaomega,

2001. 750 p.

GOMÁRIZ CASTRO, Espartacus; BIEL SOLÉ, Domingo y ALCALÁ, José. Teoría

de control : Diseño electrónico. México : Alfaomega, 1999. 392 p.

KATSUHIKO, Ogata. Ingeniería de control Moderna. 3 ed. Madrid : Prentice Hall,

1999. 720 p.

PRESSMAN, Rogers. Ingeniería del software : Un enfoque práctico. 5 ed. Madrid :

McGraw Hill, 2002. 601 p.

SENN A., James. Análisis y diseño de sistemas de información. 2 ed. Bogotá :

McGraw Hill, 1998. 941 p.

STALLINGS, William. Comunicaciones y redes de computadores. 5 ed. Madrid :

Prentice Hall, 1999. 792 p.

Page 129:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

129

FUENTES DE INFORMACIÓN ELECTRÓNICAS

Dynamic C user’s manual [en-línea]. Davis (California), 2002. part number:

030424 · 019-0125-A. Actualizado continuamente : texto en ingles. Disponible en

internet: <http://www.rabbitsemiconductor.com/docs/ o

http://www.zworld.com/documentation/docs/manuals >.

Dynamic C TCP/IP user’s manual [en-línea]. Davis (California), 2002. part

number: 030424 · 019-0100-G. Actualizado continuamente : texto en ingles.

Disponible en internet: <http://www.rabbitsemiconductor.com/docs/ o

http://www.zworld.com/documentation/docs/manuals >.

RabbitCore RCM2200 Getting Started manual [en-línea]. Davis (California), 2003.

part number: 019-0096 • 030725-E. Actualizado continuamente : texto en ingles.

Disponible en internet: <http://www.rabbitsemiconductor.com/docs/ o

http://www.zworld.com/documentation/docs/manuals >.

RabbitCore RCM2200 user´s manual [en-línea]. Davis (California), 2003. part

number: 019-0097 • 030731-C. Actualizado continuamente : texto en ingles.

Disponible en internet: <http://www.rabbitsemiconductor.com/docs/ o

http://www.zworld.com/documentation/docs/manuals >.

PIC16F87X Data Sheet 28/40-Pin 8-Bit CMOS FLASH Microcontrollers [en-línea].

USA, 2001. Texto en ingles. Disponible en internet: < http://www.microchip.com>

Page 130:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

127

ANEXOS

Page 131:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

128

ANEXO A

MANUAL DE USUARIO DEL

MÓDULO RABBIT RCM2200

Page 132:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

129

INTRODUCCIÓN

Este anexo explica el funcionamiento básico y las características de hardware del

módulo Rabbit RCM2200, con el propósito de ampliar los conocimientos

relacionados con este dispositivo, el cual fue el objeto de estudio de este proyecto.

Page 133:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

130

A.1 CARACTERISTICAS GENERALES DEL MODULO RCM2200

El módulo de control digital Rabbit RCM2200 es un sistema integrado que provee

una plataforma hardware basada en un microprocesador Rabbit 2000, software

Dynamic C para la programación del microprocesador en lenguaje de

programación C y con conectividad Ethernet integrada para la comunicación vía

TCP/IP con otros sistemas, siendo éste diseñado especialmente para el desarrollo

de sistemas de control embebido.

Figura 32. Vista posterior y anterior del módulo Rabbit RCM2200

A.1.1 Características del hardware. El módulo RCM2200 que se observa en la

figura anterior integra cierto número de características importantes para su

funcionamiento, como lo son:

Microprocesador Rabbit 2000 de 22.1 MHz

Memoria flash 256 Kbyte

Memoria RAM estática (SRAM) de 128 Kbyte

Cinco temporizadores de 8 bits y dos de 10 bits

Page 134:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

131

Dos conectores que proporcionan 26 líneas E/S paralelas: 16 configurables

para entrada o salida, 7 entradas fijas, y 3 salidas fijas.

8 líneas de datos (D0 – D7).

4 líneas de direcciones (A0 – A3).

Memoria E/S lectura, escritura

Entrada de reestablecimiento externa

Reloj en tiempo real

Supervisor Watchdog (perro guardián)

Circuitos necesarios para reestablecer y administrar la batería de respaldo

del procesador y RAM estática.

Interfaz Ethernet 10Base-T

Puerto Ethernet y dos LED asociados a las señales de control disponible en

el conector J4 de 26 pines.

Puerto de programación serial con conector macho de 10 pines.

A.1.2 Especificaciones físicas y eléctricas. El módulo RCM2200 recibe 5 V+ de

energía eléctrica de una tarjeta externa diseñado por el usuario o de la tarjeta de

prototipado proporcionada en la compra del equipo, la cual se adhiere a ésta a

través de los conectores J4 y J5 explicados posteriormente. El RCM2200 puede

conectarse con todos los tipos de dispositivos digitales CMOS compatibles a

través de la tarjeta de prototipado o de usuario. En la siguiente tabla se describe

las especificaciones básicas de ésta.

Tabla 3. Especificaciones Físicas RCM2200

ESPECIFICACIÓN DATOS

Suministro de poder

4.75 – 5.25 V DC (134 mA a velocidad de reloj de 22.1 MHz )

Tamaño 2.3” x 1.6” x 0.86” (59 mm × 41 mm × 22 mm)

Medioambiente –40°C a 70°C, 5–95% humedad, (NO CONDENSADO)

Page 135:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

132

A.2 REFERENCIA DEL HARDWARE

La siguiente figura muestra los subsistemas diseñados del módulo RCM2200

como son los puertos seriales A, B, C, D, E para las entradas y salidas digitales

del modulo, el puerto de programación y el puerto Ethernet, las líneas de datos y

de direccionamiento, las memorias Flash y RAM estática, entre otros.

Figura 33. Subsistemas del módulo RCM2200

A.2.1 Microprocesador Rabbit 2000. Rabbit 2000 es un potente procesador con

bus de datos externo e interno de 8 bits de alto desempeño, que trabaja a una

velocidad de reloj de 22.1 Mhz. Diseñado expresamente para potenciar una nueva

generación de sistemas dedicados. Su extenso conjunto de prestaciones

integradas y su arquitectura glueless (aglutinada) agilizan diseños de hardware, su

conjunto de instrucciones compatibles con C permiten el desarrollo eficiente de

complejas aplicaciones. Para sistemas dedicados, Rabbit 2000 sobrepasa a la

mayoría de los procesadores de 16 Bit y hasta algunos de 32, sin perder la

eficiencia de la arquitectura de 8-bit.

Page 136:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

133

Este microprocesador tiene una configuración de 100 pines para establecer

comunicación con periféricos externos. Como se muestra en la siguiente figura.

Figura 34. Configuración de los pines del microprocesador Rabbit 2000

A.2.1 Entradas y salidas digitales. El módulo RCM2200 tiene 26 líneas de E/S

paralelas agrupadas en cinco puertos, los cuales son A, B, C, D, E de ocho (8) bits

cada uno, disponibles en los conectores J4 y J5. Las 16 líneas de E/S

bidireccionales se localizan en los pines PA0 - PA7, PD3 - PD5, y PE0 - PE1, PE4,

Page 137:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

134

PE5, y PE7. Estos pines de los conectores J4 y J5 se muestran en la siguiente

figura.

Figura 35. Pines de E/S del módulo RCM2200

A.2.2 Entradas dedicadas. PB0 es una entrada CMOS general cuando en el

Rabbit 2000 no se está usando el Puerto serial B o se esta usando éste en un

modo asincrónico. Otros cuatro CMOS generales solo de entrada están

localizados en PB2 - PB5. Estos pines pueden también usarse para el puerto

esclavo. PB2 y PB3 son el esclavo escritura y el esclavo lectura respectivamente,

mientras PB4 y PB5 sirven como líneas de dirección esclavas en SA0 y SA1, y se

usan para acceder a los registros del esclavo. PC1 y PC3 son solo entradas

CMOS generales. Estos pines pueden en cambio selectivamente habilitarse para

servir como entrada de los datos serie para el puerto serial D y C.

A.2.3 Salidas dedicadas. Uno de los pines CMOS general de solo salida se ubica

en PB7. PB7 también puede usarse con el puerto esclavo como el /SLAVEATTN

output. PC0 y PC2 también son pines de solo salida; PC0 y PC2 puede en cambio

servir como salidas de datos seriales para el puerto serie D y C.

J4 J5

PA5

PB0

PB5

D2

/RES

PB7

GND

D5

PB3

PA3

PA1

PA7

D0

D4

PB2

PA6

PA2

PA0

PA4

PB4

D6

D3

D1

D7

VCC

VBAT

PC3

PE4

/IORD

LNK

PC2

3

GND

A2 A3

TP IN -

PE0

PD4

ACT

PE5

TP IN +

/IOWR

PD5

PD3

TPOUT+ TPOUT-

PC1 PC0

A1

PE1

1

PE7

VCC

A0

Page 138:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

135

A.2.4 Puerto Seriales. Hay cuatro puertos seriales designados como puertos

serie los cuales son A, B, C, y D. Todos los cuatro puertos serie puede operar en

un modo asíncrono a la frecuencia de baudio del reloj del sistema dividida por 64.

Un puerto asíncrono puede manejar de 7 o 8 bits de datos. También es soportado

un noveno bit de dirección, dónde un bit adicional es enviado para marcar el

primer byte de un mensaje. El Puerto serie A sólo está disponible en el puerto de

programación, y para que es probablemente inoportuno trabajar con el.

A.2.5 Interfaz de Memoria de E/S. Cuatro de las líneas de dirección (A0 - A3) y

todas las líneas de datos (D0 - D7) están disponibles en el Rabbit 2000. Escritura

E/S (/IOWR) y lectura E/S (/IORD) también están disponible para unir a los

dispositivos externos. Los puertos en el microprocesador Rabbit 2000 usados en

el módulo RCM2200 están configurados, aunque estos valores predefinidos de

fábrica pueden ser reconfigurados. La Tabla 4 y 5 listan la configuración por

defecto y las alternadas para el Rabbit 2000.

Tabla 4. Configuración de pines del conector J5

ca

bece

ra J

5

PIN NOMBRE USO

PREDEFINIDO USO

ALTERNATIVO NOTA

1-8 PA[0 -7] E/S paralela programable

Bytewide

Puerto esclavo de bus de datos ( SD0- SD 7)

9 /RESET Salida restablecida Entrada Restablecida

Esta salida baja puede manejada externa.

10 PB0 Entrada Puerto serial reloj CLKB entrada/salida

11 PB2 Entrada Puerto esclavo escritura /SWR

12 PB3 Entrada Puerto esclavo de lectura /SWR

13 PB4 Entrada SA0 Línea de dirección del

puerto esclavo 14 PB5 Entrada SA1

15 PB7 Salida Línea de atención para puerto esclavo

16 - 23 D[0:7] Entrada/ Salida Bus de datos de Rabbit 2000

24 VBAT

Page 139:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

136

25 VCC Entrad de batería de 3 Voltios

26 GND ARXB Entrada

Tabla 5. Configuración de pines del conector J4

Ca

bece

ra J

4

PIN NOMBRE USO

PREDEFINIDO USO

ALTERNATIVO NOTA

1 GND

2 VCC

3 PC0 Salida TXD

4 PC1 Entrada RXD

5 PC2 Salida TXC

6 PC3 Entrada RXC

7 TPOUT- Puerto de transmisión

Ethernet 8 TPOUT+

9 LNK LED indicador de enlace Ethernet

10 PD3 E/S programable Bitwise o paralela

11 PD4 ATXB Salida

12 PD5 ARXB Entrada

13 /IORD Entrada (lectura E/S)

14 /IOWR Salida (escritura E/S)

15 PE0 entrada IO control o INT0A

16 PE1 entrada I1 control o INT1A

17 TPIN- Puerto recepción Ethernet

18 TPIN++

19 PE4 E/S programable Bitwise o paralela

entrada I4 control o INTOB

20 PE5 entrada I5 control o INTOB

21 ACT LED indicador de actividad Ethernet

22 PE7 E/S programable Bitwise o paralela

17 control o puerto esclavo chip seleccionado /SCS

23 - 26 A [3 - 0] Bus de dirección de Rabbit 2000

Page 140:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

137

A.2.6 Puerto de Programación. El puerto serial A es el puerto que se usa para el

desarrollo del software bajo Dynamic C. El conector donde se conecta el cable

programación tiene 10 pines etiquetado J1. El puerto de programación se usa para

inicializar el módulo Rabbit RCM2200 en un modo dónde se quiere descargar un

programa al puerto para ejecutarlo. El puerto de programación transmite la

información desde un PC, mientras el programa está depurándose.

A.3 CONFIGURACIÓN DEL MÓDULO RABBIT RCM2200 EN LA RED

Para la configuración del módulo RCM2200 en una red Ethernet se puede realizar

los siguientes tipos de conexiones a describir, ya sea para ejecutar los programas

de ejemplo o para la implementación de sistemas de control y monitoreo con

conectividad a una red bajo el protocolo TCP/IP.

A.3.1 Conexión directa. Es una simple configuración que permite conectar dos

equipos en red mediante un cable UTP cruzado con clavijas RJ-45 que se

conectan directamente al puerto Ethernet del RCM2200 y a la tarjeta de red del

computador de desarrollo respectivamente. Esta conexión permitió efectuar las

pruebas de comunicación que se le realizaron a la tarjeta para probar los

programas de ejemplo de los protocolos TCP/IP.

Luego de establecer la conexión física con el cable cruzado, se configura en

ambos dispositivos la dirección IP de clase C, mascara de subred y puerta de

enlace.

Tabla 6. Configuración de red del RCM2200 en conexión directa

Dispositivo Dirección IP Mascara de red Puerta de enlace

RCM2200 10.10.6.100 255.255.255.0 10.10.6.1

Computador 10.10.6.101 255.255.255.0 10.10.6.1

Page 141:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

138

Sin embargo esta configuración de red puede cambiarse de acuerdo al tipo de

configuración manejada por el administrador de la red.

A.3.2 Red LAN en Estrella. En esta conexión se emplea un Concentrador (HUB

o Switch) 10/100 base-T de ocho o más puertos Ethernet para formar así una red

Ethernet local de topología Estrella. La conexión física se realiza enlazando un

cable UTP Nivel 5 estándar al puerto Ethernet del RCM2200 y a uno de los

puertos del Concentrador. Igualmente se hace este procedimiento para conectar

cualquier computador a esta red. En la configuración de los parámetros de red se

utilizó los mismos valores que en la anterior configuración, como se muestra en la

figura 36.

Figura 36. Configuración del RCM2200 en una Red LAN Ethernet

Page 142:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

139

A.3.3 Red LAN Inalámbrica. Esta red hace uso de un medio de transmisión no

guiado, es decir, dispositivos que emiten infrarrojos, sistemas de microondas o el

espectro electromagnético, que permiten transferir datos desde 720 kbps (kilobits

por segundo) en un rango de distancias entre 10 y 100 metros a la redonda. Para

implementar esta tipo de red se empleo el dispositivo “Access Point Wireless” al

cual se le conecta físicamente el modulo de control RCM2200, permitiendo

establecer comunicación con computadores en la misma red sin la necesidad de

estar conectados físicamente. En esta conexión se asigno la siguiente

configuración de red.

Tabla 7. Configuración de red Inalámbrica

Dispositivo Dirección IP Mascara de red Puerta de enlace

RCM2200 10.10.6.100 255.255.255.0 10.10.6.1

Access Point Wíreless

10.10.6.102 255.255.255.0 10.10.6.1

Computador 10.10.6.103 255.255.255.0 10.10.6.1

A.3.4 Red WAN. El módulo RCM2200 es capaz de establecer conexión directa a

Internet y a otra red de área extensa, pero debe tenerse un cuidado excepcional

en el uso de la configuración de direcciones IP y toda la programación y desarrollo

de la red relacionada, ya que podría existir conflictos con otros usuarios que

acceden a recursos en los servidores y sistemas clientes. Esta tipo de

configuración no se efectuó, debido a que implica el uso de equipos de red que no

posee actualmente el laboratorio de sistemas de la CURN.

Page 143:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

140

ANEXO B

MANUAL DE USUARIO DE

DYNAMIC C v8.1

Page 144:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

141

INTRODUCCIÓN

Este anexo presenta información de utilidad para el correcto manejo y

configuración del entorno de desarrollo Dynamic C v8.1

Dynamic C v8.1 es la herramienta software que se utiliza para programar el

módulo de control Rabbit RCM2200 utilizado en el desarrollo de este proyecto,

por tal razón es importante conocer su funcionalidad básica.

Vea Anexo A “Manual de usuario del módulo Rabbit RCM2200”

Page 145:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

142

B.1 GENERALIDADES DE DYNAMIC C

Dynamic C es un sistema de desarrollo integrado probado industrialmente, para

escribir software embebido (empotrado) en el uso de controladores Z-World y

otros controladores basados en el microprocesador Rabbit. Este sistema se

fundamenta en el lenguaje de programación C ANSI, con extensiones propias para

el desarrollo de sistemas dedicados. Además, también soporta código

ensamblador o código mezclado de C con ensamblador. Dynamic C opera en un

computador personal bajo Windows 95, 98, NT, ME, aunque la versión 8.1 que se

utilizó en la programación del módulo Rabbit opera en el sistema operativo

Windows 2000 o superior.

Figura 37. Entorno de desarrollo de Dynamic C

Page 146:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

143

La figura anterior muestra el entorno de desarrollo integrado de Dynamic C, el cual

permite escribir, compilar, depurar y ejecutar programas en desarrollo o uno de

los ejemplos proporcionados por éste. Este entorno de desarrollo es muy familiar

a los utilizados por la Borland C++ y Dev C++ que son entornos de desarrollo

para el lenguaje de programación C y C++ respectivamente.

Dynamic C se usa para la edición de archivos fuentes, compilación y ejecución de

programas, eligiendo las opciones para estas actividades por medio de menús

desplegables y rutas cortas en el teclado. Existen dos modos: modo de edición y

modo de ejecución (el modo de ejecución también se conoce como modo de

depuración), varias ventanas de depuración pueden verse en modo de ejecución.

Los programas pueden compilarse directamente en el módulo Rabbit designado

para ser depurados, ya sea, en la memoria RAM o en la FLASH. Los programas

también pueden ser compilados en un archivo .bin con o sin un módulo conectado

al computador.

Page 147:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

144

Para depurar un programa, el controlador o módulo debe conectarse al PC,

directamente a través de un cable de programación ó indirectamente por medio de

una conexión Ethernet y una tarjeta Rabbitlink. Múltiples instancias de Dynamic

C pueden ejecutarse simultáneamente. Esto significa que múltiples sesiones de

depuración son posibles sobre diferentes puertos seriales. Esto usualmente es

para depuración de tarjetas que están en comunicación entre ellas mismas.

B.2 EDICIÓN EN DYNAMIC C

Un archivo se presenta en una ventana de texto cuando este se abre o se crea.

Más de una ventana de texto puede estar abierta. Si el mismo archivo esta en

múltiples ventanas, cualquier cambio hecho al archivo en una ventana será

reflejado en toda la ventana de texto que muestra el archivo. Dynamic C soporta

ventanas normales de operaciones de edición de texto.

Un ratón puede ser usado para posicionar el cursor de texto, con el fin de

seleccionar texto. El teclado puede usarse también en la realización de estas

mismas operaciones. El texto puede ser desplazado usando las teclas de

dirección, Pág Re (pag up) y Pág Av (pag down) y las teclas Inicio (Home) y Fin

(End).

Page 148:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

145

La tecla Ctrl trabaja en conjunto con las teclas de dirección de la siguiente

manera:

Tabla 8. Comandos Ctrl del teclado

Ctrl+Left Mueve el cursor a una palabra previa..

Ctrl+Right Mueve cursor a la siguiente palabra.

Ctrl+Up Mueve la ventana de edición arriba, Mueve el texto abajo una linea. El Cursor no se mueve.

Ctrl+Down Mueve la ventana de edición abajo, el texto se mueve una linea abajo. El Cursor no se mueve.

La tecla Inicio puede usarse sola o con otras teclas.

Tabla 9. Comandos Inicio del teclado

Inicio Mueve al inicio de una línea.

Ctrl+ Inicio Mueve al inicio de un archivo

Shift+ Inicio Selecciona el inicio de un archivo.

Shift+Ctrl+ Inicio Selecciona el inicio de un archivo.

La tecla Fin puede usarse sola o con otras teclas:

Tabla 10. Comandos Fin del teclado

Fin Mueve al final de una línea.

Ctrl+ Fin Mueve al final de un archivo

Shift+ Fin Selecciona el final de una línea

Shift+Ctrl+ Fin Selecciona el final de un archivo.

Page 149:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

146

B.3 MENUS DE DYNAMIC C

El menú principal de Dynamic C 8.10 tiene 8 menús, de igual formato a los del

sistema de menús estándar de Windows.

Figura 38. Menú principal de Dynamic C

Un comando disponible puede ser ejecutado desde un menú haciendo click al

menú o por el método abreviado presionando la tecla Alt para activar la barra de

menú, usando las teclas de flecha izquierda y derecha para seleccionar el

respectivo menú, y utilizando las flecha arriba y abajo para seleccionar los

comandos, por ultimo se presiona Enter.

B.3.1 Menú archivo (file). Seleccionando el menú Archivo se visualizarán los

siguientes submenús que le permitirán al usuario crear, abrir, guardar, cerrar e

imprimir un archivo o proyecto.

Figura 39. Menú archivo de Dynamic C

Page 150:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

147

Nuevo (New) <Ctrl+N>. Crea un archivo de programa sin titulo en una

nueva ventana. Hace el llamado a la ventana de texto ó al editor de texto. Si

hace clic en cualquier parte de la ventana de texto aparecerá un menú

contextual.

Abrir (Open) < Ctrl+O>. Presenta una caja de dialogo para especificar el

nombre del archivo que se abrirá. Múltiples archivos pueden ser

seleccionados marcándolos con la tecla <Ctrl> haciendo clic izquierdo con

el ratón sobre cada archivo que se desea abrir ó dibujando un rectángulo

sobre los nombres de archivos que se abrirán.

Guardar (Save) <Ctrl+S>. El comando guardar actualiza un archivo

abierto para reflejar los cambios hechos desde la última vez que fue

guardado.

Guardar como (Save as) <Ctrl+S>. Presenta una caja de dialogo para

guardar un archivo bajo un nombre nuevo. Seleccione el nombre del

archivo y el tipo de éste en el campo de nombre de archivo. El archivo será

guardado en una carpeta presentada en el campo Guardar en (Save in).

Guardar todo (Save All) <Shift+Ctrl+S>. Este comando guarda todos los

archivos modificados actualmente abiertos.

Cerrar (Close) <Ctrl+F4>. Cierra la ventana activa del editor. La ventana

activa del editor permite cerrarse también con doble clic en el menú del

Page 151:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

148

sistema. Si se intenta cerrar un archivo modificado, Dynamic C preguntará

si desea guardar los cambios.

Proyecto (Project). Permite a un archivo de proyecto ser creado, abierto,

guardado, guardado con un nombre diferente y cerrado.

Configuración de Impresión (Print Setup). Muestra por pantalla la caja

de diálogo Page Setup. Permite establecer la configuración de los

márgenes, orientación de la página, los números de la página, propiedades

del título y pie de páginas del archivo a imprimir.

Vista de impresión (Printer Preview). Muestra por pantalla el archivo que

está en la ventana activa del editor en la ventana Preview Form, muestra el

aspecto del texto que será impreso.

Imprimir (Print). Muestra una caja de diálogo de impresión, la cual

permiten imprimir. Sólo el texto en una ventana de edición puede ser

impreso. Para imprimir el contenido de una ventana de depuración, el texto

debe ser copiado y pegado en la ventana del editor.

Salir (Exit) <Alt+F4>. Cierra Dynamic C después de guardar cualquier

cambio.

B.3.2 Menú edición (edit). El menú edición (edit), permite que el usuario pueda

trabajar fácilmente en el editor de texto, haciendo operaciones como la copia,

cortado y pegado de texto, la búsqueda de texto en el editor, entre otras funciones.

Figura 40. Menú edición de Dynamic C

Page 152:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

149

Deshacer (Undo) <Ctrl+Z>. Esta opción deshace los cambios recientes en

la ventana de edición. El comando debe repetirse varias veces para

deshacer múltiples cambios.

Rehacer (Redo) <Shift+Ctrl+Z>. Rehace los cambios recientemente

deshechos. Éste comando solo trabaja inmediatamente después de una o

mas operaciones deshacer (Undo).

Cortar (Cut) <Ctrl+X>. Remueve el texto seleccionado y lo guarda en el

portapapeles.

Copiar (Copy) <Ctrl+C>. Hace una copia del texto seleccionado en un

archivo o en una ventana de depuración. El texto se guarda en el

portapapeles.

Pegar (Paste) <Ctrl+V>. Pega el texto desde el portapapeles en el punto

de inserción actual. No se puede pegar nada en una ventana de

Page 153:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

150

depuración. El contenido del portapapeles puede ser pegado en cualquier

parte, repetidamente, ya sea en el mismo archivo o en otro archivo de

recurso ó en documentos de procesamiento palabras.

Insertar plantilla de código (Insert Code Template) <Ctrl+J>. Abre una

lista de plantillas de código en la ubicación actual del cursor. Haciendo clic

sobre una lista de entrada o presionando <Enter> inserta la plantilla

seleccionada en la ubicación actual del cursor en la ventana activa de

edición. Presionando la primera letra de un nombre de una plantilla de

código se selecciona la primera plantilla cuyo nombre inicia con esa letra.

Colocar Marcadores (Toggle Bookmark). Coloca uno de diez marcadores

en la ventana activa del editor

Buscar (Find) <Ctrl+F>. Encuentra el primer caso de texto especificado.

El texto puede especificarse seleccionándolo antes de abrir la caja de

diálogo Buscar (Find) si la opción "Find text at cursor" es activada en la

pestaña Edición (Edit) de Opciones de Entorno (Environment Options). Sólo

la palabra debe ser seleccionada, si más de una palabra se selecciona,

entonces la palabra aparecerá como la entrada de texto a buscar.

Siguiente Búsqueda (Find Next) <Ctrl+F3>. Una vez el texto ha sido

especificado con el comando Buscar (Find) ó Reemplazar (Replace), el

comando Siguiente Búsqueda buscará el siguiente caso del mismo texto,

buscando adelante o atrás, caso sensible o no, como es especificado

anteriormente en la ventana Buscar.

Modo Edición (Edit Mode) <F4>. Cambia al modo de edición desde el

modo de ejecución. Después de una compilación ó ejecución correcta, no

permite cambios en el archivo a menos que se seleccione el modo de

Page 154:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

151

edición. Si la compilación falla u ocurre un error en tiempo de ejecución,

Dynamic C regresa al modo de edición.

B.3.3 Menú compilar (compile). Haga clic en el titulo del menú ó presione

<Alt+C> para seleccionar el menú compilar.

Figura 41. Menú compilar de Dynamic C

Compilar (compile) <F5>. Compila un programa y lo carga en el módulo

Rabbit o en un archivo .bin cuando se presione <F5> ó se seleccione

compilar desde el menú compilar. El archivo activo se compilará de acuerdo

con las opciones de compilación actuales. Las opciones de compilación son

fijadas en la caja de dialogo accediendo a la pestaña Compilar (Compiler)

en el menú OPTIONS | PROJECT OPTIONS.

Page 155:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

152

Cualquier error en la compilación se activa automáticamente en la ventana

mensajes de compilación. Presione <F1>para obtener mas información de

cualquier mensaje de error que se marca en esta ventana.

Compilar en la Tarjeta (Compile to Target). Se extiende a 3 elecciones:

o Compilar en la memoria flash (Compile to flash).

o Compilar en memoria RAM (Compile to RAM).

o Compilar en la flash y ejecutar en la RAM (Compile to flash, run in

RAM).

Estas opciones sustituyen cualquier opción de configuración en la memoria

BIOS realizada desde la pestaña compilar (compiler) en la selección del

menú OPTIONS | PROJECT OPTIONS.

Compilar en el Archivo .Bin. Compila un programa y escribe la imagen a

un archivo .bin. Hay dos elecciones disponibles con esta opción. Compilar

en memoria flash y Compilar en la flash y ejecutar en la RAM.

La configuración de la tarjeta usada al compilar es determinada en el menú

OPTIONS | PROJECT OPTIONS en la pestaña Compiler La configuración

de la tarjeta predefinida se accede haciendo clic en la ficha TARGETLESS

la cual muestra tres fichas adicionales: archivos RTI (File RTI),

especificación de parámetros (Specify Parameters), selección de tarjeta

(Board selection).

El archivo .bin debe usarse con un dispositivo de programación para

programar múltiples tarjetas ó el Rabbit Field Utility (RFU) "campo de

utilidad de rabbit", puede ser usado para cargarlo en la tarjeta.

Page 156:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

153

Resetear Tarjeta/Compilar Bios (Reset Target / Compile Bios) <Ctrl+Y>.

Esta opción recarga el BIOS de la RAM o flash, dependiendo de la elección

hecha bajo la BIOS Memory Setting en la caja de dialogo Compiler desde

el menú OPTIONS | PROJECT OPTIONS. El siguiente mensaje aparecerá

sobre una correcta compilación, cargando el código en la BIOS.

Figura 42. Mensaje de la BIOS

B.3.4 Menú ejecutar (run). A este menú se accede haciendo clic en el titulo o

con <Alt.+R>.

Figura 43. Menú ejecutar de Dynamic C

Ejecutar (Run) <F9>. Inicia la

ejecución del programa desde el punto de ruptura actual (breakpoint). Los

registros son restaurados, incluyendo el estado de interrupción, antes de

Page 157:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

154

iniciar la ejecución, sí el programa es compilado y descargado a la tarjeta

en el modo de edición.

Parar (Stop) <Ctrl+Q>. El comando Parar detiene el programa en el punto

actual de ejecución. Normalmente el depurador no puede detenerse dentro

de un código no depurado.

Run w/No Polling <Alt+F9>. Este comando es idéntico al comando

Ejecutar, con una excepción. El PC revisa la tarjeta cada 3 segundos por

defecto para determinar si la tarjeta ha fallado o ha tenido problemas.

Trace Into <F7>. Ejecuta una sentencia C (o una instrucción de lenguaje

ensamblador si la ventana de ensamblador se visualiza) descendiendo en

las funciones.

Step Over <F8>. Ejecuta una sentencia C (o una instrucción de lenguaje

ensamblador si la ventana de ensamblador se visualiza) sin descender en

las funciones.

Source Trace Into <Alt+F7>. Ejecuta una sentencia C descendiendo en

las funciones cuando la ventana de Ensamblador es abierta.

Source Step Over <Alt+F8>. Ejecuta una sentencia C sin descender en

las funciones cuando la ventana de ensamblador es abierta.

Toggle Breakpoint <F2>. Coloca un punto de ruptura en la ubicación

actual del cursor. Los puntos de ruptura flexibles no afectan el estado de

interrupción en el momento que el punto de ruptura es encontrado, mientras

que los puntos de ruptura rígidos si lo hacen.

Page 158:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

155

Toggle Hard Breakpoint <Alt+F2>. Coloca un punto de ruptura rígido en

la ubicación actual del cursor. Un punto de ruptura rígido difiere de un

punto de ruptura flexible en que la interrupción es deshabilitada cuando el

un punto de ruptura rígido es alcanzado.

Limpiar todos los puntos de ruptura (Clear All Breakpoints) <Ctrl+A>.

Limpia todos los puntos de ruptura.

Restablecer programa (Reset program) <Ctrl+F2>. Restablece el

programa a su estado inicial. El cursor de ejecución se posiciona al inicio de

la función principal (main), antes de cualquier inicialización global e

inicialización de variables.

El estado inicial incluye sólo el punto de ejecución (contador del programa),

registros de mapeo de memoria, y el puntero de la pila. El comando

restablecer programa no recargará el programa si la ejecución anterior

sobrescribe el segmento del código. Es decir, si el código está corrompido.

Por lo tanto debe recargase el programa a la tarjeta nuevamente.

B.3.5 Menú opciones (options). El menú Opciones se accede haciendo clic en

el titulo o con <Alt.+O>, y permite configurar el entorno de la ventana de edición de

texto y las opciones de configuración del módulo Rabbit 2000.

Figura 44. Menú opciones de Dynamic C

Opciones de Entorno

(Environment Options).

Dynamic C viene con un editor de texto completo incorporado. Puede

Page 159:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

156

personalizarse para satisfacer su estilo usando la caja de dialogo Opciones

de entorno. La caja de diálogo tiene etiquetas para varios aspectos del

editor.

Opciones de Proyecto (Proyect Options). Configuración usada por

Dynámic C para comunicarse con la tarjeta designada, y para compilar y

ejecutar los programas, esto a través de la caja de dialogo Opciones de

Proyecto. La caja del diálogo tiene etiquetas para configurar los respectivos

aspectos de comunicación con la tarjeta, el BIOS y el compilador, entre las

que cabe mencionar comunicaciones (Communications), Compilador

(Compiler) y Targetless.

Figura 45. Caja de dialogo opciones de proyecto de Dynamic C

En la

Page 160:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

157

pestaña comunicaciones (communications) se presentan dos tipos de

conexión: Conexión vía serial que es definida por defecto para la utilización

del cable de programación y la conexión TCP/IP. La conexión serial

presenta varias opciones de configuración como:

o Tasa en Baudio (Baud Rates) que permite establecer la Tasa de Baudio

de Depuración (Debug Baud Rates) que por defecto es 115200 bps y la

Tasa de Baudio de Transferencia Máxima (Max Download Baud Rate)

que es definida a 460800 bps. Cuando (baud negotiation) es activada,

Dynamic C empezará a seleccionar la tasa de baudio y trabajará con

una de éstas dos tasas mientras que alcance una con que la tarjeta

pueda operar correctamente.

o Puerto serial. Aquí se especifica el puerto COM del computador que es

conectado a la tarjeta Rabbit. Por defecto se emplea COM1.

o Bits de parada (Stop bits). Este número es usado por el controlador

serial. Por defecto es 2.

La pestaña Targetless, tiene tres etiquetas adicionales las cuales son:

o Archivo RTI (File RTI). En donde se puede abrir un archivo de extensión

.rti que contiene información de configuración del módulo Rabbit

designado en Dynamic C.

o Especificar Parámetros (Specify Parameters). Se definen los parámetros

de configuración del módulo Rabbit seleccionado previamente en la

etiqueta selección de tarjeta (Board Selection); por ejemplo el código de

identificación, la versión de CPU, el tamaño de la memoria RAM y

FLASH y la frecuencia base del microprocesador.

Page 161:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

158

o Selección de tarjeta (Board Selection). Se indica el modulo Rabbit a

donde se transferirá el programa desarrollado, en este caso es el

RCM2200 de 22Mhz, 128K de RAM estática, 256 de memoria Flash y

versión de microprocesador Rabbit 2000 revisión IQ5T como se muestra

en la figura 46.

Figura 46. Selección del módulo Rabbit

Page 162:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

159

B.3.6 Menú ayuda (help). El menú ayuda (help), brinda múltiple soporte al

usuario, gracias a una completa documentación útil para el desarrollador, que se

puede acceder ya sea en línea por la Web o la que es proporcionado por Dynamic

C.

Si el cursor está marcando la posición de una función predefinida en Dynamic C,

entonces se puede obtener la descripción de ésta en una nueva ventana

seleccionando el submenú Función de Búsqueda (Function Lookup) o

presionando <Ctrl+H>. Como muestra la figura 47.

Figura 47. Menú de ayuda de Dynamic C

A continuación la siguiente figura muestra una ventana con la descripción

completa de una determinada función de dynamic C, la cual es resultado de

utilizar la función lookup del menú de ayuda descrito anteriormente.

Page 163:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

160

Figura 48. Ventana de descripción de funciones de Dynamic C.

Page 164:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

161

ANEXO C

MANUAL DE USUARIO DEL

SISTEMA SCAM v1.0

Page 165:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

162

INTRODUCION

A través de este manual se expondrán las diferentes características que

componen la interfaz gráfica de la aplicación SCAM Web y el Servidor SCAM

Server, con el fin de despejarle toda clase de dudas al usuario y darle un mejor

aprovechamiento a las aplicaciones por parte de éste al momento de operarlas.

La aplicación SCAM Web en conjunto con el Servidor SCAM Server conforman un

sistema integrado para el monitoreo, configuración y almacenamiento de

variable(s) de un proceso industrial.

La aplicación SCAM Web son paginas HTML que se encuentran almacenadas en

la memoria del módulo de control Rabbit RCM2200, dado que éste ha sido

configurado como un pequeño servidor Web. Por otro lado, el servidor SCAM

Server es un software de entorno Windows que se instala en un equipo servidor o

un PC conectado en la misma red Ethernet del módulo de control.

Para mayor información relacionada con el módulo de control RCM2200 vea el

Anexo A “Manual de usuario del módulo Rabbit RCM2200”

Page 166:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

163

C.1 REQUERIMIENTOS BÁSICOS DEL SISTEMA

Las aplicaciones SCAM Web y SCAM Server necesitarán por los menos la

siguiente configuración de sistema para su óptimo desempeño al momento de

ejecutarlas y operarlas.

C.1.1 Requerimientos mínimos de hardware.

Procesador de 366 Mhz.

Memoria RAM de 128 Mbytes.

10 Mbytes de espacio libre en el Disco Duro.

Hub o Switch Ethernet de ocho (8) puertos con conectores RJ-45.

Tarjeta de Red Ethernet 10/100 Mbps.

Unidad de CD ROM.

C.1.2 Requerimientos de software.

Internet Explorer 4.0 o superior.

Sistema Operativo Microsoft Windows 98 o superior.

Page 167:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

164

C.2 ACCESO A LA APLICACIÓN

A continuación se describirá los pasos para acceder a cada una de las

aplicaciones desarrolladas.

C.2.1 Iniciando aplicación SCAM Web. Para que un usuario pueda acceder a

la página de inicio de la aplicación, antes debe verificarse que el módulo Rabbit

RCM2200 este debidamente configurado en la red Ethernet de su organización.

Luego de haber realizado la verificación, el usuario debe abrir el navegador Web

de su PC y digitar la dirección IP del módulo de control Rabbit en la barra de

direcciones, en este caso por ejemplo, se utilizará la predefinida en este módulo

(10.10.6.100), pero esto puede variar acorde a las direcciones IP que se manejan

en su red Ethernet.

Figura 49. Barra de direcciones navegador Web

También se puede acceder a la aplicación a través del botón Inicio de la barra de

inicio de Windows escogiendo la opción ejecutar como muestra la figura 50.

Page 168:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

165

Figura 50. Botón inicio de Windows XP

Después se debe escribir la dirección IP del módulo en el campo abrir de la

ventana ejecutar y presionar aceptar, como se observa en la figura.

Figura 51. Acceso a SCAM Web a través de la ventana ejecutar

A través de la acción anterior se accederá a la página de inicio sino ocurre ningún

error de comunicación con el módulo.

Page 169:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

166

C.2.2 Iniciando servidor SCAM Server. Después de haber instalado de manera

satisfactoria este software en el equipo indicado como servidor, se procede a su

respectiva ejecución, buscando en los programas instalados del menú Inicio de

Windows, como se observa en la siguiente figura.

Figura 52. Iniciando SCAM Server

C.3 FUNCIONAMIENTO APLICACIÓN SCAM WEB

C.3.1 Página inicio de sesión. La página de inicio de sesión de SCAM Web está

conformada por un marco de título, un marco con la información detallada de la

aplicación y un marco de inicio de sesión, donde se debe escribir los datos

nombre de usuario y contraseña, además un botón enviar para confirmar dichos

campos. Obsérvelo en la siguiente figura.

Page 170:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

167

Figura 53. Página inicio de sesión de SCAM Web

Los campos nombre de usuario y contraseña deben estar escritos correctamente

de lo contrario el sistema emitirá un mensaje de error por cada campo

respectivamente, como se observa en la figura 54.

Figura 54. Mensaje de error del campo nombre de usuario

Si el nombre de usuario y/o contraseña escritos no corresponden con los que se

encuentran registrados en el sistema se emitirá un mensaje de verificación de

estos datos, obsérvelo a continuación.

Page 171:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

168

Figura 55. Mensaje de verificación nombre de usuario y/o contraseña.

C.3.2 Página principal o de monitoreo. Una vez se haya confirmado

correctamente los datos de usuario se ingresa a la página principal de la

aplicación SCAM Web, la cual se compone de una zona de vínculos y una

ventana de supervisión dónde se toma lectura continuamente de la variable

controlada en este caso temperatura y su valor de referencia, como se observa en

la figura 56.

Figura 56. Página principal de SCAM

Page 172:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

169

La zona de vínculos permite abrir otras páginas relacionadas, por ejemplo el

vínculo parámetros PID conlleva a la página de configuración de parámetros PID,

el de usuarios remite a la página de gestión de usuarios y el de ayuda nos guía a

la página de ayuda de la aplicación SCAM Web. Sin embargo antes de ingresar a

las páginas Configuración de Parámetros PID y Configuración de usuarios, el

sistema visualiza una ventana de autenticación, debido a que estas páginas han

sido configuradas para que sólo accedan los usuarios Admin e Ingeniería a la

primera página y el usuario Admin a la segunda respectivamente.

Figura 57. Ventana de autenticación a las paginas Configuración PID y usuarios

C.3.3 Página configuración parámetros PID. En esta pagina, se distinguen los

diferentes campos para la configuración del controlador PID, como son Valor de

Referencia de la variable a controlar, Constante Proporcional (KP), Tiempo

Integrativo (Ti), Tiempo Derivativo (Td) y Frecuencia de muestreo, a fin de

establecer o modificar el funcionamiento del algoritmo PID que se ejecuta en el

módulo de control. Si desea modificar los valores actuales del controlador debe

escribirlos y confirmarlos con el botón enviar, de otro modo, puede limpiar los

campos con el botón reestablecer. La página también permite navegar a otras

páginas dentro de la misma aplicación como a la página principal, ayuda y usuario.

Page 173:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

170

Figura 58. Ventana de parámetros del controlador PID

El sistema permite validar tanto la escritura de tipos de valores no

correspondientes a los permitidos como los valores nulos, por lo que éstos deben

ser coherentes con los predefinidos, emitiendo así mensajes de error para cada

campo respectivamente, obsérvelo a continuación.

Figura 59. Mensaje de error del campo valor de referencia (setpoint)

Page 174:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

171

Figura 60. Mensaje valor de referencia (setpoint) es requerido

C.3.4 Página configuración de usuarios. La página de gestión de usuarios de la

figura 61, esta compuesta de una ventana para la modificación de la contraseña y

el correo electrónico de los diferentes usuarios del sistema, donde el nivel de

acceso es acorde a su perfil. El sistema sólo acepta a tres tipos de usuarios

predefinidos con su respectiva contraseña. Los usuarios son Admin, Ingeniería y

Operador, con sus contraseñas Ronald, Jorge e Invit respectivamente. La

modificación de la contraseña para cada uno de los usuarios se hace por medio de

los campos nueva contraseña y verifique contraseña con el fin de validar que la

contraseña digitada se ha escrito correctamente. Un campo adicional correo

electrónico es utilizado para poder enviar mensajes del sistema a la dirección de

correo electrónico de un usuario particular. Para la confirmación del cambio de

estos valores se debe oprimir el botón enviar ó si desea limpiar los campos oprima

el botón reestablecer.

Page 175:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

172

Figura 61. Ventana de configuración de usuarios

El sistema permite validar los valores de los campos en caso de que uno de ellos

sea nulo ó estos se escriban mal, por medio de una serie de mensajes

correspondientes a cada campo, esto se observa a continuación.

Figura 62. Campo de nueva contraseña es requerido

También se valida que los campos nueva contraseña y verificar contraseña sean

iguales, de lo contrario saldrá el siguiente mensaje.

Page 176:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

173

Figura 63. Mensaje de error de contraseñas inconsistentes

Figura 64. Mensaje de error del campo correo electrónico

C.3.5 Página de ayuda. Esta página proporciona información básica del

funcionamiento del sistema SCAM Web. Esta compuesta por una serie de vínculos

a los temas del contenido de la ayuda y a páginas dentro de la misma aplicación.

Figura 65. Página de ayuda de SCAM Web

Page 177:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

174

C.4 FUNCIONAMIENTO SERVIDOR SCAM SERVER

El servidor SCAM Server es una aplicación de escritorio desarrollado por los

autores de este proyecto, con la finalidad de recepcionar y almacenar el valor de la

variable controlada que es enviada desde el módulo de control Rabbit, pudiendo

de esta manera generar históricos de la variable en mención. Esta aplicación esta

conformada por las siguientes pantallas a describir:

C.4.1 Pantalla principal. Es la Interfaz donde el usuario tiene acceso a los

menús de la aplicación y en la cual se especifican los parámetros para que ésta

pueda establecer comunicación con el módulo de control a través del protocolo

TCP/IP. Estos parámetros son: puerto de escucha que es el número (entre 1024

y 65535) de puerto local en el que escuchará el servidor y Equipo remoto en

donde se digita la dirección IP o nombre del equipo que se va conectar a éste, en

este caso el módulo de control RCM2200. Lo anterior se observa en la figura 66.

Figura 66. Pantalla principal de SCAM Server

Menú Archivo: el menú Archivo tiene la opción de salir de la aplicación

cuando el usuario lo decida conveniente.

Menú Configuración: este menú permite abrir la ventana de configuración

de parámetros de la variable controlada.

Page 178:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

175

Menú Operación: por otro lado, el menú Operación despliega una lista de

opciones que el usuario podrá ejecutar haciendo clic en éstas, por ejemplo

iniciar la escucha, desconectar el servidor del equipo remoto (módulo de

control), y por último visualizar la pantalla de históricos de variable.

Figura 67. Menú Operación

Menú Ayuda: Permite acceder a la pantalla Acerca de

C.4.2 Pantalla históricos. Esta pantalla refleja todos los valores de la variable

controlada que se han registrado en la Base de Datos de la aplicación

continuamente.

Figura 68. Pantalla históricos de variables

Page 179:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

176

C.4.3 Pantalla configuración de parámetros. Permite configurar parámetros

para la variable controlada a almacenar, por ejemplo nombre de la variable a

almacenar, unidad física, rango de funcionamiento y rango de valores óptimos.

Figura 69. Pantalla de configuración de parámetros de variable

C.4.4 Pantalla acerca de. Muestra información relacionada acerca de los

desarrolladores de esta aplicación y el mensaje de derechos de autor.

Figura 70. Pantalla Acerca de SCAM Server

Page 180:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

177

C.5 RECOMENDACIONES DE LAS APLICACIÓNES

Como diseñadores y desarrolladores de las aplicaciones SCAM Web y SCAM

Server, hacemos las siguientes recomendaciones a los usuarios que las operen,

con el fin de que tengan una mejor interacción y desempeño con éstas.

1. Realizar la respectiva configuración de red de la estación cliente, es decir,

donde se ejecutará la aplicación SCAM Web.

2. Verificar que la conexión del módulo de control Rabbit RCM2200 a la red

Ethernet este instalado y configurado correctamente, al igual que el suministro de

energía de este equipo.

3. Tener instalado un navegador Web como Internet Explorer o Netscape en el

equipo cliente para poder ejecutar la aplicación SCAM Web.

4. Se recomienda que la aplicación SCAM Server se ejecute con anterioridad a la

aplicación SCAM Web a fin de no presentar problemas de comunicación con este

servidor.

5. Tener instalado el motor de base de Microsoft Access 2000 o 2003.

6. Configurar el monitor de su equipo a una resolución de pantalla de 800x600

píxeles, para que las aplicaciones tengan una mejor apariencia.

7. El operador/usuario del sistema debe tener conocimientos básicos acerca de los

controladores PID para evitar un uso ineficiente del sistema.

Page 181:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

178

ANEXO D

MANUAL DEL SISTEMA

Page 182:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

179

INTRODUCION

El sistema SCAM (Sistema de Control Automático y Monitoreo) ha sido

desarrollado con tecnológica de punta y de fácil acceso para las pequeñas y

medianas empresas del sector industrial local, ya que para su consecución se

empleo un sistema de desarrollo integrado de bajo costo para hacer control

embebido en una pequeña tarjeta que incorpora características de comunicación

avanzadas con otros equipos en una red Ethernet y la herramienta "Macromedia

DreamWeaver MX 2004 "para el desarrollo de la interfaz Web.

La codificación del sistema se dividió en dos fases, en la primera fase se realizó el

código en lenguaje HTML 4.0 concerniente a la interfaz de monitoreo del sistema,

como botones, hipervínculos, cajas de textos, imágenes, etc. que hacen posible

una adecuada interacción con el usuario. Este interfaz es la que se incluye en la

tarjeta, a través de una serie de instrucciones propias de ésta, y es aquí donde se

inicia la segunda fase de desarrollo del código, empleando para tal fin el entorno

de desarrollo Dynamic C versión 8.1 que se basa en el lenguaje de programación

C ANSI. A continuación se describen los procedimientos y funciones de mayor

importancia que conforman el sistema SCAM.

Page 183:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

180

D.1 DESCRIPCIÓN DEL CÓDIGO PRINCIPAL DE SCAM

Inicialmente para establecer que el módulo de control Rabbit RCM2200 trabaje

como servidor HTTP y con la funcionalidad de comunicación TCP/IP debe

realizarse una configuración previa por medio de una serie de librerías y macros

predefinidos en el lenguaje.

D.1.1 Descripción de macros y librerías.

#class auto. Macro que indica la clase de almacenamiento de las variables

utilizadas dentro de las funciones.

#define CONFIG_RED 1. Este macro se encuentra definido en la librería

RJTCPIP y establece la configuración de red ethernet del modulo

RCM2200, fijando la dirección IP, máscara de subred, puerta de enlace, etc.

#define HTTP_MAXBUFFER 256. Este macro define el tamaño máximo

del búfer en bytes, donde se almacenarán los datos a transmitir sobre la

red. Por defecto es 256 bytes.

#define TCP_BUF_SIZE 2048. Define el tamaño del búfer TCP, donde se

almacena el estado del socket para la conexión con los clientes.

#define HTTP_MAXSERVERS 4. Define el número máximos de servidores

HTTP escuchando en el puerto lógico 80.

#define MAX_TCP_SOCKET_BUFFERS 4. Determina el número máximo

de sockets TCP con búferes preasignados. El valor predeterminado es

cuatro (4).

Page 184:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

181

#define HTTP_NO_FLASHSPEC. Se emplea para desactivar el código que

soporta la estructura http_flashspec[ ], debido, a que se utilizarán las

funciones de la librería ZSERVER.LIB.

#define USE_HTTP_DIGEST_AUTHENTICATION 1. Especifica el tipo de

autenticación a utilizar, se debe establecer el valor de uno (1) para activar la

autenticación Digest, que utiliza una rutina de encriptación.

#define SSPEC_USERSPERRESOURCE 3. Define a tres, como el

número máximo de usuarios que pueden ser asociados a un recurso

particular (página HTML, imágenes, etc).

#define SSPEC_MAXSPEC 19. Fija el número máximo de entradas en el

arreglo global, sever_spec.

#define INPUT_COMPRESSION_BUFFERS 4. Este macro describe el

número de buffer de 4KByte de RAM usado para la descompresión.

#define SSPEC_MAXNAME 25. Asigna a los campos de tipo cadena de

la estructura ServerSpec una longitud máxima de 25 caracteres.

#define SAUTH_MAXNAME 25. Asigna a los campos de tipo cadena de

la estructura ServerAuth una longitud máxima de 25 caracteres.

#define SAUTH_MAXUSERS 3. Asigna el número máximo de usuarios

para una lista de usuarios TCP/IP.

#define REDIRECTHOST IP_STATICA. Este macro almacena la

dirección IP del servidor Web que esta configurada en la librería

RJTCPIP.LIB, a fin de utilizarla para direccionar las paginas en el servidor.

Page 185:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

182

#define REDIRECTTO "http://" REDIRECTHOST "/principal.shtml".

Remite al cliente a la pagina principal.shtml cuando la función submit.cgi

realiza la acción correspondiente a la validación de usuario.

#define CONFUSER_REDIRECTTO "http://" REDIRECTHOST

"/Config_usuario.html". Remite al cliente a la pagina Config_usuario.html

cuando la función modif._par_user.cgi es ejecutada en el servidor HTTP.

#define CONFPID_REDIRECTTO "http://" REDIRECTHOST

"/Config_PID.html". Remite al cliente a la pagina Config_PID.html cuando

la función env_paramPID.cgi es ejecutada en el servidor HTTP.

#memmap xmem . Establece un área predefinida en la memoria extendida

para las funciones que se utilizarán. La opción xmem, permite que todas

las funciones no declaradas de Dynamic C vayan a la memoria extendida.

#use "zimport.lib". Incluye la librería zimport.lib para tener soporte de

comprensión de archivos e imágenes en el servidor Web.

#use "rjtcpip.lib". Librería principal que incluye las librerías básicas de

gestión de red, macros predefinidos para la configuración de red y las

funciones de comunicación vía TCPIP.

#use "pid.lib". Librería que contiene las funciones del algoritmo de control

PID.

#ximport y #zimport. Estos macros importan todas las páginas e

imágenes, asignándole la ruta donde se encuentran y el nombre de éstas,

Page 186:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

183

con el objetivo de cargarlos en la memoria flash de la tarjeta RCM2200. Por

ejemplo:

#ximport "C:/SCAM/paginas/inicio_sesion.html" inicio_sesion_html

#zimport "C:/SCAM/paginas/inicio1.html" inicio1_html

#zimport "C:/SCAM/paginas/inicio2.html" inicio2_html

#zimport "C:/SCAM/paginas/inicio3.html" inicio3_html

#ximport "C:/SCAM/paginas/principal.shtml" principal_shtml

#ximport "C:/SCAM/paginas/principal_image.shtml" princimage_shtml

#ximport "C:/SCAM/paginas/principal_text.shtml" princtext_shtml

#ximport "C:/SCAM/paginas/Config_PID.html" config_PID_html

#ximport "C:/SCAM/paginas/Config_usuario.html" config_usuario_html

//#zimport "C:/SCAM/paginas/ayuda.html" ayuda_html

//Imagenes

#zimport "C:/SCAM/paginas/logo_scan.PNG" logo_scan_PNG

#ximport "C:/SCAM/paginas/butpid.PNG" butpid_PNG

#ximport "C:/SCAM/paginas/butusuario.PNG" butusuario_PNG

#ximport "C:/SCAM/paginas/butayuda.PNG" butayuda_PNG

D.1.2 Descripción de estructuras de datos.

HttpType. La estructura HttpType de la librería HTTP asocia una extensión

de archivo con un tipo MIME (Ampliación de Correo Internet Multiuso) y una

función que se ocupa del tipo MIME.

typedef struct {

char extension[10];

char type[20];

int (*fptr) (/* HttpState* */);

} HttpType;

El siguiente bloque de código se utilizó para definir los tipos de archivos que

maneja el servidor HTTP en el sistema SCAM por medio del arreglo

http_types[] de tipo HttpType.

Page 187:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

184

const HttpType http_types[] =

{

{ ".shtml", "text/html", shtml_handler}, // SSI

{ ".html", "text/html", NULL},

{ ".PNG", "image/PNG", NULL},

{ ".cgi", "", NULL} // CGI

};

FormType. Esta estructura esta compuesta por dos campos de tipo

cadena: name y value, que se emplean para almacenar la pareja

“nombre = valor” de los respectivos campos de los formularios enviados

desde el navegador Web al servidor HTTP. Un ejemplo de esto es la pareja

nombre de usuario = valor y la pareja contraseña = valor de la página inicio

de sesión que se envían al servidor para ser decodificadas, analizadas, y

manejarlas de alguna manera como variables de tipo apropiadas.

typedef struct { char *name; char value [MAX_TAMFORM]; } FORMType; FORMType datoreciv [5];

D.1.3 Descripción de funciones.

FUNCIÒN ANALIZAR_POST.

int analizar_post(HttpState* state)

Descripción: permite decodificar y analizar los datos digitados por el usuario

al ser enviados con el método POST desde el navegador Web. Los datos

ya almacenados en el búfer HTTP se acceden a través de la variable

arreglo datoreciv de tipo FORMType. Los datos recibidos son analizados

Page 188:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

185

utilizando funciones propias del lenguaje que verifican el contenido del búfer

para ver su consistencia.

Parámetro State: es un puntero al campo State de la estructura HttpState

en la librería HTTP.LIB

Valor de Retorno:

_1 Si el proceso de análisis de los datos enviados desde el navegador Web

se ha realizado correctamente.

_0 En caso de que no se realice la operación de análisis.

int analizar_post(HttpState* state) { auto int valret; auto int i; valret = sock_aread(&state->s, state->p, (state->content_length < HTTP_MAXBUFFER-1)? (int)state->content_length:HTTP_MAXBUFFER-1); if (valret < 0) { return 1; } state->subsubstate += valret; if (state->subsubstate >= state->content_length) { state->buffer[(int)state->content_length] = '\0'; for(i=0; i<5; i++) { http_scanpost(datoreciv[i].name, state->buffer, datoreciv[i].value, MAX_TAMFORM); } return 1; //Proceso acabado--retornando 1 indicando que ya se realizo } return 0; }//cierra función parse_post

FUNCIÓN SUBMIT.

int submit(HttpState* state)

Descripción: rutina CGI (Interfaz de Pasarela Común) que se ejecuta en el

servidor HTTP cuando se envían los datos de la pagina inicio de sesión a

Page 189:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

186

través del el botón enviar (submit). Esta función toma los datos del búfer

previamente analizados en la función analizar_post() e interpreta la

información para ejecutar una acción, en este caso, la validación o rechazo

del usuario que accede la aplicación.

Parámetro State: es un puntero al campo State de la estructura HttpState

en la librería HTTP.LIB

Valor de retorno:

_0 Para que la conexión al servidor HTTP este abierta en todo momento.

int submit(HttpState* state) { static char date[30]; static char buffer[512]; http_date_str(date); if(state->length) { if(state->offset < state->length) {

state->offset += sock_fastwrite(&state->s, state->buffer + (int)state->offset, (int)state->length - (int)state->offset);

} else { state->offset = 0; state->length = 0; } } else { datoreciv[0].name = "nombre_usuario"; //nombres del campo nombre_usuario formulario datoreciv[1].name = "contrasena";//nombres del campo contrasena del formulario /* inicializa el campo value de datoreciv */ datoreciv[0].value[0] = '\0'; datoreciv[1].value[0] = '\0'; state->p = state->buffer; if(analizar_post(state)) { //si es !=0 continua if (sauth_authenticate( datoreciv[0].value, datoreciv[1].value, SERVER_HTTP)>=0){ cgi_redirectto(state,REDIRECTTO); return 0; /*se retorna cero para que la conexión al servidor esta abierta en todo momento*/ }else{ //Aquí se manda un cgi_sendstring mostrando un mensaje de error sprintf(buffer,cadmensa,date,REDIRECTTO); //manda el contenido cadmensaje cgi_sendstring(state,buffer); //se usa para enviar la pagina return 0; } //cierra if de autenticación } //cierra if de parse post } //cierra if } //cierra función submit

Page 190:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

187

FUNCIÓN ENVIAR PARAMETROS PID.

int env_paramPID(HttpState* state).

Descripción: La función CGI env_paramPID() se ejecuta al momento de

enviarse los datos de configuración del algoritmo de control PID desde la

página Configuración Parámetros PID. Los datos son almacenados en los

campos de la estructura FORMType, accediéndose a través del arreglo

datoreciv que posee cinco posiciones para almacenar cada una de las

parejas de parámetros PID (Nombre_parámetro, valor) que son modificadas

por el usuario.

Parámetro State: es un puntero al campo State de la estructura HttpState.

Valor de retorno:

_0 Para que la conexión al servidor HTTP este abierta en todo momento.

int env_paramPID(HttpState* state) {int i; if(state->length) { if(state->offset < state->length) {

state->offset += sock_fastwrite(&state->s, state->buffer + (int)state->offset, (int)state->length - (int)state->offset);

} else { state->offset = 0; state->length = 0; } } else { datoreciv[0].name = "setpoint"; datoreciv[1].name = "kp"; datoreciv[2].name = "ti"; datoreciv[3].name = "td"; datoreciv[4].name = "fm"; for(i=0;i<5;i++) { datoreciv[i].value[0] = '\0'; } state->p = state->buffer; if(analizar_post(state)) { //si es !=0 continua setpoint = atof(datoreciv [0].value); kp = atof(datoreciv [1].value); //la función atof convierte una cadena en float ti = atof(datoreciv[2].value);

Page 191:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

188

td = atof(datoreciv[3].value); fm = atof(datoreciv[4].value); cgi_redirectto(state,CONFPID_REDIRECTTO); return 0; } //cierra if de parse post } //cierra if de state->length }//cierra función

FUNCIÓN MODIFICAR PARAMETROS DE USUARIO.

int modif_par_user(HttpState* state)

Descripción: permite la modificación de los parámetros contraseña y correo

electrónico de los usuarios definidos en el sistema. Al igual que las otras

funciones CGI, ésta hace uso de la función analizar_post() para verificar el

contenido del búfer, una vez confirmado la consistencia del buffer se

permite modificar cada parámetro y registrar los nuevos cambios realizados

por el usuario.

Parámetro State: es un puntero al campo State de la estructura HttpState.

Valor de retorno:

_0 Para que la conexión al servidor HTTP este abierta en todo momento.

int modif_par_user(HttpState* state) { int i; if(state->length) { if(state->offset < state->length) {

state->offset += sock_fastwrite(&state->s, state->buffer + (int)state->offset, (int)state->length - (int)state->offset);

} else { state->offset = 0; state->length = 0; } } else { datoreciv [0].name = "select"; datoreciv [1].name = "nueva_contrasena";

Page 192:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

189

datoreciv [2].name = "verifique_contrasena"; datoreciv [3].name = "Correo_electronico"; for(i=0;i<4;i++) { datoreciv[i].value[0] = '\0'; } state->p = state->buffer; if(analizar_post(state)) { //si es !=0 continua if (strcmp(datoreciv[0].value, "Admin") == 0) { sauth_setpassword(usuario1, datoreciv[1].value); strcpy(email_1,datoreciv[3].value); } else if (strcmp(datoreciv[0].value, "Ingenieria")==0){ sauth_setpassword(usuario2, datoreciv[1].value); strcpy(email_2,datoreciv[3].value); } else if (strcmp(datoreciv[0].value, "Operario")==0){ sauth_setpassword(usuario3, datoreciv[1].value); strcpy(email_3,datoreciv[3].value); } cgi_redirectto(state,CONFUSER_REDIRECTTO); return 0; } //cierra if de parse post } //cierra if de state->length }//cierra función

FUNCIÓN LISTA DE OBJETOS DEL SERVIDOR.

void objetos_servidor(void).

Descripción: permite registrar todos los elementos que hacen parte del

servidor HTTP, gracias a la creación de una lista de objetos que contiene

variables, funciones, archivos que se utilizarán para el funcionamiento de la

aplicación.

Esto es posible a través de las funciones siguientes que adicionan

elementos a la lista de objetos del servidor:

sspec_addxmemfile(), sirve para agregar archivos.

sspec_addfunction (), agrega las funciones CGI.

sspec_addvariable(), se utiliza para agregar variables.

Page 193:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

190

sspec_adduser(), define la validación de los permisos de acceso a las

páginas de la lista de objetos del servidor para cada usuario.

void objetos_servidor(void) { int pag1; int pag2; //Archivos sspec_addxmemfile("/", inicio_sesion_html, SERVER_HTTP); sspec_addxmemfile("inicio_sesion.html", inicio_sesion_html, SERVER_HTTP); sspec_addfunction("submit.cgi", submit, SERVER_HTTP); sspec_addxmemfile("inicio1.html", inicio1_html, SERVER_HTTP | SERVER_COMPRESSED); sspec_addxmemfile("inicio2.html", inicio2_html, SERVER_HTTP | SERVER_COMPRESSED); sspec_addxmemfile("inicio3.html", inicio3_html, SERVER_HTTP | SERVER_COMPRESSED); sspec_addxmemfile("ayuda.html", ayuda_html, SERVER_HTTP | SERVER_COMPRESSED ); sspec_addxmemfile("principal_image.shtml", princimage_shtml, SERVER_HTTP); sspec_addxmemfile("principal_text.shtml", princtext_shtml, SERVER_HTTP); sspec_addxmemfile("principal.shtml", principal_shtml, SERVER_HTTP); sspec_addvariable("tempe", &tempe, INT16, "%d", SERVER_HTTP); sspec_addvariable("setpoint", &setpoint, FLOAT32, "%f", SERVER_HTTP); pag1 = sspec_addxmemfile("Config_PID.html", config_PID_html, SERVER_HTTP); sspec_addfunction("env_paramPID.cgi", env_paramPID, SERVER_HTTP); sspec_adduser(pag1, usuario1); sspec_adduser(pag1, usuario2); sspec_setrealm(pag1, "Admin"); pag2 = sspec_addxmemfile("Config_usuario.html", config_usuario_html, SERVER_HTTP); sspec_addfunction("modif_par_user.cgi", modif_par_user, SERVER_HTTP); sspec_adduser(pag2, usuario1); sspec_adduser(pag2, usuario2); sspec_setrealm(pag2, "Admin"); //Imagenes sspec_addxmemfile("logo_scan.PNG", logo_scan_PNG, SERVER_HTTP | SERVER_COMPRESSED ); sspec_addxmemfile("butpid.PNG", butpid_PNG, SERVER_HTTP); sspec_addxmemfile("butusuario.PNG", butusuario_PNG,SERVER_HTTP); sspec_addxmemfile("butayuda.PNG", butayuda_PNG, SERVER_HTTP); }

FUNCIÓN PRINCIPAL.

Descripción: en la función principal del programa se encuentran

inicializadas de una manera global todas las variables que se manejan en la

función de configuración de parámetros PID, al igual que, la función de

Page 194:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

191

inicio del socket para establecer la conexión de red con otras terminales y la

función de inicio del servidor HTTP, además se hace el llamado a la función

de manejo para la lista de objetos del servidor y el manejador del servidor

HTTP, entre otras funciones para el correcto desempeño del sistema.

void main(void) { //declaracion del socket tcp_Socket mysock; int i, retconex; char cadtempe[5]; #GLOBAL_INIT { tempe = 0; setpoint = 0.0; kp = 0.0; ti = 0.0; td = 0.0; fm = 0.0; } sock_init(); // inicializa la pila TCP/IP http_init(); // inicializa sevidor web http_setauthentication(HTTP_DIGEST_AUTH); //se agregan tres tipos de usuario usuario1 = sauth_adduser("Admin", "Ronald", SERVER_HTTP); usuario2 = sauth_adduser("Ingenieria", "Jorge", SERVER_HTTP); usuario3 = sauth_adduser("Operario", "Invit", SERVER_HTTP); objetos_servidor(); retconex = establecer_conex(&mysock,"192.168.0.15",1500); tcp_reserveport(80); //se reserva el pto por defecto para la aplicaciones web while(1) { http_handler(); //maneja el servidor HTTP tempe = func_pid(setpoint,kp,ti,td,fm); itoa(tempe,cadtempe);//convierte un entero a cadena de caracteres if (retconex == 1 && sockstate(&mysock)=="Established"){ sock_puts(&mysock, cadtempe); }else{ retconex = establecer_conex(&mysock,"192.168.0.15",1500); } if (tempe>60 || tempe<10) enviar_mens_alarm("[email protected]",tempe); } //ciera while } //cierra main

Page 195:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

192

D.1.4 Descripción libreria RJTCPIP.LIB. La librería RJTCPIP.LIB realizada por

los ejecutores del proyecto para el uso de la familia de protocolos TCP/IP,

contiene una serie de macros que fijan la configuración de red del módulo

RCM2200, además se define la función que establece comunicación con la

aplicación SCAM Server dentro de la misma red Ethernet para efectos del envío

de datos desde el módulo. Esta librería al igual que otras implementadas por el

usuario se debe incluir en el archivo LIB.DIR de la carpeta raíz de Dynamic C.

Los siguientes macros permiten establecer los valores estáticos para la

configuración de red de la tarjeta RCM2200.

#ifndef CONFIG_RED #define CONFIG_RED 0 #endif #ifndef TIMEZONE #define TIMEZONE -5 #endif #define IP_STATICA "192.168.0.16" #define MASCARA_RED "255.255.255.0" #define NOMBRE_SERV "192.168.0.16" #ifndef PTA_ENLACE #define PTA_ENLACE "192.168.0.1" #endif #define MY_HOST "scam" #define MY_DOMAIN "curn.edu" #define SMTP_SERVER "192.168.0.15" /*"mymailserver.mydomain.com" Nombre o IP del Servidor del correo*/ #define SMTP_DOMAIN "curn.edu" //Nombre o IP del controlador #if CONFIG_RED == 1 /*CONFIGURACIÓN DE RED ESTATICA*/ #define USE_ETHERNET 1 #define IFCONFIG_ETH0 \ IFS_IPADDR,aton(IP_STATICA), \ IFS_NETMASK,aton(MASCARA_RED), \ IFS_NAMESERVER_SET, aton(NOMBRE_SERV), \ IFS_ROUTER_SET, aton(PTA_ENLACE), \ IFS_UP #endif

Page 196:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

193

Luego de haber establecido la configuración de red, se hace el llamado a las

librerías básicas de gestión de red.

#use "neterrno.lib" // Números de error en la red #use "net.lib" // API General de red #use "arp.lib" // Protocolo de Resolución de Direcciones #use "ip.lib" // Protocolo de Internet #use "udp.lib" // Protocolo de Datagramas de usuarios #use "tcp.lib" // Protocolo de control de transporte #use "bootp.lib" // Bootstrap y Protocolo de Configuración Dinámica de Hosts #use "bsdname.lib" // BSD-compatible API #use "icmp.lib" // Protocolo de mensajes de control de Internet #use "dns.lib" // Protocolo de nombres de dominio #use smtp.lib // Protocolo de Transferencia de Simple Correo #use "http.lib" // Protocolo de Transferencia de Hipertexto #use "igmp.lib" // Protocolo de administración de grupos de Internet y Multicast

FUNCIÓN ESTABLECER CONEXIÓN.

int establecer_conex(tcp_Socket *mysocket, char *remip, int puertorem);

Descripción: permite que el módulo de control establezca comunicación con

un servidor remoto dentro de la misma red Ethernet a través del protocolo

TCPI/P. Esta comunicación es posible gracias a un conjunto de funciones

propias del lenguaje que se emplean para manipular el socket, la dirección

IP remota y el número del puerto que se escuchará en el servidor remoto.

Este módulo (cliente) envía la cadena "HELLO" para verificar que el

Servidor este activo a fin de establecer la conexión entre estos.

Parámetros:

mysocket: puntero al socket tcp para almacenar el estado de la conexión.

remip: contiene la dirección IP remota o nombre del host con que se

establecerá la conexión.

Page 197:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

194

puertorem: número de puerto de escucha del equipo remoto.

int establecer_conex(tcp_Socket *mysocket, char *remip, int puertorem) {longword host; char mens1[5]; int retorno; if (!(host = resolve(remip))) { //retorna 0 si no puede resolver la direccion printf("No pudo resolver host"); return 0; } //retorna 0 si tcp_open no entra en sesion con el host remoto if (!tcp_open(mysocket, 0, host, puertorem, NULL)) { printf("falla de apertura \n"); return 0; } while (!sock_established(mysocket) && sock_bytesready(mysocket)== -1){ if (!tcp_tick(mysocket)){ printf("Falla al establecer la conexion\n"); return 0; break; } }//cierra ciclo printf("Establecida OK!\n"); strcpy(mens1,"HELLO"); sock_puts(mysocket, mens1); //Escribe una cadena a un socket. sock_flushnext(mysocket); //vacia los datos a la red retorno = recibir_mens(mysocket, mens1); if (retorno == 1){ printf("Servidor Activo \n"); return 1; }else{ return 0;} }

FUNCIÓN RECIBIR MENSAJE .

int recibir_mens (tcp_Socket *s, char *cadena);

Descripción: esta función trabaja en conjunto con la función establecer

conexión descrita anteriormente, ya que ésta permite recibir el mensaje de

confirmación (cadena HELLO) enviado desde el servidor para establecer la

comunicación. La función hace una comparación de la cadena recibida con

la enviada previamente para verificar que estas dos sean iguales.

Page 198:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

195

Parámetros:

s: puntero al socket tcp para almacenar el estado de la conexión.

Cadena: puntero a un arreglo de cadena que contiene el mensaje.

Valor de retorno:

_ 1 cuando realiza la confirmación de la cadena correctamente.

_ 0 cuando no realiza la confirmación de la cadena correctamente.

int recibir_mens(tcp_Socket *s, char *cadena) {char buffer[6]; int valret; do{ valret = sock_fastread(s, buffer, 6); } while(tcp_tick(s) && valret==0); buffer[valret]= '\0'; if (strcmp(buffer,cadena)==0) return 1; else return 0; } //cierrra función

FUNCIÓN ESCUCHAR CONEXIÓN TELNET.

int escuchar_conex_telnet(tcp_Socket *s, int puertolocal);

Descripción: esta función permite recibir una conexión entrante vía Telnet

para establecer comunicación entre la tarjeta y una Terminal remota.

Parámetros:

s: puntero al socket para almacenar el estado de la conexión.

puertolocal: número de puerto local de escucha del Servidor Telnet para

establecer la conexión.

Valor de retorno:

_0 cuando existe una falla al establecer la conexión.

Page 199:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

196

_1 cuando entra en sesión con otra Terminal.

int escuchar_conex_telnet(tcp_Socket *s, int puertolocal) { char buffer[ 512 ]; int status; tcp_listen(s, puertolocal, 0L, 0, NULL, 0); while (!sock_established(s) && sock_bytesready(s)==-1){ if (!tcp_tick(s)){ printf("Falla al establecer la conexion\n"); return 0; break; } } puts("Recibiendo conexiones entrantes desde Telnet"); sock_mode(s, TCP_MODE_ASCII ); do { if (sock_bytesready(s) >= 0) { //Se debe fijar el modo ASCII con sock_mode() para esta funcion. sock_gets(s, buffer, sizeof(buffer)-1); puts (buffer); } } while (tcp_tick(s)==1); return 1; }

FUNCIÓN ENVIAR MENSAJE DE ALARMA.

void enviar_mens_alarm(char *email_dest, float valtempe).

Descripción: envía un mensaje de correo electrónico a un servidor de correo

remoto siempre que el valor de la variable controlada por la tarjeta exceda

los límites del rango predefinido. La información tanto del destinatario como

la del remitente del mensaje se encuentra previamente definido por medio

de arreglos de cadenas.

Parámetros:

email_dest: cadena que contiene la dirección electrónica del destinatario del

mensaje.

Valtempe: variable que contiene el valor de la temperatura registrado por la

tarjeta.

Page 200:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

197

void enviar_mens_alarm(char *email_dest, float valtempe){ char de[25]; char para[25]; char asunto[35]; char mensaje[60]; strcpy(de, "[email protected]"); strcpy(para,email_dest); strcpy(asunto,"Alarma"); if (valtempe < 0) strcpy(mensaje,"La Temperatura esta por debajo de su Rango Normal"); else if (valtempe > 100) strcpy(mensaje,"La Temperatura esta por Encima de su Rango Normal"); smtp_sendmail(para, de, asunto, mensaje); while(smtp_mailtick()==SMTP_PENDING) //el correo no se ha enviado aún, // se llama otra vez con continue continue; if(smtp_status()==SMTP_SUCCESS) //correo enviado. printf("Mensaje enviado \n"); else printf("Error enviando mensaje \n"); }

D.1.5 Descripción de funciones predefinidas de Dynamic c. Las siguientes

funciones a describir son propias del lenguaje de programación empleado en

Dynamic C, siendo de utilidad para el desarrollo del sistema SCAM.

FUNCIÓN CGI_REDIRECTTO.

void cgi_redirectto( HttpState *state, char *url );

Descrpción: se utiliza para remitir al usuario a otra página, utilizando un

URL almacenado a través de un macro (ej. REDIRECTTO). Los parámetros

que recibe son el campo state de la estructura Http_state y la cadena URL

que contiene la dirección de la página destino.

FUNCÓN CGI_SENDSTRING.

void cgi_sendstring( HttpState *state, char *cadcar );

Descripción: envía una cadena al usuario cuando se ejecuta una rutina CGI

en el servidor HTTP. Se debe emitir un "return 0" inmediatamente después

Page 201:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

198

de llamar esta función. La rutina CGI es considerada finalizada cuando se

realiza el llamado a esta función. Esta función simplifica el manejo de CGI

porque permite generar una página en un buffer. Los parámetros que recibe

es el estado actual del servidor (state) y la cadena de caracteres a enviar

(scripts, html). No retorna ningún valor, ya que fija el estado para que el CGI

devuelva inmediatamente un valor de (0) cero.

FUNCIÓN HTTP_SCANPOST.

http_scanpost(char *buf_nom_etiq, char *buffer, char *buf_value, int

tam_max);

Descripción: permite examinar ó escanear un buffer con una respuesta

POST para los datos enviados desde el navegador como los pares

nombre/valor. Los valores de retorno son 0 (cero) cuando analiza los datos

enviados desde el navegador ó diferente de cero cuando hay falla !0.

FUNCIÓN HTTP_SETAUTHENTICATION.

int http_setauthentication(int auth);

Descripción: Fija el tipo de autenticación a ser usado globalmente por el

servidor HTTP. Por defecto, coloca el tipo HTTP_NO_AUTH. Recibe como

parámetro el tipo de autenticación que puede ser: HTTP_NO_AUTH (no

autenticación), HTTP_BASIC_AUTH (autenticación básica),

HTTP_DIGEST_AUTH (autenticación digest), retornado el resultado actual

del tipo de autenticación.

Page 202:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

199

FUNCIÓN RESOLVE.

Int resolve (char *remip)

Descripción: esta función resuelve la dirección IP de un equipo dentro de

una red Ethernet. Recibe el parámetro remip que es la dirección IP o

nombre de host del equipo a resolver, con la finalidad de establecer una

conexión. La función retorna 0 si no encuentra al equipo de lo contrario

devolverá la dirección IP.

FUNCIÓN SAUTH_ADDUSER.

int sauth_adduser( char *username, char *password, word servermask );

Descripción: función que agrega un usuario a la lista de usuarios TCP/IP.

Los parámetros que recibe son: primero el nombre de usuario, segundo la

contraseña y el tercero representa los servidores válidos (SERVER_HTTP ó

SERVER_FTP). Retorna -1 si existe falla, sino un índice de usuario que es

mayor igual que cero (0) si hay éxito en la operación.

FUNCIÓN SAUTH_AUTHENTICATE.

int sauth_authenticate( char *username, char *password, word server );

Descripción: función que autentica un usuario, recibe como parámetro el

nombre de usuario, contraseña, y el tipo de servidor que se utilizará, ya sea

SERVER_HTTP ó SERVER_FTP. Los valores de retorno son -1 cuando el

usuario no es válido ó mayor igual que cero (0) cuando el usuario se

encuentra registrado.

Page 203:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

200

FUNCIÓN SAUTH_SETPASSWORD.

int sauth_setpassword( int userid, char *password );

Descripción: Fija la nueva contraseña para un usuario. Los parámetros que

recibe son el índice de usuario de la lista de objetos de usuarios TCP/IP y

la nueva contraseña de usuario. Los valores de retorno son cero (0) si se

cumple la modificación de la contraseña ó -1 si hay alguna falla.

FUNCIÓN SMTP_SENDMAIL.

void smtp_sendmail(char *to, char *from, char *subject, char *message);

Descripción: inicializa la estructura de datos interna con cadenas de correo

electrónico para el destinatario y remitente, el asunto, y el cuerpo del

mensaje. Recibe como parámetros la dirección de correo del destinatario, la

dirección de correo del remitente, el asunto y el mensaje.

FUNCIÓN SMTP_MAILTICK.

int smtp_mailtick(void);

Descripción: se llama repetidamente hasta que el correo electrónico sea

enviado completamente. Para un mensaje pequeño, ésta necesitará ser

llamada aproximadamente 20 veces para enviar el mensaje. El número de

tiempo variará, dependiendo de la latencia de la conexión al servidor de

correo y el tamaño del mensaje.

Retorna los siguientes valores:

SMTP_SUCCESS: correo enviado.

SMTP_PENDING: correo no enviado aún, se llama otra vez a

smtp_mailtick().

SMTP_TIME: correo no enviado dentro de los segundos SMTP_TIMEOUT.

Page 204:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

201

SMTP_UNEXPECTED: recibe una respuesta no valida del servidor de

correo.

FUNCIÓN SMTP_STATUS.

int smtp_status(void);

Descripción: devuelve el estado del último correo electrónico enviado, los

valores de retorno son iguales que la función smtp_mailtick ( ).

FUNCIÓN SOCK_AREAD.

int sock_aread( tcp_Socket *s, byte *dp, int len );

Descripción: lee exactamente el tamaño (len) de bytes del socket ó si esta

cantidad de datos no está disponible aún, no lee nada.

FUNCIÓN SOCK_BYTESREADY.

int sock_bytesready ( void *s );

Descripción: si el socket está en modo binario, sock_bytesready() retorna el

número de bytes esperados a ser leídos. Si no existen bytes esperándose,

esta retornara -1. Recibe como parámetro un puntero al socket TCP.

FUNCIÓN SOCK_ESTABLISHED.

int sock_established( void *s );

Descripción: permite establecer una conexión TCP entre un cliente y un

servidor remoto. Recibe como parámetro el puntero al socket TCP. Los

valores de retorno son uno (1) si se establece la comunicación ó de lo

contrario continuará devolviendo cero (0) hasta que la conexión se

establezca.

Page 205:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

202

FUNCIÓN SOCK_FASTREAD.

int sock_fastread( tcp_Socket *s, byte *dp, int len );

Descripción: lee los bytes posibles en el socket y retorna el número de

bytes leídos ó -1 si existe algún error. Se utiliza sólo para sockets TCP y

UDP. El primer parámetro de la función es el puntero al socket, el segundo

son los bytes que se van a leer en el socket y el tercero es el número

máximo de bytes que se leerán en el socket.

FUNCIÓN SOCK_FASTWRITE.

int sock_fastwrite( tcp_Socket *s, byte *dp, int len );

Descripción: escribe tantos bytes posibles al socket y retorna el número de

bytes a enviar ó -1 si existe algún error. Se utiliza sólo para sockets TCP y

UDP. El primer parámetro de la función es el puntero socket, el segundo

parámetro son los bytes que se van a escribir en el socket y el tercero es el

número máximo de bytes que se escribirán en el socket.

FUNCIÓN SOCK_FLUSHNEXT.

void sock_flush( tcp_Socket *s );

Descripción: permite vaciar los datos escritos en el socket a la red Ethernet.

Recibe como parámetros un puntero al socket TCP.

FUNCIÓN SOCK_MODE.

word sock_mode( void *s, word mode );

Descripción: define el modo de envío de los datos a través del socket.

Recibe como parámetros el puntero al socket TCP y el modo que puede ser

Page 206:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

203

TCP_MODE_ASCII, TCP_MODE_BINARY. Por defecto se usa el modo

TCP Binario

FUNCION SOCK_GETS.

int sock_gets( tcp_Socket *s, char *text, int len );

Descripción: lee una cadena de caracteres de tamaño len desde un socket

y reemplaza al CR ó LF con un carácter nulo. (\0). Si la cadena es mas

larga que len, la cadena es terminada en nulo y es resto de caracteres en la

cadena son descartados.

Para usar sock_gets(), primero debe fijar el modo ASCII usando la función

sock_mode().

FUNCION SOCK_PUTS.

int sock_puts( tcp_Socket *s, byte *buf );

Descripción: permite escribir datos al socket, ya que recibe como

parámetros el puntero al socket TCP y un búfer de cadena de caracteres a

escribir al socket. Retorna la longitud de la cadena o -1 si hay error.

FUNCIÓN TCP_LISTEN.

int tcp_listen( tcp_Socket *s, word ptolocal, longword remip, word

ptoremoto, dataHandler_t datahandler, word reserved );

Descripción: permite que un puerto particular sea escuchado y aceptado a

fin de establecer una sesión pasiva con otro host. La función recibe como

parámetros un puntero s a la estructura del socket, el puerto a escuchar

ptolocal, el parámetro remip que es la dirección IP del host remoto, el

parámetro ptoremoto que indica el puerto al que se le aceptará la conexión

o 0 para aceptar cualquiera, el parámetro datahandler que hace referencia a

Page 207:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

204

una función cuando el dato se recibe o NULL para colocar los datos en el

búfer del socket, por último reserved que es empleado para un uso futuro y

se fija a cero. Retorna 1 para aceptar el puerto ó 0 si existe un error

FUNCIÓN TCP_OPEN.

int tcp_open( tcp_Socket *s, word ptolocal, longword remip, word ptoremoto,

dataHandler_t datahandler );.

Descripción: esta función crea una sesión activa con otro host. Recibe

como primer parámetro un puntero s a la estructura del socket, seguido del

puerto local que es fijado a 0 o a un valor comprendido entre 1025 y 65536,

la dirección IP del host a conectar (remip), el puerto remoto a conectar y por

ultimo parámetro datahandler que hace referencia a una función cuando el

dato se recibe o NULL para colocar los datos en el búfer del socket. Los

valores de retorno son: cero (0) si no puede resolverse la dirección de

hardware de la otra computadora, de lo contrario devolverá diferente de

cero (0).

FUNCIÓN TCP_RESERVEPORT.

void tcp_reserveport( word puerto );

Descripción: reserva el puerto por defecto para los protocolos de la familia

TCP/IP, permitiendo establecer una conexión aun cuando no hay un socket

disponible. Recibe como parámetro el puerto a usar. Por ejemplo el

protocolo HTTP emplea el puerto 80 para establecer conexión entre un

navegador Web (cliente) y servidor HTTP.

Page 208:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

205

ANEXO E

FUNCIONAMIENTO DEL PIC

16F877

Page 209:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

206

E.1 GENERALIDADES DEL CONTROLADOR DE INTERFACE PERIFÉRICO

PIC 16F877

El microcontrolador PIC 16F877 de Microchip pertenece a una gran familia de

microcontroladores de 8 bits (bus de datos) que tienen las siguientes

características generales que los distinguen de otras familias:

Arquitectura Harvard

Tecnología RISC

Tecnología CMOS

Estas características se conjugan para lograr un dispositivo altamente eficiente en

el uso de la memoria de datos y programa y por lo tanto en la velocidad de

ejecución.

Microchip ha dividido sus microcontroladores en tres grandes subfamilias de

acuerdo al número de bits de su bus de instrucciones:

Tabla 11. Familia de microcontroladores de Microchip.

Subfamilia Bits del Bus de Instrucciones

Nomenclatura

Línea Base 12 PIC12XXX y PIC14XXX

Rango Medio 14 PIC16XXX

High - End 16 PIC17XXX y PIC18XXX

Page 210:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

207

Los microcontroladores que produce Microchip cubren un amplio rango de

dispositivos cuyas características pueden variar como sigue:

Empaquetado (desde 8 pines hasta 68 pines)

Tecnología de la memoria incluida (EPROM, ROM, Flash)

Voltajes de operación (desde 2.5 v. Hasta 6v)

Frecuencia de operación (Hasta 20 Mhz)

E.1.1 Nomenclatura. El nombre específico del microcontrolador puede aparecer

algunas siglas como se muestra en la siguiente tabla:

Tabla 12. Nomenclatura de la familia de microcontroladores de Microchip

TIPO DE MEMORIA

RANGO DE VOLTAJE

ESTÁNDAR EXTENDIDO

EPROM PIC16CXXX PIC16LCXXX

ROM PIC16CRXXX PIC16LCRXXX

Flash PIC16FXXX PIC16LFXXX

En la siguiente tabla se especifican los rangos de voltaje estándar y extendido

manejados por los dispositivos:

Tabla 13. Rango de voltaje de los microcontroladores

RANGO DE VOLTAJE

EPROM ROM Flash

ESTÁNDAR C 4.5 a 6 V CR 4.5 a 6 V F 4.5 a 6 V

EXTENDIDO LC 2.5 a 6 V LCR 2.5 a 6 V LF 2 a 6 V

Page 211:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

208

E.1.2 Características generales del PIC16F877. La siguiente es una lista de las

características que comparte el PIC16F877 con los dispositivos más cercanos de

su familia.

Tabla 14. Familia del PIC 16Fxxx

PIC16F873 PIC16F874 PIC16F876 PIC16F877

CPU RISC

Sólo 35 instrucciones.

Todas las instrucciones se ejecutan en un ciclo de instrucción, excepto los

saltos que requieren dos.

Frecuencia de operación de 0 a 20 MHz (DC a 200 nseg de ciclo de

instrucción)

Hasta 8k x 14 bits de memoria Flash de programa

Hasta 368 bytes de memoria de datos (RAM)

Hasta 256 bytes de memoria de datos EEPROM

Hasta 4 fuentes de interrupción

Pila de hardware de 8 niveles

Reset de encendido (POR)

Retardo de encendido (PWRT)

Retardo de arranque del oscilador (OST)

Sistema de vigilancia Watchdog timer (Temporizador de perro guardián).

Protección programable de código

Modo SLEEP de bajo consumo de energía

Opciones de selección del oscilador

Programación y depuración serie “In-Circuit” (ICSP) a través de dos pines

Lectura/escritura de la CPU a la memoria flash de programa

Rango de voltaje de operación de 2.0 a 5.5 voltios

Alta capacidad de drenado de corriente de la fuente: 25mA

Page 212:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

209

Rangos de temperatura: Comercial, Industrial y Extendido

Bajo consumo de potencia:

o Menos de 0.6mA a 3V, 4 Mhz

o 20 µA a 3V, 32 Khz

o menos de 1µA corriente de standby.

E.1.3 Periféricos.

Timer 0: Contador/Temporizador de 8 bits con pre-escalador de 8 bits

Timer 1: Contador/Temporizador de 16 bits con pre-escalador

Timer 0: Contador/Temporizador de 8 bits con pre-escalador y post-

escalador de 8 bits y registro de periodo.

Dos módulos de captura, comparación y PWM

Convertidor analógico/digital: de 10 bits, hasta 8 canales

- Puerto serie síncrono (SSP)

- Puerto serie universal (USART/SCI)

- Puerto paralelo esclavo (PSP): de 8 bits con líneas de protocolo

E.1.4 Diagrama de Bloques del PIC16F877. En las siguientes figuras se muestra

el diagrama de bloques de la organización interna del PIC16F877 y el esquema de

pines respectivamente, para tener una visión conjunta del interior y exterior del

Chip.

Page 213:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

210

Figura 71. Esquema Interno del PIC16F877/874

Pu

erto

A

Pila de 8 niveles

(13 bits)

Pu

erto

B

Pu

erto

C

Pu

erto

D

Pu

erto

E

Page 214:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

211

Figura 72. Esquema de pines del PIC16F877/874

E.1.5 Descripción de la CPU. La CPU es la responsable de la interpretación y

ejecución de la información (instrucciones) guardada en la memoria de programa.

Muchas de estas instrucciones operan sobre la memoria de datos. Para operar

sobre la memoria de datos además, si se van a realizar operaciones lógicas o

aritméticas, requieren usar la Unidad Lógica y Aritmética (ALU). La ALU controla

los bits de estado (Registro STATUS), los bits de este registro se alteran

dependiendo del resultado de algunas instrucciones.

Ciclo de instrucción. El registro contador de programa (Program Counter

PC) es gobernado por el ciclo de instrucción como se muestra en la

siguiente figura. En cada ciclo de instrucción la CPU lee (ciclo Fetch) la

instrucción guardada en la memoria de programa apuntada por PC y al

mismo tiempo ejecuta la instrucción anterior, esto debido a una cola de

instrucciones que le permite ejecutar una instrucción mientras lee la

próxima.

Page 215:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

212

Figura 73. Ciclo de instrucción de PC

Como puede verse, cada ciclo de instrucción (Tcy) se compone a su vez de

cuatro ciclos del oscilador (Tosc). Cada ciclo Q provee la sincronización

para los siguientes eventos:

Q1: Decodificación de la instrucción

Q2: Lectura del dato (si lo hay)

Q3: Procesa el dato

Q4: Escribe el dato

Debido a esto cada ciclo de instrucción consume 4 ciclos de reloj, de

manera que si la frecuencia de oscilación es Fosc, Tcy será 4/Fosc.

Registros de la CPU. La CPU tiene los siguientes registros:

o Registro PC. Registro de 13 bits que siempre apunta a la siguiente

instrucción a ejecutarse. En la siguiente sección se dan mayores

detalles en el manejo de este registro.

o Registro de Instrucción. Registro de 14 bits. Todas las

instrucciones se colocan en él para ser decodificadas por la CPU

antes de ejecutarlas.

Page 216:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

213

o Registro W. Registro de 8 bits que guarda resultados temporales de

las operaciones realizadas por la ALU.

o Registro STATUS. Registro de 8 bits, cada uno de sus bits

(denominados Banderas) es un indicador de estado de la CPU o del

resultado de la última operación como se indica en la siguiente

figura:

Figura 74. Configuración de bits del registro STATUS

Bit Z. Este bit se pone (=1) para indicar que el resultado de la última

operación fue cero, de lo contrario se limpia (=0).

Bit C. Bit de acarreo/préstamo’ de la última operación aritmética (en

el caso de resta, se guarda el préstamo invertido.

Bit DC. Acarreo/Préstamo’ proveniente del cuarto bit menos

significativo. Funciona igual que el bit C, pero para operaciones de 4

bits.

E.1.6 Formato General de las Instrucciones. Cada instrucción en lenguaje de

máquina (binario) del PIC contiene un código de operación (opcode) el cual puede

ser de 3 a 4 o 6 bits, dependiendo del tipo de instrucción.

A continuación se describe el formato para cada tipo de instrucción de los PIC de

rango medio:

Page 217:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

214

Operaciones con el archivo de registros orientadas a bytes

Figura 75. Operación con el archivo de registros orientada a bytes

El bit d especifica el destino del resultado de la operación:

d = 0: destino W

d = 1: destino f

f = dirección de 7 bits del archivo de registros.

Operaciones con el archivo de registros orientados a bits

Figura 76. Operación con el archivo de registros orientada a bits

b : Especificación en tres bits del bit sobre el que se va a operar

f = dirección de 7 bits del archivo de registros.

Operaciones con literales y de control

Figura 77. Formato general

k : Literal = Valor de un operando de 8 bits

Figura 78. Formato para CALL y GOTO

Page 218:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

215

k : Literal = Valor de un operando de 8 bits

E.1.7 Organización de la memoria del PIC. Los PIC tienen dos tipos de

memoria: memoria de programa y memoria de datos, cada bloque con su propio

bus: bus de programa y bus de datos; por lo cual cada bloque puede ser accesado

durante un mismo ciclo de oscilación.

La Memoria de programa. Los PIC de rango medio poseen un registro

contador del programa (PC) de 13 bits, capaz de direccionar un espacio de

8K x 14, como todas las instrucciones son de 14 bits, esto significa un

bloque de 8k instrucciones. El bloque total de 8K x 14 de memoria de

programa está subdividido en 4 páginas de 2K x 14. En la siguiente figura

se muestra esta organización.

Figura 79. Organización de la memoria de programa

Nota 1: No todos los PIC tienen implementado todo el espacio de 8K de

memoria de programa.

Page 219:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

216

Nota 2: El fabricante puede grabar datos de calibración en localidades de

memoria de programa.

Vector de reset. Cuando ocurre un reset el contenido del PC es forzado a

cero, ésta es la dirección donde la ejecución del programa continuará

después del reset, por ello se le llama “dirección del vector de reset”.

Vector de interrupción. Cuando la CPU acepta una solicitud de

interrupción ejecuta un salto a la dirección 0004h, por lo cual a esta se le

conoce como “dirección del vector de interrupción”. El registro PCLATH no

es modificado en esta circunstancia, por lo cual habrá que tener cuidado al

manipular el PC dentro de la rutina de atención a la interrupción (Interrupt

Service Routine (ISR)).

o Manejo del contador de programa (PC). El registro contador del

programa (PC) especifica la dirección de la instrucción que la CPU

buscará (fetch) para ejecutarla. El PC consta de 13 bits, separados en

dos partes: como se muestra en la figura siguiente.

Figura 80. Registro contador de programa

El byte de orden bajo es llamado el registro PCL, mientras que el byte

de orden alto es llamado registro PCH. Este último contiene los bits

PC<12:8> y no se puede leer o escribir directamente. Todas las

actualizaciones al registro PCH deben ser hechas a través del registro

PCLATH. En las siguientes figuras se ilustran las cuatro situaciones y

las maneras correspondientes en que el PC puede ser actualizado.

Page 220:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

217

Figura 81. Actualización del registro PCH a través del registro PCLATH <4:0>

Figura 82. Actualización del registro PCH a través del registro PCLATH <4:3>

Figura 83. Asignación del contenido del registro PC a la pila

PCLATH

PC

12 11 10 8 7 0

PCLATH <4:3> 2

Código de operación <10:0>

11

Pila (13 bits x 8)

Tope de la pila

Situación 3 – Instrucción CALL

PCH PCL

13

PCLATH

PC

12 PCH 8 7 PCL 0

PCLATH <4:0> 5

Resultado de la ALU

8

Pila (13 bits x 8)

Tope de la pila

Situación 1 - Instrucción con PCL como destinación

PCLATH

PC

12 11 10 8 7 0

PCLATH <4:3> 2

Código de operación <10:0>

11

Pila (13 bit x 8)

Tope de la pila

Situación 2 – Instrucción GOTO

PCH PCL

Page 221:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

218

Figura 84. Asignación del contenido de la pila al registro PC

Nota 3: PCLATH nunca es actualizado con el contenido de PCH.

o Paginación. Para saltar entre una página y otra, los bits más

significativos del PC deberán ser modificados. Debido a que las

instrucciones GOTO y CALL sólo pueden direccionar un bloque de 2K

(pues usan una dirección de 11 bits) deben existir otros dos bits que

completen los 13 bits del PC para moverse sobre los 8K de memoria de

programa.

Estos dos bits extra se encuentran en el registro SFR denominado

PCLATH (Program Counter Latch High) en sus bits PCLATH<4:3>. Por

esto antes de un GOTO o un CALL el usuario deberá asegurarse que

estos bits apunten a la página deseada. Si las instrucciones se ejecutan

secuencialmente el PC cruza libremente los límites de página sin

necesidad de que el usuario escriba en el PCLATH

Memoria de la pila

La memoria de la pila es un área de memoria completamente separada de

la memoria de datos y la memoria de programa. La pila consta de 8 niveles

de 13 bits cada uno. Esta memoria es usada por la CPU para almacenar las

PCLATH

PC 12 11 10 8 7 0

Código de operación <10:0>

11

Pila (13 bits x 8)

Tope de la pila

Situación 4 – Instrucción RETURN, RETFILE, O RETLW

PCH PCL

13

Page 222:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

219

direcciones de retorno de subrutinas. El apuntador de la pila no es ni legible

ni escribible.

Cuando se ejecuta una instrucción CALL o es reconocida una interrupción

el PC es guardado en la pila y el apuntador de la pila es incrementado en 1

para apuntar a la siguiente posición vacía. A la inversa, cuando se ejecuta

una instrucción RETURN, RETLW o RETFIE el contenido de la posición

actual de la pila es colocado en el PC.

Nota 4: PCLATH no se modifica en ninguna de estas operaciones.

Nota 5: Cuando el apuntador de la pila ya está en la posición 8 y se ejecuta

otro CALL se reinicia a la posición 1 sobrescribiendo en dicha posición. No

existe ningún indicador que avise de esta situación. Así que el usuario

deberá llevar el control para que esto no ocurra.

La Memoria de Datos. La memoria de datos consta de dos áreas

mezcladas y destinadas a funciones distintas:

o Registros de Propósito Especial (SFR)

o Registro de Propósito General (GPR)

Los SFR son localidades asociadas específicamente a los diferentes

periféricos y funciones de configuración del PIC y tienen un nombre

específico asociado con su función. Mientras que los GPR son memoria

RAM de uso general.

E.1.8 Bancos de memoria. Toda la memoria de datos está organizada en 4

bancos numerados 0, 1, 2 y 3. Para seleccionar un banco se debe hacer uso de

los bits del registro STATUS<7:5> denominados IRP, RP1 y RP0.

Page 223:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

220

Hay dos maneras de acceder a la memoria de datos: direccionamiento directo e

indirecto. La selección de bancos se basa en las siguientes tablas.

Tabla 15. Selección del banco mediante el direccionamiento indirecto

Tabla 16. Selección del banco mediante el direccionamiento directo

Direccionamiento Directo (RP1:RP0)

Banco

Cada banco consta de 128 bytes (de 00h a 7Fh). En las posiciones más bajas de

cada banco se encuentran los SFR, y arriba de éstos se encuentran los GPR.

Toda la memoria de datos está implementada en Ram estática.

Direccionamiento Directo. Para acceder una posición de memoria

mediante direccionamiento directo, la CPU simplemente usa la dirección

indicada en los 7 bits menos significativos del código de operación y la

selección de banco de los bits RP1:RP0 como se ilustra en la siguiente

figura.

Direccionamiento Indirecto (IRP)

Banco

Page 224:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

221

Figura 85. Direccionamiento directo e indirecto de la memoria de datos.

Direccionamiento indirecto. Este modo de direccionamiento permite

acceder una localidad de memoria de datos usando una dirección de

memoria variable a diferencia del direccionamiento directo, en que la

dirección es fija. Esto puede ser útil para el manejo de tablas de datos.

Registro INDF. En la figura anterior se muestra la manera en que esto se

realiza. Para hacer posible el direccionamiento indirecto se debe usar el

registro INDF. Cualquier instrucción que haga un acceso al registro INDF en

realidad accesa a la dirección apuntada por el registro FSR (File Select

Register).

La selección de banco en el caso de direccionamiento indirecto se realiza

mediante los bits IRP (STATUS<7>) y el bit 7 del registro FSR, como se

muestra en la figura 85.

7 Registro FSR 0 RP1: RP0 6 IRP 0

Banco Seleccionado

Ubicación seleccionada

Banco Seleccionado

Ubicación seleccionada

Memoria de Datos

00 01 10 11

Banco 0 Banco 1 Banco 2 Banco 3

00h

7Fh

00h

7Fh

00h

7Fh

00h

7Fh

Direccionamiento Directo Direccionamiento Indirecto

Page 225:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

222

El registro INDF mismo al leerse de manera indirecta (con FSR=0)

producirá un cero. Y al escribirse de manera indirecta no es afectado.

A continuación se muestra un ejemplo del uso de este direccionamiento

para limpiar las localidades RAM 20h a 2Fh.

Ejemplo 1: borrado de un bloque de memoria de datos desde la localidad

20h a la localidad 2f h.

MOVLW 0X20 ; Carga el valor del apuntador a la RAM.

MOVWR FSR ; Inicializa apuntador.

CLRF INDF ; limpia la localidad apuntada por FSR.

INCF FSR, F ; incrementa apuntador.

BTFSS, FSR, 4 ; si ya terminó escapa a continuar.

GOTO ; Si no repite

Continuar...

Archivo de Registros. Aunque el archivo de registros en RAM puede

variar de un PIC a otro, la familia del PIC16F87x coincide casi en su

totalidad. En la tabla 17 se muestra a detalle el mapa de este archivo de

registros y su organización en los cuatro bancos que ya se describieron.

Page 226:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

223

Tabla 17. Archivo de registros del PIC 16F87X

Dirección Registro

Dirección Registro

Dirección Registro

Dirección Registro

Direcc. Indirecto (*)

00h Direcc. Indirecto (*)

80h Direcc. Indirecto (*)

100h Direcc. Indirecto (*)

180h

TMR0

01h OPTION_REG 81h TMR0 101h OPCION_REG 181h

PCL 02h PCL 82h PCL 102h PCL 182h

STATUS 03h STATUS 83h STATUS 103h STATUS 183h

FSR 04h FSR 84h FSR 104h FSR 184h

PUERTO A 05h TRISA

85h 105h 185h

PUERTO B 06h TRISB 86h PUERTO B 106h TRISB 186h

PUERTO C

07h TRISC(1)

87h 107h 187h

PUERTO D(1) 08h TRISD

(1) 88h 108h 188h

PUERTO E (1)

09h TRISE 89h 109h 189h

PCLATH 0Ah PCLATH 8Ah PCLATH 10Ah PCLATH 18Ah

INTCON 0Bh INTCON 8Bh INTCON 10Bh INTCON 18Bh

PIR1 0Ch PIE1 8Ch EEDATA 10Ch EECON1 18Ch

PIR2 0Dh PIE2 8Dh EEDR 10Dh EECON2 18Dh

TMR1L 0Eh PCON 8Eh EEDATH 10Eh Reservado(2)

18Eh

TMR1H 0Fh 8Fh EEADRH 10Fh Reservado(2)

18Fh

TICON 10h 90h

Registros de propósito general 16 bytes

110h

Registros de propósito general 16 bytes

190H

TMR2 11h SSPCON2 91h 111h 191h

T2CON 12h PR2 92h 112h 192h

SSPBUF 13h SSPADD 93h 113h 193h

SSPCON 14h SSPSTAT 94h 114h 194h

CCPR1L 15h 95h 115h 195h

CCPR1H 16h 96h 116h 196h

CCP1CON 17h 97h 117h 197h

RCSTA 18h TXSTA 98h 118h 198h

TXREG 19h SPBRG 99h 119h 199h

RCREG 1Ah 9Ah 11Ah 19Ah

CCPR2L 1Bh 9Bh 11Bh 19Bh

CCPR2H 1Ch 9Ch 11Ch 19Ch

CCP2CON 1Dh 9Dh 11Dh 19Dh

ADRESH 1Eh ADRESL 9Eh 11Eh 19Eh

ADCON0 1Fh ADCON1 9Fh 11Fh 19Fh

Registros de propósito general 96 bytes

20h . . . 7Fh

Registros de propósito general 80 bytes

A0h… EFh

Registros de propósito general 80 bytes

120h… 16Fh

Registros de propósito general 80 bytes

1A0 h… 1EFh

Accesos 70h-7Fh F0h… FFh

Accesos 70h -7Fh 170h… 17Fh

Accesos 70h -7Fh 1E0h 1FFh

Banco 0 Banco 1 Banco 2 Banco 3

Ubicación de memoria de datos sin implementar, se leé “0”. * No es un registro físico

Nota 1: estos registros no son implementados en el PIC 16F876.

2: estos registros son reservados y deben mantenerse limpios.

Page 227:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

224

E.2 CONVERSOR ANÁLOGO DIGITAL

Los microcontroladores PIC16F87x poseen un conversor A/D de 10 bits de

resolución y 5 canales de entrada en los modelos de con 28 pines (PIC16F873/6)

y 8 canales en los que tienen 40 pines (PIC16F877).

La resolución que tiene cada bit procedente de la conversión tiene un valor que es

función de la tensión de referencia Vref, de acuerdo con la siguiente fórmula:

Resolución = (Vref + - Vref -)/1024 = Vref /1024

Así por ejemplo, si la Vref += 5VDC y la Vref - es tierra, la resolución es de 4,8

mV / bit. Por tanto, la entrada analógica de 0 V le corresponde una digital 00 0000

0000 y para la de 5V una lógica una de 11 1111 1111. La tensión de referencia

determina los límites máximo y mínimo de la tensión analógica que se puede

convertir. El voltaje diferencial mínimo es de 2 V.

A través del canal de entrada seleccionado, se aplica la señal analógica a un

condensador de captura y mantenimiento y luego se introduce al conversor, el cual

proporciona un resultado digital de 10 bits de longitud usando la técnica de

"aproximaciones sucesivas".

El conversor A/D es el único dispositivo que puede funcionar en modo de reposo

(SLEEP), para ello el reloj del conversor deberá conectarse al oscilador RC

interno.

E.2.1 Registros de trabajo. El funcionamiento del conversor A/D requiere de la

manipulación de cuatro registros.

1° ADRESH: parte alta del resultado de la conversión

Page 228:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

225

2° ADRESL: parte baja del resultado de la conversión

3° ADCON0: registro de control 0.

4° ADCON 1: registro de control 1.

En la pareja de registros ADRESH:ADRESL se deposita el resultado de la

conversión, que al estar compuesta por 10 de los bits de dicha pareja. El registro

ADCON0 controla la operación del conversor A/D, mientras que el ADCON1 sirve

para configurar los pines de la puerta A como entradas analógicas o E/S digitales.

Registro ADCON0. Los bits ADCON0 <7:6> sirven para seleccionar la

frecuencia de reloj que se emplea en la conversión, con la siguiente

asignación.

Figura 86. Asignación de los bits del registro de control ADCON0

ADCS1 ADCS2 CHS2 CHS1 CHS0 GO/DONE __ ADON

7 6 5 4 3 2 1 0

Se designa como TAD el tiempo que dura la conversión de cada bit y en el

caso de trabajar con valores digitales de 10 bits, se requiere un tiempo de

12•TAD. El valor de TAD se selecciona por software mediante estos bits

(ADCS1: ADCS0) y en los PIC16F87x no debe ser menos de 1,6

microsegundos.

Figura 87. Asignación de los bits ADCS1:0 del registro de control ADCON0

Frecuencia Fosc/2 Fosc/8 Fosc/32 FRC (procede del

oscilador RC interno)

ADCS1: ADSC0 00 01 10 11

Page 229:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

226

Los bits CHS2, CHS1, CHS0 seleccionan el canal por el que se introduce la

señal analógica a convertir, de acuerdo con la siguiente tabla.

Tabla 18. Asignación de los bits CHS2:0 del registro de control ADCON0

CHS2, CHS1, CHS0 CANAL

000 Canal 0 (RA0/AN0)

001 Canal 1(RA1/AN1)

010 Canal 2(RA2/AN2)

011 Canal 3 (RA3/AN3)

100 Canal 4 (RA5/AN4)

101 Canal 5 (RE0/AN5). Los PIC 16F87X de 28 pines no tienen este canal

110 Canal 6 (RE1/AN6)

111 Canal 7 (RE2/AN7)

El bit GO/DONE# es el bit de estado de la conversión. Poniéndolo a 1 se

inicia la conversión y mientras esté a 1 está realizándose dicha operación.

Cuando GO/DONE# pasa a 0 confirma el final de la conversión y la puesta

del resultado en la pareja de registros ADRESH: ADRESL. El bit ADON

sirve para activar el conversor A/D poniéndolo a 1 y para inhabilitar su

funcionamiento se pone a 0.

Registro de control ADCON1.

Figura 88. Asignación de los bits del registro de control ADCON1

ADFM ___ ___ ____ PCFG3 PCFG2 PCFG1 PCFG0

7 6 5 4 3 2 1 0

Page 230:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

227

El bit de menos peso (ADFM) del registro ADCON1 selecciona el formato

de resultado de la conversión si vale 1, el resultado está justificado en el

registro ADRESH, que tiene sus 6 bits de más peso a 0; mientras que, si

vale 0 la justificación se realizará sobre el registro ADRESL, que tiene sus

6 bits de menos pesos a 0. Esto significa que los 16 bits que forman la

concatenación de ADRESH : ADRESL unas veces tiene a 0 los 6 bits de

mas peso y otra los 6 bits de menos pesos (Alineación a la derecha o a la

izquierda), como se observa en la figura:

Figura 89. Alineación izquierda y derecha del resultado digital de 10 bits

RESULTADO DE 10 BITS

JUSTIFICACIÓN A LA DERECHA JUSTIFICACIÓN A LA IZQUIERDA

Bits colocados a cero.

Los restantes cuatro bits (PCFG3-0) de ADCON1 se utilizan para configurar los

pines de los canales de entrada al conversor como analógicas o como E/S

digitales, de acuerdo con la siguiente tabla.

7 1 0 7 0 7 0 7

6 0

ADFM = 1 ADFM = 0

ADRESH ADRESL ADRES

ADRESH ADRESL

Page 231:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

228

Tabla 19. Configuración de los pines del PIC según el valor de <PCFG3 - 0 >

PCFG3-0

AN7/ RE2

AN6/ RE1

AN5/ RE0

AN4/ RA5

AN3/ RA3

AN2/ RA2

AN1/ RA1

AN0/ RA0

VREF+ VREF- CHAN/ REFS

0000 A A A A A A A A VDD Vss 8/0

0001 A A A A VREF+ A A A RA3 Vss 7/1

0010 D D D A A A A A VDD Vss 5/0

0011 D D D A VREF+ A A A RA3 Vss 4/1

0101 D D D D A D A A VDD Vss 3/0

011X D D D D VREF+ D A A RA3 Vss 2/1

1000 D D D D D D D D VDD Vss 0/0

1001 A A A A VREF+ VREF- A A RA3 RA2 6/2

1010 D D A A A A A A VDD Vss 6/0

1011 D D A A VREF+ A A A RA3 Vss 5/1

1011 D D A A VREF+ VREF- A A RA3 RA2 4/2

1100 D D D A VREF+ VREF- A A RA3 RA2 3/2

1101 D D D D VREF+ VREF- A A RA3 RA2 2/2

1110 D D D D D D D A VDD Vss 1/0

1111 D D D D VREF+ VREF- D A RA3 RA2 1/2

E.2.2 Estructura interna del conversor análogo/digital. En la figura 90 se

observa la forma como se habilitan/deshabilitan los 8 canales del conversor

mediante la configuración de los bits <CHS2-0> del registro ADCON0 y si estos

funcionarán como canales de entrada análogas ó E/S digitales de acuerdo con la

configuración de los bits <PCFG3-0> del registro ADCON1 vistos en la tabla

anterior.

Page 232:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

229

Figura 90. Estructura interna del convertidor análogo digital

Page 233:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

230

ANEXO F

FUNCIONAMIENTO DEL BUS I2C

EN EL MÓDULO RABBIT Y

PIC 16F877

Page 234:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

231

INTRODUCCIÓN

Este anexo describe cómo funciona el bus serial I2C en el microprocesador Rabbit

2000 en modo maestro y en el microcontrolador PIC 16F877 en modo maestro y

esclavo, siendo este el dispositivo que se empleó para adaptar un conversor A/D

al módulo de control Rabbit RCM2200.

Page 235:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

232

F.1 CONCEPTOS FUNDAMENTALES DEL BUS I2C

I2C es un bus serial síncrono diseñado por Philips, que puede compartirse por

varios dispositivos periféricos (microcontroladores, RAM, EEPROM, ADC, etc)

mediante un protocolo que evite el bloqueo de la información y garantice la

comunicación entre todos ellos. La conexión física es realizada por dos líneas,

SDA (datos) y SCL (reloj), las cuales transportan la información entre los

diferentes dispositivos conectados al bus. Cada dispositivo se identifica por una

única dirección y puede transmitir o recibir dependiendo de la operación que se

vaya a realizar.

Los dispositivos pueden clasificarse en maestro (master o principal) o esclavo

(slave o secundario). El maestro es el encargado de iniciar y terminar la

transferencia de información y el que genera la señal de reloj SCL, cuya

frecuencia es de hasta 100 KHz. Los esclavos son los dispositivos direccionados

por el maestro, mediante siete bits (dirección del esclavo). La línea de datos SDA

es utilizada tanto por el maestro como por el esclavo para la transmisión de

información.

Cuando el maestro inicia una trama de comunicación, envía a través de la línea de

datos la dirección del esclavo con el que se pretende establecer una

comunicación. Todos los esclavos reciben dicha dirección, pero uno solo

responderá y el resto permanece en espera de que se inicie una nueva trama.

Las dos líneas SCL y SDA están conectadas a la línea de alimentación positiva

VDD+, a través de resistencias cuya misión es asegurar una mínima carga de la

línea, necesaria para que la transmisión sea estable ante posibles "ruidos"

externos. Estas resistencias son llamadas de pull-up, y su valor está comprendido

Page 236:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

233

entre 1K y 10K dependiendo de la tensión de alimentación y de los dispositivos

conectados. Otra función que tienen estas resistencias es la de permitir que tanto

la línea de datos como la de reloj sean bidireccionales, ya que cualquier

dispositivo (maestro o esclavo) puede forzar a nivel bajo la línea o dejarla libre,

teniendo entonces un nivel alto en la línea, siendo leída por los otros dispositivos.

Esto que en principio no parece muy útil en la línea de reloj, es fundamental

cuando el sistema tiene conectado más de un maestro (multi-maestro).

Los bits de datos sobre el bus pueden transferirse a una velocidad de 100 Kbits/s.

La capacidad máxima en el bus es de 400 pF y el número de dispositivos no debe

superarla.

Figura 91. Conexiones al bus I2C

F.1.1 Condiciones de inicio (star) y parada (parada). Existen dos situaciones

únicas que son definidas como las condiciones de inicio (Star) y parada (Stop),

que son generadas por el maestro, para iniciar y finalizar toda transferencia de

datos. La condición de inicio esta determinada por una transición de alto (1 lógico)

a bajo (0 lógico) en la línea SDA (flanco descendente) al tiempo que SCL

permanece a nivel alto, mientras que una transición de bajo a alto (flanco

SDA (datos)

EEPROM RAM MICROCONTROLADOR

SCL (reloj)

Rp Rp

+VDD

Page 237:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

234

ascendente) sobre SDA al tiempo que SCL está a nivel alto determina la condición

de parada. El bus se considera ocupado tras la condición de inicio y, se considera

libre, cierto tiempo después de la condición de parada cuando SDA y SCL están a

nivel alto. Lo anterior se puede ver claramente en la siguiente figura.

Figura 92. Condiciones de inicio y parada de I2C

F.1.2 Transferencia de datos.

Formato del Byte. Todos los bytes colocados sobre la línea SDA deben

constar de 8 bits. Cada byte va seguido de un bit de reconocimiento, ACK,

y comienza por el bit de más peso.

Entre un byte y el siguiente puede haber un tiempo <<t>> de espera que se

puede aprovechar para por ejemplo dar servicio a una interrupción. En este

caso, la línea SCL se mantiene a <<0>> para forzar al transmisor a un

estado de espera.

Reconocimiento. El bit de acuse recibo o reconocimiento se produce con

el noveno pulso de reloj (al inicio de la trama tras los bits de la dirección + el

bit R/W#, o durante la trama tras los 8 bits de datos) y es obligatorio en la

transferencia de cada byte. El transmisor pone la línea SDA a nivel alto

durante dicho pulso del reloj. El receptor, por su parte, pone a <<0 lógico>>

SDA durante el pulso de reloj correspondiente al ACK y lo mantiene estable

Condición de inicio Condición de parada

Page 238:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

235

durante todo el periodo de dicho pulso. En la siguiente figura se representa

la formación del bit ACK.

Figura 93. Bit de reconocimiento ACK

F.1.3 Formato. Tras la condición de inicio (S), el maestro envía la dirección del

esclavo al que se quiere dirigir. A esta dirección de 7 bits se añade el bit de

recepción/transmisión o lectura/escritura (R/W). Si R/W=0 será una lectura y si

R/W = 1 será transmisión o escritura. A continuación del bit R/W, se envía un bit

de reconocimiento (ACK) desde el esclavo. Después de estos bits, se transmiten

los datos, en grupos de 8 bits cada uno y al finalizar cada byte de dato se inserta

un bit de reconocimiento (ACK), que en este caso puede ser producido por el

esclavo o por el maestro. Para terminar la trama el maestro generará el bit de

parada (P). Si el maestro aún desea comunicar por el bus, puede generar otra

condición de inicio y direccionar otro esclavo sin generar previamente la condición

de parada. Lo anterior puede verse claramente en la figura 94.

Figura 94. Formato de transmisión de datos de I2C

S DIR. ESCLAVO R/W# ACK DATO ACK DATO ACK P

1 = Lectura 0 = Escritura

Datos trasferidos (n Bytes + ACK)

Page 239:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

236

Tras el primer ACK enviado por el esclavo, el maestro transmisor se convierte en

receptor y esclavo receptor en transmisor.

F.2 FUNCIONAMIENTO DE I2C EN EL MICROPROCESADOR RABBIT

En el microprocesador Rabbit 2000 el protocolo I2C se implementa a través de

funciones predefinidas en la librería I2C.lib de Dynamic C. Estas funciones

manejan el aspecto genérico para una interfaz I2C, pudiendo ser programadas

para desarrollar controladores (drivers) de comunicación para un dispositivo

especifico que soporte I2C, en este caso el microcontrolador PIC 16F877.

El microprocesador Rabbit trabaja en modo maestro, encargándose de manejar

las líneas SDA para transmitir y recepcionar la información, y la SCL para

controlar el reloj. Estas dos líneas están implementadas en los pines PD4 = SCL

y PD5=SDA del puerto paralelo D, ya que éste tiene capacidades de colector

abierto. Sin embargo se puede utilizar cualquiera de los otros puertos paralelos

del Rabbit 2200, siempre y cuando se configure la librería I2C para soportar estos

cambios. La siguiente figura muestra las conexiones de SDA y SCL en el Rabbit y

el microcontrolador PIC 16F877.

Figura 95. Conexiones de SDA y SCL de Rabbit 2000 y el PIC 16f877

+VDD

Maestro Esclavo

PIC 16F877 PD4

PD5 SDA

SCL

RC4/SDA

RC3/SCL

R

p R

p

Rabbit 2000

Page 240:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

237

F.2.1 Secuencia de pasos en una transmisión I2C en Rabbit. Para habilitar los

pines SCL y SDA en el Rabbit, primeramente se coloca la función i2c_init() antes

de cualquier otra función I2C, con el fin de inicializar el modo maestro de

transmisión. A partir de este momento la línea de datos y de reloj quedan

configuradas para soportar el protocolo I2C.

Luego, mediante las funciones i2c_start_tx() y i2c_stop_tx() se definen las

condiciones de inicio (star) y parada (stop) respectivamente, que determinan el

inicio y final de toda transmisión de datos entre el maestro y esclavo.

Después de haber establecido el inicio de la transmisión, el maestro debe

direccionar al esclavo por medio de la función i2c_wr_wait(), la cual reintenta

escribir una dirección hasta que el esclavo responda con un bit de reconocimiento

ACK.

Posteriormente, se envía un dato de 8 bits al esclavo, utilizando la función

i2c_write_char(). Cada vez que se envía el byte de dato se chequea si el esclavo

pone SDA a bajo (0 lógico) para el envió del bit ACK en el noveno pulso del reloj,

este procedimiento se hace implícitamente en i2c_write_char() haciendo el

llamado a la función i2c_check_ack().

Para leer o poner al módulo Rabbit en modo maestro de recepción, se emplea la

función i2c_read_char() que lee 8 bits desde el esclavo.

La función i2c_send_ack() envía un bit de reconocimiento ACK o acuse recibo al

esclavo, mientras que i2c_send_nak() envía una secuencia NAK (no generar bit

ACK).

A continuación se presenta un pequeño ejemplo del uso del protocolo I2C en el

módulo Rabbit.

Page 241:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

238

#class auto #use "i2c.lib" //I2C dirección del microcontrolador esclavo #define DIR_ESCLAVO 0xA2 //101000102 const char cad_prueba[] = "A"; //6510 = 10000012 void main() { char buf_lect[8]; auto short int err; /*SE INICIA EL MAESTRO EN MODO DE TRANSMISION*/ //Se inicia el bus I2C i2c_init(); //Inicializa la transmisión I2C para enviar la secuencia S (START), err = i2c_startw_tx(); if (err != 0 ) i2c_stop_tx(); if ((err=i2c_wr_wait(DIR_ESCLAVO))!= 0 ) /*Reintenta escribir la dir. del esclavo hasta que este responda.*/ i2c_stop_tx(); i2c_write_char(cad_prueba[0]); //envía una cadena de 8 bits al esclavo i2c_stop_tx(); /****************************************************************************/ /*SE INICIA EL MAESTRO EN MODO DE RECEPCIÓN*/ if ((err=i2c_startw_tx())!= 0) i2c_stop_tx(); //i2c_Delay(10); if ((err=i2c_startw_tx())!= 0) i2c_stop_tx(); err=i2c_read_char(buf_lect); //lee un byte desde el esclavo y lo guarda en buf_lect if (err !=0) i2c_stop_tx(); i2c_send_ack(); //se envía el bit ACK al esclavo i2c_stop_tx();

}

Page 242:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

239

F.3 FUNCIONAMIENTO DE I2C EN EL MICROCONTROLADOR PIC16F877

Para activar el bus I2C en el PIC16F877 hay que poner el bit SSPEN = 1 que es el

bit 5 del registro SSPCON. A partir de este momento los pines SDA (RC4/SDA) y

SCL (RC3/SCL) quedan configurados para soportar el protocolo I2C. Existen seis

registros para controlar el bus I2C, los cuales son:

SSPCON: registro de control

SSPCON2: registro de control 2

SSPSTAT: registro de estado

SSPBUF: buffer para los datos

SSPSR: registro de desplazamiento no accesible directamente

SSPADD: registro de dirección

Mediante el bit CKE se ponen a nivel alto los pines SDA y SCL en el modo

maestro y esclavo. Cuando CKE = 0 los niveles de dichos pines se configuran

según las especificaciones del bus I2C.

Registro SSPSTAT (Estado). Este registro contiene toda la información que

representa el estado de la transferencia de datos.

Figura 96. Bits del registro SSPSTAT

SMP

CKE

D/A #

P

S

R/W#

UA

BF

7 6 5 4 3 2 1 0

SMP: en modo maestro es un bit de muestreo que vale 1 cuando los bits de datos

se muestran al final del periodo, o SMP = 0 cuando se hace a la mitad del periodo.

Page 243:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

240

CKE: selecciona los niveles de los pines SCL y SDA en modo maestro o multi-

maestro.

D/A#: el bit D/A# (Dato/Dirección#) indica si el dato recibido es de información (1)

o es una dirección (0).

P: detecta la llegada del bit o condición de STOP, es decir P = 1

S: detecta la condición de inicio o START, se pone S = 1

R/W#: Indica si se trata de una lectura o escritura. R/W = 1 indica lectura, R/W = 0

lectura

UA: si es igual a 1, indica que la dirección es de 10 bits y que hay que cargar el

byte alto.

BF: actúa como señalizador del búfer de datos. Si BF = 1 indica que tiene un dato

y la transmisión esta en proceso sin terminar.

Registro SSPCON (Control). Todos los bits son leíbles y escribibles y se ponen

a 0 tras un reset.

Figura 97. Bits del registro SSPCON

WCOL

SSPOV

SSPEN

CKP

SSPM3

SSPM2

SSPM1

SSPM0

7 6 5 4 3 2 1 0

WCOL: es un detector de colisiones en escritura y cuando vale 1 significa que se

ha intentado escribir en SSPBUF en condiciones no válidas para el protocolo.

Page 244:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

241

SSPOV: si vale 1 indica desbordamiento, es decir, llega un byte a SSPBUF sin

haberse leído el anterior.

SSPEN: si vale 1 el puerto serie queda configurado con los pines SCL y SDA, y

pone en funcionamiento al microcontrolador en modo maestro. Si SSPEN = 0

RC3/SCL y RC4/SDA funcionan como líneas de entradas y salidas digitales.

CKP: activa el reloj en modo esclavo, no usándose en el modo maestro.

SSPM3-0: se selecciona la frecuencia del reloj y el modo de trabajo entre estos

tres posibles:

Modo I2C maestro.

Modo I2C esclavo con 7 bits para la dirección.

Modo I2C esclavo con 10 bit para la dirección.

Registro SSPCON 2.

Figura 98. Bits del registro SSPCON2

GCEN

ACKSTAT

ACKDT

ACKEN

RCEN

PEN

RSEN

SEN

7 6 5 4 3 2 1 0

CGEN: sólo se utiliza en el modo esclavo.

ACKSTAT: si es 1 significa que se ha recibido el bit ACK del esclavo.

ACKDT: es el bit de reconocimiento en el modo maestro en recepción. Si vale 0

el maestro ha transmitido el bit de reconocimiento pero, si ADKDT = 1 no lo ha

realizado.

Page 245:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

242

ACKEN: si vale 1 se inicia la secuencia de generación de la condición de

reconocimiento. Este bit se borra automáticamente por hardware.

RCEN: si vale 1 habilita el modo de recepción del maestro.

PEN: si se coloca a 1, genera la condición de parada en las líneas SCL y SDA.

RSEN: si es igual a 1, inicia la repetición de la condición de inicio.

SEN: si es igual a 1, indica la condición de inicio.

Registro SSPBUF. Este registro actúa como búfer y soporta el dato que se va a

transmitir o que se ha recibido.

Registro SSPSR (Desplazamiento). Realiza la conversión serie / paralelo y

viceversa junto al SSPBUF. Cuando se ha completado la llegada del byte, que se

recibe en SSPSR, se traspasa a SSPBUF y se activa el señalizador SSPIF. Si se

recibe otro byte antes de haber leído al SSPBUF, se activa el señalizador de

desbordamiento SSPOV (bit 6 de SSPCON).

Registro SSPADD. Este registro guarda la dirección del esclavo.

Cuando se emplean direcciones de 10 bits, el usuario debe escribir el byte alto de

la dirección con el siguiente código dónde A9:A8 son los dos bits de más peso:

1 - 1 - 1 - 1 - 0 - A9 - A8 - 0.

F.3.1 Funcionamiento del modo maestro. El trabajo en el modo maestro se

pone en marcha escribiendo los valores adecuados en los bits del registro de

control SSPCON y SSPEN = 1. Una vez puesto en funcionamiento este modo, el

usuario tiene 6 opciones:

Page 246:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

243

1a. Generar la condición de inicio.

2a. Generar la condición de repetición inicio.

3a. Escribir sobre SSPBUF para iniciar la transmisión de un dato o una dirección.

4a. Generar la condición de parada.

5a. Configurar el modo I2C en recepción.

6a. Generar la condición reconocimiento al final de la recepción de un byte de

datos.

A continuación, se describe la secuencia de pasos a realizar en una transmisión

del maestro:

1. Generar condición de inicio, poniendo SEN = 1 en SSPCON2.

2. Se pone SSPIF = 1. Se esperará a que finalice la operación de inicio antes

de empezar otra.

3. Se carga la dirección del esclavo a trasmitir en SSPBUF.

4. Se coloca en SDA la dirección del esclavo.

5. El esclavo genera el bit de reconocimiento ACK y en el maestro se escribe

el bit 1 en ACKSTAT del registro SSPCON2.

6. Se genera una interrupción al final del noveno impulso del reloj y SSPIF = 1

7. Se carga un dato de 8 bits por SDA

8. Se transmiten los 8 bits por SDA.

9. Se repite el paso 5.

10. Se repite el paso 6.

11. Se genera la condición de parada con PEN = 1 en SSPCON2.

12. Se genera una interrupción una vez completa la condición de parada.

Modo maestro en transmisión. En este modo primero se transmite la dirección

del esclavo que se carga en SSPBUF, en cuyo momento se pone el bit BF=1 del

registro SSPSTAT, colocándose en marcha el reloj e inicio de la transmisión.

Después se transmite el byte de datos, cargándose también en SSPBUF. Cada bit

Page 247:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

244

que sale por SDA lo hace en el flanco descendente del impulso de reloj en SCL.

Tras sacar los 8 bits se borra el bit BF y el esclavo debe generar el ACK en el

noveno impulso de reloj. El bit ACK se coloca en el bit ACKDT en el flanco

descendente de SCL. Tras el noveno impulso SSPIF = 1 y se detiene el generador

de frecuencia hasta que no se cargue otro dato en SSPBUF.

Modo maestro en recepción. Para habilitar este modo se pone el bit RCEN=1. El

generador de frecuencia empieza a funcionar y SCL cambia de estado en cada

periodo controlado por el decremento del contador BRG. Entonces el dato

empieza a desplazarse sobre el registro SSPSR. Al final del octavo reloj se ponen

BF = SSPIF = 1 y se transfiere el contenido de SSPSR al SSPBUF, con lo que

RCEN = 0. Cuando el buffer es leído por la CPU BF se pone a 0

automáticamente. El usuario puede enviar un bit ACK al finalizar la recepción,

escribiendo ACKEN = 1.

Cuando una dato o una dirección se carga en SSPBUF desde SSPSR, el bit BF=1

y este bit pasa a 0 cuando la CPU lee SSPBUF. El señalizador de desbordamiento

SSPOV es 1 cuando se recibe un byte en SSPSR y aún la CPU no ha leído el dato

anterior. Ahora si se escribe en SSPBUF mientras hay una recepción en progreso,

el bit WCOL se pone a 1 y el contenido del buffer no cambia.

F.3.2 Funcionamiento del modo esclavo. En el modo esclavo, los pines SCL y

SDA deben configurarse como entradas. Cuando una dirección es igual, o el dato

transferido después de una dirección igual es recibida, el hardware

automáticamente generará el pulso de reconocimiento (ACK), y entonces carga el

registro SSPBUF con el valor recibido actualmente en el registro SSPSR.

Existen ciertas condiciones que causarán que el módulo MSSP (Puerto Serial

Maestro Sincrono “Master Synchronous Serial Port”) no entregue el pulso ACK.

Puede ser una o ambas de las dos siguientes condiciones:

Page 248:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

245

a) El bit señalizador del buffer BF esta a 1 (SSPSTAT <0>) antes de que la

transmisión fuera recibida.

b) El bit de desbordamiento SSPOV esta a 1 (SSPCON <6>) antes de que la

transmisión fuera recibida.

Modo esclavo en recepción. Cuando el bit R/W# del byte de dirección es 0 y una

dirección igual ocurre, el bit R/W del registro SSPSTAT es puesto a 0. La dirección

recibida es cargada en el registro SSPBUF.

Cuando el byte de dirección desborda la condición existente, entonces, ningún

pulso de reconocimiento (ACK) es entregado. Una condición de desbordamiento

es definida cuando el bit BF es fijado a 1, o el bit SSPOV es 1.

El bit de señalización SSPIF (PIR1 <3>) debe ser colocado a 0 por software. El

registro SSPSTAT se usa para determinar el estado del byte recibido.

Modo esclavo en transmisión. Cuando el bit R/W# del byte de dirección

entrante es 1 y una dirección igual ocurre, el bit R/W# del registro SSPSTAT es

puesto a 1. La dirección recibida es cargada en el registro SSPBUF. Los pulsos

ACK se envían en el noveno bit, y la línea SCL se mantiene a bajo mientras la

CPU responde a SSPIF. La transmisión de los datos debe cargarse en el registro

SSPBUF, que también carga el registro SSPSR. Entonces, la línea SCL debe

habilitarse poniendo el bit CKP = 1 (SSPCON <4>). El maestro debe supervisar

SCL antes de confirmar otro pulso de reloj. Los dispositivos esclavos pueden estar

rechazando al maestro estirando el reloj. Los ocho bit de los datos son cambiados

en el descenso final de la entrada de SCL. Esto asegura que la señal de SDA es

válida durante el tiempo alto SCL.

Page 249:  · DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE MONITOREO Y CONTROL AUTOMÁTICO (EMBEBIDO) CON COMUNICACIÓN VIA ETHERNET BAJO EL PROTOCOLO …

246