control de dispositivos

311

Click here to load reader

Upload: luis-papa

Post on 28-Dec-2015

149 views

Category:

Documents


17 download

TRANSCRIPT

Page 1: Control de Dispositivos

UNIVERSIDAD POLITÉCNICA SALESIANA

SEDE GUAYAQUIL

FACULTAD DE INGENIERÍAS

Proyecto Final previo a la obtención del título de:

INGENIERO DE SISTEMAS

Oscar Michael Santistevan Guerrero

INGENIERO ELECTRÓNICO

Rubén Armando Puma Rodríguez

Roger Manuel Córdova Castillo

TEMA:

CONTROL INDUSTRIAL POR DISPOSITIVOS MÓVILES.

AUTORES

DIRECTOR

Ing. Raúl Álvarez.

Guayaquil, Agosto 7 del 2008

Page 2: Control de Dispositivos

I

A U T O R Í A

Las ideas y contenidos expuestos en el presente proyecto, son de exclusiva

responsabilidad de los autores.

f.......................................................

Roger Manuel Córdova Castillo

f.......................................................

Rubén Armando Puma Rodríguez

f.......................................................

Oscar Michael Santistevan G.

Guayaquil, Agosto 7 del 2008

Page 3: Control de Dispositivos

II

D E D I C A T O R I A

Al Ser Supremo que me inspiro en esta larga y difícil vida estudiantil, a mis queridos padres por sus principios, valores y apoyo incondicional, a mis hermanas, y aquel ser que me enseñó y me enseña a salir adelante siempre. Para todos ellos dedico este pequeño paso en mi vida profesional.

Roger

Este trabajo va dedicado con gran gratitud a todas aquellas personas que en su momento supieron apoyarme en mi fase estudiantil así como a mi madre que es pilar fundamental y motivo de superación para la culminación de mi carrera, a Dios que es el dador de sabiduría y a aquella persona especial que siempre estuvo y se mantiene junto a mí.

Ruben

A mi querida madre. A mi esposa quien incondicionalmente me brinda todo su apoyo.

Oscar

Page 4: Control de Dispositivos

III

A G R A D E C I M I E N T O

A todo ese cuerpo docente con espíritu salesiano que

entregaron incondicionalmente su sabiduría, para

formarnos como personas de bien, y grandes

profesionales.

Roger Córdova C.

Rubén Puma R.

Oscar Santistevan G.

Page 5: Control de Dispositivos

IV

CONTENIDO.

DECLARATORIA DE RESPONSABILIDAD

DEDICATORIA

AGRADECIMIENTO

ÍNDICE GENERAL

ÍNDICE DE FIGURAS

ÍNDICE DE TABLAS

1.- FUNDAMENTOS Y CONOCIMIENTOS GENERALES DEL HARDWARE Y COMUNICACIONES.

2.- HERRAMIENTAS DE DESRROLO PARA DISPOSITIVOS MÓVILES.

3.- DESARROLLO DEL PROYECTO: CONTROL INDUSTRIAL POR DISPOSITIVOS MÓVILES.

4.- BIBLIOGRAFÍA

5.- ANEXOS

6.- VOCABULARIO TÉCNICO

Page 6: Control de Dispositivos

V

ÍNDICE GENERAL: 1. CAPÍTULO I:

Fundamentos y Conocimientos Generales de Hardware y Comunicación.

1.1 Introducción. ....................................................................................................... 1

1.1.1 Puerto Paralelo. ............................................................................................ 2

1.1.1.1 Historia. ................................................................................................. 2

1.1.1.2 Evolución .............................................................................................. 2

1.1.1.3 Registro del puerto paralelo. ............................................................... 4

1.1.1.4 Esquema interno del puerto paralelo. .................................................... 5

1.1.1.5 Conector del puerto paralelo. ................................................................ 5

1.1.1.6 Funcionamiento ..................................................................................... 6

1.1.2 Puerto Serie. ................................................................................................. 7

1.1.2.1 Historia. ................................................................................................. 9

1.1.2.2 Registro del puerto serie. ................................................................... 10

1.1.2.3 Conector del puerto serial. .................................................................. 10

1.1.2.4 Funcionamiento ................................................................................... 11

1.1.2.4.1 Formas de transmisiones serie: ..................................................... 12

1.1.2.4.2 Servicios BIOS de puerto serie .................................................... 14

1.1.2.5 Características Eléctricas. ................................................................... 15

1.1.2.6 Estándares ........................................................................................... 16

a.- Estándar RS-422 ..................................................................................... 16

b.- Estándar RS-485 .................................................................................... 17

1.1.2.7 Protocolos. ........................................................................................... 18

1.1.2.7.1 Protocolos Industriales: ................................................................ 18

a.- Protocolos ASCII. ............................................................................... 19

b.- Protocolo HART ................................................................................. 20

c.- Protocolo Modbus ............................................................................... 21

d.- Protocolo Bristol BSAP ...................................................................... 23

1.1.2.7.2 Protocolos de Comunicación. ....................................................... 24

a.- Protocolo BSC .................................................................................... 24

b.- Protocolo DDCMP ............................................................................. 25

c.- Protocolo HDLC ................................................................................. 26

1.1.3 Puerto USB. ............................................................................................... 26

1.1.3.1 Historia del puerto USB ...................................................................... 29

Page 7: Control de Dispositivos

VI

1.1.3.2 Características generales del USB ..................................................... 31

a.- Fácil uso para los usuarios: .................................................................... 31

b.- Flexibilidad ............................................................................................ 31

c.- Ancho de banda isócrono ....................................................................... 31

d.- Robustez ................................................................................................. 32

e.- Implementación de bajo coste ................................................................ 32

1.1.3.3 Versiones del USB ............................................................................. 32

a.- Versión 1.0 ............................................................................................. 32

b.- Versión 1.1 ............................................................................................. 33

c.- Versión 2.0 ............................................................................................. 34

d.- Versión USB OTG ................................................................................. 36

e.- Versión 3.0 ............................................................................................. 38

1.1.3.4 Topología del bus ............................................................................... 39

1.1.3.4.1 La capa física ............................................................................... 40

a.- El host USB ........................................................................................ 41

b.- El controlador del host........................................................................ 42

c.- Dispositivos USB................................................................................ 43

1.1.3.4.2 La capa lógica .............................................................................. 45

1.1.3.4.3 La relación "Software del cliente-función" ................................ 46

1.1.3.5 Tipos de transferencias ........................................................................ 46

a.- Transferencias de control ....................................................................... 47

b.- Transferencias isócronas ........................................................................ 48

c.- Transferencias de interrupción ............................................................... 48

d.- Transferencias de bultos ("Bulk") .......................................................... 49

1.1.3.6 Parte Eléctrica del USB. ...................................................................... 49

a.- Identificación de la velocidad del dispositivo ........................................ 49

b.- Codificación de datos ............................................................................. 50

c.- Relleno de bits ........................................................................................ 50

d.- Sync ........................................................................................................ 50

e.- EOP ("End Of Packet") .......................................................................... 51

1.1.3.7 Parte Mecánica del USB. ................................................................... 51

a.- Cable estándar de quita y pon................................................................. 52

b.- Cable fijo de velocidad alta y media ...................................................... 52

c.- Cable fijo de velocidad baja ................................................................... 53

Page 8: Control de Dispositivos

VII

1.1.3.8 Icono USB. ......................................................................................... 53

1.1.4 Radio Frecuencia. ...................................................................................... 53

1.1.4.1 El Espectro Electromagnético ............................................................. 54

1.1.4.2 Redes Inalámbricas ............................................................................. 55

1.1.4.2.1 Modo Ad Hoc ............................................................................... 57

1.1.4.3 Módulos de Radio Frecuencia ............................................................. 57

1.1.5 Micro controladores. .................................................................................. 59

1.1.5.1 Historia ................................................................................................ 60

1.1.5.2 Partes de un micro controlador ........................................................... 60

1.1.5.3 Aplicaciones ........................................................................................ 61

1.1.5.4 Volúmenes de Ventas. ......................................................................... 63

2. CAPÍTULO II:

HHeerrrraammiieennttaass ddee ddeessaarrrroolllloo ppaarraa ddiissppoossiittiivvooss mmóóvviilleess..

2.1 Introducción al J2ME ....................................................................................... 64

2.2 Configuración ................................................................................................... 64

2.3 Perfiles .............................................................................................................. 65

2.4 MIDLet ............................................................................................................. 66

2.5 Herramienta Netbeans ...................................................................................... 67

2.5.1 Características del Netbeans 6.0 ................................................................ 67

2.5.2 Más fácil instalación y la actualización. .................................................... 69

2.5.3 Swing GUI desarrollo ................................................................................ 70

2.5.4 Perfiles. ...................................................................................................... 71

2.6 Web y Java EE. ................................................................................................ 72

2.7 Mobility ............................................................................................................ 74

2.8 SOA .................................................................................................................. 75

2.9 UML. ................................................................................................................ 77

2.10 Visual Biblioteca API. .................................................................................... 81

2.11 Dispositivos Móviles ...................................................................................... 81

a.- Computadoras de Mano ................................................................................. 81

b.- Teléfonos Celulares ....................................................................................... 81

2.11.1 Computadoras de Mano ........................................................................... 81

2.12 WIFI ............................................................................................................... 83

2.12.1 Seguridad WIFI........................................................................................ 84

Page 9: Control de Dispositivos

VIII

a.- Open Autentication. .................................................................................. 84

b.- Shared Key Authentication. ....................................................................... 84

c.- Validación de estaciones basada en dirección MAC ................................. 85

2.12.2 WEP ......................................................................................................... 85

3. CAPÍTULO III:

Desarrollo del Proyecto Control Industrial por dispositivos móviles..

3.1 Antecedentes .................................................................................................... 86

3.2 Elementos de un sistema de control ................................................................. 86

3.3 Motivación. ....................................................................................................... 88

3.4 Relaciones. ....................................................................................................... 88

3.5 Objetivos de la Tesis. ....................................................................................... 89

3.5.1 Objetivos Específicos. ............................................................................... 89

3.6 Trabajo Propuesto ............................................................................................. 89

3.7 Nuestro Sistema ................................................................................................ 90

3.7.1 Arquitectura del Sistema. ........................................................................... 91

3.7.2 Descripción general del proceso. ............................................................... 92

3.8 Hardware del sistema ....................................................................................... 94

3.8.1 Control por USB. (Adquisición y control de variables discretas.) ............ 94

3.8.1.1 Instalando Driver’s .............................................................................. 95

a.- Firmware del PIC. .................................................................................. 95

b.- Firmware del Software. .......................................................................... 97

3.8.1.2 Circuito PIC-USB. .............................................................................. 98

3.8.2 Comunicación por Radio Frecuencia de las variables. .............................. 99

3.8.2.1 Transmisor para un enlace de RF ...................................................... 100

3.8.2.2 Receptor para un enlace de RF.......................................................... 101

3.8.2.3 Receptor-Emisores en módulo PC-USB ........................................... 101

3.8.2.4 Receptor-Emisores en módulo Sistema a Controlar. ........................ 102

3.8.2.5 Detalles Técnicos HT-12D / HT-12E ............................................... 102

3.8.3 Sistema a controlar................................................................................... 103

3.8.3.1 Tanque Principal. .............................................................................. 104

3.8.3.2 Adquisición de temperatura. ............................................................. 105

3.8.3.3 Control Bombas y confirmación bombas. ......................................... 108

Page 10: Control de Dispositivos

IX

3.8.3.4 Sistema Remoto. ............................................................................... 109

3.8.3.5 Variables de Status. ........................................................................... 110

3.8.3.6 Control Principal. .............................................................................. 112

3.8.3.7 Fuente de Alimentación .................................................................... 113

3.9 Firmware del Sistema .................................................................................... 113

3.9.1 Introducción a Visual Basic ..................................................................... 113

3.9.1.1 Características Generales de Visual Basic ........................................ 114

3.9.1.2 Nociones de visual Basic .................................................................. 115

3.9.1.3 Entornos de desarrollo ...................................................................... 115

3.9.2 Descripción del Sistema........................................................................... 116

3.9.2.1 Descomposición en subsistemas. ...................................................... 116

3.9.2.2 Diseño de objetos. ............................................................................. 117

3.9.3 Herramientas de desarrollo ...................................................................... 118

3.9.3.1 Configuraciones ODBC Para MySQL .............................................. 118

3.9.3.2 Instalación de Componentes LabView.............................................. 119

3.9.3.3 Componentes utilizados en el firmware. ........................................... 122

3.9.3.4 Creación de archivo RPT mediante Crystal Report .......................... 125

3.9.4 Descripción del entorno de desarrollo en Visual Basic ........................... 128

3.9.4.1 Justificación del Firmware y su funcionamiento .............................. 128

3.10 Software y Desarrollo del Móvil. ................................................................. 132

3.10.1 Sistema MCC ......................................................................................... 133

a.- Monitoreo ................................................................................................. 133

b.- Control ..................................................................................................... 133

c.- Chat .......................................................................................................... 133

3.10.2 Arquitectura del Sistema Controlado por Dispositivos Móviles ........... 133

3.10.3 Aplicación Web, Conexión a la Base de Datos ..................................... 134

3.10.4 Creación de WebService ........................................................................ 144

3.10.5 Consumir WebServices.......................................................................... 146

4.BIBLIOGRAFÍA:

4.1 Direcciones Electrónica……………………….………………………....149

4.2 Libros…………….…..…..……………………………………….……...150

Page 11: Control de Dispositivos

X

5. ANEXOS:

ANEXO A ................................................................................................................ 151

A.1 Descripción del capítulo ........................................................................... 151

A.2 Introducción a las interfaces de usuario ................................................... 151

A.3 Descripción de Interfaces Por módulos .................................................... 152

A.3.1 Login Acceso De clave ......................................................................... 152

A.3.2 Sistema de Monitoreo ........................................................................... 153

A.3.3 Consulta por Dispositivo....................................................................... 156

A.3.4 Consulta Monitoreo por usuario ........................................................... 157

A.3.5 Consulta Monitoreo de Encendido y Apagado ..................................... 157

A.3.6 Mantenimiento de Usuario .................................................................... 158

A.3.7 Mantenimiento de Dispositivos .............................................................. 158

A.3.8 Eventos de Suceso................................................................................. 159

A.3.9 Eventos de Alertas ................................................................................ 160

A.3.10 Ventana Cascada ................................................................................... 160

A.3.11 Ventana Mosaico .................................................................................. 161

A.3.12 Ventana Vertical ................................................................................... 161

A.3.13 Ayuda del Sistema ................................................................................ 162

A.3.14 Acerca de Carolina ................................................................................ 162

ANEXO B ................................................................................................................ 163

B.1 Descripción del capítulo ........................................................................... 163

B.2 Introducción a las interfaces de usuario .................................................... 163

B.2.1 Inicio de Sesión de usuario. .................................................................. 164

B.2.2 Monitoreo .............................................................................................. 166

B.2.3 Control................................................................................................... 167

B.2.4 Chat ....................................................................................................... 168

ANEXO C ................................................................................................................ 169

C.1 Descripción del Módulo VBMPUSBAPI.bas ................................................ 169

C.2 Descripción de funcionamiento por formularios ........................................... 175

C.2.1MDI (FRMAIN) ....................................................................................... 178

Page 12: Control de Dispositivos

XI

C.2.2 SISTEMA ................................................................................................ 181

C.2.3 CONSULTAS ......................................................................................... 201

C.2.4 MANTENIMIENTO ............................................................................... 209

C.2.5 EVENTOS............................................................................................... 214

C.2.6 Ayuda ...................................................................................................... 219

ANEXO D ................................................................................................................ 222

D.1 Aplicación Web ............................................................................................. 223

D.2 Aplicación Móvil ........................................................................................... 234

ANEXO E ................................................................................................................ 253

E.1 PROGRAMA DEL PIC 18F4550 .................................................................. 254

E.2 PROGRAMA DEL PIC 16F877 .................................................................... 257

E.2 PROGRAMA DEL PIC 16F870 (Celular) .................................................... 263

ANEXO F ................................................................................................................ 266

F.1 Introducción ................................................................................................... 266

F.2 Análisis ........................................................................................................... 266

F.3 Modelo Entidad-Relación .............................................................................. 267

F.4 Dirección de Datos ......................................................................................... 268

ANEXO G ................................................................................................................ 274

G.1 Diagramas DFD ............................................................................................. 274

G1.2 Control de Dispositivos ........................................................................... 275

G.2 Diagramas IPO .............................................................................................. 276

G2.1 Diagrama IPO Detallado Monitoreo ........................................................ 277

G2.2 Diagrama IPO Detallado Control............................................................. 278

G2.3 Diagrama IPO Detallado Chat ................................................................. 279

G.3 Diagramas de Jerarquía ................................................................................. 280

ANEXO H………………………………………………………………………….279

H.1 Costo materiales eléctricos de maqueta y tubería…………….……….........279

H.2 Costos componentes electrónicos…………………………………………..280

Page 13: Control de Dispositivos

XII

H.3 Costo Total………………………………………………………………….282

5. VOCABULARIO TÉCNICO:

5.1Glosario…………………………………………………………………………283

5.2 Vocabulario…………………………………………………………………….288

Page 14: Control de Dispositivos

XIII

ÍNDICE DE FIGURAS.

Capítulo I.

1.1: Dispositivos conectados por RS-232 hacia una red Ethernet……..…….. 1

1.2 Esquema interno del puerto paralelo5………….…………………..…….. 5

1.3 Conector DB-25…………………………………………………….…….. 5

1.4 Télex.………………………………………………………………..…….. 9

1.5 Conector DB-9……………………………………………………………. 10

1.6 NS16550D.……………………………………………………………….. 11

1.7 Transmisión Síncrona…………………………………………………….. 13

1.8 Recepción Síncrona……………………………………………………….. 13

1.9 Transmisión Asíncrona…………………………………………….…….. 14

1.10 Recepción Asíncrona……………………………………………..…….. 14

1.11 Niveles de Voltaje……………………………………………………….. 15

1.12 Niveles de Tensión………………………………………………..…….. 15

1.13 Conexión DB-9………………………………………………………….. 16

1.14 Ilustración de Conexión de equipos RS-232 hacia Ethernet……..…….. 16

1.15 Ilustración de Conexión de equipos RS-422 a otros equipos…….…….. 17

1.16 Conectividad RED RS-485………………………………………..…….. 17

1.17 Esquema de conexión de enlace entre PC y PLC……………………….. 18

1.18 Ejemplo práctico de conectividad por protocolo ASCII………….…….. 19

1.19 Ejemplo práctico de conectividad por protocolo ASCII………………... 21

1.20 Aplicación práctica de una RED RS-485 hacia Ethernet…..………….. 22

1.21 Modulo de comunicación MODBUS por Radio……………………….. 23

1.22 Ejemplo práctico de conectividad por protocolo ASCII……………….. 23

1.23 Aplicación Integral………………………………………………..…….. 24

1.24 enlace mediante Protocolo BSC…………………………………..…….. 25

1.25 Velocidades de transmisión……………………………………….…….. 26

1.26 Conexión dispositivos por el puerto USB. ………………………..…….. 27

1.27 Logo Conexión USB OTG………………………………………..…….. 36

1.28 Ejemplos Conexión USB OTG………………………………………….. 36

1.29 Conector USB 2.0……………………………………………………….. 38

1.30 Conector USB 3.0……………………………………………………….. 38

1.30 Mini conector USB 3.0………………………………………………….. 38

1.31 Topología del bus……………………………………………………….. 39

1.31 División de la topología del bus………………………………….……… 40

Page 15: Control de Dispositivos

XIV

1.31.1: Cable USB…………………………………………………………….. 52

1.31.2: Cable USB Fijo……………………………………………….……….. 52

1.32: Estructura interna del cable USB………………………………....…….. 53

1.32.1 El espectro electromagnético…………………………………..……… 54

1.32.2 Frecuencia de operación………………………………………………. 55

1.33: Esquema de redes Wireless…………………………………………….. 56

1.34: Velocidad de redes Wireless…………………………………………… 56

1.35: Topología WLan………………………………………………….…….. 57

1.35.1: Modulo Transmisor…………………………………………….…….. 57

1.35.2: TWS-434………………………………………………….………….. 58

1.35.3: Modulo Receptor. ……………………………………………….…… 58

1.35.4: RWS-434……………………………………………….……………. 59

1.36: Grafica del primer integrado…………………………………………… 60

1.37: Parte del microprocesador…………………………………………….. 60

1.38: Grafica de iteración……………………………………………………. 62

1.39: Diagrama bloques Proceso Industrial. ……………………………….. 62

1.40: Ejemplo usos de los microcontroladores. …………………………….. 63

1.41: Distribución de los Microcontroladores. ……………………………… 63

Capítulo II.

2.1: Programando en Netbeans. ……………………………………………… 67

2.2: Ejemplo de código en Netbeans……………………………………….… 68

2.3: Ventana de proyectos en Netbeans………………………………………. 69

2.4: Ejemplo de Aplicación Con Base de Datos……………………………… 70

2.5: Creando un proyecto nuevo……………………………………………… 71

2.6: Interfaz de Netbeans……………………………………………………... 72

2.7: Desarrollo de un proyecto……………………………………………….. 73

2.8: Referencias en Netbeans…………………………………………………. 75

2.9: Abrir un proyecto………………………………………………………... 76

2.10: Trabajando en el proyecto…………………………………………….... 76

2.11: Ventana de opciones……………………………………………............ 78

2.12: Test de parámetros…………………………………………….............. 78

2.13: Trabajando con clases…………………………………………….......... 79

2.14: Variables……………………………………………............................. 79

Page 16: Control de Dispositivos

XV

2.15: Configuración Variables……………………………............................. 80

2.16: Arquitectura de un modulo…………………………….......................... 80

2.17: Ventana General…………………………….......................................... 80

Capítulo III.

86 3.1: Elementos Sistema de control……………………………........................ 87

3.2: Tipo de Señales…………………………….............................................. 87

3.3: Esquema de nuestro Sistema……………….............................................. 91

3.4: Descripción de Nuestro Sistema 92……………….................................... 92

3.5: Descripción del PIC 18F4550………………............................................. 95

3.6: Instalación del PIC………………............................................................. 96

3.7: Periférico conectado………………........................................................... 97

3.8: Diagrama del circuito PIC-USB………………......................................... 98

3.9: Principio de funcionamiento……………….............................................. 99

3.10: Modulo de Transmisión………………................................................... 100

3.11: Modulo de Transmisión………………................................................... 100

3.12: Fuente externa de pulsos.………………................................................ 102

3.13: Sistema de Llenado y Vaciado………………........................................ 103

3.14: Esquema general Control de Bombas…………...................................... 103

3.15: Esquema general Control de Bombas……….......................................... 104

3.16: Esquema general Control de Bombas……….......................................... 105

3.17: Diagrama flujo Temperatura………....................................................... 106

3.18: Etapa encendido-apagado bombas………............................................. 108

3.19: Sistema Remoto………......................................................................... 109

3.20: Variables del Sistema………................................................................ 110

3.21: Control Principal………........................................................................ 111

3.22: Fuente de Alimentación………............................................................. 112

3.23: Modulo del firmware……….................................................................. 115

3.24: Secuencia del Firmware……….............................................................. 116

3.25: Instalación del Driver ODBC………..................................................... 117

3.26: Gráficos de LabVIEW………................................................................ 119

3.27: Agregar componente de LabVIEW………............................................ 120

3.28: Utilización del componente de LabVIEW sobre VB 6.0…..................... 120

3.29: TexBox………..........................................………................................... 121

Page 17: Control de Dispositivos

XVI

3.30: Label………..........................................………....................................... 121

3.31: CommandButton.........................................……….................................. 121

3.32: Toolbar..…..………..........................................………............................. 121

3.33 CWSlide………..........................................………................................... 121

3.34: RichTextBox………..........................................………........................... 122

3.35: Calendar………..........................................……….................................. 122

3.36: CrystalReport………..........................................……….......................... 122

3.37: Frame………..........................................………...................................... 122

3.38: CheckBox………..........................................………............................... 122

3.39: ListBox………..........................................………................................... 123

3.40: Timer………..........................................………...................................... 123

3.41: Utilización de Crystal ......................................………............................ 124

3.42: Utilización de Crystal Report..............................………......................... 125

3.43: Agregando tablas...............................……….......................................... 125

3.44: Escoger datos de un reporte...............................……….......................... 126

3.45: Ambiente de un reporte...............................………................................. 126

3.46: Pantalla de Monitoreo del Proceso...............................………................ 129

3.47: Diagrama del sistema...............................……….................................... 131

3.48: Arquitectura del sistema...............................………................................ 132

3.49: Cargando la base de datos a nuestro sistema.....………........................... 134

3.50: Creando el driver JDBC.....………............................….........…............. 135

3.51: Creando una nueva conexión....………............................….......…......... 135

3.52: Finalizando la Conexión....………............................….........….............. 136

3.54: Creando un nuevo proyecto....………............................….........…......... 137

3.55: Colocando parámetros al proyecto....………...............................…........ 137

3.56: Creando un Web Aplicación....………............................…………....... 138

3.57: Colocando el Netbeans 138....………............................…...................... 138

3.58: Creado el Web Aplicación para la base de datos...….............................. 139

3.59: Creando el pool de conexiones....………............................…................. 139

3.60: Creando el referencia de conexión....………...............................…......... 140

3.61: Agregada la referencia de conexión....………..............................…........ 140

3.62: A tachando la referencia de conexión a tu aplicación..................…........ 141

3.63: Registrando servidor de aplicación................…...................................... 141

3.64: Haciendo la clase en java con las aplicación................…........................ 142

3.65: Haciendo la clase en java con las aplicación................…........................ 142

Page 18: Control de Dispositivos

XVII

3.66: Creando un web service................…....................... ................................ 143

3.67: Agregando una operación................…..................................................... 143

3.68: Nombre y tipo de operación................…................................................. 144

3.69: Creando un nuevo servicio................…................................................... 144

3.70: Creando un consumidor del web service................….............................. 145

3.71: Creando un Cliente................…............................................................... 146

3.72: Parámetros del Cliente................…......................................................... 146

3.73: Finalización la creación de Consumidor de WEB........…....................... 147

ANEXO A

A1.1: Pantalla de acceso................….............................................................

151

A1.2: Pantalla de error de usuario................…..............................................

151

A1.3: Pantalla de ingreso de usuario/clave................…................................. 152

A1.4: Pantalla de acceso al sistema.…...........................................................

152

A1.5: Error si no hay dispositivo (PIC) conectado en el USB.…...................

152

A1.6: Monitoreo Básico del proceso.….......................................................... 153

A1.7: Pantalla de monitoreo.…......................................................................

154

A1.8: Pantalla de problema en las bombas.…................................................

154

A1.9: Continua proceso.…........................…................................................. 155

A1.10: Consulta por usuario.….........................…........................................

156

A1.11: Consulta por dispositivo encendido y apagado.…............................

156

A1.12: Mantenimiento de usuario.…..........…............................................... 157

A1.13: Mantenimiento de dispositivo.….........................…..........................

157

A1.14: Evento de Suceso Normal.….........................…................................

158

A1.15: Evento de Alertas.….........................…............................................. 158

A1.16: Ventana en cascada.….........................…...........................................

159

A1.17: Ventanas en mosaico.….........................…........................................

159

A1.18: Ventana en Vertical.….........................…........................................... 160

A1.19: Archivo de Ayuda.….........................….............................................

160

A1.20: Información del sistema.….........................…....................................

161

ANEXO B

B1.1: Inicio de sesión de usuario.….........................….................................

163

B1.2: Mensaje de advertencia.….........................…......................................

164

B1.3: Pantalla de Bienvenida.….........................…........................................

164

Page 19: Control de Dispositivos

XVIII

B1.4: Monitoreo del sistema.….........................….........................................

165

B1.5: Opciones de software.….........................…..........................................

165

B1.6: Opciones a Tomar.….........................…...............................................

166

B1.7: Opción de Apagado General.….........................…...............................

166

B1.8: Opciones a Chat.….........................….................................................

167

B1.9: Chateo entre usuarios.….........................….........................................

167

ANEXO C

C1.1: Esquemático de los Formularios.….........................……........................

174

Page 20: Control de Dispositivos

XIX

ÍNDICE DE TABLAS:

CAPÍTULO 1

1.1: Tabla general del puerto paralelo….........................….….........................

4

1.2: Tabla de direccionamiento….........................……....................................

6

1.3: Tabla general del puerto serial….........................……..............................

10

1.4: historial de progreso del puerto USB….........................……......................

30

1.6: Periféricos que utilizan el puerto USB….........................……....................

37

1.7: Pines Cable Fijo de Velocidad Baja….........................……........................

53

1.8: Especificaciones del TWS….........................…….....................................

58

1.9: Especificaciones del RWS….........................……..................................... 59

Capítulo 3.

3.1: Descripción de entradas al PIC 18F4550...........………............….............

99

3.2: Descripción de salidas del PIC 18F4550...........…….............. ...................

99

3.3: Características Técnicas PIC...........……...................................................

112

3.4: Tipos de Variables...........……..................................................................

124

Page 21: Control de Dispositivos

1

1.- CAPÍTULO 1.

FUNDAMENTOS Y CONOCIMIENTOS GENERALES DE HARDWARE Y

SOFTWARE

En esta sección se darán detalles de los puertos paralelo, serial y USB.

Veremos configuración de los pines, como se comunican, en el caso del puerto USB

se hablara sobre la detección de dispositivos, drivers de comunicación.

Hablaremos de la comunicación por radio frecuencia, veremos arquitectura, historia,

familias de los micro controladores.

1.1 Introducción.

Hoy en día es común aprovechar los puertos de comunicación de las computadoras,

tal que existen convertidores RS-485, RS-232, RS-222 hacia Ethernet, la vanguardia

de la tecnología apunta hacia la parte inalámbrica tenemos la misma tecnología hacia

redes inalámbricas.

Figura 1.1: Dispositivos conectados por RS-232 hacia una red Ethernet.

Fuente: www.programer-isop.com.en/comunicate-struct/development/imagens%&/ Existen estándares de cableado, como por ejemplo el RS-485 que es un estándar de

múltiples puntos, con una distancia práctica de cableado de 4000 pies máximo, entre

otros que se darán a conocer más adelante.

Page 22: Control de Dispositivos

2

Hay un sinfín de protocolos de comunicación para enlazar estos puertos disponibles

en la mayoría de computadoras con tarjetas externas o algún hardware específico.

La vanguardia de la fibra óptica, cada vez más accesible en cuanto a precio está

siendo cada vez más usada dentro de las redes industriales donde demandan mayores

distancias, la inversión se centra en los convertidores de fibra-Ethernet, fibra-RS485,

fibra-RS232.

Explicaremos el funcionamiento de los puertos existentes en la computadora, tales

como el puerto paralelo, puerto serial, y actualmente el puerto USB, así como

algunos de los protocolos para tales dispositivos, estándares de cableado, ejemplos de

aplicación y comunicación.

1.1.1 Puerto Paralelo.

1.1.1.1 Historia.

En 1981, la IBM (International Business Machines) introdujo la Computadora

Personal (PC). El puerto paralelo (Standar Parallel Port SPP) estaba incluido en el

primer PC y se agregó a éste como una alternativa al bajo rendimiento del puerto

serial, para utilizarlo como controlador de las impresoras de matriz de punto de alto

desempeño. Este puerto tenía la capacidad de transmitir 8 bits de datos a la vez (del

PC a la impresora), mientras que el puerto serial lo hacía de uno en uno. En el

momento que el puerto paralelo fue presentado, las impresoras de punto fueron el

principal dispositivo externo que se conecto a éste. Al hacerse extensamente

utilizado, el puerto paralelo llegó a ser la respuesta para conectar dispositivos más

rápidos.

1.1.1.2 Evolución

Desde la introducción del PC al mercado, el puerto paralelo ha sufrido varias

modificaciones para hacerlo más veloz. Ya que el puerto original era unidireccional,

se creó el puerto bidireccional. El puerto bidireccional fue introducido con el PS/2

compatible. Este permite una comunicación de 8 bits en ambas direcciones. Algo

Page 23: Control de Dispositivos

3

interesante de notar es que el puerto original tenía la posibilidad de ser bidireccional

realizando una conexión entre dos pines de un componente electrónico que venía

incluido en éste. (Dicho de otro modo, el puerto original es bidireccional en diseño

básico, pero no en el diseño operacional). Finalmente se han creado el Enhanced

Parallel Port (EPP) y el Extended Capability Port (ECP). Estos dos últimos son al

puerto estándar como el Pentium al 286, además de ser bidireccionales.

Inicialmente el puerto paralelo se utilizó para la comunicación con impresoras.

Actualmente se utiliza también para manejar otros periféricos como CD ROM, cintas

de copia de respaldo, discos duros, tarjetas de red, protectores de copia, scanner, etc.

El puerto paralelo está formado por 17 líneas de señales y 8 líneas de tierra. Las

líneas de señales están formadas por tres grupos:

4 Líneas de control

5 Líneas de estado

8 Líneas de datos

En el diseño original las líneas de control son usadas para la interface, control e

intercambio de mensajes desde el PC a la impresora.

Las líneas de estado son usadas para intercambio de mensajes, indicadores de estado

desde la impresora al PC (falta papel, impresora ocupada, error en la impresora).

Las líneas de datos suministran los datos de impresión del PC hacia la impresora y

solamente en esa dirección. Las nuevas implementaciones del puerto permiten una

comunicación bidireccional mediante estas líneas.

Cada una de estas líneas (control, estado, datos) puede ser referenciada de modo

independiente mediante un registro.

Page 24: Control de Dispositivos

4

1.1.1.3 Registro del puerto paralelo.

El puerto paralelo tiene tres registros:

Registro de datos

Registro de estado

Registro de control

DB25 Señal Registro Tipo Activo Sentido

1 Control 0 C0- Salida Bajo Invertido

2 Dato 0 D0 Salida Alto directo

3 Dato 1 D1 Salida Alto directo

4 Dato 2 D2 Salida Alto directo

5 Dato 3 D3 Salida Alto directo

6 Dato 4 D4 Salida Alto directo

7 Dato 5 D5 Salida Alto directo

8 Dato 6 D6 Salida Alto directo

9 Dato 7 D7 Salida Alto directo

10 Estado 6 S6+ Entrada Alto directo

11 Estado 7 S7- Entrada Bajo Invertido

12 Estado 5 S5+ Entrada Alto directo

13 Estado 4 S4+ Entrada Alto directo

14 Control 1 C1- Salida Bajo Invertido

15 Estado 3 S3+ Entrada Alto directo

16 Control 2 C2+ Salida Alto directo

17 Control 3 C3- Salida Bajo Invertido

18-25 Tierra Tabla 1.1: Tabla general del puerto paralelo

Fuente: www.programer-isop.com.en/comunicate-struct/development/imagens%&/

Page 25: Control de Dispositivos

5

1.1.1.4 Esquema interno del puerto paralelo.

Figura 1.2 Esquema interno del puerto paralelo.

Fuente:www.javier-moya.com.es/pto_para/image$%&.gif 1.1.1.5 Conector del puerto paralelo.

Figura 1.3 Conector DB-25

Fuente:www.javier-moya.com.es/pto_para/imagen$%·.gif

Page 26: Control de Dispositivos

6

1.1.1.6 Funcionamiento

Explicación del funcionamiento mediante el BIOS y el MS-DOS.

IBM especificó direcciones base para el puerto paralelo estándar (dentro del espacio

de direccionamiento de Entrada/Salida del 80x86). El adaptador de impresora podría

usar la dirección base 3BCh, o más tarde 378h o 278h.

El BIOS (Basic Input Output System) de IBM crea en el momento de arranque o

POST (Power On Seft Test) una tabla en el espacio de la memoria principal (RAM)

para 4 direcciones base de puerto paralelo de impresora, estos se almacenan como 4

bytes empezando con la dirección de memoria 408h. Durante el arranque, el BIOS

comprueba si hay puertos paralelos en las direcciones base 3BCh, 378h, y 278h, en

ese orden, y almacena la dirección base de cualesquiera que hayan sido encontrados

en posiciones consecutivas de la tabla. Las posiciones que no son usadas pueden

estar en 0, o como algunos BIOS lo hacen, le colocan la dirección del primer puerto

encontrado.

Algunos programas pueden ignorar esta tabla, pero esta es usada por lo menos por el

propio BIOS (mediante la INT 17 de E/S de impresora) y por el MS-DOS.

El BIOS detecta estos puertos escribiendo AAh al registro de datos (en la dirección

de E/S Base + 0), y luego si en el registro de datos se lee AAh. Significa que hay un

puerto.

Normalmente la asignación de direcciones es como sigue:

Dirección Nombre Ubicación

3BCh LPT1 Adaptador de impresión

primario

378h LPT2 Adaptador de impresión

secundario

Tabla 1.2: Tabla de direccionamiento Fuente: www.programer-isop.com.en/comunicate-struct/development/imagens%&/

Las referencias a cada registro del puerto se realizan de la siguiente forma:

Page 27: Control de Dispositivos

7

Base (datos)=base+0

Estado=base+1

Control=base+2

Por ejemplo, si encontramos que la dirección base es 378h, entonces las direcciones

del registro de datos, estado y control serán:

Base (datos)=378h

Estado=379h

Control=37Ah

Cada una de ellas permite acceder a los siguientes bits (descritos en la tabla general):

Base (datos)=D0, D1, D2, D3, D4, D5, D6, D7

Estado=S3, S4, S5, S6, S7

Control=C0, C1, C2, C3

1.1.2 Puerto Serie.

El puerto serie está considerado como una de las conexiones externas más básicas de

un ordenador, y ha sido una parte integral de la mayoría de ordenadores durante más

de 20 años. Aunque muchos de los nuevos sistemas están prescindiendo de los

puertos serie a favor de las conexiones USB.

Esencialmente, proveen una conexión estándar y un protocolo para que puedas

conectar diferentes dispositivos. Existen ciertas diferencias con respecto a los puertos

paralelo.

Todos los sistemas operativos de los ordenadores que están es uso hoy en día,

soportan los puertos serie, ya que han estado en funcionamiento durante décadas. Los

puertos paralelos son una invención más reciente y son mucho más rápidos que los

puertos serie. Los puertos USB solo tienen unos pocos años de antigüedad, y con el

tiempo seguramente reemplazarán a los puertos serie y paralelo en los próximos

años.

Page 28: Control de Dispositivos

8

El nombre de “serie” viene por el hecho de que un puerto serie “serializa” los datos.

Esto significa que coge un byte de datos y transmite los 8 bits que contiene el byte

uno a la vez. La ventaja es que los puertos serie solo necesitan un hilo para transmitir

los 8 bits, mientras que los paralelo necesitan 8. La desventaja es que lleva 8 veces

más tiempo que si tuviera 8 hilos.

Antes de cada byte de datos, los puertos serie envían un bit de comienzo, el cual es

un único bit con un valor de 0. Después de cada byte de datos, envía un bit de parada

para señalar que el byte está completo. También envía un bit de paridad.

Los puertos serie, también llamados puertos de comunicación (COM), son bi-

direccionales. La comunicación bi-direccional permite a cada dispositivo recibir

datos a la vez que los transmite.

Los dispositivos serie usan pines diferentes para el recibir y enviar datos - usar los

mismos pines significaría que la comunicación estaría limitada a half-duplex, y que

la información viajaría en una sola dirección a la vez. Usar pines diferentes permite

una comunicación full-duplex, y puede viajar en ambos sentidos.

Los puertos serie delegan en un controlador o chip especial llamado UART

(Universal Asynchronous Receiver/Transmitter), para funcionar correctamente.

El chip UART coge la salida en paralelo del bus del sistema y la transforma en una

forma serie para que se transmita por el puerto serie. Para que funcionen más rápido,

muchos chips UART tiene integrado un buffer de 16 a 64 Kilobytes en su interior.

Este buffer permite al chip hacer un caché de datos mientras está procesando los

datos.

La conexión serie

La conexión externa de un puerto serie puede ser de nueve pines o de 25 pines.

Originalmente, el uso principal de un puerto serie era conectar un modem a un

ordenador. Un aspecto importante de las comunicaciones serie es el concepto del

control de flujo. Esto es la habilidad de un dispositivo de decirle a otro dispositivo

que pare de enviar datos por un rato. Los comandos RTS (Request to Send), CTS

Page 29: Control de Dispositivos

9

Figura 1.4 Telex

Fuente: www.google.com

(Clear To Send), DTR (Data Terminal Ready) y DSR (Data Set Ready) son

utilizados para habilitar el control de flujo.

1.1.2.1 Historia. Los diseñadores del IBM PC ya previeron la posibilidad de comunicación serie, para

lo que posibilitaron la instalación de hasta 7 puertos de comunicaciones serie

asíncronas RS-232.C (aunque es raro instalar más de dos); para atender estos puertos

dispusieron de los correspondientes servicios en la BIOS. En los primeros modelos

la electrónica necesaria no estaba incluida en la placa-base, por lo que los puertos

debían instalarse en adaptadores de tarjeta que se insertaban en cualquiera de los

zócalos disponibles.

RS-232.C significa literalmente "Recomended Standard232 revisión C" (también

conocida como EIA 232). Es un estándar publicado en 1969 por la EIA ("Electronic

Standard Association") que define las características eléctricas que deben presentar

los elementos de conexión para la comunicación serie entre ordenadores y equipos

periféricos.

Su título dice exactamente: "Conexión entre un Equipo Terminal de Datos y un

Equipo de Comunicación de Datos empleando un intercambio de datos binario

serie".

Para comprender bien algunos aspectos de las comunicaciones serie, hay que tener

en cuenta que este tipo de comunicación eléctrica precede en bastantes años a la

aparición de los ordenadores electrónicos.

La comunicación serie tiene sus raíces en el telégrafo (figura 1.4), que

posteriormente derivó en el teleimpresor (Télex), donde se utilizaron diversos

protocolos de comunicación; los más famosos el Morse, el Baudot y el ASCII.

Page 30: Control de Dispositivos

10

Posteriormente las comunicaciones serie informáticas adoptaron algunos de los usos

y costumbres existentes adaptándolos a las nuevas necesidades, empezando por su

propio sistema de códigos (ASCII), pero que conservando algunas reminiscencias de

sus ancestros telegráficos.

1.1.2.2 Registro del puerto serie.

Las señales TXD, DTR y RTS son de salida, mientras que RXD, DSR, CTS y DCD

son de entrada. La masa de referencia para todas las señales es SG (Tierra de Señal).

Finalmente, existen otras señales como RI (Indicador de Llamada), y otras poco

comunes que no se explican en este artículo por rebasar el alcance del mismo.

Numero de Pin Señal Descripción E/S En DB-25 En DB-9 1 1 - Masa chasis - 2 3 TxD Transmit Data S 3 2 RxD Receive Data E 4 7 RTS Request To Send S 5 8 CTS Clear To Send E 6 6 DSR Data Set Ready E 7 5 SG Signal Ground - 8 1 CD/DCD (Data) Carrier Detect E 15 - TxC(*) Transmit Clock S 17 - RxC(*) Receive Clock E 20 4 DTR Data Terminal Ready S 22 9 RI Ring Indicator E 24 - RTxC(*) Transmit/Receive Clock S

Tabla 1.3: Tabla general del puerto serial Fuente: www.programer-isop.com.en/comunicate-struct/development/imagens%&/

1.1.2.3 Conector del puerto serial.

Figura 1.5 Conector DB-9 Fuente: www.javier-moya.com.es/pto-serie/imagen·$%.jpg

Page 31: Control de Dispositivos

11

1.1.2.4 Funcionamiento

El ordenador controla el puerto serie mediante un circuito integrado específico,

llamado UART (Transmisor-Receptor-Asíncrono Universal). Normalmente se

utilizan los siguientes modelos de este chip: 8250 (bastante antiguo, con fallos, solo

llega a 9600 baudios), 16450 (versión corregida del 8250, llega hasta 115.200

baudios) y 16550A (con buffers de E/S). A partir de la gama Pentium, la circuitería

UART de la placa base son todas de alta velocidad, es decir UART 16550.

. Figura 1.6 NS16550D

Fuente: www.nationalsemiconductor.com

Mediante los puertos de E/S se pueden intercambiar datos, mientras que las IRQ

producen una interrupción para indicar a la CPU que ha ocurrido un evento (por

ejemplo, que ha llegado un dato, o que ha cambiado el estado de algunas señales de

entrada). La CPU debe responder a estas interrupciones lo más rápido posible, para

que dé tiempo a recoger el dato antes de que el siguiente lo sobrescriba. Sin embargo,

las UART 16550A incluyen unos buffers de tipo FIFO, dos de 16 bytes (para

recepción y transmisión), donde se pueden guardar varios datos antes de que la CPU

los recoja. Esto también disminuye el número de interrupciones por segundo

generadas por el puerto serie.

El RS-232 puede transmitir los datos en grupos de 5, 6, 7 u 8 bits, a unas velocidades

determinadas (normalmente, 9600 bits por segundo o más). Después de la

transmisión de los datos, le sigue un bit opcional de paridad (indica si el numero de

bits transmitidos es par o impar, para detectar fallos), y después 1 o 2 bits de Stop.

Normalmente, el protocolo utilizado ser 8N1 (que significa, 8 bits de datos, sin

paridad y con 1 bit de Stop).

Una vez que ha comenzado la transmisión de un dato, los bits tienen que llegar uno

detrás de otro a una velocidad constante y en determinados instantes de tiempo. Por

eso se dice que el RS-232 es asíncrono por carácter y síncrono por bit. Los pines que

portan los datos son RXD y TXD. Las demás se encargan de otros trabajos: DTR

Page 32: Control de Dispositivos

12

indica que el ordenador esta encendido, DSR que el aparato conectado a dicho puerto

esta encendido, RTS que el ordenador puede recibir datos (porque no está ocupado),

CTS que el aparato conectado puede recibir datos, y DCD detecta que existe una

comunicación, presencia de datos.

Como ya se ha visto, los parámetros que hay que configurar son: protocolo serie

(8N1), velocidad del puerto serie, y protocolo de control de flujo. Este ultimo puede

ser por hardware (el que ya hemos visto, el handshaking RTS/CTS) o bien por

software (XON/XOFF, el cual no es muy recomendable ya que no se pueden realizar

transferencias binarias). La velocidad del puerto serie no tiene por qué ser la misma

que la de transmisión de los datos, de hecho debe ser superior. Por ejemplo, para

transmisiones de 1200 baudios es recomendable usar 9600, y para 9600 baudios se

pueden usar 38400 (o 19200).

1.1.2.4.1 Formas de transmisiones serie:

Simplex: Un equipo transmite, el otro recibe.

Half-duplex: Transmiten ambos equipos pero no simultáneamente; los equipos se

alternan en la transmisión, uno transmite mientras el otro recibe.

Full-duplex: Ambos equipos transmiten simultáneamente. Para ello se requieren dos

líneas independientes, transmisión y recepción; la línea de transmisión de un equipo

se conecta a la entrada de recepción del otro y viceversa. Los puertos serie del PC

son capaces de utilizar este modo.

Síncronas: Los dispositivos que comunican se sincronizan en el momento inicial de

la transmisión y constantemente se intercambian información a una cadencia

predefinida. Con objeto de mantener la sincronización, cuando no existen datos que

enviar se transmite caracteres sin valor ("idle characters). Esta transmisión es más

rápida que la asíncrona porque no es necesario transmitir señales de inicio o fin de

dato; constantemente se recibe caracteres que pueden ser de datos o sin valor (de

relleno).

Page 33: Control de Dispositivos

13

Figura 1.7 Transmisión Síncrona.

Fuente: www.javier-moya.com.es/pto-serie/tran/imagen·$%.jpg

Figura 1.8 Recepción Síncrona.

Fuente: www.javier-moya.com.es/pto-serie/rec/imagen·$%.jpg Asíncronas: En este modo de transmisión no existe sincronización; no es necesario

enviar caracteres de relleno, pero hay que indicar cuándo empieza un dato y cuando

termina. Esto se hace incluyendo en la transmisión señales de inicio y fin de datos

(bits de "start" y "stop"). En la comunicación asíncrona, la información (cada

carácter) es enviada en el interior de un cuadro ("Frame") de tamaño variable, que

comienza con la mencionada señal de inicio y termina con la de final; es el tipo de

comunicación utilizada en los puertos serie del PC.

Page 34: Control de Dispositivos

14

Figura 1.9 Transmisión Asíncrona.

Fuente: www.javier-moya.com.es/pto-serie/asin/imagen·$%.jpg

Figura 1.10 Recepcion Asíncrona.

Fuente: www.javier-moya.com.es/pto-serie//asin/imagen·$%.jpg

1.1.2.4.2 Servicios BIOS de puerto serie

Los servicios BIOS relacionados con el puerto serie se gestionan mediante el vector

de interrupción 20 (14h); este servicio tiene 4 sub servicios numerados del 0 al 3.

Servicio 0: Inicializar el puerto; permite ajustar los parámetros de

transmisión.

Servicio 1: Enviar un carácter

Servicio 2: Recibir un carácter

Page 35: Control de Dispositivos

15

Servicio 3: Obtener el estado del puerto, tanto de funcionamiento como

estados de error.

Por lo general, la secuencia POST solo detecta los dos primeros puertos serie; como

el DOS utiliza los datos de la BIOS, salvo módulos software especiales, los

programas DOS solo pueden utilizar COM1 y COM2. Sin embargo esta limitación

no existe para Windows 98 en adelante, que pueden utilizar hasta 128 puertos.

1.1.2.5 Características Eléctricas.

Como hemos señalado, las normas y terminología de las comunicaciones serie están

muy influenciadas por sus orígenes telegráficos. Esto incluye algunas de las

definiciones utilizadas por la norma RS-232. Una curiosidad de esta norma es que la

transmisión de los caracteres ASCII se realiza empezando por el bit menos

significativo.

En la figura se muestran los niveles de tensión correspondientes a las salidas. Como

puede verse en la fig. 1.7; la lógica utilizada es poco convencional, utiliza una lógica

bipolar con tensiones negativas para los "1" lógicos.

0-lógicoEspacio

Transición(Estado

indefinido)

1-lógico(Marca)

+ 15 voltios.

+ 5 voltios.

0 Voltios referencia común

- 5 voltios.

- 15 voltios. Figura 1.11 Niveles de Voltaje

Fuente: www.electrices-ubique.com/es/imagen/”·$%&.gif

0-lógicoEspacio

Transición(Estado

indefinido)

1-lógico(Marca)

+ 15 voltios.

+ 3 voltios.

0 Voltios referencia común

- 3 voltios.

- 15 voltios.

Figura 1.12 Niveles de Tensión Fuente: www.electrices-ubique.com/es/imagen/”·$%&.gif

Page 36: Control de Dispositivos

16

Figura 1.13 Conexión DB-9 Fuente: www.google.com

1.1.2.6 Estándares

Estándar RS-232

RS-232C (fig. 2.13) es un estándar de cableado punto a punto

con una distancia práctica de cableado de 15 metros, o 50 pies,

máximo. Esto significa que sólo dos dispositivos pueden

comunicarse en una red de RS-232c, un sólo dispositivo

maestro y un sólo dispositivo esclavo, y la longitud de cable

total no debe exceder 50 pies.

Comparación la RS-232 con otras especificaciones: RS-232 (20 Kbps)

RS-530 (hasta 2Mbps)

V.35 (hasta 6 Mbps)

RS-449 (hasta 10Mbps)

HSSI (hasta 52Mbps) High Speed Serial Interface

Figura 1.14 Ilustración de Conexión de equipos RS-232 hacia Ethernet. Fuente: www.exemys.com

a.- Estándar RS-422

Es un estándar de múltiples puntos con una distancia práctica de cableado de 1000

metros, o 3280 pies, longitud total máxima. Esto significa que puede comunicarse un

maestro solamente, con hasta 10 esclavos, y la distancia total de toda la red entre

todos los dispositivos no puede exceder 1000 metros, o 3280 pies.

Page 37: Control de Dispositivos

17

El estándar RS-422 no especifica una topología de la red, pero en la práctica, una

topología de conexiones múltiples en serie con el maestro en un extremo es la única

manera de hacer la comunicación confiable.

Figura 1.15 Ilustración de Conexión de equipos RS-422 a otros equipos

Fuente: Manual del PLC DL06, 2a. edición en español, 6/07

b.- Estándar RS-485

Es un estándar de cableado de múltiples puntos, con una distancia práctica de

cableado de 4000 pies máximo. Este estándar de cableado prevé la posibilidad de

hasta 32 maestros que se comunican con hasta 32 esclavos todos dentro de la

distancia máxima de 4000 pies.

Figura 1.16 Conectividad RED RS-485 Fuente: Manual del PLC DL06, 2a. edición en español, 6/07.

Page 38: Control de Dispositivos

18

El estándar RS-485 no especifica una topología de red, pero en la práctica, una

topología de conexiones múltiples en serie con el maestro en un extremo es la única

manera de hacer la comunicación confiable.

Figura 1.17 Esquema de conexión de enlace entre PC y PLC. Fuente: Manual del PLC DL06, 2a. edición en español, 6/07

1.1.2.7 Protocolos.

No se va a entrar en detalle en los protocolos de comunicación, más bien se muestra

esta sección para indicar el uso profesional del puerto RS-232 de la PC, que es

ampliamente usada en la industria junto a sistemas SCADA profesionales

especializados en distintas áreas.

Contamos con los protocolos:

1.1.2.7.1 Protocolos Industriales:

Características:

Deben ser sistemas fáciles de reparar y mantener.

Deben poseer un alto nivel de integridad en la transferencia de datos.

Alta velocidad en la actualización de parámetros.

Industrial.• Tienen caracteristicas especiales.• La mayor parte son de propiedad privada.

Comunicación.• Por ejemplo BSC, DDCMP, HDLC

Page 39: Control de Dispositivos

19

Se va a mencionar algunos de los protocolos dejando en mención que es para

beneficio del estudiante, técnicos e ingenieros y no debe interpretarse como

publicidad o violación de derecho de autor, ya que estos protocolos son de propiedad

privada.

a.- Protocolos ASCII.

Los protocolos ASCII son muy populares debido a su simplicidad, lo cual los hace

apropiados para instalaciones sencillas, generalmente una Maestra y una Remota.

Su principal desventaja es su lentitud y su incapacidad para manejar sistemas más

complicados, por ejemplo, sistemas multipunto de más de 32 remotas.

Figura 1.18 Ejemplo práctico de conectividad por protocolo ASCII Fuente: Manual del PLC DL06, 2a. edición en español, 6/07

En la práctica podemos encontrar dos tipos de protocolo ASCII: el protocolo ASCII

para Transmisores Digitales y el protocolo ASCII ANSI X3.28-2.5-A4; este último

es un poco más elaborado. La primera versión del protocolo ANSI X3.28 apareció en

1976.

Page 40: Control de Dispositivos

20

Características

Control por Caracteres

Transmisión HDX asincrónica

Velocidades: entre 300 y 1200 bps

Interfaces: RS-232C en operación punto a punto. Si acaso se llega a utilizar

en operación multipunto, entonces hay que emplear la interfaz RS-485.

Estructura de los Formatos.

Comando desde el Procesador: Leer Datos (Read Data)

Caracteres → 1 1 1 1 1 1

# ADD R D BCC CR

Respuesta desde el Transmisor

Caracteres → 1 1 1 1 9 1 1

* ADD R D Valor del Dato BCC CR

b.- Protocolo HART

El Protocolo HART (Highway Addressable Remote Transducer) permite la

transmisión simultánea de información analógica y digital pues generalmente opera

superpuesto sobre el lazo de corriente de 4-20 mA, y utiliza una señal FSK (fig. 2.19)

para la transmisión digital binaria a 1200 bps, equivalente a un módem Bell 202

(2200 Hz para un Cero y 1200 Hz para un UNO).

Page 41: Control de Dispositivos

21

Figura 1.19 Ejemplo práctico de conectividad por protocolo ASCII

Fuente: Manual del PLC DL06, 2a. edición en español, 6/07 El Protocolo HART se utiliza típicamente en configuración punto a punto, para la

configuración remota, ajuste de parámetros y diagnóstico de dispositivos de campo

inteligentes.

Características: Control por Conteo de Bytes

Transmisión Asincrónica HDX, punto a punto y multipunto

Carácter Básico de 1 bit de arranque, 8 de información, 1 de paridad impar y

1 de paridad; NRZ

Una Maestra puede controlar hasta 15 Remotas

Permite hasta 250 variables en cada dispositivo de campo

Distancia máxima: hasta 3000 m con par trenzado apantallado calibre AWG

24; hasta 1500 m con cable multipar, par trenzado común apantallado calibre

AWG 20.

Modulación FSK, 1200 bps, con Módems Tipo Bell 202

Interfaces asociadas: RS-232D y RS-485

c.- Protocolo Modbus

Modbus es un protocolo de transmisión desarrollado por la Gould Modicon (ahora

AEG Schneider Automation) para sistemas de control y supervisión de procesos

(SCADA) con control centralizado. Utilizando este protocolo, una Estación Maestra

(MTU) puede comunicarse con una o varias Estaciones Remotas (RTU) con la

finalidad de obtener datos de campo para la supervisión y control de un proceso. El

Page 42: Control de Dispositivos

22

protocolo Modbus es muy utilizado en la industria en una gran variedad de sistemas

SCADA.

En Modbus los datos pueden intercambiarse en dos modos de transmisión: en Modo

RTU y en Modo ASCII. El Modo RTU, algunas veces denominado Modbus-B (por

Modbus Binario), es el tipo más común y es el que describiremos a continuación. En

el modo de transmisión ASCII los mensajes generalmente son de duración casi del

doble que en el modo de transmisión RTU.

Linea 1 Linea 2 TAP Linea 3 Linea 4 TIC

8 7 6 2 1 5Modbus Address

RS 485 (MODBUS)

10.175.132.6

Convertidor Multinet

Figura 1.20 Aplicación práctica de una RED RS-485 (MODBUS) hacia Ethernet. Fuente: Los Autores.

Aunque el Protocolo Modbus es anterior al desarrollo del Modelo ISO/OSI, se le

puede identificar tres niveles: un nivel de Capa Física, un nivel de Capa Enlace y un

nivel de Aplicación. En Modbus no se define una determinada interfaz de Capa

Física y el usuario puede elegir entre alguna de las interfaces vistas en el Capítulo III

que sea apropiada para las velocidades de transmisión definidas en el protocolo. A

continuación vamos a describir la Capa Enlace de Modbus. La descripción de la

Capa Aplicación queda fuera de los límites que nos hemos impuesto.

Características: Control por Conteo de Caracteres

Transmisión FDX/HDX asincrónica

Carácter Básico NRZ de ocho dígitos de información (transmitidos como dos

caracteres hexadecimales de cuatro dígitos), un dígito de arranque, un dígito

de paridad y un dígito de paridad; si no hay paridad, se toman dos dígitos de

paridad

Una Maestra puede controlar hasta 247 Remotas

Topología en Estrella

Page 43: Control de Dispositivos

23

Interfaces de Capa Física: RS-232D, RS-422A, RS-485, o lazo de 4-20 mA

Velocidades de Transmisión: 1200 a 19200 bps

Medios de Transmisión: par trenzado, cable coaxial, radio

Figura 1.21 Modulo de comunicación MODBUS por Radio

Fuente: www.prosoft-technology.com

d.- Protocolo Bristol BSAP

El Protocolo BSAP (Bristol Synchronous/Asynchronous Protocol) de la Bristol

Babcock Instruments/Systems es un protocolo industrial utilizado para el control y

supervisión de sistemas SCADA. Es un protocolo muy completo con una topología

tipo árbol con un máximo de seis niveles y 127 nodos por nivel; a su vez, cada nodo

puede controlar hasta 127 dispositivos remotos.

Cada nodo tiene una dirección única basada en su posición en la red y puede ser

maestra de los niveles inferiores o esclava de los niveles superiores. Cumple con el

Modelo ISO/OSI en las cuatro primeras capas, fig. 1.22

Figura 1.22 Ejemplo práctico de conectividad por protocolo ASCII

Fuente: Manual del PLC DL06, 2a. edición en español, 6/07 Características del Protocolo Control por Caracteres (Modo Transparente)

Page 44: Control de Dispositivos

24

Transmisión Asincrónica/Sincrónica HDX y FDX

Operación en Modo de Respuesta Normal y Par a Par

Carácter básico codificado en ASCII sin bit de paridad

Interfaces de Capa Física: RS-232C, RS-422A, RS-423A y RS-485

Velocidades de transmisión: Sincrónico: 187,5 Kbps, 1 Mbps

Asincrónico: 300 bps a 38,4 Kbps

Medios de transmisión: par trenzado, cable coaxial, radio

Conclusión: Para poder visualizar los equipos dentro de una PC debemos considerar

el protocolo de comunicación, el medio por el cual se van a comunicar, la aplicación

en que se va a desarrollar, lo más importante es los drivers de comunicación de los

dispositivos. En este caso mostramos una esquema de la firma automation direct,

recoge las señales de varios PLC y dispositivos, vemos convertidor de RED-485 a

Ethernet, comunicación RS-232 directa al PC, ejemplo lo expuesto anteriormente.

Figura 1.23 Aplicación Integral

Fuente: www.automationdirect.com/dl205

1.1.2.7.2 Protocolos de Comunicación.

a.- Protocolo BSC Se ha desarrollado toda una variedad de protocolos de control por caracteres, pero el

más conocido es el Protocolo BSC (Binary Synchronous Communications)

desarrollado por la IBM; a este protocolo se le denomina también Protocolo BISYN.

Page 45: Control de Dispositivos

25

Este protocolo utiliza ciertos caracteres de control para delimitar los diferentes

campos y para el control de sus funciones propias.

El protocolo BSC es un protocolo sincrónico que opera en HDX y requiere un

reconocimiento para cada trama transmitida antes de enviarse la trama siguiente.

Este protocolo está diseñado para trabajar en punto a punto o en multipunto con una

sola estación de control o estación primaria; esta es la denominada operación

Maestra-Esclava.

Los caracteres de control en el protocolo BSC son los siguientes por orden

alfabético: ACK, DLE, ENQ, EOT, ETB, ETX, NAK, SOH, STX y SYN.

Estos diez caracteres están definidos en los Códigos ASCII, EBCDIC y en el

Transcódigo de 6 Dígitos (Six Bit Transcode).

Figura 1.24 enlace mediante Protocolo BSC Fuente: Folleto Protocolos de Comunicación

b.- Protocolo DDCMP La principal desventaja del protocolo BSC es la complicación que se produce como

resultado de los procedimientos especiales utilizados para asegurar la transparencia.

Este problema se ha resuelto en el Protocolo DDCMP (Digital Data Communication

Message Protocol) desarrollado por la DEC (Digital Equipment Corporation), en el

cual mediante el conteo de los caracteres u octetos contenidos en el campo

INFORMACION se ha eliminado la utilización de DLE y de otros caracteres de

control.

Page 46: Control de Dispositivos

26

El Protocolo DDCMP es un protocolo general y puede utilizarse en sistemas HDX y

FDX, serie o paralelo, asincrónicos y sincrónicos, punto a punto y multipunto.

c.- Protocolo HDLC El protocolo SDLC se había convertido en un “protocolo de facto” por la cantidad de

aplicaciones en donde se utilizaba, y cuando la IBM lo presentó a la ISO fue

aceptado y con muchas modificaciones que mejoraron sus prestaciones, se publicó

en 1976 con el nombre de Protocolo HDLC (High-Level Data Link Control

Protocol), ISO 3309-76(E).

HDLC es el protocolo más importante de la capa de enlace del modelo OSI.

Es un protocolo orientado a bit.

Es la base de otros protocolos como LAPB, LAPD.

Protocolo para comunicar dos niveles del mismo tipo (el nivel de enlace).

Protocolos que utilizan un delimitador o flag para indicar el final de trama.

Utilizan un formato de trama estándar.

1.1.3 Puerto USB.

El USB o Universal Serial Bus es una interfaz para la transmisión serie de datos y

distribución de energía desarrollado por empresas líderes del sector de las

telecomunicaciones y de los ordenadores y que ha sido introducida en el mercado de

los PC´s y periféricos para mejorar las lentas interfaces serie (RS-232) y paralelo.

Tenía en un principio como objetivo el conectar periféricos relativamente lentos

(ratones, impresoras, cámaras digitales, unidades ZIP, etc.) de una forma realmente

sencilla, rápida y basada en comunicaciones serie, aunque por sus características

también podía conectarse hasta discos duros.

Figura 1.25 Velocidades de transmisión

Fuente: Los Autores.

Page 47: Control de Dispositivos

27

Esta interfaz de 4 hilos distribuye 5V para la alimentación y puede transmitir datos a

una velocidad de hasta 480 Mbps en su versión 2.0.

Es un bus serie que hace posible la conexión de hasta 127 periféricos a una única

puerta de un PC, con detección y configuración automáticas, siendo esto posible con

el PC conectado a la red y sin tener que instalar software adicional, y sin tener que

reiniciar el ordenador (plug and play, algo que con los puertos convencionales serie y

paralelo no sucedía. Tampoco hay que preocuparse por conflictos de IRQ’s o instalar

tarjetas de adaptador para cada periférico.

Estos periféricos pueden ser: Ratones, teclados, impresoras, escáneres, grabadoras,

discos duros, módems, cámaras digitales, PLC, Microcontroladores, teléfonos, en fin

una gama de productos y dispositivos existentes en el mercado tecnológico.

Figura 1.26 Conexión dispositivos por el puerto USB.

Fuente: Los autores.

El éxito de la interfaz USB ha sido tal que, actualmente todos los PCs tienen

integrados a lo menos dos puertos USB para la conexión de dispositivos. Los PCs

modernos además de tener los dos traseros pueden tener más puertos en el frontal

para facilitar su conexión. A falta de puertos se pueden acoplar hub’s USB para

ampliar el número de dispositivos siempre que no se sobrepase el limite soportado de

127.

Como desventaja principal nos encontramos con que el ancho de banda debe

repartirse entre todos los dispositivos conectados a él. Lo que quizás no tendría

repercusión si intentáramos conectar varios ratones, pero sí que la tendría si

queremos grabar CD’s en varias grabadoras en paralelo.

Page 48: Control de Dispositivos

28

Uno de los grandes problemas que tienen los PCs (problemas que se han heredado a

través de los tiempos debido a un diseño deficiente en algunos aspectos) es la escasez

de determinados recursos, básicamente líneas de interrupción IRQ’s y canales de

acceso directo a memoria DMA’s. En ambos casos las capacidades del diseño inicial

tuvieron que ser dobladas en 1984, tres años después de su lanzamiento,

aprovechando la aparición de la gama AT.

La instalación de periféricos ha sido un constante quebradero de cabeza para los

ensambladores, que debían asignar los escasos recursos disponibles entre los

dispositivos del sistema. Aunque el estándar PnP ("Plug and Play") vino a aliviar en

parte las dificultades mecánicas de cambiar "jumpers" en las placas, el problema

seguía ahí, ya que desde la aparición del AT el diseño del PC no había sufrido

cambios sustanciales.

Por otra parte, a pesar de que habían persistido desde los inicios del PC, y de su

conveniencia para multitud de aplicaciones, los puertos serie y paralelo presentaban

claras limitaciones en cuanto a capacidad de expansión y rendimiento se refiere.

Por estas razones y como resultado de un intento de dotar al PC de un bus de alta

velocidad que ofreciera las características ideales (PnP, universalidad, facilidad de

conexión y desconexión incluso en caliente (“Hot Swappable”)...), un consorcio

formado por multitud de empresas –las empresas que formaron el grupo inicial

fueron siete:

Compaq, Intel, IBM, Microsoft, Nec, Northern Telecom y Digital Equipment–

desarrolló una nueva interfaz estándar para la conexión de dispositivos externos del

PC, el denominado puerto USB Universal Serial Bus.

Como su nombre indica, es un bus serie bidireccional y de bajo coste, diseñado como

una extensión en la arquitectura estándar del PC y orientado principalmente a la

integración de periféricos y en sus orígenes dirigidos a la integración de dispositivos

telefónicos CTI en los ordenadores (Computer Telephony Integrations).

Page 49: Control de Dispositivos

29

1.1.3.1 Historia del puerto USB

Año Mes Suceso

1994 Noviembre Compaq, Intel y el resto de empresas iniciaron

las especificaciones del Universal Serial Bus

1994 30 Diciembre USB 0.8 (Borrador)

1995 13 Abril USB 0.9 (Borrador)

1996 15 Enero USB 1.0 - Velocidad Oficial 12 Mbps

1996 Febrero Intel anuncia sus primeros chips controladores

de USB

1996 Agosto

Microsoft saca la versión de Windows 95 OSR

2.1 que introduce los controladores

correspondientes para el manejo de los

dispositivos USB

1998 Marzo Sale a la venta el iMac de Apple que utilizaba el

USB 1.0 para la conexión de teclado y ratón

1998 24 Junio

Sale al mercado el Windows 98, el primer

Sistema Operativo con completo soporte para

USB

1998 23 Septiembre USB 1.1 - Revisión completada (USB-IF-

>Compaq, Intel, Microsoft, NEC)

1998 Noviembre

USB-IF supera el record mundial de periféricos

conectados a un simple PC mediante USB (111

periféricos)

1999 Se forma el grupo promotor del USB 2.0

Page 50: Control de Dispositivos

30

1999 Febrero Se propone 240 Mbps como velocidad

1999 12 Octubre Versión 0.79 del USB 2.0. Se aumenta la

velocidad a 480 Mbps

1999 21 diciembre Versión 0.9 del USB 2.0

2000 29 febrero

In-Systems muestra la primera unidad de

almacenamiento USB 2.0, una unidad zip

modificada

2000 17 Marzo Microtech y Netchip muestran su scanner USB

2.0 en el foro de desarrollo de Tokio

2000 27 Abril

USB 2.0 - Velocidad Oficial 480 Mbps (USB-

IF->Compaq, Hewlett-Packard, Intel, Lucent,

Microsoft, NEC, Philips)

2001 18 Diciembre USB 2.0 OTG- (On-The-Go) Ampliación del

USB 2.0.

2002 Mayo

Intel saca a la venta los primeros chipsets que

integran Hi-speed USB 2.0 en el Controlador de

Hub de I/O (ICH4). Estos chipsets fueron el

Intel 845E, 845G y el 845GL.

Tabla1.4: historial de progreso del puerto USB Fuente: www.usb.org

Septiembre del 2007 Intel, integrante y principal impulsor del USB, ha montado junto a empresas como

HP, Microsoft, NEC Corporation, NXP o Texas Instruments, el USB 3.0 Promoter

Group. Durante una conferencia en San Francisco, hace unos días desvelaron algunas

de las características de la nueva versión. Aunque los datos no se confirmarán

oficialmente hasta el año que viene, parece que el USB 3.0 alcanzará una tasa de

transferencia de 4,8 Gigabits por segundo, frente a los 480 Megabits por segundo a

los que llega el USB 2.0. La mejora se debe a que, además de los pares de cobre que

Page 51: Control de Dispositivos

31

ya llevaban las versiones anteriores, este nuevo tipo de conexión llevará también

fibra óptica.

Detallamos conector en la sección siguiente

1.1.3.2 Características generales del USB

La especificación del USB proporciona una serie de características que pueden ser

distribuidas en categorías. Estas características son comunes para todas las versiones

(desde la 1.0 hasta la 2.0)

a.- Fácil uso para los usuarios: Modelo simple para el cableado y los conectores.

Detalles eléctricos aislados del usuario (terminaciones del bus).

Periféricos auto-identificativos

Periféricos acoplados y reconfigurados dinámicamente (Hot Swappable)

b.- Flexibilidad Amplio rango de tamaños de paquetes, permitiendo variedad de opciones de

buffering de dispositivos

Gran variedad de tasas de datos de dispositivos acomodando el tamaño de

buffer para los paquetes y las latencias

Control de flujo para el manejo del buffer construido en el protocolo

c.- Ancho de banda isócrono Se garantiza un ancho de banda y bajas latencias apropiadas para telefonía,

audio...

Cantidad de trabajo isócrono que puede usar el ancho de banda completo del

bus.

Control de flujo para el manejo del buffer construido en el protocolo

Amplia gama de aplicaciones y cargas de trabajo

Adecuando el ancho de banda desde unos pocos Kbps hasta varios Mpbs.

Soporta tanto el tipo de transferencia isócrono como el asíncrono sobre el

mismo conjunto de cables.

Page 52: Control de Dispositivos

32

Conexiones múltiples, soportando operaciones concurrentes de varios

dispositivos.

Soporta hasta 127 dispositivos físicos.

Soporta la transferencia de múltiples datos y flujos de mensajes entre el host

y los dispositivos

d.- Robustez Manejo de errores y mecanismos de recuperación ante fallos implementados

en el protocolo.

Inserción dinámica de dispositivos

Soporte para la identificación de dispositivos defectuosos.

e.- Implementación de bajo coste Sub canal de bajo coste a 1.5 Mbps

Conectores y cables de bajo coste

Adecuado para el desarrollo de periféricos de bajo coste

1.1.3.3 Versiones del USB

a.- Versión 1.0

Esta versión, publicada en Enero 1996, fue iniciada por el USB-IF cuyos integrantes,

ya comentábamos antes (COMPAQ, Digital Equipment Corp., IBM, Intel Corp.,

Microsoft Corp., NEC y Northern Telecom).

Esta es la primera versión oficial que salió a la luz y que reúne todas las

características arriba mencionadas, con un límite máximo de velocidad de 12 Mbps

Inicialmente la especificación USB fue diseñada para conectar eficientemente

teléfonos a PCs. Sin embargo, este nuevo estándar de conectividad tuvo tanto éxito

que el Foro de implementadores decidió empujar al USB como un estándar de PC, a

pesar que el desarrollo de dispositivos USB para telefonía aún no se ha realizado.

En la siguiente tabla podemos observar el alcance de aplicación del USB con

respecto a la velocidad máxima establecida por las características del bus. Esto es

también aplicable a las versiones 1.x del bus.

Page 53: Control de Dispositivos

33

RENDIMIENTO APLICACIONES ATRIBUTOS

VELOCIDAD BAJA Teclado y ratón Bajo coste

Dispositivos Interactivos Periféricos de

entretenimiento

(Des)Conexión en

caliente

10-100 Kb/s Configuración del Monitor Fácil uso

VELOCIDAD MEDIA

Teléfono ISDN/RDSI Bajo coste

Audio PBX

(Des)Conexión en

caliente

Video comprimido POTS Fácil uso

500 Kb/s - 10 Mb/s Audio

Múltiples dispositivos.

Garantizada la latencia

Garantizado el ancho

de banda

Tabla1.5: Velocidad del puerto USB Fuente: www.usb.org

b.- Versión 1.1

El objetivo de esta segunda versión, que salió a la luz en Septiembre de 1998, era

solucionar problemas de ambigüedad en la especificación 1.0 para facilitar el trabajo

a los desarrolladores tanto de software como de hardware sin que hubiera que hacer

cambios en los dispositivos para hacerlos funcionar bajo esta versión.

No se hicieron cambios en los controladores de host para mantener esta

compatibilidad.

El alcance de aplicación de esta versión coincide con la de su predecesora, así como

sus características generales.

Page 54: Control de Dispositivos

34

Dado que el USB se le dio una aplicación distinta a la de las telecomunicaciones,

IBM y Northern Telecom no continuaron como miembros. Para esta especificación

solo quedaron COMPAQ, Intel, Microsoft y NEC ya que Digital Equipment Corp. es

ahora parte de COMPAQ.

c.- Versión 2.0

Esta versión que salió al mercado a mitad del 2000, tras la unión al consorcio de

otras 3 compañías (Hewlett Packard, Philips y Lucent), con lo que volvían a ser siete

las integrantes del USB-IF.

Como principal característica nos encontramos con un aumento de velocidad hasta

480 Mbps (casi 40 veces la velocidad anterior) con una diferencia de coste casi

mínimo. De este aumento de velocidad le viene el nombre de Hi-Speed, que es fácil

de confundir con Full-Speed.

Full-Speed era el término que se le daba a las versiones USB 1.x que alcanzaban 12

Mbps, por lo que se debe tener en cuenta a la hora de hablar sobre ello.

Este incremento de velocidad ha permitido sustituir en muchos casos el interfaz SCSI

por el USB. En total USB 2.0 soporta tres tipos distintos de velocidad:

Hi-Speed 480 Mbps

Full-Speed 12 Mbps

Low-Speed 1.5 Mbps

El alcance de uso para la versión USB 2.0 se ve incrementada notablemente respecto

a sus predecesoras. Así quedaría la tabla anterior modificada.

RENDIMIENTO APLICACIONES ATRIBUTOS

VELOCIDAD

ALTA

Video Video Gran ancho de banda

Page 55: Control de Dispositivos

35

Unidades de

almacenamiento

Discos duros y

grabadoras Latencia garantizada

Video Comprimido Fácil uso

25-500 Mb/s

Básicamente, USB 2.0 incluye todo lo que ofrece USB 1.1 y añade el modo de alta

velocidad. USB 2.0 también usa el mismo tipo de cables y conectores para conectar

los dispositivos de alta velocidad, sin embargo los hub’s USB clásicos ralentizarán

los dispositivos USB 2.0. Otro requisito es que es necesario un controlador de host

para USB 2.0 si queremos tener disponibles la conexión de alta velocidad con un

dispositivo de este tipo.

Los hub’s USB 2.0 tienen ahora mucho más trabajo que hacer que en el USB 1.1 ya

que necesitan manejar todo el tráfico de tres tipo de dispositivos con velocidades

distintas. Conectando un dispositivo USB 1.1 en uno USB 2.0 funcionaría bien, pero

no lo haría si lo hiciéramos al revés, además de ralentizarse a 12 Mbps,

posiblemente, el sistema operativo avisaría de su mal uso.

La forma de distinguir si tu ordenador tiene USB de alta velocidad es mediante los

logotipos registrados por el grupo promotor del USB (el USB-IF), que como se

puede ver más arriba está etiquetado en rojo con Hi-Speed. Dicho logotipo sólo lo

pueden usar las empresas desarrolladas de hardware que hayan pasados los test’s del

USB-IF.

Cabe destacar que el USB 2.0 es simplemente una extensión y nunca llegara a

reemplazar completamente al 1.1 ya que hay productos como teclados genéricos,

ratones, joysticks o altavoces que no requieren la gran velocidad que ofrece la

tecnología USB 2.0. Sólo dispositivos de alta velocidad como webcams o sistemas

de alta capacidad necesitarán el máximo de velocidad, aunque los ordenadores los

fabriquen sólo con puertos USB 2.0.

Page 56: Control de Dispositivos

36

Figura 1.28 Ejemplos Conexión USB OTG

Fuente: Los Autores

d.- Versión USB OTG

USB OTG o "USB-On-The-Go" es un variación de la especificación USB 2.0 que

permite a un sólo puerto actuar como servidor o como dispositivo, más

concretamente permitiría comunicarse a todo tipo de unidades con USB directamente

entre ellas sin la necesidad de ordenador. Incluso después de que el cable está

conectado y las unidades se están comunicando, las dos unidades pueden "cambiar"

de rol bajo el control de un programa.

Figura 1.27 Logo Conexión USB OTG

Fuente: www.usb.org

En resumen, USB On-The-Go define las siguientes características añadidas a la

especificación USB:

Un nuevo estándar para conectores USB y cables (Mini conectores)

El hecho de que dispositivos que antes eran solamente periféricos ahora

puedan ser hosts (dual-role devices) .

La capacidad de ser host y periféricos y cambiar dinámicamente de rol según

convenga (el uso del Host Negotiation Protocolo HNP para el cambio de rol)

Protocolo de petición sesión (Session Request Protocol o SRP).

Requisitos de bajo consumo para promocionar el USB en dispositivos

alimentados con baterías (opción Micropower añadido a las ya existentes low

y high power).

Esta tecnología podría ser muy útil para dispositivos como el PDA, donde el enlace

USB podría conectarse a un PC como un dispositivo o conectarse como servidor a un

teclado o ratón.

Page 57: Control de Dispositivos

37

Host Periférico Aplicación

Teléfono móvil Teléfono móvil

Cámara digital

Reproductor MP3

Scanner

Intercambiar información

de contactos

mandar por mail fotos

Subir fotos a una web

Subir/bajar música

Cámara Digital Cámara digital

Teléfono móvil

Impresora

Dispositivo de

almacenamiento

Intercambiar fotos

Mandar por mail fotos

Subir fotos a una web

Imprimir fotos

Almacenar fotos

Impresora Cámara digital

Scanner

Dispositivo de

almacenamiento

Imprimir fotos

Imprimir imágenes

escaneadas

Reproductor MP3 Reproductor MP3

Dispositivo de

almacenamiento

Intercambiar canciones

Subir/bajar canciones

Osciloscopio Impresora Imprimir imágenes

PDA PDA

Impresora

Teléfono móvil

Reproductor MP3

Escáner

Dispositivo de

almacenamiento

GPS

Cámara digital

Osciloscopio

Intercambiar ficheros

Imprimir ficheros

Subir/bajar ficheros

Subir/bajar música

Escanear fotos

Obtener direcciones

Información de mapas

Subir fotos

Configurar un osciloscopio

Tabla1.6: Periféricos que utilizan el puerto USB Fuente: www.usb.org

Page 58: Control de Dispositivos

38

Dependiendo de la velocidad de transmisión (low-speed o Hi-Speed) existen dos

logotipos que identifica la existencia de un puerto USB On-The-Go en el dispositivo

y que es fácilmente identificable al igual que con el resto de especificaciones.

e.- Versión 3.0

USB 3.0, la próxima versión del estándar USB (fig.1.29), alcanzará una velocidad de

transferencia de 4.8Gbps, diez veces la velocidad de USB 2.0 (480Mbps)

Figura 1.29 Conector USB 2.0

Fuente: www.usb.org

Como podemos ver en la fig. 1.30, en USB 3.0 se añaden cinco contactos nuevos que

son los que utiliza el canal de alta velocidad. Los cuatro contactos clásicos se

mantienen, para mantener la compatibilidad con USB 2.0. Es decir, el conector

contiene nueve contactos en total.

Figura 1.30 Conector USB 3.0

Fuente: www.usb.org

El que es totalmente nuevo es la versión mini-USB (fig. 1.31); por lo que se puede

ver en el dibujo, parece que solo incluye los cinco contactos para el canal de alta

velocidad; si esto es así significa que no será compatible con el conector mini-USB

actual.

Figura 1.30 Mini conector USB 3.0 Fuente: www.usb.org

Page 59: Control de Dispositivos

39

1.1.3.4 Topología del bus

El Universal Serial Bus conecta los dispositivos USB con el host USB. La

interconexión física USB es una topología de estrellas apiladas donde un hub es el

centro de cada estrella. Cada segmento de cable es una conexión punto-a-punto entre

el host y los hub’s o función, o un hub conectado a otro hub o función.

El número máximo de dispositivos que puede conectar USB es de 127, pero debido a

las constantes de tiempo permitidas para los tiempos de propagación del hub y el

cable, el número máximo de capas permitido es de siete (incluida la capa raíz) con un

máximo de longitud de cable entre el hub y el dispositivo de 5 metros. Cabe destacar

que en siete capas, sólo se soportan cinco hub’s que no sean raíz en una ruta de

comunicación entre el host y cualquier dispositivo. Un dispositivo compuesto ocupa

dos capas, por eso, no puede ser activado si está acoplado en la última capa de nivel

siete.

Figura 1.31 Topología del bus

Fuente: http://usuarios.lycos.es/kurganz/datos_tecnicos/topologia.html

La topología del bus USB se puede dividir en tres partes:

La capa física: Como están conectados los elementos físicamente

La capa lógica: Los roles y las responsabilidades de los elementos USB

Page 60: Control de Dispositivos

40

La relación software del cliente-función: Como se ven mutuamente el

software del cliente y los interfaces de las funciones relacionadas

Figura 1.31 División de la topología del bus

Fuente: http://usuarios.lycos.es/kurganz/datos_tecnicos/topologia.html

1.1.3.4.1 La capa física

La arquitectura física del USB se centra en las piezas de plástico y de metal con las

que el usuario debe tratar para construir un entorno USB.

Cada entorno físico USB está compuesto por cinco tipos de componentes:

El host

El controlador del host

Los enlaces

Los dispositivos

Los hub’s

Los dispositivos están conectados físicamente al host a través de una topología en

estrella, como se ilustra en la figura.

Page 61: Control de Dispositivos

41

Los puntos de acople están provistos de una clase de dispositivos USB llamados

hub’s, los cuales tienen puntos de acople adicionales llamados puertos.

Estos hub’s se conectan a otros dispositivos a través de enlaces (cables de cuatro

hilos).

El host proporciona uno o más puntos de acople a través del hub raíz.

Para prevenir los acoples circulares, se impone una estructura ordenada por capas en

la topología de estrella y como resultado se obtiene una configuración al estilo de un

árbol como se ve en la figura.

Todas las comunicaciones físicas son iniciadas por el host.

Esto quiere decir que cada milisegundo, o en cada ventana de tiempo que el bus lo

permita, el host preguntará por nuevos dispositivos en el bus USB. Además el host

inicia todas las transacciones físicas y soporta todas las transferencias de datos sobre

la capa física

a.- El host USB

El host es el sistema de computación completo, incluyendo el software y el hardware,

sobre el cual se sostiene el USB.

El host tiene la habilidad de procesar y gestionar los cambios de configuración que

puedan ocurrir en el bus durante su funcionamiento. El host gestiona el sistema y los

recursos del bus como el uso de la memoria del sistema, la asignación del ancho de

banda del bus y la alimentación del bus. El host también ayuda al usuario con la

configuración automática de los dispositivos conectados y reaccionando cuando son

desconectados.

Un host puede soportar uno o más buses USB. El host gestiona cada bus

independientemente de los demás. Los recursos específicos del bus como el ancho de

banda asignado son únicos a cada bus. Cada bus está conectado al host a través de un

controlador del host.

Page 62: Control de Dispositivos

42

Sólo hay un host en cualquier sistema USB. Desde el interfaz USB hasta el sistema

de host del ordenador es lo que se le llama controlador de host y puede estar

implementado como combinación de hardware, firmware o software. Integrado

dentro del sistema de host hay un hub raíz que provee de un mayor número de

puntos de acople al sistema.

Siempre que es posible, el software del USB usa el interfaz existente del sistema de

host para gestionar las interacciones superiores. Por ejemplo, si un sistema de host

usa la Gestión de Energía Avanzada (APM), el software del USB conecta al APM

para interceptar, suspender las notificaciones.

b.- El controlador del host

El controlador de host está formado por el hardware y el software que permite a los

dispositivos USB ser conectados al host. Este controlador es el agente iniciador del

bus, es decir es el que comienza las transferencias en el bus.

El controlador de bus es el maestro en un bus USB. Otros buses como PCI, permiten

la presencia de múltiples maestros donde cada uno arbitra sus accesos al bus. El la

arquitectura USB sólo hay un controlador de host por cada bus USB y por eso no hay

arbitración para el acceso al bus.

Como las transferencias de datos de los dispositivos pueden ser basadas en datos o en

la disponibilidad espacial del dispositivo, la mayoría de los controladores de host

están implementados como dispositivos maestros de bus PCI.

Esto permite al controlador de host iniciar una transferencia de datos en el bus del

sistema cuando le sea necesario, sin requerir la intervención del host de la CPU para

cada transferencia.

El controlador se comporta como un bus maestro PCI multicanal programable para dar

soporte a las necesidades de transferencia de datos de múltiples dispositivos conectados al

bus USB. La figura de la izquierda muestra una vista conceptual del controlador del

bus USB.

Page 63: Control de Dispositivos

43

La parte software consiste en el driver del controlador de host (HCD). Este software

interactúa con el hardware del controlador de host a través del interfaz

hardware/software.

La parte hardware del controlador de host consiste en un hub raíz que proporciona

los puertos USB y los buffers de datos (colas) donde son almacenadas cuando son

movidas a/desde memoria.

El host USB interactúa con los dispositivos USB a través del controlador. Las

funciones básicas del controlador de host son:

Detectar la inserción o desconexión de dispositivos USB.

Gestionar el flujo de control entre el host y los dispositivos.

Gestionar el flujo de datos entre el host y los dispositivos

Coleccionar estadísticas de actividad y estado

Proveer una cantidad limitada de energía a los dispositivos conectados

Hay dos implementaciones estandarizadas de la parte hardware de los controladores

de host USB. Ambas proporcionan la misma funcionalidad y rendimiento para la

interconexión. Estas implementaciones son:

El Universal Host Controller Inteface (UHCI) definido por Intel

Open Host Controller Interface (OpenHCI o OHCI) definido por Microsoft

UHCI está definido como que la parte software tiene una gran responsabilidad para

mantener el hardware en funcionamiento. Esto permite a esta implementación ser

relativamente simple y realizarse con un bajo número de puertas.

OHCI está definida como que la parte hardware tiene más responsabilidad por el

mantenimiento del flujo de datos, para que la parte software tenga menos trabajo que

hacer. Esta otra implementación tiende a ser más compleja y tiene una cantidad

mayor de puertas que la UHCI

c.- Dispositivos USB

Un dispositivo es una colección de funcionalidad que lleva a cabo algún propósito de

utilidad. Por ejemplo, un dispositivo podría ser un ratón, un teclado, una cámara...

Page 64: Control de Dispositivos

44

Puede haber múltiples dispositivos simultáneamente en el mismo bus. Cada

dispositivo lleva consigo información que puede ser útil para identificar sus

características. La información que describe al dispositivo se encuentra asociada con

el canal de control. Esta información se divide en tres categorías:

Estándar: Esta es la información cuya definición es común a todos los

dispositivos USB e incluye elementos como la identificación del fabricante,

la clase, la gestión de energía....

Clase: La definición de esta información varía dependiendo del aparato. Es

una clasificación de los dispositivos en cuanto a sus prestaciones.

USB Vendor: El fabricante del periférico puede poner aquí cualquier

información deseada.

El software del host es capaz de determinar el tipo de dispositivo conectado haciendo

uso de esta información y de un direccionamiento individual. Todos los dispositivos

USB son accedidos por una dirección USB que es asignada dinámicamente cuando

se conecta, asignándole también un número. Cada aparato soporta además uno o más

canales a través de los cuales el host puede comunicarse con el dispositivo. Una vez

ha sido reconocido e identificado el dispositivo, el software del host puede hacer que

los drivers del dispositivo apropiados obtengan el control del nuevo dispositivo

conectado.

Cuando desconectamos el dispositivo, la dirección puede ser reutilizada para el

próximo dispositivo conectado.

En cuanto a los tipos de dispositivos nos encontramos con dos clases:

Hub’s, que proporcionan los puntos de acople adicionales al USB.

Funciones, que le dan al sistema la funcionalidad (impresoras, unidades de

almacenamiento...).

Funciones

Una función es un dispositivo USB que es capaz de transmitir y recibir datos o

información de control sobre el bus. Típicamente se implementa como un periférico

Page 65: Control de Dispositivos

45

separado con un cable que se conecta en un puerto del hub. Sin embargo hay una

gran flexibilidad a la hora de construir dispositivos. Una función simple pueden dar

una funcionalidad simple (un micrófono, unos altavoces...) o puede estar compuesto

en distintos tipos de funcionalidad, como unos altavoces con un panel LCD. Este tipo

de dispositivos se les llama funciones múltiples o dispositivo compuesto.

Otra forma de construir productos con múltiples funciones es creando un dispositivo

compuesto. Este es el término usado cuando un hub está acoplado junto a múltiples

dispositivos USB dentro de un mismo paquete. El usuario verá una sola unidad en el

extremo del cable, pero internamente tiene un hub y varios dispositivos. Este tipo de

"paquetes" tienen una dirección de bus para cada uno de los componentes, en

contraposición a los dispositivos compuestos que tienen una única dirección.

Un buen ejemplo de un dispositivo compuesto sería un teclado USB que tuviera una

conexión adicional para ratón. A pesar de que el teclado es un periférico, en este caso

se le puede acoplar un ratón y por supuesto se necesitaría de un hub interno en el

teclado para que esto pueda funcionar.

Cada función contiene la información sobre la configuración que describe su

capacidad y requisitos en cuestión de recursos. Antes de que una función pueda ser

usado debe ser configurado por el host.

Algunos ejemplos de funciones pueden ser los siguientes:

Una interfaz humana (HID) como ratón, teclado, tablas digitalizadoras o

controladores de juegos

Dispositivos de imágenes: cámaras, escáneres o impresoras

Dispositivos de almacenamiento: CD-ROM’s, DVD’s disqueteras...

1.1.3.4.2 La capa lógica

El punto de vista lógico presenta capas y abstracciones que son relevantes para los

distintos diseñadores e implementadores. La arquitectura lógica describe como unir

el hardware del dispositivo USB a un driver del dispositivo en el host para que tenga

el comportamiento que el usuario final desea.

Page 66: Control de Dispositivos

46

La vista lógica de esta conexión es la mostrada en el esquema siguiente. En el

podemos ver como el host proporciona conexión al dispositivo, donde esta conexión

es a través de un simple enlace USB. La mayoría de los demás buses como PCI, ISA,

etc. proporcionan múltiples conexiones a los dispositivos y los drivers lo manipulan

mediante algunas combinaciones de estas conexiones (I/O y direcciones de memoria,

interrupciones y canales DMA).

Físicamente el USB tiene sólo un cable simple de bus que es compartido por todos

los dispositivos del bus. Sin embargo, desde el punto de vista lógico cada dispositivo

tiene su propia conexión punto a punto al host.

Aunque la mayoría de las actividades de los hosts o de los dispositivos lógicos usan

esta perspectiva lógica, el host mantiene el conocimiento de la topología física para

dar soporte al proceso de desconexión de los hub’s. Cuando se quita un hub, todos

los dispositivos conectados a él son quitados también de la vista lógica de la

topología.

1.1.3.4.3 La relación "Software del cliente-función"

A pesar de que la topología física y lógica del USB refleja la naturaleza de

compartición del bus, la manipulación del interfaz de una función USB por parte del

software del cliente (CSw) se presenta con una vista distinta.

El software del cliente para las funciones USB debe usar el interfaz de programación

software USB para manipular sus funciones en contraposición de las que son

manipuladas directamente a través de la memoria o los accesos I/O como pasa con

otros buses (PCI,EISA,PCMCIA,...). Durante esta operación, el software del cliente

debería ser independiente a otros dispositivos que puedan conectarse al USB.

1.1.3.5 Tipos de transferencias

La interpretación de los datos que se transmitan a través de las tuberías,

independientemente de que se haga siguiendo o no una estructura USB definida,

corre a cargo del dispositivo y del software cliente. No obstante, USB proporciona

Page 67: Control de Dispositivos

47

cuatro tipos de transferencia de datos sobre las tuberías para optimizar la utilización

del bus en función del tipo de servicio que ofrece la función.

Estos cuatro tipos son:

Transferencias de control

Transferencias isócronas

Transferencias de interrupción

Transferencias de bultos.

a.- Transferencias de control

Es el único tipo de transferencia que utiliza tuberías de mensajes, soporta por lo tanto

comunicaciones de tipo configuración/comando/estado entre el software cliente y su

función. Una transferencia de tipo control se compone de una transacción de setup

del host a la función, cero o mas transacciones de datos en la dirección indicada en la

fase de setup, y por último una transacción de estado de la función al host. La

transacción de estado devolverá éxito cuando el end point haya completado

satisfactoriamente la operación que se había solicitado.

Por lo tanto este tipo de transferencia está pensado para configurar, obtener

información, y en general para manipular el estado de los dispositivos. El tamaño

máximo de datos que se transmiten por el bus viene determinado por el end point. En

dispositivos de velocidad media los posibles tamaños máximos son de 8, 16, 32 o 64

bytes, en velocidad baja el tamaño es de 8 bytes y en velocidad alta 64 bytes. El

porcentaje de (micro) frame utilizado ronda el 30% en velocidad baja, 5% en

velocidad media y el 2% en alta.

El end point puede estar ocupado durante la fase de envío de datos y la fase de

estado, en esos casos el end point indica al host que se encuentra ocupado, invitando

al host a intentarlo mas tarde. Si el end point recibe un mensaje de setup y se

encontraba en mitad de una transferencia de control, aborta la transferencia actual y

pasa a la nueva que acaba de recibir. Normalmente el host no inicia una nueva

transferencia de control con un end point hasta que no ha acabado la actual, si bien

debido a problemas de transmisión el host puede considerar que se han producido

Page 68: Control de Dispositivos

48

errores y pasar a la siguiente. USB proporciona detección y recuperación, vía

retransmisión, de errores en las transferencias de control.

b.- Transferencias isócronas

Hacen uso de tuberías stream. Garantiza un acceso al bus USB con una latencia

limitada, asegura una transmisión constante de los datos a través de la tubería

siempre y cuando se suministren datos, además en caso de que la entrega falle debido

a errores no se intenta reenviar los datos.

USB limita el máximo tamaño de datos para los end points con tipo de transferencia

isócrona a 1023 bytes para los end points de velocidad media y 1024 bytes para

velocidad alta. De hecho las transferencias isócronas solo se pueden usar en

dispositivos de velocidad alta o media. En función de la cantidad de datos que se

estén transmitiendo en un momento dado, en velocidad medio el porcentaje de frame

utilizado puede variar desde un 1% hasta un 69%, mientras que el porcentaje de

microframe utilizado en velocidad alta varía entre un 1% y un 41%.

c.- Transferencias de interrupción

Utiliza tuberías stream. Este tipo de transferencia está diseñado para servicios que

envían o reciben datos de forma infrecuente. Esta trasferencia garantiza el máximo

servicio para la tubería durante el periodo en el que envía. En caso de error al enviar

los datos se reenvían en el próximo periodo de envío de datos.

El tamaño de paquete de datos máximo es de 1024 bytes para alta velocidad, 64

bytes para velocidad media y 8 bytes para baja velocidad. En ningún caso se precisa

que los paquetes sean de tamaño máximo, es decir, no es necesario rellenar los

paquetes que no alcancen el máximo. Cuando en una transferencia de interrupción se

necesite transmitir más datos de los que permite el paquete máximo, todos los

paquetes a excepción del último paquete deben de tener el tamaño máximo. De modo

que la transmisión de un paquete se ha llevado a cabo cuando se ha recibido la

cantidad exacta esperada o bien, se ha recibido un paquete que no alcanza el tamaño

máximo. El porcentaje de (micro) frame utilizado ronda el 13% en velocidad baja y

el 2.5% en velocidad media, mientras que en velocidad alta para cantidades similares

Page 69: Control de Dispositivos

49

utilizadas para obtener los anteriores porcentajes se obtienen resultados del 1%, pero

para cantidades muy superiores se puede llegar a una utilización del 42%.

d.- Transferencias de bultos ("Bulk")

Hace uso de tuberías stream. Está diseñado para dispositivos que necesitan transmitir

grandes cantidades datos en un momento determinado sin importar mucho el ancho

de banda disponible en ese momento. Esta transferencia garantiza el acceso al USB

con el ancho de banda disponible, además en caso de error se garantiza el reenvío de

los datos. Por lo tanto este tipo de transferencia garantiza la entrega de los datos pero

no un determinado ancho de banda o latencia.

El tamaño máximo de paquete de datos para velocidad media es de 8, 16, 32 o 64

bytes, mientras que en velocidad alta es de 512 bytes. Los dispositivos de velocidad

baja no disponen de end points con este tipo de transferencia. No es necesario que los

paquetes se rellenen para alcanzar el tamaño máximo. El porcentaje de frame

utilizado en velocidad media en función del número de bytes enviados varía entre el

1% y el 5%, mientras que el porcentaje de microframe en velocidad alta varía entre

un 1% y un 5%, eso sí, teniendo en cuenta mayor cantidad de datos.

1.1.3.6 Parte Eléctrica del USB.

a.- Identificación de la velocidad del dispositivo

Para poder iniciar cualquier tipo de transacción cuando se conecta el dispositivo al

host, es necesario que este conozca la velocidad a la que trabaja. Con esa finalidad

existe un mecanismo a nivel eléctrico. La diferencia entre los dispositivos de

velocidad media y los de velocidad baja, es que en velocidad media tiene una

resistencia conectada al D+, en velocidad baja la misma resistencia se encuentra en

D- y no en D+

De forma que después del reset el estado de reposo de la línea es diferente si se trata

de baja o media velocidad. En el caso de dispositivos de alta velocidad lo que se hace

Page 70: Control de Dispositivos

50

es que en un principio se conecta como un dispositivos de velocidad media y más

tarde a través de un protocolo se pasa a velocidad alta.

b.- Codificación de datos

El USB utiliza la codificación NRZI para la transmisión de paquetes. En esta

codificación los "0" se representan con un cambio en el nivel, y por el contrario los

"1" se representan con un no cambio en el nivel. De modo que las cadenas de cero

producen transiciones consecutivas en la señal, mientras que cadenas de unos

produce largos periodos sin cambios en la señal. A continuación un ejemplo:

c.- Relleno de bits

Debido a que cadenas de unos pueden producir largos periodos en los que la señal no

cambia dando lugar a problemas de sincronización, se introducen los bits de relleno.

Cada 6 bits consecutivos a "1" se inserta un bit a "0" para forzar un cambio, de esta

forma el receptor puede volverse a sincronizar. El relleno bits empieza con el patrón

de señal Sync. El "1" que finaliza el patrón de señal Sync es el primer uno en la

posible primera secuencia de seis unos.

En las señales a velocidad media o baja, el relleno de bits se utiliza a lo largo de todo

el paquete sin excepción. De modo que un paquete con siete unos consecutivos será

considerado un error y por lo tanto ignorado.

En el caso de la velocidad alta se aplica el relleno de bits a lo largo del paquete, con

la excepción de los bits intencionados de error usados en EOP a velocidad alta.

d.- Sync

Teniendo en cuenta que K y J representan respectivamente nivel bajo y nivel alto, el

patrón de señal Sync emitido, con los datos codificados, es de 3 pares KJ seguidos de

2 K para el caso de velocidad media y baja. Para velocidad alta es una secuencia de

15 pares KJ seguidos de 2 K. El patrón de señal Sync siempre precede al envío de

cualquier paquete, teniendo como objetivo que el emisor y el receptor se sincronicen

y se preparen para emitir y recibir datos respectivamente.

Page 71: Control de Dispositivos

51

Si partimos de que el estado de reposo de la señal es J, podemos interpretar Sync

como una secuencia impar de "0's" y un "1" que se inserta antes de los datos.

e. - EOP ("End Of Packet")

A todo paquete le sigue EOP, cuya finalidad es indicar el final del paquete.

En el caso de velocidad media y baja el EOP consiste en que, después del último bit

de datos en el cual la señal estará o bien en estado J, o bien en estado K, se pasa al

estado SE0 durante el periodo que se corresponde con el ocupado por dos bits,

finalmente se transita al estado J que se mantiene durante 1 bit. Esta última transición

indica el final del paquete.

En el caso de la velocidad alta se utilizan bits de relleno erróneos, que no están en el

lugar correcto, para indicar el EOP. Concretamente, el EOP sin aplicar codificación

consistiría en añadir al final de los datos la secuencia 0111 1111.

1.1.3.7 Parte Mecánica del USB.

Como ya se ha visto la topología física USB consiste en la conexión del puerto de

bajada de un hub o host, con el puerto de subida de algún otro dispositivo o hub. Para

facilitar la conexión de dispositivos de cara el usuario, USB utiliza dos tipos de

conectores totalmente diferentes, los conectores de Serie A y los conectores de serie

B. Los conectores de serie A permiten la conexión directa de dispositivos USB con el

host o con el puerto de bajada de un host, y es obligatorio que estén presentes en

todos los dispositivos y hub’s USB. Los conectores de Serie B no son obligatorios y

sirven para conectar un cable USB con el puerto de subida de un dispositivo,

permitiendo por parte de los fabricantes de dispositivos la utilización de cables

estándar USB.

El cable USB consiste de cuatro conductores, dos conductores de potencia y dos de

señal, D+ y D-. Los cables de media y alta velocidad están compuestos por un par

trenzado de señal, además de GND (Tierra) y Vbus.

Existen tres tipos de cables USB: cable estándar de quita y pon, cable fijo de media y

alta velocidad, y cable fijo de baja velocidad.

Page 72: Control de Dispositivos

52

a.- Cable estándar de quita y pon

Se trata de un cable de velocidad alta y media, con un conector macho de Serie A en

un extremo y un conector macho de Serie B en el otro extremo. Esto permite a los

fabricantes de dispositivos fabricarlos sin cable y al usuario le facilita la sustitución

del cable en caso de que se estropee.

Figura1.31.1: Cable USB

Fuente: Manual USB PLUS

b.- Cable fijo de velocidad alta y media

Con la denominación de fijo nos referimos a los cables que son proporcionados por

el fabricante del dispositivo fijos a este, o bien sin ser fijos, con un conector

especifico del fabricante. Es obligatorio que en un extremo tenga un conector macho

de Serie A. Dado que lo suministra el fabricante, puede ser utilizado por dispositivos

tanto de velocidad alta y media, como de velocidad baja. En el caso de que se utilice

para un dispositivo de velocidad baja, además de poder ser utilizado con dispositivos

de velocidad media y alta, deberá cumplir con todos los requisitos propios de la

velocidad baja.

Figura1.31.2: Cable USB Fijo Fuente: Manual del PLC DL06, 2a. edición en español, 6/07

Page 73: Control de Dispositivos

53

c.- Cable fijo de velocidad baja

Al igual que el cable fijo de alta y media velocidad tiene un conector macho de Serie

A en un extremo, mientras que el otro depende del fabricante. La diferencia es que

este tipo de cables sólo funciona con dispositivos de velocidad baja.

Contacto Señal Cable 1 VBUS Rojo 2 Datos- Blanco 3 Datos+ Verde 4 GND Negro

Tabla1.7: Pines Cable Fijo de Velocidad Baja Fuente: Manual del PLC DL06, 2a. edición en español, 6/07

1.1.3.8 Icono USB.

El icono USB es obligatorio que se encuentre en los conectores de serie A y B, esto

facilita al usuario tanto el reconocimiento de que se trata de un cable USB, como la

orientación a la hora de conectarlo. En los siguientes dibujos se puede observar el

diseño y la colocación del logotipo.

Figura1.32: Ícono del USB Fuente: www.usb.org

1.1.4 Radio Frecuencia.

Las ondas de radio son fáciles de generar, pueden viajar distancias largas y penetrar

edificios sin problemas, de modo que se utilizan mucho en la comunicación, tanto de

interiores como de exteriores. Las ondas de radio también son omnidireccionales,

ósea viajan en todas las direcciones desde la fuente, por lo cual el transmisor y el

receptor no tienen que alinearse físicamente.

Page 74: Control de Dispositivos

54

Las propiedades de las ondas de radio dependen de la frecuencia. A bajas

frecuencias, las ondas de radio cruzan bien los obstáculos, pero la potencia se reduce

drásticamente con la distancia a la fuente. A frecuencias altas, las ondas de radio

tienden a viajar en línea recta y a rebotar en los obstáculos. También son absorbidas

por la lluvia. Todas las ondas de radio están sujetas a interferencia por los motores y

equipos eléctricos.

1.1.4.1 El Espectro Electromagnético

Cuando los electrones se mueven crean ondas electromagnéticas que se pueden

propagar en el espacio libre, aún en el vacío. La cantidad de oscilaciones por

segundo de una onda electromagnética es su frecuencia, f, y se mide en Hz (en

honor a Heinrich Herz). La distancia entre dos máximos o mínimos consecutivos se

llama longitud de onda y se designa con la letra griegaλ.

En el vacío todas las ondas electromagnéticas viajan a la misma velocidad, sin

importar su frecuencia. Esta velocidad, usualmente llamada velocidad de la luz, c, es

aproximadamente 3x108 m/seg.

Fig. 1.32.1 El espectro electromagnético.

Fuente: www.um.es/docencia/barzana/IMGTEORIA/espectro-em.jpg

Page 75: Control de Dispositivos

55

En la grafica anterior se muestra el espectro electromagnético. Las porciones de

radio, microondas, infrarrojo y luz visible del espectro pueden servir para transmitir

información modulando la amplitud, la frecuencia o la fase de las ondas. Las bandas

que se listan en la parte inferior de la figura son los nombres oficiales de la ITU. Los

términos LF, MF y HF se refieren a las frecuencias baja, media y alta,

respectivamente. Las bandas más altas se denominan muy, ultra, súper,

extremadamente y tremendamente alta frecuencia (VHF, UHF, SHF, EHF, THF

respectivamente).

1.1.4.2 Redes Inalámbricas

Las redes inalámbricas son redes que resuelven toda o una parte de su capa física en

base a conexiones no cableadas. En particular, el documento se ocupará de WLAN

(Wireless Local Área Network), para estas redes se establecieron los estándares

802.11 y 802.11b que es una extensión del anterior y luego se comentará algo de

redes infrarrojas.

Proveen todas las características y beneficios de las tradicionales tecnologías LAN

como Ethernet y Token Ring, pero sin las limitaciones de los cables que éstas

poseen.

Fig. 1.32.2 Frecuencia de operación

Fuente: CCNA Módulo Wireless de cisco

Una red inalámbrica puede ampliar la libertad de un usuario respecto de su ubicación

física manteniendo la disponibilidad de la red sin estar atado a un escritorio,

brindando la posibilidad de estar conectado mientras desayuna en el salón comedor,

espera en una sala ... o bien atiende una reunión en la sala de juntas.

Page 76: Control de Dispositivos

56

Figura 1.33: Esquema de redes Wireless Fuente: www.radioptica.com/Radio/wlan.asp

Establecer una WLAN es más rápido, flexible, muchas veces más barato y más

realizable que hacerlo con una red cableada, dado que tender los cables es un

problema en sí mismo.

Hoy día dos tecnologías son las más comunes, la Home RF y la Wi-Fi (IEEE

802.11), de estas la que parece ser la más flexible es la 802.11.

Logotipo de WiFi.

Tenemos en la figura siguiente los inicios de esta tecnología, los diferentes rangos de

velocidad que maneja, hay que recalcar que actualmente nos encontramos en el

protocolo 802.11 n.

Figura 1.34: Velocidad de redes Wireless Fuente: CCNA Módulo 2 de cisco

El acceso de un usuario a una WLAN supera los 11 Mb/s, que es un ancho de banda

más que considerable para muchas aplicaciones o servicios a través de PC o

dispositivos móviles.

Page 77: Control de Dispositivos

57

1.1.4.2.1 Modo Ad Hoc

Solo punto a punto

Fácil de configurar

No hay relay vía los puntos

Conjunto de Servicios Básico Independiente

Figura 1.35: Topología WLan

Fuente: CCNA Módulo 2 de cisco

1.1.4.3 Módulos de Radio Frecuencia

Transmisor y Receptor TWS-# y RWS-#

Figura 1.35.1: Módulo Transmisor Fuente: www.ishtronics.com/tws434a.jpg

El módulo transmisor viene ya ajustado en una frecuencia, que puede ser de 303,875

MHz (TWS-303) ,315 MHz (TWS-315), 418 MHz (TWS-418) y 433,92 MHz

(TWS-433). Está listo para su uso. Sólo se debe colocar una antena, conectarle la

Page 78: Control de Dispositivos

58

alimentación y comenzar a enviarle datos. Para facilitar la transmisión de datos

codificados, existe un codificador que hace juego, que es el Holtek HT12E.

Figura 1.35.2: TWS-434 Fuente: R-8Px.pdf

Pin 1: GND Pin 2: IN Pin 3: VCC Pin 4: ANT Potencia de salida de RF: 8 mW

ESPECIFICACIONES Símbolo Características Condiciones Mín. Tipo. Máx. Unidad Vcc Voltaje de alimentación 1,5 - 12 V Icc Corriente máxima - 5 9 mA Vih Voltaje máximo entrada Idato=100µA

(alto) Vcc-0,5 - Vcc V

Vil Voltaje mínimo entrada Idato=0µA (bajo) - - 0,3 V Pout Potencia RF sobre 50

ohm -3 0 +2 dBm

Tbw Ancho banda modulación

Codificación externa

- 5 - kHz

Tr Flanco subida modulación

- - 100 µS

Tf Flanco bajada modulación

- - 100 µS

Alcance 20 m Tabla 1.8: Especificaciones del TWS

Fuente: R-8Px.pdf

Figura 1.35.3: Módulo Receptor. Fuente: www.ishtronics.com/tws434a.jpg

Los transmisores listados hacen juego con receptores de la misma frecuencia, que

también vienen en un valor predeterminado entre 300 MHz a 434 MHz Puede ser de

303,875 MHz (RWS-303), 315 MHz (RWS-315), 418 MHz (RWS-418) y 433,92

MHz (RWS-433). Posee en diseño pasivo de alta sensibilidad, que no requiere

Page 79: Control de Dispositivos

59

componentes externos. Para decodificar las señales que llegan a este receptor se

pueden utilizar el decodificador asociado Holtek HT12D.

Figura 1.35.4: RWS-434 Fuente: R-8Px.pdf

Pin 1: GND Pin 2: OUT Pin 3: OUT LINEAL Pin 4: VCC Pin 5: VCC Pin 6: GND Pin 7: GND Pin 8: ANT Potencia de salida de RF: 8 mW

ESPECIFICACIONES Símbolo Características Condiciones Mín. Tipo. Máx. Unidad

Vcc Voltaje de alimentación 4,9 5 5,1 V Itot Corriente de operación 4,5 mA

Vdato Salida datos Idata=+200µA (alto)

Vcc-0,5

- Vcc V

Idato=-10µA (bajo)

- - 0,3 V

Fc Frecuencia operación 300 434 MHz Pref Sensibilidad -106 dBm

Ancho de canal ±500 kHz NEB Ancho banda equivalente.

ruido - 5 4 kHz

Velocidad transferencia datos

3 Kb/s

Tiempo de encendido - - 5 ms. Tabla 1.9: Especificaciones del RWS

Fuente: R-8Px.pdf

1.1.5 Micro controladores.

Hace unos años, los sistemas de control se implementaban usando exclusivamente

lógica de componentes, lo que hacía que fuesen dispositivos de gran tamaño y muy

pesados.

Para facilitar una velocidad más alta y mejorar la eficiencia de estos dispositivos de

control, se trató de reducir su tamaño, apareciendo así los microprocesadores.

Siguiendo con el proceso de miniaturización, el siguiente paso consistió en la

fabricación de un controlador que integrase todos sus componentes en un sólo chip.

Page 80: Control de Dispositivos

60

Las principales características que diferencian a un micro controlador de un

microprocesador son:

Son sistemas cerrados, ya que contiene todos los elementos de un

computador en un solo chip, frente a los microprocesadores que son sistemas

abiertos, ya que sacan las líneas de los buses de datos, direcciones y control

al exterior, para la conexión de memorias, interfaces de E/S, etc.

Son de propósito específico, es decir, son programados para realizar una

única tarea, mientras que los microprocesadores son de propósito general.

1.1.5.1 Historia La historia del micro controlador surge desde dos vías de desarrollo paralelas; una

desde Intel y otra desde Texas Instruments. Los primeros micros controladores son el

4004 y 4040 de Intel que dieron lugar al 8048, a su vez predecesor del 8051. Aún así

el primer micro controlador fue el TMS1000 de Texas Instruments. Éste integraba un

reloj, procesador, ROM, RAM, y soportes de E/S en un solo chip.

Figura 1.36: Grafica del primer integrado Fuente: www.neoteo.com

1.1.5.2 Partes de un micro controlador

Figura 1.37: Parte del microprocesador

Fuente: Manual Básico de Microprocesadores

Page 81: Control de Dispositivos

61

CPU o procesador.- Es el cerebro del sistema que procesa todos los datos que

viajan a lo largo del bus.

Memorias.- Está formada por una no volátil (ROM, EEPROM, FLASH)

donde se almacenan los programas y una volátil (RAM) donde se almacenan

los datos.

Reloj principal.- Normalmente todos los micro controladores tienen

incorporados circuitos osciladores para el funcionamiento de éstos.

Puertos E/S (Entrada/Salida).- Soportan las líneas que comunican al micro

controlador con los periféricos externos.

Perro guardián o Watchdog.- Contador que resetea al micro controlador cada

vez que rebosa. Sirve para evitar fallos de funcionamiento, por lo que hay que

inicializarlo periódicamente antes de que rebose.

Protección ante fallo de alimentación o Browout.- Circuito que resetea al

micro controlador cuando la tensión de alimentación baja de un cierto límite.

Temporizadores.- Para controlar periodos de tiempo.

Convertidores A/D y D/A. (Analógico/Digital y Digital/Analógico)

Comparadores analógicos

Moduladores de anchura de impulsos.

Puertos de comunicación.- Tanto serie como paralelo.

Control de interrupciones

1.1.5.3 Aplicaciones El mercado del micro controlador está creciendo cada año y parece no tener barreras.

Los micro controladores a menudo se encuentran en aplicaciones domésticas

(microondas, refrigeradores, televisión, equipos de música, DVD), ordenadores con

sus componentes (impresoras, módems, lectores de discos), coches (ingeniería de

control, diagnostico, control de climatización), control medioambiental

(invernaderos, fabricas, casas), instrumentación, aeronáutica, y miles de usos más.

En muchos podemos encontrar más de un micro controlador.

Page 82: Control de Dispositivos

62

Figura 1.38: Grafica de iteración

Fuente: www.national.com/diagrams Los micro controladores son muy usados el área médica, en los procesos industriales

usarlos hace posible muchas tareas específicas al distribuir un gran número de los

mismos por todo el sistema. La comunicación entre cada micro controlador y uno

central permitiría procesar la información por un ordenador central, o transmitirlo a

otros micro controladores del sistema.

Figura 1.39: Diagrama bloques Proceso Industrial. Fuente: www.national.com/diagrams

Page 83: Control de Dispositivos

63

33%

25%

16%

15%

10%1%

1

2

3

4

5

Son ampliamente utilizarlos para monitorizar y gravar parámetros medioambientales.

El uso en sistemas de navegación por radar, cumplen tareas específicas y complejas.

Figura 1.40: Ejemplo usos de los microcontroladores.

Fuente: www.national.com/diagrams

1.1.5.4 Volúmenes de Ventas.

La distribución de las ventas según su aplicación es la siguiente:

Una tercera parte se absorbe en las aplicaciones relacionadas con los

ordenadores y sus periféricos.

La cuarta parte se utiliza en las aplicaciones de consumo (electrodomésticos,

juegos, TV, vídeo, etc.)

El 16% de las ventas mundiales se destinó al área de las comunicaciones.

Otro 16% fue empleado en aplicaciones industriales.

33 Industria 25 electrodomésticos 16 Sist. De comunicación 15 Industria 10 Automoción 1 Otros

Figura 1.41: Distribución de los Microcontroladores. Fuente: www.google.com

Page 84: Control de Dispositivos

64

2.- CAPÍTULO2

HERRAMIENTAS DE DESARROLLO PARA DISPOSITIVOS MÓVILES

Se estudiara la plataforma de trabajo con el cual se desarrollo la aplicación para los

dispositivos móviles, así como una breve descripción de los famosos teléfonos

inteligentes.

2.1 Introducción al J2ME

J2ME es el acrónimo de Java 2 Micro Edición. J2ME es la versión de Java orientada

a los dispositivos móviles. Debido a que los dispositivos móviles tienen una potencia

de cálculo baja e interfaces de usuario pobres, es necesaria una versión específica de

Java destinada a estos dispositivos, ya que el resto de versiones de Java, J2SE o

J2EE, no encajan dentro de este esquema. J2ME es por tanto, una versión “reducida”

de J2SE.

2.2 Configuración

La configuración es un mínimo grupo de API´s (Application Program Interface),

útiles para desarrollar las aplicaciones destinadas a un amplio rango de dispositivos.

La configuración estándar para los dispositivos inalámbricos es conocida como

CLDC (Connected Limited Device Configuration). El CLDC proporciona un nivel

mínimo de funcionalidades para desarrollar aplicaciones para un determinado

conjunto de dispositivos inalámbricos. Se puede decir que CLDC es el conjunto de

clases esenciales para construir aplicaciones. Hoy por hoy, sólo tenemos una

configuración, pero es de esperar que en el futuro aparezcan distintas

configuraciones orientadas a determinados grupos de dispositivos.

Los requisitos mínimos de hardware que contempla CLDC son:

160KB de memoria disponible para Java

Procesador de 16 bits

Consumo bajo de batería

Conexión a red

Los dispositivos que claramente encajan dentro de este grupo, son los teléfonos

móviles, los PDA (Personal Digital Assintant), los “Pocket PC”.

Page 85: Control de Dispositivos

65

En cuanto a los requisitos de memoria, según CLDC, los 160KB se utilizan de la

siguiente forma:

128KB de memoria no volátil para la máquina virtual Java y

Para las librerías del API de CLDC

32KB de memoria volátil, para sistema de ejecución (Java

Runtime System).

En cuanto a las limitaciones impuestas por CLDC, tenemos por ejemplo las

operaciones en coma flotante. CLDC no proporciona soporte para matemática en

coma flotante. Otra limitación es la eliminación del método Object.finalize.

Este método es invocado cuando un objeto es eliminado de la memoria, para

optimizar los recursos. También se limita el manejo de las excepciones. Es

complicado definir una serie de clases de error estándar, que se ajuste a todos los

dispositivos contemplados dentro de CLDC. La solución es soportar un grupo

limitado de clases de error y permitir que el API específico de cada dispositivo

defina su propio conjunto de

Errores y excepciones.

La seguridad dentro de CLDC es sencilla, sigue el famoso modelo sandbox.

Las líneas básicas del modelo de seguridad sandbox en CLDC son:

Los ficheros de clases, deben ser verificados como aplicaciones válidas.

Sólo las APIs predefinidas dentro de CLDC están disponibles.

No se permite cargadores de clases definidos por el usuario.

Sólo las capacidades nativas proporcionadas por CLDC son accesibles.

2.3 Perfiles

En la arquitectura de J2ME, por encima de la configuración, tenemos el perfil

(profile). El perfil es un grupo más específico de APIs, desde el punto de vista del

dispositivo. Es decir, la configuración se ajusta a una familia de dispositivos, y el

perfil se orienta hacia un grupo determinado de dispositivos dentro de dicha familia.

El perfil, añade funcionalidades adicionales a las proporcionadas por configuración.

Page 86: Control de Dispositivos

66

La especificación MIDP (Mobile Information Device Profile), describe un

dispositivo MIDP como un dispositivo, pequeño, de recursos limitados, móvil y con

una conexión “inalámbrica”.

2.4 MIDLet

Las aplicaciones J2ME desarrolladas bajo la especificación MIDP, se denominan

MIDLets. Las clases de un MIDLet, son almacenadas en bytecodes java, dentro de

un fichero .class. Estas clases, deben ser verificadas antes de su “puesta en marcha”,

para garantizar que no realizan ninguna operación no permitida. Este pre

verificación, se debe hacer debido a las limitaciones de la máquina virtual usada en

estos dispositivos. Esta máquina virtual se denomina KVM. Para mantener esta

máquina virtual lo más sencilla y pequeña posible, se elimina esta verificación, y se

realiza antes de la entrada en producción. El pre verificación se realiza después de la

compilación, y el resultado es una nueva clase, lista para ser puesta en producción.

Los MIDLets, son empaquetados en ficheros “.jar”. Se requiere alguna información

extra, para la puesta en marcha de las aplicaciones. Esta información se almacena en

el fichero de “manifiesto”, que va incluido en el fichero “.jar” y en un fichero

descriptor, con extensión “.jad”. Un fichero “.jar” típico, por tanto, se compondrá de:

Clases del MIDLet

Clases de soporte

Recursos (imágenes, sonidos...)

Manifiesto (fichero “.mf”)

Descriptor (fichero “.jad”)

Un fichero “.jar” puede contener varios MIDLets. Esta colección de MIDLets, se

suele llamar “MIDLet Suite”. Esta unión de varios MIDLets en una distribución,

permite compartir recursos (imágenes, sonidos...), y por tanto optimizar los recursos

del dispositivo.

Page 87: Control de Dispositivos

67

2.5 Herramienta Netbeans

Netbeans es un IDE (Integrated Development Environment), una herramienta de

desarrollo para escribir programas Java pero también, gracias a sus módulos, muchos

otros lenguajes, desde C y C++ hasta XML, HTML y Java Server Pages, pasando por

cualquier tecnología de la calaña de JSP, RMI, CORBA, JINI, etc.

Brevemente, adrémonos camino en NetBeans con un rápido repaso por sus más

interesantes características. Entre otras, un editor de código con sistema de

coloración de la sintaxis y de auto-completado, anotaciones, macros e identificación

automática del código, soporte para Java, C, C++, XML y HTML, así como para

JSP, RMI, CORBA, JINI, JDBC y Servlet. Y por último, para los sistemas de control

de versión Ant y CVS, perfectamente integrados a NetBeans.

Netbeans 6 incorpora características de edición para desarrollo móvil visual,

desarrollo en c++, ruby y soporte para rails, modelado visual de uml, y lo más

importante, un editor visual de interfaces graficas.

2.5.1 Características del Netbeans 6.0

Smarter de código. El editor de NetBeans es más rápido y más inteligente,

proporcionando terminaciones de las palabras clave, los campos, y las

variables. También se enumeran la más lógica de las opciones en la parte

superior, y le permite profundizar en la plena opciones en la parte inferior

Figura 2.1: Programando en Netbeans Fuente: Autores

Destacados. Puede pensar de los aspectos más destacados como una

característica fácil de utilizar y más correcta sustitución de los editores de

búsqueda. El IDE pistas de la posición del carácter y, basándose en ella, se

destacan algunas partes del código. Entre los puntos más destacados están

Page 88: Control de Dispositivos

68

marcados con un color de fondo en el editor también se puso en la banda de

error, que los permisos para tener visión de conjunto de todo el archivo.

Mejora de la navegación y de la inspección. Además de los más destacados,

la fuente editor te permite navegar rápidamente a través de su código con una

mejor organización de la ventana del navegador y los diputados y jerárquico

Inspectores.

Más que de código. Con las plantillas de vivir y Surround Con funcionalidad, puede

introducir rápidamente de uso común de los bloques de código y centrarse en la

lógica empresarial.

Figura 2.2: Ejemplo de código en Netbeans

Fuente: Autores

Apoyo a los Proyectos. Crea rápidamente Ruby proyectos con estructura lógica,

ejecute los archivos de Ruby, Ruby configurar otros intérpretes (como JRuby o

nativos Ruby), localizar e instalar Ruby Gems gráfica a través de un asistente, crear y

ejecutar pruebas de unidad, ejecute RSpec especificación de archivos, entre un salto

de Ruby Archivo y su correspondiente unidad de prueba o archivo específico, y así

sucesivamente.

Edición Avanzada Ruby. Avanzada para la edición de código Ruby, utilizando

información semántica sobre el programa para ofrecer de código, que muestra las

clases y métodos disponibles para la expresión actual, junto con la documentación

asociada RDoc. La sintaxis es poner de relieve con mayor información semántica, de

tal manera que sin utilizar variables locales y los parámetros se muestran en gris. Hay

muchas otras funciones de edición, incluida la Declaración Goto para ir al punto de

declaración de una clase o el método de referencia.

Ruby Debugger. Solo pasó o ejecutar código a través de Ruby, sistema de

interrupción, ver variables locales, la llamada pila de navegar, cambiar los hilos, y

Page 89: Control de Dispositivos

69

evaluar expresiones sólo por encima de ellos el ratón sobre la variable en el Editor.

También existe apoyo a la "rápida depuración" de extensión.

Ruby on Rails Apoyo. Generar proyectos de Rails, o generar código a través del

generador de código Rails asistente gráfico, que ofrece documentación sobre los

plugins en el propio asistente. Participación de terceros en los generadores también

tienen soporte. Además, hay acciones para saltar rápidamente entre un Rails acción y

su correspondiente ", o deformaciones en el navegador la URL para más pertinentes

para el archivo que está editando. Base de datos de las migraciones y Rake objetivos

se apoyan también. Por último, se destacan RHTML archivos (junto con la mejora de

NetBeans 6,0 apoyo a los archivos relacionados, tales como JavaScript y CSS).

Figura 2.3: Ventana de proyectos en Netbeans

Fuente: Autores

2.5.2 Más fácil instalación y la actualización.

Unificado de instalación experiencia. El nuevo instalador NetBeans hace que sea más

fácil obtener la funcionalidad que usted desea. No más descargar e instalar paquetes

separados. Ahora usted elija la que mejor se adapte a descargar e instalar usted las

características y módulos de ejecución que necesita en un solo instalador. Puede

Page 90: Control de Dispositivos

70

añadir la funcionalidad más adelante por volver a ejecutar el instalador.

Mantener actualizado. El Centro de actualizaciones y Gestor de módulos han sido

absorbidos por el administrador de complementos. Fácil de activar y desactivar la

funcionalidad, la búsqueda de actualizaciones y nuevas funcionalidades en un solo

lugar.

2.5.3 Swing GUI desarrollo

Además de numerosas mejoras de la muy aclamada NetBeans GUI Designer (antes

conocido como "Proyecto Matisse"), el desarrollo de aplicaciones Java de escritorio

de apoyo se ha visto mejorada con la siguientes características:

Base de datos de aplicaciones Swing. Tomando ventaja de la tecnología de

encuadernación Beans (JSR 295) y la persistencia de Java API, es ahora más fácil

que nunca para crear aplicaciones de bases de datos de escritorio Swing. Con los

nuevos proyectos de aplicaciones Java Desktop plantilla, usted puede configurar una

forma que muestra una tabla de base de datos y le permite modificar la base de datos.

Vincular una tabla de base de datos a una forma existente arrastrando una tabla desde

la ventana de tiempo de ejecución en un formulario.

E

Figura 2.4: Ejemplo de Aplicación Con Base de Datos Fuente: Autores

Page 91: Control de Dispositivos

71

2.5.4 Perfiles.

Perfil integrado en Netbeans IDE. NetBeans Profiler se ha convertido en una parte

integral de NetBeans IDE de 6,0! No hay ahora ninguna necesidad de descargar e

instalar el NetBeans Profiler separado.

Comparar Memory Snapshots. Usted puede comparar guardado y sin guardar las

instantáneas de memoria para ver qué objetos se han creado o puesto en libertad de

entre el montón, cuando se tomaron las instantáneas. Para más, véase la comparación

de la memoria de instantáneas.

DrillDown Gráfico. Perfiles de los resultados se pueden visualizar en un gráfico que

clasifica tiempo de CPU que se ha gastado. Puede hacer clic en el gráfico de las

secciones para ver los detalles de las categorías de alto nivel para información más

detallada de perfiles. Para más, véase Áreas de Interés - Categorización normas

Heap Walker. Cuando un perfil de su aplicación, podrá ahora utilizar el Heap Walker

para ayudar a evaluar los contenidos de Java heap y búsqueda de fugas de memoria.

Para obtener más información acerca de Heap Walker, consulte la documentación

sobre el Perfil del 6,0 Heap Walker.

Adjuntar dinámico en JDK 1,6.

Figura 2.5: Creando un proyecto nuevo

Fuente: Autores

Page 92: Control de Dispositivos

72

Figura 2.6: Interfaz de Netbeans Fuente: Autores

2.6 Web y Java EE.

Built-in visual para el diseño de aplicaciones web. La plantilla de proyecto de Visual

Web es ahora fusionada con la principal aplicación web plantilla de proyecto. Sólo

tiene que añadir la Visual Web JavaServer Faces marco de su proyecto web y la

palanca de una amplia biblioteca de Ajax permitió a los componentes JavaServer

Faces para construir su aplicación.

Visual flujo de la página de edición. Vinculación de páginas de la aplicación web

nunca ha sido más fácil con el nuevo editor de Visual Page Flow, el apoyo a

JavaServer Faces, JSP, y las páginas HTML.

Mayor soporte de JavaScript. Completo de sintaxis, de código, y la comprobación de

errores de código JavaScript está disponible tanto en el stand-alone y JavaScript en

los archivos de HTML, RHTML, y archivos JSP.

Page 93: Control de Dispositivos

73

Mejora de los servicios web de apoyo. Arrastre y suelte el consumo de servicios web

visuales en páginas web app. La mejora de la interoperabilidad de servicios Web.

Soporte para Ajax habilitado componentes JavaServer Faces. Proyecto Woodstock

biblioteca de componentes encapsula Javascript y complejo del lado del servidor

dentro de los componentes JavaServer Faces. Usando un componente habilitado

Ajax-es como trabajar con cualquier otro componente: Arrastre y suelte el

componente, sistema propiedades, personalizar y del lado del servidor gestores de

eventos.

Fácil migración de Java Studio Creator. Situado en la ruta de migración de Java

Studio Creator 2, NetBeans 6 preserva su inversión en proyectos de Java Studio

Creator vez que le permiten aprovechar las numerosas características de

productividad de la NetBeans IDE en una única herramienta.

Aumento de la edición de CSS. El editor de CSS permite una vista previa de los

cambios en su CSS como que se realicen.

Figura 2.7: Desarrollo de un proyecto Fuente: Autores

Page 94: Control de Dispositivos

74

2.7 Mobility

Nueva Integrado de IU para CLDC / MIDP CDC y el desarrollo. El paquete de

Movilidad ahora apoya el proyecto de propiedades que antes sólo estaban disponibles

para CLDC / MIDP proyectos. Entre ellas figura el apoyo a proyectos de

configuración de dispositivos de fragmentación, la ofuscación y la optimización

integrada de apoyo, y múltiples opciones de despliegue, todo construido en Apache

Ant para la codificación y manejo más fácil.

Nuevo juego constructor. Ahora es más fácil de crear juegos móviles con el paquete

de la movilidad visual de la edición de apoyo a la API MIDP 2,0 Game. La API

soporta sprites de animación y la capacidad de disponer en capas de suelo de

baldosas escenas.

Nueva Mobile Visual Designer. El Visual Designer Mobile (VMD) se ha rediseñado

para mejorar la funcionalidad y facilidad de uso.

Diseño de análisis. Análisis de diseño identifica los componentes no utilizados para

la separación visual de los diseños complejos.

Nuevos componentes personalizados. Nuevos componentes para el móvil Visual

Designer simplificar la creación y el diseño de los navegadores móviles de archivo,

servicio de mensajes cortos (SMS), los compositores, las pantallas de inicio de

sesión, y el Administrador de información personal (PIM) de los navegadores.

Nuevos componentes para el control de flujo.

Generado código es ahora más fácil de modificar.

Re-escrito JSR-172 talón compilador. El nuevo generador tiene soporte para Base64

tipo y es capaz de analizar la documentación de los métodos.

La mejora de los proyectos de gestión de la configuración. Una nueva interfaz de

usuario para el asistente del proyecto hace que sea más fácil de añadir nuevo

proyecto para las nuevas configuraciones de los dispositivos móviles. Ahora es más

fácil crear varias compilaciones para múltiples configuraciones.

Page 95: Control de Dispositivos

75

Figura 2.8: Referencias en Netbeans Fuente: Autores

2.8 SOA

Artefactos para el servicio de composición y montaje. El Composite Application

Service Asamblea Editor le permite editar la configuración de proyectos

empresariales. Apoya la adición y / o modificación de fijaciones y el servicio de

puntos finales, añadir / eliminar conexiones entre las unidades de servicios para

conectar a los puntos finales de las unidades de servicios externos, y la creación de

encuadernación Componente-Componente de encuadernación conexiones.

WSDL editor gráfico. Crear resume documentos WSDL (WSDL sin ataduras)

fácilmente junto con la información de tipo socio enlace.

XSLT editor para editar transformaciones. Visualmente editar transformaciones.

Herramientas de apoyo para los componentes vinculante. Apoyo a Archivo, HTTP, y

JMS vinculante componentes.

Java EE servicio Web de apoyo a los proyectos. Un Java EE proyecto que ejecuta el

servicio de servidor Web o interfaces de cliente se puede agregar a un compuesto

como una aplicación de servicios JBI Dependencia. El Java EE proyecto pueden

Page 96: Control de Dispositivos

76

comunicarse con otras unidades de servicios directamente mediante el interior JBI

normalizados Mensaje Router (RMN).

Figura 2.9: Abrir un proyecto

Fuente: Autores

Figura 2.10: Trabajando en el proyecto

Fuente: Autores

Page 97: Control de Dispositivos

77

2.9 UML.

Plantilla basada en la generación de código ya disponible y personalizable. UML

ofrece ahora la plantilla para la generación de código basado Adelante Ingeniería. El

nuevo enfoque de generación de código utiliza FreeMarker plantillas, que permiten a

los usuarios personalizar la forma en el código se genera por la simple modificación

de las plantillas utilizadas. Los usuarios pueden mejorar la generación de código con

nuevas plantillas de generación de código usando las plantillas de dominio en el

panel de ventana de Opciones de UML.

Aumento de la generación de código de función. La capacidad de fusión de código

fuente generado recientemente en los archivos de código fuente ya está disponible.

Mejora de la gestión de las colecciones. Un usuario de la colección de tipos se

conserva durante Adelante y de ingeniería inversa y puede ser cambiado a través de

conjunto y de diálogo de propiedades para la generación de código.

Herramientas de alineación existentes en la actualidad. El diagrama de ahora, el

Editor ha alineación herramientas disponibles. Seleccione el diagrama de los

elementos que se suman, clic con el botón derecho de la selección, y elija Alinear

desde el menú emergente.

Nueva ventana de diseño. Por defecto, la ventana es ahora Documentación acoplarse

a la ventana Propiedades de la zona. El Centro de Diseño de la ventana es ahora

acopló a la zona Explorer por defecto.

Guardar como ahora en el diagrama de acción nodo. El "Guardar como" la acción se

ha añadido al diagrama de nodos. La acción permite que un diagrama que se

dupliquen.

Page 98: Control de Dispositivos

78

Figura 2.11: Ventana de opciones Fuente: Autores

Figura 2.12: Test de parámetros Fuente: Autores

Page 99: Control de Dispositivos

79

Figura 2.13: Trabajando con clases Fuente: Autores

Figura 2.14: Variables Fuente: Autores

Page 100: Control de Dispositivos

80

Figura 2.15: Configuración Variables Fuente: Autores

Figura 2.16: Arquitectura de un módulo Fuente: Autores

Figura 2.17: Ventana General Fuente: Autores

Page 101: Control de Dispositivos

81

2.10 Visual Biblioteca API.

La Biblioteca Visual API, que es la generación siguiente gráfico Biblioteca, es útil

para la visualización de datos, como el gráfico orientado a modelar, en los módulos

de NetBeans.

Preferencias de la API de NetBeans. El NetBeans Preferencias NetBeans proporciona

una API específica de aplicación de la API de Preferencias del JDK. Por ejemplo,

que te permite almacenar las preferencias del usuario en el directorio de NetBeans.

Lexer. Mejora de la API de NetBeans para la creación de fichas de un texto de

entrada. Las fichas se pueden utilizar para, por ejemplo, proporcionan sintaxis para

colorear.

Logger. NetBeans API ErrorManager obsoleto, en favor de la norma del JDK Logger

mecanismo. Para más detalles, véase el registro en NetBeans.

Interfaces Generified. El JDK 1,5 genéricos se utilizan en toda la API de NetBeans.

2.11 Dispositivos Móviles

Existen variedad de dispositivos Móviles, entre ellas 2 grandes y diferenciados

grupos:

a.- Computadoras de Mano

Palm

Pocket

b.- Teléfonos Celulares

Nokia

Sony Ericson

2.11.1 Computadoras de Mano

Características:

Ordenador de mano con conectividad inalámbrica total, el ordenador de mano Palm® T|X

es lo que esperabas. Utiliza las tecnologías Wi-Fi y Bluetooth integradas para consultar el

correo electrónico, navegar por Internet y acceder a archivos en redes. Se puede visualizar

Page 102: Control de Dispositivos

82

páginas Web, presentaciones de PowerPoint, documentos de Word y hojas de cálculo de

Excel, en la gran pantalla en color que cambia de posición vertical a horizontal. Además, es

totalmente compatible con Microsoft Outlook. El ordenador de mano Palm T|X resulta

atractivo a primera vista. Su diseño elegante es todo menos corriente.

Especificaciones Técnicas:

Especificaciones del producto.

Sistema operativo

Palm OS® Garnet 5.4

Memoria

128 MB (100 MB accesibles para el usuario)

Procesador

Procesador basado en ARM Intel a 312 MHz

Pantalla

Pantalla táctil TFT 320 x 480 transflectiva.

Compatible con más de 65.000 colores Modos de orientación horizontal y vertical

Inalámbrico.

Tecnología inalámbrica Wi-Fi 802.11b.

Tecnología inalámbrica Bluetooth® 1.1.

Audio

Altavoz

Toma estándar de 3,5 mm para auriculares estéreo

Ranura de expansión

Compatible con tarjetas MultiMediaCard, SD y SDIO

Batería

De litio recargable

Page 103: Control de Dispositivos

83

Cable/Alimentación

Cable de sincronización USB

Adaptador de CA

AC adapter (108-32 VAC/60Hz)

Tamaño

3.08" W x 4.76" H x .61" D

78.2mm W x 120.9mm H x 15.5mm D

Peso

149 g

Requisitos del ordenador de escritorio.

Ordenador Windows

Windows 2000 (SP4), Windows XP

Puerto de hardware USB y unidad de CD-ROM

Son necesarios derechos de administrador para instalarlo.

Para la sincronización con Outlook es necesario MS Outlook 2000, 2002 o 2003

Macintosh

Mac OS 10.2.8 a 10.4

Puerto de hardware USB y unidad de CD-ROM

Son necesarios derechos de administrador para instalarlo

2.12 WIFI

Wi-Fi (siglas del inglés Wireless-Fidelity) es un conjunto de estándares para redes

inalámbricas basados en las especificaciones IEEE 802.11. Fue creado para ser

Page 104: Control de Dispositivos

84

utilizado en redes locales inalámbricas, sin embargo es frecuente que en la actualidad

también se utilice para acceder a Internet.

Wi-Fi es una marca de la Wi-Fi Alliance (anteriormente la WECA: Wireless

Ethernet Compatibility Alliance), la organización comercial que adopta, prueba y

certifica que los equipos cumplen los estándares 802.11.

2.12.1 Seguridad WIFI

Mecanismos para validar clientes en una red inalámbrica:

Open Autentication

Shared Key Authentication.

Validación de estaciones basada en dirección MAC

a.- Open Autentication.

Este tipo de autenticación se basa en la encriptación posterior que se va a hacer de

los datos enviados a través de la red inalámbrica.

Aunque un cliente pueda validarse contra el punto de acceso, si no conoce las claves

de encriptación de los datos no podrá enviar información.

b.- Shared Key Authentication.

Este mecanismo necesita que tanto clientes como puntos de acceso tengan

configurada una clave WEP estática.

Para evitar el envío de la clave WEP a través del medio inalámbrico se utiliza un

mecanismo del tipo petición/respuesta.

El punto de acceso envía al cliente un texto aleatorio para que sea cifrado con la

clave WEP del cliente. Este texto es diferente cada vez que se solicita una validación.

El cliente envía el texto cifrado al punto de acceso. Entonces el punto de acceso

descifra con su clave WEP el texto cifrado y comprueba si el texto de cifrado

coincide con el texto aleatorio original. Si ambos coinciden el punto de acceso da por

bueno el cliente.

Page 105: Control de Dispositivos

85

c.- Validación de estaciones basada en dirección MAC

El punto de acceso dispone de una lista de direcciones MAC de clientes que pueden

utilizar la red inalámbrica limitando de esta manera la posibilidad de que se

produzcan accesos no autorizados a la red.

MAC-Spoofing: Un posible intruso, con un analizador de protocolos, captura

direcciones MAC de clientes y configura su propia tarjeta WLAN para que tenga

una dirección MAC válida.

2.12.2 WEP

Son las siglas de Wired Equivalent Privacy (Privacidad Equivalente a redes

cableadas) y es un mecanismo de cifrado continuo que utiliza clave simétrica. El

hecho de utilizar clave simétrica implica que la clave de encriptación debe ser

conocida por los dos extremos.

No realiza un cifrado extremo a extremo como sería deseable.

Estas claves deben ser estáticas y es necesario llevar a cabo una configuración

manual de las mismas.

Page 106: Control de Dispositivos

86

3.- Capítulo 3. DESARROLLO DEL PROYECTO: CONTROL INDUSTRIAL POR DISPOSITIVOS

MÓVILES.

En este capítulo contemplamos analizar y describir el desarrollo de nuestro sistema,

describiremos los componentes utilizados, así como plataformas de desarrollo y

demás.

3.1 Antecedentes

Cada día es más frecuente el uso de tecnología para aumentar la productividad

dentro de la industria, “automatizar” es la palabra más utilizada en un proceso, la

electrónica industrial se ha convertido en una ciencia que busca alianzas con demás

ingenierías para poder integrar en un solo conjunto los sistemas de control industrial,

para así convertirlos en escalables, sólidos, y fiables.

Los distintos campos como la electro medicina, la aeronáutica, la robótica, la

domótica entre otras están haciendo que ciencias converjan entre si y exigen de los

ingenieros una integración de tecnologías de manera multidisciplinaria, tales como la

ingeniería en sistemas, las telecomunicaciones, la electrónica, la microelectrónica, y

la ingeniería industrial, todas juegan un papel importante para así ocupar un lugar

importante en la tecnología moderna dentro de la industria.

3.2 Elementos de un sistema de control

La mayoría de sistemas de control están compuestos por tres partes:

Sensores. Procesadores. Actuadores.

Figura 3.1: Elementos Sistema de control. Fuente: Electrónica industrial de CEKIT

Tenemos varios tipos de sensores como los detectores de proximidad, sensores de

posición, de fuerza, tenemos los famosos transductores de presión, temperatura y de

ciertos parámetros de fluidos, sensores ultrasónicos, en fin una gran variedad de

sensores que nos permiten monitorear de alguna manera las señales analógicas

existentes en el medio, señales tales como presión, temperatura, presión, corriente,

Procesadores ActuadoresSensores

Page 107: Control de Dispositivos

87

voltaje, y cabe recalcar que permite adquirir datos puntuales es decir señales de

encendido o apagado muy, datos muy útiles en el caso de tomar decisiones acertadas.

Figura 3.2: Tipo de Señales. Fuente: Autores

Los procesadores no son más que el controlador del sistema, es decir el que

gobierna a los actuadores dependiendo de su programación y de las señales

adquiridas.

A continuación mostramos una tabla con el resumen de las diferentes maneras de

controlar y monitorear un proceso industrial.

Los actuadores son una parte muy importante en los sistemas de control, ya que son

los encargados de regular la potencia del proceso y también se encargan de

amplificar las señales de mando, tenemos algunos tipos de actuadores tales como:

•Usados en el control de fuidos gaseosos por medio de señales eléctricas.•Por ejemplo se puede controlar el flujo de aire.Control Electroneumático.

•Bien pueden usarse para controlar procesos sencillos y complejidad media, controlan entradas y salidas de manera del que hayan sido programados.Microcontroladores.

•Se pueden controlar los procesos industriales de manera remota con protocolos de comunicacion tales como ModBus, ethernet, y demas.Redes de Automatización.

•Se obtiene informacion completa de determinado proceso y a la vez se ejecutan labores automaticas, se pueden generar reportes, de manera facil y comoda.Control por Computadora.

•Controladores Lógicos Programables, son dispositivos de procesamiento que poseen entradas y salidas, de diferentes tipos de señal, su funcionamiento depende del programa que previamente se le haya cargadoPLC o Autónomas.

•Tenemos las computadoras industriales, tarjetas diseñadas especialmente para la adquisicion de señales, protocolos de comunicación.Otros Sistemas.

Señales

Analogas

Temperatura

Presión

Puntuales

On

Off

Page 108: Control de Dispositivos

88

3.3 Motivación.

La mayoría de proceso están compuestos por dos partes: el proceso controlado o

ambiente y el controlador, este interactúa con el ambiente basándose en la

información que percibe de los sensores.

La iteración permite al controlador percibir correctamente el estado de las variables,

de otra forma los efectos podrían ser muy severos, es por eso el monitoreo periódico

del sistema y un procesamiento de esta información.

En nuestro proyecto se usa el controlador, la Computadora y varios

microcontroladores, combinados de manera correcta para adquirir señales y controlar

los diferentes actuadores de acuerdo al requerimiento del sistema, hay que recalcar

que este sistema es de lazo cerrado.

El sistema de control en tiempo real debe:

Realizar sus funciones dentro de plazos de respuesta, ejecutándose dentro de

su periodo, tal que se garantice la estabilidad del lazo cerrado.

Planificar todos los procesos de control que conforman una aplicación y

garantizar en todos ellos el cumplimiento de plazos de respuesta.

Proporcionar robustez, es decir poco sensible a las variables presentadas.

Garantizar una operación en forma confiable de los procesos ejecutándose.

Permitir accesibilidad a diferentes aplicaciones para controlar los procesos.

Permitir movilidad dentro y fuera de la industria.

3.4 Relaciones.

Las aplicaciones de procesos industriales, son desarrolladas en dos fases, la primera:

El diseño de las leyes de control

La implementación del sistema de tiempo real.

Actuadores Eléctricos:•Reles.•Contactores.•Motores Electricos, Servomotores, motores de paso.

Actuadores Hidráulicos y Neumáticos:•Válvulas.•Servoválvulas.

Page 109: Control de Dispositivos

89

En el campo industrial grupos de investigación trabajan en la integración de

hardware y software de tal manera que convergen para optimizar varios o todos los

procesos dentro de una industria, tal que permita la optimización del desarrollo,

producción o fabricación de un producto de consumo.

3.5 Objetivos de la Tesis.

Implementar una estación de monitoreo y control de un proceso de llenado y

vaciado de un tanque, y su respectivo censo de temperatura de las bombas utilizadas

de manera local y remota con movilidad hacia el operador.

3.5.1 Objetivos Específicos.

Llevar a cabo el objetivo general de esta tesis, subdividimos el trabajo en diferentes

actividades:

3.6 Trabajo Propuesto En la industria local la mayor es común visualizar y controlar procesos industriales

desde muy pequeños y otros más grandes y peligrosos para ser operados de manera

manual, la tendencia de las industria ecuatorianas es de colocar e implementar un

departamento de sistema en sus instalaciones, para que de soluciones de correo,

acceso a internet, VozIP, en fin todas las tecnologías en el campo de redes e

1•Implementar un sistema de hardware que permita la interacción con la PC, Palm y el teléfono.

2•Implementar la arquitectura en una maqueta de manera académica.

3•Desarrollar e implementar una aplicación para el control y monitoreo de señales del sistema (la parte de

la computadora de escritorio).

4•Desarrollar e implementar una aplicación diferente para cumplir las mismas funciones del operador

central, pero de manera remota aprovechando la tecnología de los dispositivos móviles (Teléfono inteligentes, Pocket PC, Palm).

5•Integrar varias tecnologías en la aérea de ingeniería para automatizar y otorgarle la movilidad y

aprovechar al máximo el sistema.

Page 110: Control de Dispositivos

90

informática, la finalidad de nuestro proyecto es integrar todos estos departamentos, y

darle robustez al área industrial.

Se realizara un hardware de adquisición de datos (variables físicas como

temperatura, presión, variables discretas como encendido o apagado de algún

dispositivo), y control de variables discretas (encendido y apagado), estos datos se

visualizaran en un software de control y visualización realizado en la plataforma de

programación “Visual Basic 6.0”, a la vez se guardaran de manera transparente para

el usuario en una base de datos realizada en “MySQL 5.0”, el software tipo SCADA

podrá visualizarse desde un dispositivo móvil de última generación tipo Smartphone,

Palm, Pocket, este dispositivo tendrá la capacidad tal cual el operador este frente a su

computador, es decir monitoreara, controlara los procesos gracias a la interacción

con la base de datos colocada en el servidor, el proyecto tiene dos valores agregados

muy útiles; el primero es que el operador podrá controlar la planta y estar informado

de la misma por medio de SMS(mensajes cortos de textos), una vez fuera de la

empresa y del área de la Wi-Fi, el segundo valor agregado es que dentro de la zona

Wi-Fi los dispositivos podrán estar siempre en contacto en otras palabras (“chatear”),

supongamos que existe un problema en una área específica por ejemplo “carga de

combustible”, y el operador visualiza en la pantalla del móvil una falla y este está

lejos del lugar, este tiene l posibilidad de ubicar a otros operadores por medio del

chat para que den solución al problema.

En fin, es un proyecto totalmente integral, compromete tecnologías tal como las

comunicaciones, sistemas, electrónica.

3.7 Nuestro Sistema

Como fue detallado en parte del primer capítulo el objetivo central es otorgarle al

operador la capacidad de moverse dentro y fuera de la industria sin llegar a

despegarse de ella, en este capítulo detallamos como logramos esos objetivos,

explicando el funcionamiento de los diferentes módulos. Se detallara el sistema de

manera general y se ahondará en la parte hardware tanto del módulo PC-USB, como

de la parte de control.

Page 111: Control de Dispositivos

91

Figura 3.3: Esquema de nuestro Sistema

Fuente: Autores 3.7.1 Arquitectura del Sistema. Módulo Hardware.

Control por USB. (Adquisición y control de variables discretas.)

Comunicación por Radio Frecuencia de las variables.

Sistema a controlar.

Comunicación por SMS.

Acceso Inalámbrico desde dispositivos móviles y PC.

Dispositivos Móviles.

Módulo Software.

Servidor de aplicaciones.

Servidor WEB.

Base de Datos.

Aplicaciones de monitoreo y control.

Page 112: Control de Dispositivos

92

3.7.2 Descripción general del proceso. Empezamos por el sistema que no es más que un proceso netamente académico y

demostrativo por cuestiones económicas, tiempo, y fácil de interpretar, pero no con

esto damos poca complejidad al proyecto ya que lo que queremos demostrar es la

integración de tecnologías para la implementación del sistema completo.

Este puede migrar a procesos grandes e instalarse sin complicaciones en los mismos.

Figura 3.4: Descripción de Nuestro Sistema Fuente: Autores

Un claro posible aplicación segura de este sistema es sin dunda en el monitoreo de

los tanques elevados ya que las bombas de llenado y vaciado están a una

considerable distancia y lo operadores se encuentran en constante movimiento.

Contamos con un tanque elevado el cual tiene dos bombas, la primera que es de

llenado y la segunda de vaciado, ambas bombas cuentan con sensores de

temperatura, y el tanque tiene tres medidores puntuales que indican el nivel de agua

presente en el mismo.

El estado de las bombas (encendido, apagado, temperatura), niveles de agua presente

en el tanque son llevadas hacia la Servidor central de manera inalámbrica, para lograr

esto usamos los módulos HT-12E (2 para el transmisión).

Page 113: Control de Dispositivos

93

El módulo PC-USB se encarga de tomar esas variables por otro módulo de RF

llamado HT-12D (2 para la recepción).

Estos valores son tomados y llevados al computador por medio del puerto de

comunicación USB, son procesados, interpretados por un programa desarrollado bajo

la plataforma Visual Basic 6.0, este se encarga de monitorear estas variables y las

almacena en una base de datos, dependiendo de algoritmo, procedimiento o proceso

en el que se encuentre, esta base esta desarrolla bajo la plataforma MySQL 5.0, a su

vez el control o monitoreo puede hacerse desde un teléfono inteligente, PocketPC o

palm, este o estos cuentan con un programa desarrollado bajo la plataforma J2ME, el

cual acceda a la base de datos, consulta o modifica de acuerdo a la acción a realizar.

La comunicación también la realiza desde el computador central hacia el sistema a

controlar, dependiendo de la acción a realizar de igual manera modifica los campos

de la tabla para dar oportunidad al operador móvil de ejecutar acciones desde el

móvil.

La distancia máxima de un dispositivo de comunicación a otro es de 80 metros,

características técnicas otorgadas por el fabricante, existen otros módulos que

permiten comunicaciones a distancias mayores.

El rango de operación de los dispositivos móviles está limitado a la red inalámbrica

implementada en la industria.

Como valor agregado contamos con un módulo comunicación dentro de cada

dispositivo móvil que permite a los operadores mantenerse comunicado dentro del

perímetro de la red.

Además tenemos un sistema de alarma cuando se está fuera de la empresa, por medio

de SMS, dando al operador la oportunidad de solucionar los problemas de manera

remota, como por ejemplo apagar una bomba si se disparo una temperatura.

Se detalla a continuación el proceso subdivido en partes antes mencionadas.

Page 114: Control de Dispositivos

94

3.8 Hardware del sistema

3.8.1 Control por USB. (Adquisición y control de variables discretas.)

La parte principal de este módulo lo constituye el integrado PIC 18F4550 del

fabricante Microchip, la función del mismo es de comunicar el software presente en

nuestro servidor hacia el módulo de control de las bombas.

Su principio básico es la de un puente, monitorea los pines de entrada, y envía esos

valores en formato de trama hacia la PC, por medio de la siguiente sentencia

“usb_put_packet(1,envia,8,USB_DTS_TOGGLE)”, dentro del programa presente en

el servidor llevara el código necesario para interactuar con el PIC y poder reconocer

cada una de esas entradas, así mismo podrá ser capaz de recibir la trama de datos

desde el software del servidor por medio de la siguiente sentencia:

“usb_get_packet(1, recibe, 8)”.

Una vez teniendo los datos en el buffer este los enviara hacia el codificador HT-12D,

y a la vez por medio de RF hacia el módulo que controla las bombas de llenado y

vaciado, estos datos son descritos en la tabla 3.2.

Los bits que recibirá el PIC, y que serán otorgados a la PC, serán los mencionados en

la tabla 3.1, los mismos que son capturados por los decodificadores HT-12E.

El puerto “D” del PIC 18F4550, está configurado como puerto de entradas, y el

puerto “B”, como salidas, el código esta desarrollado en “C”, compilado en CCS C

versión 4.057.

Este PIC, gestiona también el inicio de comunicación entre la PC, y el módulo de

control de las bombas, se encarga de habilitar y deshabilitar al HT-12D, para enviar y

recibir los datos.

Se muestra la configuración de los pines del PIC usado.

Page 115: Control de Dispositivos

95

Figura 3.5: Descripción del PIC 18F4550

Fuente: DataSheep microchip

Existen dos varias maneras de instalar el dispositivo por medio de “plug and play”,

que no es más que instalar el dispositivo por medio de HID (Dispositivo de Interfaz

Humana), con velocidades bajas, no necesita driver’s, un claro ejemplo de esto son

los lectores de código de barras, termómetros, mouse, etc.

La manera que interactúan con Windows estos dispositivos es por medio de un VID

(VENDOR IDENTIFICATION), y un PID (PRODUCT IDENTIFICATION), estos

valores son otorgados por Microsoft a los fabricantes de hardware con tecnología

USB.

3.8.1.1 Instalando Driver’s

Para que nuestra tarjeta pueda interactuar con el software es necesario instalar un

driver que permita la comunicación entre el firmware del PIC y el firmware del

Software.

a.- Firmware del PIC.

El VID es un número de 16 bits que significa Vendor Identification o código que

identifica al fabricante del hardware a conectar. En nuestro caso utilizamos el

número 04D8h que identifica a Microchip.

Page 116: Control de Dispositivos

96

El PID es un número de 16 bits que significa Product Identification o código que

identifica al dispositivo en concreto hardware a conectar. En nuestro caso utilizamos

el número 000Ah que identifica a la familia de los PIC18 de este fabricante.

Estos parámetros son colocados en la librería: PicUSB.h, hacemos referencia de esta

en el programa principal del PIC llamado MiUSB.c

Cuando el S.O. conecte con nuestro firmware recibirá el VID&PID y buscará entre

sus drivers instalados para encontrar el que corresponde a esta identificación, si no la

encuentra nos preguntará sobre donde ha de buscar un driver adecuado y deberemos

indicarle su ubicación. Este driver deberá estar configurado para conectar con un

hardware cuyo VID&PID sea el mismo.

A continuación mostramos los pasos para instalar nuestro dispositivo.

Figura 3.6: Instalación del PIC

Fuente: Autores

Podemos definir un nombre para que aparezca en el administrador de dispositivos.

Page 117: Control de Dispositivos

97

Figura 3.7: Periférico conectado. Fuente: Autores

Estos valores deben de ser colocados dentro del archivo picusb.ini para lograr lo

descrito anteriormente.

[Strings] MFGNAME="PROYECTO SALESIANO" INSTDISK="PicUSB Device Driver Disc" DESCRIPTION="CONTROL PIC-PC" SVCDESC="PicUSB Device Driver" ClassName="Control PC-PIC" ClassDesc="PicUSB Sample Device"

b. - Firmware del Software.

Dentro de Visual Basic la manera de comunicación entre la aplicación y el hardware

es por medio de un módulo llamado VBMPUSBAPI.BAS. Esta lleva las rutinas de

llamada a la librería MPUSBAPI.DLL. Mostramos un diagrama de flujo del módulo.

Nuestro dispositivo.

Inicio

Llama DLL

Abre Puerto

Verifico VID y PID

Modulo envia y recibe

Cierra Puerto.

Page 118: Control de Dispositivos

98

Por medio de la siguiente línea de código declaramos el VID y PID con el cual

vamos identificar nuestro dispositivo:

Public Const vid_pid = "vid_04d8&pid_0011" ' Vendor id (Microchip) y Periférico id.

3.8.1.2 Circuito PIC-USB.

Mostramos el circuito de nuestro módulo PIC-USB, notamos los pocos componentes

externos a utilizar.

Figura 3.8: Diagrama del circuito PIC-USB

Fuente: Autores

Page 119: Control de Dispositivos

99

Bit Descripción

D0 Status Sistema General.

D1 Confirmación bomba2

D2 Confirmación bomba1

D3 Tanque Lleno

D4 Tanque Medio

D5 Tanque Vacio

D6 Sensor temperatura bomba2

D7 Sensor temperatura bomba1

Tabla 3.1: Descripción de entradas al PIC 18F4550 Fuente: Autores

Así mismo se reciben los provenientes del sistema a controlar, estos son:

Bit Descripción

B0 On/Off Sistema General

B1 On_Off Bomba 1

B2 On_Off Bomba 2

B3 Control Sistema Total

Tabla 3.2: Descripción de salidas del PIC 18F4550 Fuente: Autores

3.8.2 Comunicación por Radio Frecuencia de las variables.

En esta sección mostraremos los transmisores y receptores de RF, que serán los

encargados de comunicar el módulo PC-USB y el sistema a controlar (Control de

Bombas), como se menciono se utilizan los módulos UHF TWS-418 y RWS-418,

que tienen un alcance máximo de 80 metros.

Page 120: Control de Dispositivos

100

Figura 3.9: Principio de funcionamiento Fuente: Autores

Estos módulos son propiamente de RF, para lograr comunicarnos con mi PIC

utilizaos un par de chips para codificación y decodificación, los HT12E

(Codificador-Emisor) y HT12D (Decodificador-Receptor), respectivamente.

Este juego de integrados codifica y decodifica una palabra de 12 bits, compuesta por

una dirección de 8 bits y una sección de datos de 4 bits. Con esta cantidad de bits se

pueden comandar 256 dispositivos diferentes, enviándoles hasta 16 comandos

distintos a cada uno.

3.8.2.1 Transmisor para un enlace de RF

Figura 3.10: Módulo de Transmisión Fuente: Autores

Mostraos la manera de conexión del módulo transmisor, el rango de voltaje que

permite es de 5 a 12 voltios DC.

Page 121: Control de Dispositivos

101

3.8.2.2 Receptor para un enlace de RF

Figura 3.11: Módulo de Transmisión Fuente: Autores

El receptor, por las características técnicas del chip decodificador HT12D, debe

funcionar exclusivamente con 5V.

3.8.2.3 Receptor-Emisores en módulo PC-USB

Hay que recalcar que mientras se está recibiendo data, el módulo emisor debe estar

desactivado, logramos manteniendo en alto la entrada TE (Transmission Enable =

Habilitación de la transmisión), del integrado codificador HT12E.

Logramos esto con la interacción del PIC y el programa desarrollado en Visual

Basic, de la siguiente manera: Supongamos que se quiere prender el sistema el

operador deberá encender el bit “0” del puerto “B”, “B0” y adicionalmente deberá

habilitar la transmisión. Mostramos un fragmento de código con lo cual se logra, por

cuestiones de seguridad también preguntamos si el dispositivo está conectado, y

podemos también transmitir manualmente con el interruptor conectado en el bit “0”

del puerto “A”, “A0”.

#define LED0 PIN_B7

If (input (PIN_A0) && (usb_enumerated ())) {

Led off (led0);

led_on(Led1);

delay_ms (200);

led_on(Led0);

led_off(Led1);

Page 122: Control de Dispositivos

102

delay_ms (400);

}

3.8.2.4 Receptor-Emisores en módulo Sistema a Controlar.

La teoría es idénticamente igual, acá manejamos dos módulos transmisores ya que

enviamos 4 bits por cada uno de ellos.

Logramos esto ya no por software ni por el PIC mas bien lo hacemos con un reloj

externo para hacerlo totalmente independiente del PIC, logramos sincronizar el envío

de data hacia el módulos conectado en la PC. Así mismo recibimos 4 bits que son de

control Mostramos a continuación el hardware de lo antes descrito:

Figura 3.12: Fuente externa de pulsos.

Fuente: Autores

3.8.2.5 Detalles Técnicos HT-12D / HT-12E

Al tratarse de integrados que se fabrican para que trabajen asociados, uno tiende a

creer que la resistencia que determina la frecuencia del oscilador interno del chip

tendría el mismo valor en ambos circuitos. Sin embargo, para mi sorpresa, no es así.

Como se puede observar en los circuitos, los valores tienen una gran diferencia: 1M

para el transmisor y 47K para el receptor. Posiblemente se pueda afinar aún más la

sensibilidad del receptor ajustando el valor de este último resistor.

Page 123: Control de Dispositivos

103

Cuando se mantiene en bajo la entrada TE (Transmission Enable = Habilitación de la

transmisión), el integrado codificador HT12E transmite constantemente, repitiendo

el código una y otra vez. En estas condiciones, si se modifica el valor de las entradas

de datos se observa que el valor va cambiando en el receptor. Así fue como hicimos

la prueba. El transmisor trabaja con 5 voltios.

En el integrado decodificador HT12D, la señal VT significa Valid Transmission

(Transmisión Válida), es decir, cada vez que esta señal va a un nivel alto es porque el

código presente en la salida de datos es un dato válido para ese dispositivo. Si el

dispositivo no cumple con la dirección que viene en la palabra que ha recibido,

obviamente no se produce esta señal.

3.8.3 Sistema a controlar.

Es la parte del proyecto donde se va a monitorear el estado de las bombas, la

temperatura de las mismas, el nivel del tanque, la interacción con el módulo control

por teléfono (vía SMS). Vemos a continuación la cisterna, el tanque de desecho y el

tanque principal junto a las bombas de llenado y vaciado.

Figura 3.13: Sistema de Llenado y Vaciado. Fuente: Autores

El esquema general del control de bombas se muestra en la siguiente grafica:

Page 124: Control de Dispositivos

104

Figura 3.14: Esquema general “Control de Bombas” Fuente: Autores

Contamos con las siguientes secciones:

Tanque Principal.

Adquisición de Temperatura.

Control bombas y confirmación de bombas

Sistema remoto.

Variables de status.

Control principal.

Fuente de Alimentación

3.8.3.1 Tanque Principal.

Físicamente estarán colocados tres medidores en el tanque principal, el de nivel bajo,

nivel medio y nivel alto. Son de tipo puntual acoplados a un circuito anti rebote cada

uno de ellos y pasan al PIC, para ser procesados por el programa interno del mismo.

Con las siguientes líneas de código sabemos si el tanque se encuentra lleno o vacio.

If Nivel_Bajo=0 or nivel_bajo=1 then AccionNivelBajo

Page 125: Control de Dispositivos

105

if Nivel_bajo=1 and nivel_alto=1 then AccionNivelAlto

En caso de estar en nivel bajo el PIC envía el status al sistema PC-USB, para que

este pueda encender la bomba de llenado, si es el caso de que el tanque se encuentra

lleno, envía este status y espera la confirmación de encendido de la bomba de

descarga.

El circuito anti rebote lo compone una compuerta tipo SCHMITT TRIGGER, de la

serie 4093, un condensador y 2 resistencias, tal cual indica el diagrama siguiente:

Figura 3.15: Esquema general “Control de Bombas”

Fuente: Autores

3.8.3.2 Adquisición de temperatura.

No es más que el acople para monitorear la temperatura de las bombas en línea,

dependiendo de cuál de ellas este encendida.

Lo constituye el sensor LM-35 que es un sensor de temperatura cuyo rango de

medición va desde los -55 ºC a 150 ºC, el mismo que esta calibrado directamente en

grados centígrados, su factor de escala lineal es de +10.01 mV / ºC, y su precisión es

de +/- 0.5 ºC, el rango de operación del mismo va desde los 4 voltios a 30 voltios

DC.

Page 126: Control de Dispositivos

106

Figura 3.16: Esquema general “Control de Bombas”

Fuente: Autores

Como el sensor solo es capaz de entregar a su salida un voltaje de -0.55V a 1.5V

tenemos que acoplar esa señal para poderla llevar al PIC y ser procesada, logramos

esto colocando un amplificador seguidor unitario a la salida del sensor, y un

amplificador no inversor a la salida del primer operacional, esta señal ya acoplada es

enviada a la entrada del PIC, previamente configurada como entradas análogas, y

referencia a 5 voltios, de la siguiente manera:

ADCON1 = %00000101; el puerto A.0, A.1 análogos--A.2 Dig--A.3 +Vref--A.4 Dig

El comportamiento de dentro del PIC a lo que censa la temperatura en cada bomba

está traducido a continuación en un diagrama de flujo.

Si la temperatura sobrepasa el límite colocado en la memoria entonces indicara por

medio de los bits: S1 y S2 que corresponden a temperatura de bomba1 y bomba2

respectivamente.

Page 127: Control de Dispositivos

107

DATO > TEMP1

EPROM 0,[45,45] READ 0, TEMP1READ 1, TEMP2

ADCIN 0, DATOSENSA 1

ALARMA 1

DATO2 > TEMP2

ADCIN 1, DATO 2

ALARMA 2

PROGRAMAPRINCIPAL

SENSA 2

F

F

V

V

Figura 3.17: Diagrama flujo Temperatura Fuente: Autores

A continuación el fragmento de código del diagrama de flujo antes descrito.

;-----------------------------------------------------------------------

eeprom 0,[45,45] ;contenido inicial de la EEPROM

READ 0,temp1 ;lee la EEPROM 0 y lo guarda en temp1

READ 1,temp2 ;lee la EEPROM 1 y lo guarda en temp2

Sensa1:

ADCIN 0, dato ;leer el canal 0 (A0) y guarde en dato

dato = dato /2 ;el dato dividir para 2

if dato > temp1 then Alarma1

Sensa2:

ADCIN 1, dato2 ;leer el canal 0 (A0) y guarde en dato

dato2 = dato2 /2 ;el dato dividir para 2

if dato2 > temp2 then Alarma2

Page 128: Control de Dispositivos

108

3.8.3.3 Control Bombas y confirmación bombas.

Tenemos tres maneras de encender las bombas.

La primera es de manera manual, es decir habrá en campo una botonera capaz de

encender y apagar la misma.

Supongamos que el sistema arranca de manera normal y verifica que el tanque esta

vacio por medio de los sensores, este envía el estatus del mismo, esperando que el

operador encienda la bomba de llenado por medio del software ubicado en el PC o

por medio del POCKET, esta es la segunda forma de prender las bombas. En

operación normal el tanque seguirá llenándose hasta que el nivel del mismo este a su

máxima capacidad, en ese instante la bomba se apagara, y estará lista para ser

encendida y empezar la descarga cuyo proceso es el mismo.

En caso de haber un calentamiento en cualquiera de las bombas en pleno proceso, el

sistema indica al operador que deberá apagar la bomba.

La tercera es por medio de Sistema Remoto, que no es más que la interacción entre

un PIC y un móvil, se hablara más delante de esta etapa.

Se ha considerado l confirmación de encendido de bombas gracias a que los relay

cuentan con dos comunes y cuatro contactos, internamente en el PIC se coloco

código capaz de controlar los picos (anti rebote) de los relay’s

Mostramos fragmento del código, así como su circuito.

if On_Off_B2 = 1 then ActivaB2

Goto AccionNivelAlto

Activa2_B2:

pause 100

high Conf2_B2

for i=1 to 100

pause 4

next

low Tanque_Lleno

Page 129: Control de Dispositivos

109

Figura 3.18: Etapa encendido-apagado bombas.

Fuente: Autores

3.8.3.4 Sistema Remoto.

Su principal componente es el PIC 16F870, se encarga de monitorear el sistema de

manera paralela al PIC principal, para permitir al operador controlar las bombas

desde un teléfono celular de cualquier marca, modelo y de cualquier operadora.

Todo status es monitoreado y avisado de manera de mensajes de texto hacia un

teléfono destino, previamente configurado su número, de la misma manera hacemos

control.

Esto se logra gracias a la comunicación AT, que realiza el teléfono con el PIC de

manera serial, la seguridad del control radica en el programa del PIC, ya que aquí se

coloca el número telefónico único capaz de comunicarse con el sistema.

Mostramos a continuación fragmento del código, junto a su circuito esquemático.

SEROUT2 portb.1,84,[13]

SEROUT2 portb.1,84,["AT+CMGL=0",13]

SERIN2 portb.0,84,[dat0]

SERIN2 portb.0,84, [wait(", ,"),DEC2 dat1]

Page 130: Control de Dispositivos

110

Serin2 portb.0,84, [wait("097482141"),SKIP 5,dec2 dat2]

serout2 portb.1,84, ["AT+CMGD=1",13]

Figura 3.19: Sistema Remoto.

Fuente: Autores

3.8.3.5 Variables de Status.

Son las variables del sistema, mostramos a continuación la declaración de las

mismas.

; Declaro los nombres de los pines

;-----------------------------------------------------------------------

Nivel_Bajo var portA.2 ; IN Nivel Bajo de la Cisterna

Nivel_Alto var portA.4 ; IN Nivel Alto de la Cisterna

Control_Sist_Total var portA.5 ; IN Encendido total del Sistema.

;---PUERTO B--- SALIDAS---

S_1 var portB.0 ; Indica temp alta de la bomba1, se conecta alarma1

S_2 var portB.1 ; Indica temp alta de la bomba2, se conecta alarma2

bomba1 var portB.2 ; Enciende bomba1

bomba2 var portD.1 ; Enciende bomba2

Tanque_LLeno var portB.4 ; Indica estado sensor Nivel_Alto

Page 131: Control de Dispositivos

111

Tanque_Vacio var portB.6 ; Indica estado sensor Nivel_Bajo

On_Off_Sistema_Total var portB.7 ; habilita el sistema total

;---PUERTO C--- ENTRADAS Y SALIDAS---

Confirma_B1 var portC.0 ; IN confirmación ON de bomba_1 desde Sist Electrónico

Confirma_B2 var portC.1 ; IN confirmación ON de bomba_2 desde Sist Electrónico

On_Off_B1 var portC.2 ; IN confirmación encendido bomba_1 desde receptor

On_Off_B2 var portC.3 ; IN confirmación encendido bomba_2 desde receptor

Conf1_B1 var portC.4 ; Out conf ON de B1 hacia Emisor

Conf2_B2 var portC.5 ; Out conf ON de B2 hacia Emisor

Ok var portC.7 ; Out Indica estado del sistema

Así también se muestra el diagrama esquemático de las variables a recibir como a

enviar, en total son 12.

Figura 3.20: Variables del Sistema

Fuente: Autores

Page 132: Control de Dispositivos

112

3.8.3.6 Control Principal.

Lo principal del sistema, podemos considerarlo como la parte medular del mismo,

aquí radica el programa principal desarrollado en BASIC, bajo la plataforma

MicroCode Studio Plus v2.3, y el compilador es PicBasic Pro v2.47.

Lo compone básicamente el PIC16F877A, su descripción se detalla a continuación:

Tabla 3.3: Características Técnicas PIC

Fuente: Autores

En el transcurso del documento del documento se ha descrito el funcionamiento del

sistema por módulos, en esta etapa podemos mencionar que integramos todos ellos

para lograr el funcionamiento del sistema total.

Mostramos a continuación el PIC en detalle con todas las señales que llegan y salen

de él.

Figura 3.21: Control Principal. Fuente: Autores

Page 133: Control de Dispositivos

113

3.8.3.7 Fuente de Alimentación

Tenemos dos etapas, la primera corresponde a la alimentación del sistema en sí, que

es de 5 voltios DC, y la fuente de potencia que es de 12 voltios DC y sirve para

alimentar las bombas, y los relay.

Mostramos el circuito de la misma:

Figura 3.22: Fuente de Alimentación. Fuente: Autores

3.9 Firmware del Sistema

3.9.1 Introducción a Visual Basic Visual Basic es uno de los tantos lenguajes de programación que podemos encontrar

hoy en día. Dicho lenguaje nace del BASIC (Beginner´s All-purpose Symbolic

Instruction Code) que fue creado en su versión original en el Dartmouth College, con

el propósito de servir a aquellas personas que estaban interesadas en iniciarse en

algún lenguaje de programación.

Primero fue GW-BASIC, luego se transformó en QuickBASIC y actualmente se lo

conoce como Visual Basic y la versión más reciente es la 6 que se incluye en el

paquete Visual Studio 6 de Microsoft. Esta versión combina la sencillez del BASIC

Page 134: Control de Dispositivos

114

con un poderoso lenguaje de programación Visual que juntos permiten desarrollar

robustos programas de 32 bits para Windows.

Dentro de este Lenguaje de Programación podemos destacar la amplitud que nos da

al permitir trabajar con puertos de entrada y salida del ordenador siendo así la

herramienta perfecta para destacar en el trabajo con puertos seriales, paralelo y USB

de igual manera el soporte en librerías DLL para acceder a los mencionados puertos

hacen de Visual Basic 6.0 sea la mejor opción para el desarrollo de sistema que

deban de controlar y monitorear dispositivos externos al ordenador.

Su manejo de acoplamiento con las distintas base de datos por medio de la fuente

ODBC hace que visual BASIC permita integrar el sistema remoto con el monitoreo

más cercano al hardware realizando un testeo de cada evento suscitado en el

hardware para que los dispositivos remotos accedan a la base de datos de esta

manera poder lograr un permanente control y monitoreo del hardware.

Así también las librerías propias de visual Basic nos da un sistema de control de

eventos para poder manejar de manera más precisa y exacta los sucesos del hardware

priorizando cada evento sucedido desde el hardware el mismo parámetro que al

acceder al sistema pasa a ser tratado para efectuar la acción referente ha dicho evento

3.9.1.1 Características Generales de Visual Basic

Diseñador de entorno de datos: Es posible generar, de manera automática,

conectividad entre controles y datos mediante la acción de arrastrar y colocar sobre

formularios o informes.

Los Objetos Actives son una nueva tecnología de acceso a datos mediante la acción

de arrastrar y colocar sobre formularios o informes.

Asistente para formularios: Sirve para generar de manera automática formularios que

administran registros de tablas o consultas pertenecientes a una base de datos, hoja

de cálculo u objeto (ADO-ACTIVE DATA OBJECT)

Page 135: Control de Dispositivos

115

Asistente para barras de herramientas es factible incluir barras de herramientas es

factible incluir barra de herramientas personalizada, donde el usuario selecciona los

botones que desea visualizar durante la ejecución.

En las aplicaciones HTML: Se combinan instrucciones de Visual Basic con código

HTML para controlar los eventos que se realizan con frecuencia en una página Web.

La Ventana de Vista de datos proporciona acceso a la estructura de una base de

datos. Desde esta también acceso al Diseñador de Consultas y diseñador de Base de

datos para administrar y registros.

3.9.1.2 Nociones de visual Basic

Es un lenguaje de fácil aprendizaje pensado tanto para programadores principiantes

como expertos, guiado por eventos, y centrado en un motor de formularios que

facilita el rápido desarrollo de aplicaciones gráficas. Su sintaxis, derivada del antiguo

BASIC, ha sido ampliada con el tiempo al agregarse las características típicas de los

lenguajes estructurados modernos. Se ha agregado una implementación limitada de la

programación orientada a objetos (los propios formularios y controles son objetos),

aunque sí admite el polimorfismo mediante el uso de los Interfaces, no admite la

herencia. No requiere de manejo de punteros y posee un manejo muy sencillo de

cadenas de caracteres. Posee varias bibliotecas para manejo de bases de datos,

pudiendo conectar con cualquier base de datos a través de ODBC (Informix, DBase,

Access, MySQL, SQL Server, etc) a través de ADO.

Es utilizado principalmente para aplicaciones de gestión de empresas, debido a la

rapidez con la que puede hacerse un programa que utilice una base de datos sencilla,

además de la abundancia de programadores en este lenguaje.

3.9.1.3 Entornos de desarrollo

Existen dos entornos de desarrollo IDE para Visual Basic:

• Microsoft Visual Basic x.0 para versiones desde la 1.0 hasta la 6.0, (con las

diferencias entre las versiones desde la 1.0 (MS-DOS/Windows 3.1) hasta la

Page 136: Control de Dispositivos

116

SISTEMAMANTENIMIENTO

USUARIOS DISPOSITIVOS

PROCESOS

MONITOREO CONTROL

CONSULTAS

CONSUMODE USUARIOS VARIACIONESENCENDIDO/APAGADO

3.0 (16 bits, Windows 3.1) y las de la 4.0 (16/32 bits, Windows 3.1/95/NT)

hasta la 6.0 (32 bits, Windows 9x/Me/NT/2000/XP/Vista)

• Microsoft Visual Studio .NET, entorno integrado para varios lenguajes entre

ellos Visual Basic .NET (32/64 Bits, Windows XP/Vista), con ediciones:

Express (más limitada en herramientas pero gratuita)

Standard

Professional (Con licencia comercial)

Team Edition (Mucho más completa en herramientas con licencia

comercial más cara)

3.9.2 Descripción del Sistema

El esquema del sistema de acuerdo a la interacción será el usuario ingresara

directamente al monitoreo del proceso por medio de la interface así mismo el sistema

estará conectado con el hardware por medio del puerto USB de esta manera se tendrá

la interacción del sistema con el hardware.

El mismo que llenara las tablas de las base de datos para el monitoreo mediante el

sistema remoto controlado por los Dispositivos móviles.

3.9.2.1 Descomposición en subsistemas.

La aplicación está dividida en los siguientes formularios permitiendo dar una

descripción de manera global de la estructura del sistema.

A Figura 3.23: Módulo del firmware Fuente: Autores

Page 137: Control de Dispositivos

117

SISTEMA

MANTENIMIENTO

PROCESOS

CONSULTAS

A continuación detallaremos cada uno de los módulos expuestos en este diagrama:

El sistema es dividido en tres grandes procesos cada uno de los cuales tendrán

módulos internos de gran importancia para la adecuación y funcionamiento del

sistema.

Dentro del mismo estarán módulos de temperaturas el cual dentro de una interface

totalmente amigable desplegara el funcionamiento del mantenimiento de las

temperaturas.

Dentro del mismo estará el monitoreo y el control del sistema de las variables tanto

de entrada como de salidas y las debidas acciones a tomar para el correcto

funcionamiento del sistema industrial

Dentro de la cual podrán efectuarse la consulta del consumo de líquido para el

proceso industrial.

3.9.2.2 Diseño de objetos.

Figura 3.24: Secuencia del Firmware

Fuente: Autores

2 Procesamiento de variables y ejecución de

acciones

3. Inserción y actualización

de datos en la base

1. Obtención de variables

Page 138: Control de Dispositivos

118

3.9.3 Herramientas de desarrollo

3.9.3.1 Configuraciones ODBC Para MySQL

MySQL es una de las base de datos más rápidas y potentes de la actualidad si a esto

le agregamos lo rápido que se torna desarrollar bajo Visual Basic sin dudas corremos

con grandes ventajas a la hora de crear potentes aplicaciones. No solo para acceder

de forma local a nuestra base de datos sino también puede que necesitemos acceder a

un servidor MySQL localizado en otra parte del mundo y hasta que este corra bajo

Linux.

Primero debemos de proceder a la instalación del ODBC para integrar Mysql5.1 con

VB6.0 dicho componente es mysql-connector-odbc-5.1.0-alpha-win32 para proceder

a la configuración del ODBC seguir los siguientes pasos: Inicio >Panel de

Control>Herramientas Administrativas>Orígenes de datos ODBC

Figura 3.25: Instalación del Driver ODBC Fuente: Autores

Como primer paso debemos crear la referencia a ADO (Ado Data Control 6.0) desde

nuestro Visual Basic, para esto vamos al menú Proyecto > Componentes... y ahí

seleccionamos Microsoft Ado Data Control 6.0.

Page 139: Control de Dispositivos

119

Código Para realizar la conexión con el ODBC.

Public rs As ADODB.Recordset Public con As Connection Public Sub Conectar() Set con = New ADODB.Connection con.ConnectionString = "DRIVER = {MySQL ODBC 5.51 Driver}; Server = localhost; Uid=root; pwd=pasw; database=prueba; connection " con.Open If con.State = 1 Then MsgBox "Conectada" Else MsgBox "Error" End If End Sub Sub registro() Set rs = New ADODB.Recordset With rs .ActiveConnection = con .CursorLocation = adUseClient .CursorType = adOpenDynamic .LockType = adLockOptimistic .Open "Select * from usuario" End With End Sub Private Sub Form_Load() Conectar End Sub

3.9.3.2 Instalación de Componentes LabView

Acerca de LabView LabVIEW es una herramienta gráfica para pruebas, control y diseño mediante la

programación. El lenguaje que usa se llama lenguaje G. Este programa fue creado

por National Instruments (1976) para funcionar sobre máquinas MAC, salió al

mercado por primera vez en 1986. Ahora está disponible para las plataformas

Windows, UNIX, MAC y Linux y va por la versión 8.5.1 con soporte para Windows

Vista.

Los programas desarrollados con LabVIEW se llaman Instrumentos Virtuales, o VIs,

lo que da una idea de su uso en origen: el control de instrumentos. El lema de

LabVIEW es: "La potencia está en el Software". Entre sus objetivos están el reducir

el tiempo de desarrollo de aplicaciones de todo tipo (no sólo en ámbitos de Pruebas,

Control y Diseño) y el permitir la entrada a la informática a programadores no

Page 140: Control de Dispositivos

120

expertos. Esto no significa que la empresa haga únicamente software, sino que busca

combinar este software con todo tipo de hardware, tanto propio -tarjetas de

adquisición de datos, PAC, Visión, y otro Hardware- como de terceras empresas.

Principales usos

Es usado principalmente por ingenieros y científicos para tareas como:

Adquisición de datos

Control de instrumentos

Automatización industrial o PAC (Controlador de Automatización

Programable)

Diseño de control: prototipaje rápido y hardware-en-el-ciclo (HIL)

Diseño Embebido

Domótica

Measurement Studio de National Instruments

National Instruments Measurement Studio es un conjunto de aplicaciones integrado

de clases y controles para aplicaciones de prueba, medida y automatización en Visual

Studio 6.0. Measurement Studio reduce drásticamente el tiempo de desarrollo de la

aplicación, ya que ofrece Windows Forms, Web Forms y controles de interfaz de

usuario de ActiveX diseñados para ingenieros, análisis científicos avanzados,

adquisición de datos (DAQ) y bibliotecas de clases de instrumentos de control

optimizadas para pruebas.

Figura 3.26: Gráficos de LabVIEW

Fuente: www.ni.com/mstudio/

Page 141: Control de Dispositivos

121

Para la colocación del componente de LabVIEW en nuestro proyecto simplemente

basta con instalar la aplicación en nuestro PC y desde ahí se procederá a realizar el

llamado desde Visual Basic de la siguiente manera:

Figura 3.27: Agregar componente de LabVIEW Fuente: Autores

A continuación procedes a escogerlo desde la barra de herramientas y agregarlo al

formulario dentro del mismo se tiene varias opciones para realizar la configuración

sobre el modo de presentación del mismo

Figura 3.28: Utilización del componente de LabVIEW sobre Vb 6.0 Fuente: Autores

Page 142: Control de Dispositivos

122

3.9.3.3 Componentes utilizados en el firmware.

En este capítulo examinaremos cada uno de los objetos utilizados en los sistemas así

como la utilización y los tipos de variables que hemos utilizado para obtener un

conocimiento global de la utilización de los mismos en los formularios realizado para

la presentación del sistema al usuario.

TextBox: Mediante este control podremos realizar tanto la entrada

como la salida de datos en nuestras aplicaciones.

Figura 3.29: TexBox Fuente: Visual Basic

Label: Este control es también uno de los más utilizados, aunque su

utilidad queda restringida a la visualización de datos en el mismo, no

permitiendo la introducción de datos por parte del usuario.

Figura 3.30: Label Fuente: Visual Basic

CommandButton: Este control es el típico botón que aparece en todas

las aplicaciones y que al hacer clic sobre él nos permite realizar alguna

operación concreta, normalmente Aceptar o Cancelar.

Figura 3.31: CommandButton Fuente: Visual Basic

Toolbar: Este control nos permite agregar una barra de control en

nuestro formulario el mismo que podrá tener características y enlace

de diferentes dependiendo de la necesidad que genere la aplicación.

Figura 3.32: Toolbar Fuente: Visual Basic

CWSlide: Control obtenido de la librería de LabVIEW que ya

revisamos en la parte anterior, como instalar este componente el

mismo nos permite representar la grafica del nivel del tanque.

Figura 3.33 CWSlide Fuente: Visual Basic

Page 143: Control de Dispositivos

123

Figura 3.38: CheckBox

Fuente: Visual Basic

RichTextBox: Este control es un componente que nos da una opción de

colocar un archivo RPT como una lista dentro de nuestro formulario,

pudiendo manipular el documento con las características de un archivo

plano Figura 3.34: RichTextBox Fuente: Visual Basic

Calendar: Control que nos brinda las propiedades de un calendario

dentro de nuestro formulario, permitiendo captura la fecha que el

usuario escoja es ideal para la consulta de reportes por rango de

fechas

Figura 3.35: Calendar Fuente: Visual Basic

CrystalReport: Componente que nos brinda el programa Crystal

Report el mismo que nos brinda este componente par ser llamado

desde Vb 6.0, es utilizado para realizar la llamada de los archivos

creados bajo extensión RPT.

Figura 3.36: CrystalReport Fuente: Visual Basic

Frame: Nos permite el agrupamiento de controles para poder realizar

una mejor presentación del formulario al usuario final.

Figura 3.37: Frame Fuente: Visual Basic

CHECK BUTTON Y OPTION BUTTON: El control CheckBox, o casilla de

verificación, permite elegir una opción (activada /

desactivada, True/False) que el usuario puede establecer o

anular haciendo clic. Una X en una casilla de verificación

indica que está seleccionada, activada, o con valor True.

Cada casilla de verificación es independiente de las demás

que puedan existir en el formulario, pudiendo tomar cada una de ellas el valor True o

False, a voluntad del operador. Un control OptionButton muestra una opción que se

puede activar o desactivar, pero con dependencia del estado de otros controles

OptionButton que existan en el formulario.

Page 144: Control de Dispositivos

124

Figura 3.39: ListBox Fuente: Visual Basic

Figura 3.40: Timer Fuente: Visual Basic

LIST BOX Y COMBO BOX: Un control ListBox muestra una lista de elementos en la que el

usuario puede seleccionar uno o más. Si el número de elementos

supera el número que puede mostrarse, se agregará

automáticamente una barra de desplazamiento al control

ListBox.

TIMER TEMPORIZADOR: Este objeto permite establecer temporizaciones.

Presenta una novedad respecto a los controles estudiados

hasta ahora. El control Timer solamente se ve durante el

tiempo de diseño. En tiempo de ejecución, el control

permanece invisible. La temporización producida por el

Timer es independiente de la velocidad de trabajo del

ordenador.

Variable: Dim: Al declarar una variable con esta palabra estamos diciendo que la

variable sea local al ámbito en que se declara. Puede ser dentro de un procedimiento

o dentro de un formulario, de esta forma no sería accesible desde los demás

procedimientos o formularios.

Public: Las variables declaradas serán públicas y podrán estar accesibles desde todos

los formularios de la aplicación. Para conseguirlo tendremos que declararlas en un

módulo de código, no en la sección declaraciones de cualquier formulario de los que

conste la aplicación. Para crear un módulo de código en el menú principal de Visual

Basic marcamos en INSERT/MODULE y aparecerá junto a los demás formularios de

la ventana de proyecto aunque con un icono distinto indicando que se trata de un

módulo de código.

Static: Con esta forma de declarar variables conseguiremos que las variables locales

no se creen y se destruyan al entrar y salir de los procedimientos donde fueron

declaradas sino que se mantenga su valor durante todo el periodo de ejecución de la

aplicación. De esta forma a entrar en algún procedimiento las variables recuerdan el

valor que tenían cuando se salió de él.

Page 145: Control de Dispositivos

125

TIPOS DE VARIABLES

TIPO COMENTARIO BOOLEAN Sólo admite 2 valores TRUE o FALSE BYTE admite valores entre 0 y 255 INTEGER admite valores entre -32768 y 32767 LONG admite valores entre -2.147.483.648 y 2.147.483.647 SINGLE admite valores decimales con precisión simple DOUBLE admite valores decimales de doble precisión CURRENCY válido para valores de tipo moneda STRING cadenas de caracteres DATE fechas, permite operar con ellas

Tabla 3.4: Tipos de Variables Fuente: www.lawebdelprogramador.com

Constantes: Declaración de constantes que pueden ser usadas en cualquier punto en

lugar de su valor, permitiendo cambiarlo cuando sea necesario, sin tener que

cambiarlo en todos los sitios en que se utiliza. La expresión no puede utilizar

llamadas a funciones, pues la constante se calcula en tiempo de compilación, no en

tiempo de ejecución.

3.9.3.4 Creación de archivo RPT mediante Crystal Report

Al abrir el Crystal Report con la primera pantalla que nos mostrara será la siguiente:

Figura 3.41: Utilización de Crystal Report Fuente: Autores

Selecciona la opción de Crear un Nuevo Documento de Crystal Report utilizando el Wizard.

Page 146: Control de Dispositivos

126

La opción que "En tat Expert" permite extraer los datos directamente de la base de

datos. También puedes crear un Documento De Crystal vacío para configura

después, m agregando campos y datos cuando sea necesario. Usted puede escoger el

tipo de informe (normal). Después de este paso, pulse el botón en "OK."

Usted también puede acceder al Wizard escogiendo "Archivo", "Nuevo" del menú

de Crystal

Selección de la Base de datos

Figura 3.42: Utilización de Crystal Report

Fuente: Autores

Usted debe seleccionar la base de datos de la que usted tomara los datos que se

usarán en el Reporte de Crystal. Pulse el botón en " Data base " y seleccione la base

de datos.

Agregando Tablas

Después de la selección de la base de datos es necesario agregar las tablas de las

mismas al reporte.

Figura 3.43: Agregando tablas Fuente: Autores

Page 147: Control de Dispositivos

127

El explorador te permite escoger y visualizar la tabla de tu base de datos que desees

colocar en tu reporte

Escoger los datos de un reporte

Figura 3.44: Escoger datos de un reporte

Fuente: Autores

Su próximo paso es seleccionar campos que usted quiere mostrar en el informe.

Luego pulse el botón "Next". Los campos agregados están en el brillo. Nosotros

podemos agregar tantos campos como sea necesario. Si usted quiere que su informe

este agrupado, usted puede seleccionar la columna por la cual quiere agrupar. Pulse

el botón adelante "Finish"

Ambiente de Reporte

Figura 3.45: Ambiente de un reporte

Fuente: Autores

El Documento De cristal está en el modo “Design”.

Usted podría ver los campos agregados al formulario. Usted puede anular o puede

agregar otros. La fecha de imprimir y el número de páginas son los campos

especiales. Usted tiene la posibilidad de mover los campos para modificar la

presentación del informe de acuerdo a nuestra necesidad.

Page 148: Control de Dispositivos

128

3.9.4 Descripción del entorno de desarrollo en Visual Basic

Dentro de este capítulo conoceremos un poco mas de los componentes utilizados en

el sistema para el desarrollo de nuestra aplicación tanto en sus aplicación como en su

utilización de los mismo, su manera de instalación y la manera de llamarlo desde Vb

así mismo se tendrá un vasto conocimiento en los componentes propios de Vb para

desarrollar la interface grafica del proyecto

Encontrando aplicativos de LabView los mismos que nos permitieron una mejor

traficación mediante el slider para el visor de tanque de llenado.

Dentro de las fases de desarrollo en sistema de visual se podrá denotar cada una de

los componentes utilizados para la creación de formularios los mismos que serán de

la utilización directa para el usuario.

La creación de los archivos RTP son desarrollados desde Crystal Report cuyos

parámetros son entregados desde el Vb 6.0 para realizar consultas especificas y así

lograr un reporte más efectivo de acuerdo al requerimiento del usuario.

3.9.4.1 Justificación del Firmware y su funcionamiento

A continuación, se procederá con el desarrollo de las incursiones de los componentes

necesarios para obtener la forma del programa así como el análisis del sistema y de

sus variables.

El sistema desarrollado es capaz de capturar y procesar las salidas del micro

controlador PIC realizando acciones de acuerdo a las necesidades del sistema y así

lograr el buen funcionamiento del mismo contemplando cada uno de los parámetros

de suceso posibles de ocurrir mientras este activo el proceso industrial. Así mismo el

esquema del código permite que el mismo sea escalable ya que contiene un código

de procesos y acciones en manera modular

El sistema comprende de 8 entradas y 8salidas esquematizadas en los requerimientos

de nuestro sistema a continuación se detallara las mismas

Page 149: Control de Dispositivos

129

Salidas Sistema General: El Bit B0 es el encargado de mantener el pulso para el

funcionamiento de la placa controladora.

Bomba de carga: El Bit B1 activa un destello para precisar el encendido de la bomba

Bomba Descarga: El Bit B2 activa un destello para precisar el encendido de la

bomba 2

Sistema remoto: El Bit B3 es el encargado de enviar la activación al PIC de sistema

remoto

Entradas

Confirmaciones

Sistema General: Luego de que el sistema general arranca me envía un

Bit en alto para confirmarme q el sistema realmente arranco

Bomba de carga: El Bit D1 activa un destello para precisar el encendido de la bomba

Bomba Descarga: El Bit D2 activa un destello para precisar el encendido de la

bomba 2

Niveles de tanque Nivel Alto: Activación de D3 en el momento en que ocurre el llenado del tanque

Nivel Medio: Activación de D4 en el momento en que el tanque se encuentra a

mitad de su volumen total

Nivel Bajo: Activación de D. en el momento en q el tanque comienza a cargar

Sensores de temperatura Sensor1: D7 se activa en caso de recibir una anormalidad en la temperatura de la

bomba1

Sensor2: D6 se activa en caso de recibir una anormalidad en la temperatura de la

bomba2

El módulo de monitoreo arranca con la llamada a un método de reconocimiento de

periférico mediante un proceso desarrollado de comunicación USB directa con el

PIC 18F4550 programado con comandos en lenguaje "C" el mismo que se encarga

Page 150: Control de Dispositivos

130

de realizar la captura de la data de 8 bit que han sido enviados desde mi módulo del

sistema a controlar.

De manera explícita y de manera paralela se proceden a ejecutar procedimientos de

limpieza a la base de datos y demás variables, así mismo el sistema se encarga de ser

informado del tipo de usuario que acceso el mismo.

Figura 3.46: Pantalla de Monitoreo del Proceso.

Fuente: Autores

El sistema consta de envió de data al hardware como el encendido de las Bombas las

mismas que realizan procesos paralelos al momento de ejecutar alguna acción

manejando un aplicativo de conexión tanto a la base de datos como al PIC para

detectar alguna novedad en el sistema. (Anexos- FRMUSB)

Mediante el acceso a la base se guardaran datos del proceso en la tabla registro_mc

tales como tipo de usuario, fecha/Hora de acceso, estado de los dispositivos y modos

en los cuales están operando, la salida de parámetros de la base de datos se efectúa en

el momento que se gravan los datos de manera paralela a la tabla temporal la misma

Page 151: Control de Dispositivos

131

que elimina sus registros en el momento que se concluye un ciclo completo del

proceso (llenado y vaciado).

Módulos como el de censo y activaciones de timers permiten mantener testeada la

base de datos para saber si los equipos remotos han enviado algún requerimiento así

mismo existe un proceso denominado alarma () el mismo que se mantiene en

permanente censo a las variables de temperatura de las bombas dicho dato es

proveído por el hardware.

El sistema no arrancara de manera general hasta que el hardware emita la señal de

que el sistema está preparada para el funcionamiento por el Bit 0 de la trama de 8 bit

enviados desde el puerto USB luego de lo cual estará listo el proceso para comenzar

con el llenado o vaciado del tanque de igual manera comienza el censo del proceso a

ejecutar por medio de la obtención de dicho parámetros mediantes los módulos de

Lectura del sistema que se encarga de capturar la trama de 8bits que nos envía

mediante el PIC 18F4550.

Las variables como las de bomba son una entrada al sistema ya que la confirmación

de las mismas por parte del hardware permite comenzar con el proceso de censo e

inserción al registro de la base de datos de acuerdo a los parámetros que se vaya

obteniendo del proceso de llenado o vaciado tales como cantidad del tanque,

activación de niveles, estados de las temperaturas, guardando el proceso lógico en un

archivo .INI el mismo que contiene datos de los procesos lógicos y de sistemas de

alertas que emita cada acción censada por el puerto USB con respecto al hardware

Dentro el procedimiento de censo de variaciones de temperatura tenemos la

activación del cliente remoto y revisión de parámetros así como el acceso en la tabla

dispositivo.

Dentro de unas de las alertas que pueden ser suscitadas en el módulo el sistema lo

tiene de la manera más eficaz y eficiente de resolución ya sea por el sistema

desarrollado en visual Basic, del módulo remoto o del celular, dentro de suscitarse

algún inconveniente el proceso de continuar permitirá proseguir con la carga del

tanque por medio del módulo reset obteniendo parámetros de la tabla tanque que es

Page 152: Control de Dispositivos

132

SISTEMA

PROCESOS

MONITOREO CONTROL CHAT LOGS

la que almacena la incidencia niveles de tanque y la cantidad en la cual se suscito el

inconveniente.

El botón paro mantiene una programación capaz de cerrar y enviar a apagar el

sistema, provocando el reseteo de variables y la limpieza en la base de datos.

Dentro del proceso de captura de datos del hardware es un proceso que se está

corriendo de manera paralela al de cualquier evento que suscite el procedimiento

desarrollado lleva el nombre de Private Sub Lectura() encargado de mantener

informado sobre el estado de las entradas al sistema.

De igual manera el proceso de envió de datos al hardware se realiza de manera serial

en trama de 8 bits por medio de módulo de Sent_Receive (Form USB) el mismo que

se encarga de generar los pulsos necesarios para las activaciones de las bombas y del

PIC 16F877 encargado de la manipulación del celular para la recepción de mensajes

y control de proceso (Revisar Anexo E).

3.10 Software y Desarrollo del Móvil.

Figura 3.47: Diagrama del sistema Fuente: Autores

Page 153: Control de Dispositivos

133

3.10.1 Sistema MCC

El sistema es dividido en tres grandes procesos cada uno de los cuales tendrán

módulos internos de gran importancia para la adecuación y funcionamiento del

sistema.

a.- Monitoreo

Este proceso se encarga de obtener los datos de la base y presentarlos en un reporte

gráfico en el dispositivo móvil, agilitando el proceso de monitoreo manual y teniendo

datos de los sucesos dentro de un Sistema Industrial (ej.: Sistema de Tanque

Elevado) en tiempo real.

b.- Control

Este proceso se encarga de enviar ordenes de encendido o apagado dentro del

Sistema, mediante la actualización de datos correspondiente.

c.- Chat

Este proceso mantiene comunicados en tiempo real a los usuarios para tener mayor

control dentro del Sistema y así si llegara a fallar el proceso automático siempre

tener la apertura al accionar manual y directo.

3.10.2 Arquitectura del Sistema Controlado por Dispositivos Móviles

Figura 3.48: Arquitectura del sistema Fuente: Autores

Ejecuta

función

Conection

Pool

WebServices

Base de Datos

SERVIDOR WEB

GLASS FISH, JAVA EE

Requerimiento

HTTP Retorna los

Datos

Archivo WSDL

Archivo WSDL

Page 154: Control de Dispositivos

134

Explicación

1. El dispositivo móvil realiza un requerimiento http hacia el Servidor Web

donde está alojado el Servicio Web.

2. Este mediante un Pool de Conexiones se comunica con la base de datos

3. El Webservice ejecuta la función requerida y realiza la petición a la base

4. La base le retorna los datos al Webservice

5. El Webservice formatea los datos recibidos de la base en un archivo wsdl

6. Envía el archivo wsdl hacia el dispositivo móvil que le realizó el

requerimiento

3.10.3 Aplicación Web, Conexión a la Base de Datos

Problema

Muchas veces desarrollamos aplicaciones que se conectan a una o varias bases de

datos (MySQL, Oracle, PostgreSQL, etc.) y el gran problema siempre es la cantidad

de conexiones que deben soportar dichas bases de datos. ¿Qué pasa si hay 4000

conexiones a la vez? ¿Qué pasa si esta cifra aumenta? bueno, ya pueden imaginar

que cosas podrían suceder, partiendo por que el servidor de base de datos se caiga.

Solución

Uso de un DataSource mediante el cual el cliente se conectará a la base de datos.

Este datasource utiliza lo que se conoce como Connection Pool que no es más que

una cantidad de conexiones disponibles para el uso y lo maneja un servidor de

aplicaciones (como glassfish).

Mediante un connection pool las conexiones a la base de datos pueden bajar de 4000

a solo 100 (esas son cifras reales), ya que no siempre se necesitan conexiones

activas. Esto no quiere decir que un cliente se quedará sin el recurso, sino más bien

que el servidor de aplicaciones permitirá un mejor uso de dicho recurso a través de la

gestión que hace al administrar el pool de conexiones.

Pasos:

1. Establecer una conexión con la base de datos.

Page 155: Control de Dispositivos

135

2. Crear una aplicación web.

3. Crear un connection pool.

4. Crear un datasource.

5. Registrar el connection pool y el datasource en el servidor de aplicaciones.

6. Llamar un datasource desde una clase en nuestra aplicación web.

Lo primero es lo primero, necesitamos algunas cosas antes de partir. Necesitamos

instalado:

7. Netbeans 6.0

8. JDK 1.6.0_02

9. Sun Java System Application Server 9

10. MySQL 5.0.45

Una vez todo instalado debemos tener corriendo la base de datos.

Figura 3.49: Cargando la base de datos a nuestro sistema

Fuente: Autores

Page 156: Control de Dispositivos

136

Ahora crearemos una conexión a la base de datos usando netbeans, pinchen la

pestaña "runtime", luego "Databases", clic derecho a "Drivers" y pinchan "New d

Figura 3.50: Creando el driver JDBC

Fuente: Autores

Aquí se pasa el driver JDBC como pueden ver en la imagen, luego clic en Ok. Ahora vamos a crear una conexión utilizando el driver que le acabamos de pasar. Haz clic derecho sobre "Databases" y pincha "New connection".

Figura 3.51: Creando una nueva conexión

Fuente: Autores

Page 157: Control de Dispositivos

137

En la ventana que aparece ingresa los datos que corresponden como pueden ver en la

imagen. Luego pincha Ok.

Figura 3.52: Finalizando la Conexión

Fuente: Autores Ahora ya tenemos una conexión a la base de datos desde netbeans, la cual podremos

usar cuando queramos en nuestras aplicaciones. Ahora levantaremos nuestro servidor

de aplicaciones, para esto pincha sobre "Servers", haz clic derecho sobre "Sun Java

System Application Server 9" y pincha "Start", esto levantará el servicio que

utilizaremos más adelante.

Figura 3.53: Levantando el Servicio

Fuente: Autores

Page 158: Control de Dispositivos

138

Ahora crearemos un "Web Application”...

Figura 3.54: Creando un nuevo proyecto

Fuente: Autores

Figura 3.55: Colocando parámetros al proyecto

Fuente: Autores

Page 159: Control de Dispositivos

139

Una vez creado el proyecto crearemos el connection pool, para esto haz clic derecho

sobre el proyecto, mueve el cursor a "New" y pincha "File/Folder".

Figura 3.56: Creando un Web Application

Fuente: Autores Ahora debes colocar un nombre a tu connection pool y seleccionar la conexión a la base de datos que previamente estableciste en netbeans.

Figura 3.57: Colocando el Netbeans Fuente: Autores

Page 160: Control de Dispositivos

140

Luego pinchas siguiente y verás los datos de la conexión a la base de datos, luego

pinchas "finish".

Figura 3.58: Creado el Web Application para la base de datos

Fuente: Autores

Ahora vamos a crear el datasource, para esto vas donde mismo para crear el

connection pool pero esta vez seleccionas "JDBC Resource".

Figura 3.59: Creando el pool de conexiones

Fuente: Autores

Page 161: Control de Dispositivos

141

Ahora necesitamos crear una referencia al datasource en nuestro proyecto, para esto

haz doble clic en "web.xml" (está en Mi Proyecto -> Web Pages -> WEB-INF), luego

pinchas "References" -> "Add" y agregas el nombre que le pusiste al datasource.

Figura 3.60: Creando el referencia de conexión

Fuente: Autores

Figura 3.61: Agregada la referencia de conexión

Fuente: Autores

Page 162: Control de Dispositivos

142

Ahora haz doble clic sobre "sun-web.xml", expande "Sun Web Aplication" y pincha

el datasource que aparece ahí (es el que tu creaste). Fíjate que donde dice "JNDI

Name" no hay nada, debes copiar y pegar lo que sale justo arribita (el nombre de tu

datasource) y guardas.

Figura 3.62: A tachando la referencia de conexión a tu aplicación

Fuente: Autores.

Ahora debes registrar en el servidor de aplicaciones el connection pool y el

datasource que ha creado previamente, simplemente expande "Server resources" en

tu proyecto y haz clic derecho sobre el connection pool y pincha "Register", lo

mismo después con el datasource.

Figura 3.63: Registrando servidor de aplicación

Fuente: Autores

Page 163: Control de Dispositivos

143

Ya tenemos listo el connection pool y el datasource en nuestra aplicación y en el

servidor de aplicaciones. Ahora solo resta utilizarlos en nuestra aplicación. Para esto

haz una clase java en tu proyecto colocando el nombre que tú quieras.

Figura 3.64: Haciendo la clase en java con las aplicación

Fuente: Autores

Una vez creada haz clic derecho en el editor de netbeans, sobre tu clase y mueve el

cursor a "Enterprise resources" y pincha "Use database".

Figura 3.65: Haciendo la clase en java con las aplicación

Fuente: Autores

Page 164: Control de Dispositivos

144

3.10.4 Creación de WebService

Crear un Web service cliente para consumir dichos servicios.

Sin más preámbulo crearemos un web service, para esto haremos clic derecho sobre

el proyecto -> new -> web service [...]

Figura 3.66: Creando un web service

Fuente: Autores

Luego veremos lo siguiente...

Figura 3.67: Agregando una operación

Fuente: Autores

Pinchamos Add operation para crear un servicio, en Name colocamos el nombre del

servicio que corresponde a un web method, que en éste caso retornará un dato de tipo

Page 165: Control de Dispositivos

145

String y recibirá un parámetro que corresponde al root del usuario y es de tipo String

[...]

Figura 3.68: Nombre y tipo de operación

Fuente: Autores

Luego creamos un tercer servicio y lo nombraremos obtenerUsuario el cual retornará

un objeto de tipo UsuarioBean y recibe como parámetro el root del usuario de tipo

String...

Figura 3.69: Creando un nuevo servicio

Fuente: Autores

Page 166: Control de Dispositivos

146

Ya tenemos declarados los web services, pero aún no están implementados. Si se

fijan en la pantalla donde agregaron las operaciones o servicios hay dos opciones,

una es Design y la otra es Source, si pinchan Source verán el editor de la clase con

los métodos creados anteriormente pero sin implementación, es ahí donde ustedes

pueden llamar a la clase ConexionBDDataSource que habíamos creado

anteriormente y agregar la lógica que corresponda para manejar los datos ingresados

por el usuario y consultar a la base de datos y responderle al usuario. Lo que yo

recomiendo es crear una capa de lógica intermedia que se encargue de hacer las

validaciones correspondientes (que el usuario exista, que tenga deuda, que no pague

cero pesos, etc.) y de esa forma el diseño queda en multicapas y es más fácil después

para cambiar alguna cosa y que su sistema sea adaptable a dicho cambio (flexible,

escalable, etc.).

3.10.5 Consumir WebServices.

Le damos Clic derecho sobre el proyecto -> New -> Java ME Web Services Client

Figura 3.70: Creando un consumidor del web service Fuente: Autores

Page 167: Control de Dispositivos

147

Luego nos aparecerá una pantalla como está

Figura 3.71: Creando un Cliente Fuente: Autores

Después de haber hecho esto le damos clic en finish

Figura 3.72: Parámetros del Cliente Fuente: Autores

Page 168: Control de Dispositivos

148

Por último nos aparecerá una ventana en la que notaremos que tenemos el ws client

agregado y el netbeans habrá agregado un nuevo paquete con todo lo referente al

nuevo Web Service.

Figura 3.73: Finalización la creación de Consumidor de WEB Fuente: Autores

Page 169: Control de Dispositivos

149

4.- Bibliografía.

4.1 Direcciones Electrónicas.

Hardware.

www.rentron.com

www.microchip.com

www.neoteo.com

http://www.melabs.com/products/pbp.htm

http://www.winpic800.com

http://www.ccsinfo.com/content.php?page=ideoverview

http://www.garcia-cuervo.com/picmania.garcia-cuervo.net/PICC.php

Software.

http://www.ni.com/mstudio/

http://www.connectionstrings.com/default.aspx?carrier=mysql

http://dev.mysql.com/downloads/connector/odbc/3.51.html

http://www.mysql.com/products/connector/odbc/

http://www.mysql.com/about/contact/

http://www.trucoswindows.net/foro/topico-5900-manejo-de-puerto-usb.html

http://www.intel.com/intelpress/usb/examples/vboverview.htm

http://www.todoexpertos.com/categorias/tecnologia-e-

Internet/internet/respuestas/1707372/manejo-del-puerto-usb-desde-visual-basic

http://es.wikipedia.org/wiki

Arquitectura del móvil.

www.lexer.netbeans.org

http://www.radioptica.com/Radio/wlan.asp

http://metalklesk.blogspot.com/

http://www.netbeans.org/kb/index.html

http://metalklesk.blogspot.com/2007/09/connection-pool-y-datasource-en.html

http://metalklesk.blogspot.com/2007/12/instalacin-de-glassfish-v2-en-opensuse.html

http://metalklesk.blogspot.com/2007/10/web-service-y-web-service-client-en.html

Page 170: Control de Dispositivos

150

4.2 Libros

SILER, Brian, y otros, Visual Basic 6.0, Edición Especial, Editorial Prentice Hall,

Madrid – España, 1999.

Reyes, Carlos, Aprenda a programar Microcontroladores en Basic, 1era. Edición,

Editorial Gráficas Ayerve, Ecuador, 2004.

Ramos, Guillermo, y otros, Electrónica Industrial y automatización, 1era Edición,

Editorial Cekit, Pereira-Colombia, 2002, Tomo 1.

Castaño, Juan, Curso práctico sobre microcontroladores, 1era Edición, Editorial

Cekit, Pereira-Colombia, 2002, Tomo 1.

Page 171: Control de Dispositivos

151

ANEXO A

Interfaces gráficas de usuario

A.1 Descripción del capítulo

Dentro de este anexo procederemos a la explicación de las opciones y características

del sistema para que el usuario tenga el conocimiento para el control del mismo.

Así mismo se explicara de manera detallada las opciones de error y de sucesos que se

puede tener y la opciones necesarias para poderlo resolver en caso de presentarse

durante la ejecución del control.

Se adjunta graficas del sistema en las mismas que será debidamente explicada para

mejor comprensión por parte del operador.

A.2 Introducción a las interfaces de usuario

El sistema es en su totalidad visual es por aquello que se lo desarrollo en un lenguaje

que permita realizar el proceso de manera interactiva con el operador este es una

razón más para que el sistema encargado en manipular el hardware de manera directa

sea programado en Visual Basic.

Dentro de la cada una de las acciones se tiene su debido mensaje para que de esta

manera el operador decida qué acción realizar así mismo como el control de cada

uno de los eventos que suceda mientras la operación de las maquinarias lo que le

permitirá tener al operador un conocimiento general de lo que está sucediendo en las

maquinarias y en el proceso en sí.

Page 172: Control de Dispositivos

152

Cada una de las acciones realizadas por el usuario son registradas dentro de una base

de datos lo que permite saber cada acción que el operador realice sobre la interface y

sobre el proceso en sí de esta manera podemos permitirnos saber quien, cuando y

desde donde realizo alguna alteración en la manipulación del proceso, así mismo se

cuenta con las debidas seguridades al momento de ingresar al sistema con un lapso

máximo de 3 intentos de acceso luego de aquello el sistema procederá a cerrar de de

manera automática.

A.3 Descripción de Interfaces Por módulos

Se desarrollara la explicación del sistema por cada uno de los módulos desarrollados

en visual Basic esto quiere decir que dentro del formulario principal no se reflejara

algunas instrucciones propias del formulario como las opciones de salir en el MDI

Principal.

A.3.1 Login Acceso De clave

Interface de acceso la misma te permite un máximo de 3 intentos para acceder al

sistema sino procederá a cerrarse el mismo, desplegando los mensajes necesarios en

caso de presentarse este particular.

Figura A1.1: Pantalla de acceso

Fuente: Autores A su vez esta lleva un registro del ingreso de cada usuario al sistema para registrar el

ingreso y salida del usuario.

Page 173: Control de Dispositivos

153

Figura A1.2: Pantalla de error de usuario Fuente: Autores

La misma contiene 2 botones el de acceso y salida y las validaciones necesarias para

que complete los datos antes de poder dar clic a la opción de ingreso como se denoto

en la imagen

Figura A1.3: Pantalla de ingreso de usuario/clave

Fuente: Autores Permitiendo el acceso al sistema

Figura A1.4: Pantalla de acceso al sistema

Fuente: Autores

A.3.2 Sistema de Monitoreo

La interface lo primero que censa será la conexión de hardware al sistema en caso de

no darse dicha situación emitirá un problema de “No hay periférico conectado”

Page 174: Control de Dispositivos

154

Figura A1.5: Error si no hay dispositivo (PIC) conectado en el USB

Fuente: Autores Dentro del sistema de monitoreo la secuencia de funcionamiento será la siguiente

Botón que indicara el encendido general, el segundo botón indicara el “Continuar

Proceso” en caso de haber sucedido una incidencia un Botón de paro que permitía

detener el sistema y activar la opción de celular en proceso remoto y la opción de

terminar el proceso de manera definitiva y salir del formulario.

Figura A1.6: Monitoreo Básico del proceso

Fuente: Autores

Page 175: Control de Dispositivos

155

Nota cabe enfatizar que una vez cerrado el sistema las variables regresaran a NULL

de esta manera será un proceso independiente al anterior es decir no arrancara de

niveles 0 y no del estado anterior, el desarrollo fue procesado de esta manera con la

intención de que los procesos ni el monitoreo trabajen de manera indistinta.

Figura A1.7: Pantalla de monitoreo

Fuente: Autores Dentro del sistema se maneja los Sucesos que ocurren en el sistema el mismo que

nos permite estar alerta del suceso de cada uno de los proceso en los cuales no indica

que acción realizar o que parámetro se necesita para continuar el proceso estos

mensajes son desplegados a partir de los datos que se está obteniendo del hardware

Sucesos de alertas registrados por el sistema antes de poder continuar el proceso de

llenado o vaciado según lo indique su último estado

Page 176: Control de Dispositivos

156

Figura A1.8: Pantalla de problema en las bombas

Fuente: Autores Así mismo el sistema informa de las alertas posibles que pueden suscitarse durante el

proceso y que acción ha decidido tomar el sistema.

Figura A1.9: Continua proceso

Fuente: Autores

A.3.3 Consulta por Dispositivo

Dentro de esta interface se realizara la debida consulta por dispositivo emitiéndose

un reporte de acuerdo a lo deseado por el usuario

Page 177: Control de Dispositivos

157

En esta pantalla debe de estar todos los datos llenados para poder emitir el debido

reporte caso contrario saldrá error. Esta consulta se realiza por medio de rangos de

fechas.

A.3.4 Consulta Monitoreo por usuario

La consulta por usuario puedes realizarla escogiendo todos los usuarios registrados o

en su defecto por user específico el mismo que se desplegaran en el combo de igual

manera su impresión podrá ser por user o por grupo

Figura A1.10: Consulta por usuario

Fuente: Autores

A.3.5 Consulta Monitoreo de Encendido y Apagado

Dentro de la misma podrás realizar la consulta debida con respecto a el dispositivo el

estado que se mantuvo dependiendo del rango de fecha que Ud. deseé escoger o por

una fecha especifica que Ud. decida colocar, se le desplegaran calendarios para un

definición de fecha más acertad y que no surja inconvenientes por parte del usuario

Page 178: Control de Dispositivos

158

Figura A1.11: Consulta por dispositivo encendido y apagado

Fuente: Autores

A.3.6 Mantenimiento de Usuario

Dentro del mantenimiento de usuario puedes realizar la inserción de nuevos usuarios

disponiendo el tipo de usuario que será así mismo podes ingresar su password y sus

datos personales.

Figura A1.12: Mantenimiento de usuario

Fuente: Autores

A.3.7 Mantenimiento de Dispositivos

Page 179: Control de Dispositivos

159

Dentro de los mantenimiento de dispositivo podes ingresar nuevos dispositivos

lamentablemente no podes utilizar este módulo de manera completa ya que para

realizar su monitoreo debe de existir el debido ingreso de hardware lo mismo que

sería otro requerimiento indistinto al propuesto como tema de tesis.

Figura A1.13: Mantenimiento de dispositivo

Fuente: Autores

A.3.8 Eventos de Suceso

Dentro de esta interface tu puedes ver todos los sucesos del sistema acontecidos des

de el día en que proceso de monitoreo fue puesto en marcha la herramienta toolbar

permite tener un mayor control sobre los datos ya insertados, este no permite la

modificación de los mismos pues son datos de registros del sistema no pueden ser

alterados solo visualizados. Podéis imprimirlos abrir otros archivos registrados por ti

y guardados mas no los guardados por el sistema

Figura A1.14: Evento de Suceso Normal

Fuente: Autores

Page 180: Control de Dispositivos

160

A.3.9 Eventos de Alertas

Esta interface maneja la misma temática de procesos puedes abrir archivos, guardar e

imprimir mas no puedes alterar el archivo de origen ya que estos de uso exclusivos

del sistema.

Figura A1.15: Evento de Alertas

Fuente: Autores

A.3.10 Ventana Cascada

Este permite el mantener 2 interfaces en modo de cascada para su apreciación como

a continuación se ilustra en la siguiente grafica

Figura A1.16: Ventana en cascada

Fuente: Autores

Page 181: Control de Dispositivos

161

A.3.11 Ventana Mosaico

Permite la visualización en estilo de mosaico de los eventos que desees mantener

sobre la ventana operativa del MDI Principal.

Figura A1.17: Ventanas en mosaico

Fuente: Autores

A.3.12 Ventana Vertical

Permite observa de manera vertical las interfaces activas sobre el MDI Principal para

tener una mejor apreciación sobre los procesos que están ocurriendo en el sistema

Figura A1.18: Ventana en Vertical

Fuente: Autores

Page 182: Control de Dispositivos

162

A.3.13 Ayuda del Sistema

Demuestra archivo de ayuda sobre el sistema el mismo que será generado por un grafico o por un documento.

Figura A1.19: Archivo de Ayuda

Fuente: Autores

A.3.14 Acerca de Carolina

Interface de información del sistema

Figura A1.20: Información del sistema

Fuente: Autores Demuestra la información acerca del sistema como una reseña sobre la creación del

mismo, también tiene un botón sobre la información del sistema sobre la cual podrá

observar los dispositivos de su PC

Page 183: Control de Dispositivos

163

ANEXO B

Interfaces gráficas de usuario

B.1 Descripción del capítulo

Dentro de este anexo procederemos a la explicación de las opciones y características

del sistema para que el usuario tenga el conocimiento para el control del mismo.

Así mismo se explicara de manera detallada las opciones de error y de sucesos que se

puede tener y la opciones necesarias para poderlo resolver en caso de presentarse

durante la ejecución del control.

Se adjunta graficas del sistema en las mismas que será debidamente explicada para

mejor comprensión por parte del operador.

B.2 Introducción a las interfaces de usuario

Page 184: Control de Dispositivos

164

El sistema es en su totalidad visual es por aquello que se lo desarrollo en un lenguaje

que permita realizar el proceso de manera interactiva con el operador este es una

razón más para que el sistema encargado en manipular el hardware de manera directa

sea programado en Visual Basic.

Dentro de la cada una de las acciones se tiene su debido mensaje para que de esta

manera el operador decida qué acción realizar así mismo como el control de cada

uno de los eventos que suceda mientras la operación de las maquinarias lo que le

permitirá tener al operador un conocimiento general de lo que está sucediendo en las

maquinarias y en el proceso en sí.

Cada una de las acciones realizadas por el usuario son registradas dentro de una base

de datos lo que permite saber cada acción que el operador realice sobre la interface y

sobre el proceso en sí de esta manera podemos permitirnos saber quien, cuando y

desde donde realizo alguna alteración en la manipulación del proceso, así mismo se

cuenta con las debidas seguridades al momento de ingresar al sistema con un lapso

máximo de 3 intentos de acceso luego de aquello el sistema procederá a cerrar de de

manera automática.

B.2.1 Inicio de Sesión de usuario.

La primera pantalla que aparece en el sistema es para el ingresar al sistema, donde el

usuario debe ingresar su nombre y contraseña

Page 185: Control de Dispositivos

165

Figura B1.1: Inicio de sesión de usuario Fuente: Autores

Realiza el requerimiento hacia el Web Service de Autenticación de usuario, por lo

que aparece una pantalla de advertencia de consumo de tiempo aire al realizar una

petición web.

Figura B1.2: Mensaje de advertencia Fuente: Autores

Page 186: Control de Dispositivos

166

Pantalla de Bienvenida en la cual el usuario ve sus datos y las opciones para

comenzar a usar el Sistema entre ellas tenemos a el Monitoreo de Dispositivos,

Control y el Chat Cliente

Figura B1.3: Pantalla de Bienvenida Fuente: Autores

Está pantalla indica los estados de Encendido/Apagado de las Bombas y el nivel del

Tanque.

B.2.2 Monitoreo

Figura B1.4: Monitoreo del sistema Fuente: Autores

Page 187: Control de Dispositivos

167

En el Reporte Gráfico de Monitoreo se puede elegir para las opciones de

Figura B1.5: Opciones de software Fuente: Autores

B.2.3 Control

Al elegir la opción de Control podrá observar y decidir que opción tomar.

Page 188: Control de Dispositivos

168

Figura B1.6: Opciones a Tomar Fuente: Autores

En Apagado General podrá tomar la decisión de mandar a realizar la acción de

apagado general el cual lo que realiza es una actualización de la tabla de

apagado_general.

Figura B1.7: Opción de Apagado General Fuente: Autores

En esta pantalla se podrá elegir que bomba se procederá a apagar, luego de esto

aparecerá un mensaje indicando el éxito de la acción.

B.2.4 Chat

Al elegir Chat se da por entendido que en existe un Server Chat a la espera de una

conexión cliente, en ambas partes aparecerá una pantalla de advertencia de consumo

de tiempo aire al realizar una petición web.

Page 189: Control de Dispositivos

169

Figura B1.8: Opciones a Chat

Fuente: Autores

Luego Se procederá a Ingresar a la pantalla de chat en la cual los usuarios podrán

realizar una conversación vía mensajería instantánea,

Figura B1.9: Chateo entre usuarios

Fuente: Autores

ANEXO C

Codificación del sistema

C.1 Descripción del Módulo VBMPUSBAPI.bas

El módulo comprende de variables globales, así como de un modulo para la conexión

de la base de datos el cual permite la conexión a la base desde cualquier modulo.

Page 190: Control de Dispositivos

170

Así mismo contiene módulos de interacción entre el hardware y el PIC el mismo que

permite enviar parámetros al PIC de control Ubicado en el hardware implementado

'============================================================ ' CONEXION A LA BASE DE DATOS '============================================================ Public con As Connection 'Public base1 As Connection '============================================================ ' VARIABLE USUARIO '============================================================ Public usuario As String '============================================================ ' RUTINAS DE LLAMADA A LA LIBRERIA MPUSBAPI.DLL PARA INTERACTUAR CON EL PIC '============================================================ Option Explicit '-------------------------------------------------------------------------------------- ‘Convenciones de llamada en C ' DWORD _MPUSBGetDLLVersion(void) ' DWORD _MPUSBGetDeviceCount(PCHAR pVID_PID) ' HANDLE _MPUSBOpen(DWORD instance, PCHAR pVID_PID, PCHAR pEP, DWORD dwDir, DWORD dwReserved); ' DWORD _MPUSBRead(HANDLE handle, PVOID pData, DWORD dwLen, PDWORD pLength, DWORD dwMilliseconds); ' DWORD _MPUSBWrite(HANDLE handle, PVOID pData, DWORD dwLen, PDWORD pLength, DWORD dwMilliseconds); ' DWORD _MPUSBReadInt(HANDLE handle, PVOID pData, DWORD dwLen, PDWORD pLength, DWORD dwMilliseconds); '-------------------------------------------------------------------------------------- ‘FUNCIONES EQUIVALENTES PARA REALIZAR LA LLAMADA DESDE VB 6.0 '-------------------------------------------------------------------------------------- Public Declare Function MPUSBGetDLLVersion Lib "mpusbapi.dll" () As Long Public Declare Function MPUSBGetDeviceCount Lib "mpusbapi.dll" (ByVal pVID_PID As String) As Long Public Declare Function MPUSBOpen Lib "mpusbapi.dll" (ByVal instance As Long, ByVal pVID_PID As String, ByVal pEP As String, ByVal dwDir As Long, ByVal dwReserved As Long) As Long Public Declare Function MPUSBClose Lib "mpusbapi.dll" (ByVal handle As Long) As Long

Page 191: Control de Dispositivos

171

Public Declare Function MPUSBRead Lib "mpusbapi.dll" (ByVal handle As Long, ByVal pData As Long, ByVal dwLen As Long, ByRef pLength As Long, ByVal dwMilliseconds As Long) As Long Public Declare Function MPUSBWrite Lib "mpusbapi.dll" (ByVal handle As Long, ByVal pData As Long, ByVal dwLen As Long, ByRef pLength As Long, ByVal dwMilliseconds As Long) As Long Public Declare Function MPUSBReadInt Lib "mpusbapi.dll" (ByVal handle As Long, ByVal pData As Long, ByVal dwLen As Long, ByRef pLength As Long, ByVal dwMilliseconds As Long) As Long '-------------------------------------------------------------------------------------- ‘CONSTANTES PARA LA WIN32 API '-------------------------------------------------------------------------------------- Public Const INVALID_HANDLE_VALUE = -1 Public Const ERROR_INVALID_HANDLE = 6& '-------------------------------------------------------------------------------------- ‘FUNCION DE LA WIN32 API '-------------------------------------------------------------------------------------- Public Declare Function GetLastError Lib "kernel32" () As Long Public Declare Function timeGetTime Lib "winmm.dll" () As Long '-------------------------------------------------------------------------------------- ‘Constantes de conectividad con el PIC '-------------------------------------------------------------------------------------- Public Const vid_pid = "vid_04d8&pid_0011" ' Vendor id (Microchip) y Periférico id Public Const out_pipe = "\MCHP_EP1" Public Const in_pipe = "\MCHP_EP1" Public Const MPUSB_FAIL = 0 Public Const MPUSB_SUCCESS = 1 Public Const MP_WRITE = 0 Public Const MP_READ = 1 '-------------------------------------------------------------------------------------- ' IN_PIPE y OUT_PIPE VARIABLES PUBLICAS '-------------------------------------------------------------------------------------- Public myInPipe As Long Public myOutPipe As Long '-------------------------------------------------------------------------------------- ‘MÓDULO PARA ABRIR EL PERIFERICO '-------------------------------------------------------------------------------------- Sub OpenMPUSBDevice() Dim tempPipe As Long Dim count As Long tempPipe = INVALID_HANDLE_VALUE

Page 192: Control de Dispositivos

172

count = MPUSBGetDeviceCount(vid_pid) If count > 0 Then myInPipe = MPUSBOpen(0, vid_pid, in_pipe, MP_READ, 0) If myOutPipe = INVALID_HANDLE_VALUE Or myInPipe = INVALID_HANDLE_VALUE Then MsgBox Str(myOutPipe) + " " + Str(myInPipe) + " Error al abrir los pipes" myOutPipe = INVALID_HANDLE_VALUE End If Else frmUSB.Command1.Enabled = False MsgBox "No hay periféricos conectados" End If End Sub '-------------------------------------------------------------------------------------- ‘CERRANDO EL PERIFÉRICO '-------------------------------------------------------------------------------------- Sub CloseMPUSBDevice() If myOutPipe <> INVALID_HANDLE_VALUE Then MPUSBClose (myOutPipe) myOutPipe = INVALID_HANDLE_VALUE End If If myInPipe <> INVALID_HANDLE_VALUE Then MPUSBClose (myInPipe) myInPipe = INVALID_HANDLE_VALUE End If End Sub '-------------------------------------------------------------------------------------- ‘CERRANDO EL PERIFERICO DESDE EL FORMULARIO '-------------------------------------------------------------------------------------- Sub cerradito() MPUSBClose (myOutPipe) MPUSBClose (myInPipe) End Sub '-------------------------------------------------------------------------------------- ‘Función Send_Receive DATOS DESDE EL PIC '___________________________________________________________ ' SendData: Matriz de bytes con los datos a mandar ' SendLength: Longitud de datos a mandar ' ReceiveData: Matriz de datos a recibir ' ReceiveLength: Número de bytes a recibir ' SendDelay: Time-out para el envío en milisegundos

Page 193: Control de Dispositivos

173

' ReceiveDelay: Time-out para la recepción en milisegundos '-------------------------------------------------------------------------------------- Function Send_Receive(ByRef SendData() As Byte, SendLength As Long, _ ByRef ReceiveData() As Byte, ByRef ReceiveLength As Long, _ ByVal SendDelay As Long, ByVal ReceiveDelay As Long) As Long Dim SentDataLength As Long Dim ExpectedReceiveLength As Long ExpectedReceiveLength = ReceiveLength If (myOutPipe <> INVALID_HANDLE_VALUE And myInPipe <> INVALID_HANDLE_VALUE) Then If (MPUSBWrite(myOutPipe, VarPtr(SendData(0)), SendLength, SentDataLength, SendDelay) = MPUSB_SUCCESS) Then If (MPUSBRead(myInPipe, VarPtr(ReceiveData(0)), ExpectedReceiveLength, ReceiveLength, ReceiveDelay) = MPUSB_SUCCESS) Then If (ReceiveLength = ExpectedReceiveLength) Then Send_Receive = 1 ' Todo correcto Exit Function Else If (ReceiveLength < ExpectedReceiveLength) Then Send_Receive = 2 ' Envío correcto pero Exit Function ' Recepción fallida End If Else CheckInvalidHandle ' Mensaje de error End If Else CheckInvalidHandle ' Mensaje de error End If End If Send_Receive = 0 ' Operación fallida End Function '-------------------------------------------------------------------------------------- ‘PRESENTA EL TIPO DE ERROR POSIBLE '-------------------------------------------------------------------------------------- Sub CheckInvalidHandle() If (GetLastError() = ERROR_INVALID_HANDLE) Then ‘La causa más habitual es que el circuito esté desconectado CloseMPUSBDevice Else

Page 194: Control de Dispositivos

174

MsgBox "Código de error: " + Str(GetLastError()) End If End Sub '-------------------------------------------------------------------------------------- ‘FUNCION SEND '_________________________________________________________ ' SendData: Matriz de bytes con los datos a mandar ' SendLength: Longitud de datos a mandar ' SendDelay: Time-out para el envío en milisegundos '-------------------------------------------------------------------------------------- Function Send(ByRef SendData() As Byte, SendLength As Long, ByVal SendDelay As Long) As Long Dim SentDataLength As Long If (myOutPipe <> INVALID_HANDLE_VALUE And myInPipe <> INVALID_HANDLE_VALUE) Then If (MPUSBWrite(myOutPipe, VarPtr(SendData(0)), SendLength, SentDataLength, SendDelay) = MPUSB_SUCCESS) Then Send = 1 ' Todo correcto Exit Function Else CheckInvalidHandle ' Mensaje de error End If End If Send = 0 ' Operación fallida End Function '-------------------------------------------------------------------------------------- 'MÓDULO DE CONEXIÓN A LA BASE DE DATOS MYSQL '-------------------------------------------------------------------------------------- Sub conexion() Set con = New ADODB.Connection con.ConnectionString = "DRIVER={MySQL ODBC 5.1 Driver}; SERVER=localhost; DATABASE=tesis; PWD=root; UID=root;OPTION=3" con.Open End Sub '-------------------------------------------------------------------------------------- 'VARIABLE PARA EMITIR REPORTES CAPTURA EL TAMAÑO DE UN ACADENA DE CARACTERES '-------------------------------------------------------------------------------------- Sub SelText(i As Control) i.SelStart = 0 i.SelLength = Len(i.Text) End Sub '--------------------------------------------------------------------------------------

Page 195: Control de Dispositivos

175

'MÓDULO DE RETARDO DE TIEMPO '-------------------------------------------------------------------------------------- Sub time_late() Dim i, x, y As Integer DoEvents For i = 0 To 400 For x = 0 To 800 For y = 0 To 300 Next Next Next End Sub

C.2 Descripción de funcionamiento por formularios

Dentro del esquema de los formularios se presenta a continuación el siguiente diagrama que contiene un bosquejo del sistema completo

Page 196: Control de Dispositivos

176

Figura C1.1: Esquemático de los Formularios Fuente: Autores

FORM2 (LOGIN) El formulario comprende una variable tipo entero la misma q se encarga de llevar el

conteo para q el numero de intentos de acceso al sistema no sea mayor a 3.

FORM 2(LOGIN)

SISTEMA

FrmUSB

SALIR

CONSULTAS

FORM1 (DISPOSITIVOS)FORM6 (USUARIO)

FORM7 (ENCENDIDO Y APAGADO)

MANTENIMIENTO

FORMA3 (USUARIO)

FORM 4(DISPOSITIVO)

EVENTOS

FRMPRESENTA1 (SUCESOS)

FORM5 (ALERTAS)

VENTANA

FUNCION DE VB

FUNCION DE VB

FUNCION DE VB

AYUDA

ARCHIVO DE AYUDA

FRMABOUT

MDI (FRMAIN)

Page 197: Control de Dispositivos

177

Dim contador As Integer Dim tieso As Boolean '------------------------------------------------------------------------------------------------------ ‘MÓDULO QUE REALIZA LA BUSQUEDA DEL USUARIO DENTRO DE LA BASE DE DATOS '------------------------------------------------------------------------------------------------------ Private Sub Command1_Click() contador = contador + 1 tieso = False Dim tabla As ADODB.Recordset sql = "SELECT * FROM usuario " Set tabla = New Recordset tabla.Open sql, con, adOpenDynamic, adLockReadOnly Do Until tabla.EOF If (tabla!usu_nombres = Text1.Text) And (tabla!usu_password = Text2.Text) And (tabla!usu_privilegios = "v") And (tabla!usu_estado = "A") Then ‘Confirma si el usuario existe y si tiene permisos para acceder desde el sistema de visual tieso = True usuario = tabla!usu_id End If tabla.MoveNext Loop If contador <= 3 Then If tieso Then registro_acceso frmMain.Show Unload Me Else Text1.Text = "" Text2.Text = "" Me.Text1.SetFocus MsgBox "Clave y Usuario No Valido", vbInformation End If End If tabla.Close Call pregunta(contador, tieso) End Sub Private Sub Command2_Click() Unload Me End Sub Private Sub Form_Load() contador = 0 Call conexion End Sub '------------------------------------------------------------------------------------------------------

Page 198: Control de Dispositivos

178

‘PROCEDIMIENTO QUE CONSULTA SI YA REALIZO LOS 3 INTENTOS DE ACCESO '------------------------------------------------------------------------------------------------------ Private Sub pregunta(recive As Integer, bule As Boolean) If recive = 3 And bule = False Then MsgBox "Intentos Mayor a 3 el Sistema Procederá a Cerrarse ", vbCritical Unload Me End If End Sub Private Sub Text1_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then Me.Text2.SetFocus End If End Sub Private Sub Text2_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then Me.Command1.SetFocus End If End Sub '------------------------------------------------------------------------------------------------------ ‘PROCEDIMIENTO QUE CAPTURA EL ACCESO DEL USUARIO Y LO GRABA EN LA TABLA LOGS '------------------------------------------------------------------------------------------------------ Public Sub registro_acceso() Dim tabla As ADODB.Recordset Set tabla = New Recordset sql = "Select * from logs " tabla.Open sql, con, 3, 3 tabla.AddNew tabla!log_user_id = usuario tabla!log_num_accion = 4 tabla!log_estado = "N" tabla!log_fecha = CStr(Format(Date, "yy/mm/dd")) + " " + CStr(Time) tabla.Update tabla.Close End Sub

C.2.1MDI (FRMAIN)

Page 199: Control de Dispositivos

179

Este formulario contiene básicamente las llamadas a los form child que se hace

referencia de acuerdo a la petición solicitada o aplicación que se desee activar

'------------------------------------------------------------------------------------------------------ ‘Declaración de variables del API PROPIO DE WIN·32 '------------------------------------------------------------------------------------------------------ Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Any) As Long Const EM_UNDO = &HC7 Private Declare Function OSWinHelp% Lib "user32" Alias "WinHelpA" (ByVal hwnd&, ByVal HelpFile$, ByVal wCommand%, dwData As Any) Private Declare Function ShellExecute Lib "shell32.dll" Alias _ "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, _ ByVal lpFile As String, ByVal lpParameters As String, _ ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long Private Sub condis_Click() Form1.Show End Sub Private Sub conen_Click() Form7.Show End Sub Private Sub conuser_Click() Form6.Show End Sub Private Sub eveale_Click() Form5.Show End Sub Private Sub evesuc_Click() presenta1.Show End Sub Private Sub mandis_Click() Form4.Show End Sub Private Sub manuser_Click() Form3.Show End Sub '------------------------------------------------------------------------------------------------------ ‘Alineación de los formularios hijos '------------------------------------------------------------------------------------------------------ Private Sub sismoni_Click()

Page 200: Control de Dispositivos

180

Dim f As New frmUSB f.Width = 15000 f.Height = 7665 f.Left = (Screen.Width - f.Width) / 2 f.Top = 500 f.Show End Sub '------------------------------------------------------------------------------------------------------ ‘Cierra el formulario '------------------------------------------------------------------------------------------------------ Private Sub sisSalir_Click() Unload Me End Sub Private Sub mnuHelpAbout_Click() ' MsgBox "Versión " & App.Major & "." & App.Minor & "." & App.Revision frmAbout.Show End Sub Private Sub mnuHelpContents_Click() Dim nRet As Integer 'si no hay archivo de ayuda para este proyecto, mostrar un mensaje al usuario 'puede establecer el archivo de Ayuda para la aplicación en el cuadro 'de diálogo Propiedades del proyecto If Len(App.HelpFile) = 0 Then MsgBox "No se puede mostrar el contenido de la Ayuda. No hay Ayuda asociada a este proyecto.", vbInformation, Me.Caption Else On Error Resume Next nRet = OSWinHelp(Me.hwnd, App.HelpFile, 3, 0) If Err Then MsgBox Err.Description End If End If End Sub Private Sub mnuWindowArrangeIcons_Click() Me.Arrange vbArrangeIcons End Sub Private Sub mnuWindowTileVertical_Click() Me.Arrange vbTileVertical End Sub Private Sub mnuWindowTileHorizontal_Click() Me.Arrange vbTileHorizontal End Sub Private Sub mnuWindowCascade_Click()

Page 201: Control de Dispositivos

181

Me.Arrange vbCascade End Sub '------------------------------------------------------------------------------------------------------ ‘se encarga de centrar los formularios q se habrán sobre el '------------------------------------------------------------------------------------------------------ Private Sub MDIForm_Load() Me.Left = GetSetting(App.Title, "Settings", "MainLeft", 1000) Me.Top = GetSetting(App.Title, "Settings", "MainTop", 1000) Me.Width = GetSetting(App.Title, "Settings", "MainWidth", 6500) Me.Height = GetSetting(App.Title, "Settings", "MainHeight", 6500) End Sub Private Sub MDIForm_Unload(Cancel As Integer) If Me.WindowState <> vbMinimized Then SaveSetting App.Title, "Settings", "MainLeft", Me.Left SaveSetting App.Title, "Settings", "MainTop", Me.Top SaveSetting App.Title, "Settings", "MainWidth", Me.Width SaveSetting App.Title, "Settings", "MainHeight", Me.Height End If End Sub

C.2.2 SISTEMA

FRMUSB Formulario que interactúa con el módulo VBMPUSBAPI.bas para realizar el

control del hardware en el mismo se manejan variables de tipo Boolean, String y

Variant.

Public d7 As Boolean Public Bom1 As Boolean Public bom2 As Boolean Public temp1 As Boolean Public temp2 As Boolean Public flag As Boolean Public flag1 As Boolean Public vacio As Boolean Public info As Variant Public alertas As Variant Public alert As String Dim msjc001 As Boolean '------------------------------------------------------------------------------------------------------ ‘limpia variables booleans '------------------------------------------------------------------------------------------------------ Private Sub clear() temp1 = False

Page 202: Control de Dispositivos

182

temp2 = False Bom1 = False bom2 = False End Sub '------------------------------------------------------------------------------------------------------ ‘Comparación de datos obtenidos con desde el hardware para realizar acciones en el software '------------------------------------------------------------------------------------------------------ Private Sub Arranque(pepito As Integer) Select Case pepito Case "7" temp1 = True Onremote (temp1) Case "6" temp2 = True Onremote (temp2) Case "5" Bomba1.Visible = False Case "3" bomba2.Visible = True Case "2" Bom1 = True Case "1" bom2 = True End Select End Sub '------------------------------------------------------------------------------------------------------ ‘Lectura del puerto USB para ver si alguna alarma se activo desde el hardware '------------------------------------------------------------------------------------------------------ Private Sub Lectura() Dim Send_Buf(0 To 64) As Byte Dim Rec_Buf(0 To 64) As Byte Dim i As Long d7 = True If (myOutPipe <> INVALID_HANDLE_VALUE) And (myInPipe <> INVALID_HANDLE_VALUE) And d7 Then Send_Buf(0) = 3 If (Send_Receive(Send_Buf, 1, Rec_Buf, 8, 1000, 1000) <> 1) Then MsgBox "Fallo en la lectura de entradas" Else If Rec_Buf(0) = 1 Then Timer1.Enabled = True Else d7 = False End If If Rec_Buf(5) = 0 And d7 Then Bomba1.Visible = True End If

Page 203: Control de Dispositivos

183

For i = 0 To 7 If Rec_Buf(i) = 1 And d7 Then chkEntrada(i).Value = vbChecked Arranque (i) Else chkEntrada(i).Value = vbUnchecked End If Next i End If End If End Sub '------------------------------------------------------------------------------------------------------ ‘Activación de la bomba de carga para empezar el procedo de llenado del tanque '------------------------------------------------------------------------------------------------------ Private Sub Bomba1_Click() Timer5.Enabled = False llenado ("L") Timer5.Enabled = True End Sub Private Sub bomba2_Click() Timer5.Enabled = False vaciado ("L") Timer5.Enabled = True End Sub Private Sub Confirbom1() Dim msja001 As Boolean msja001 = True While flag Lectura If chkEntrada(2).Value = vbChecked Then flag = False Bomba1.Enabled = False Else aguante If msja001 Then alertas = "Esperando Confirmacion de Bomba1" + Chr(9) + Chr(9) + CStr(Time) + Chr(9) + CStr(Format(Date, "yy/mm/dd")) List2.AddItem alertas msja001 = False End If End If Wend End Sub Private Sub Confirbomba2() Dim msja002 As Boolean msja002 = True

Page 204: Control de Dispositivos

184

While flag1 Lectura If chkEntrada(1).Value = vbChecked Then flag1 = False bomba2.Enabled = False Else aguante If msja002 Then alertas = "Esperando Confirmación de Bomba2" + Chr(9) + Chr(9) + CStr(Time) + Chr(9) + CStr(Format(Date, "yy/mm/dd")) List2.AddItem alertas msja002 = False End If End If Wend End Sub -------------------------------------------------------------------------------------- 'Detener el proceso por completo enviando a apagar la alimentación del sistema '-------------------------------------------------------------------------------------- Private Sub BtParar_Click() Timer4.Enabled = False sql = "update apagado_general set apg_estado = 'A' where apg_id = 1" con.Execute sql Info = "Sistema Apagado POR FAVOR REINICIE" + Chr(9) + CStr(Time) + Chr(9) + CStr(Format(Date, "yy/mm/dd")) List1.AddItem info End Sub -------------------------------------------------------------------------------------- ' Procedimiento para Terminar proceso y cierre de formulario '-------------------------------------------------------------------------------------- Private Sub cmdTerminar_Click() ApagaLeds CloseMPUSBDevice cerradito Unload Me End Sub -------------------------------------------------------------------------------------- ‘Módulo de control de Leds '-------------------------------------------------------------------------------------- Private Sub Control_Leds(Comando As Byte, dato As Byte) Dim Send_Buf(0 To 64) As Byte If (myOutPipe <> INVALID_HANDLE_VALUE) And (myInPipe <> INVALID_HANDLE_VALUE) Then Send_Buf(0) = Comando Send_Buf(1) = dato If (Send(Send_Buf, 2, 1000) <> 1) Then MsgBox "Fallo en el LED"

Page 205: Control de Dispositivos

185

End If End If End Sub -------------------------------------------------------------------------------------- ‘Arranque general del proceso '-------------------------------------------------------------------------------------- Private Sub Command1_Click() info = "Sistema Iniciado" + Chr(9) + Chr(9) + Chr(9) + CStr(Time) + Chr(9) + CStr(Format(Date, "yy/mm/dd")) List1.AddItem info Control_Leds 1, 8 Genesis Timer1.Enabled = True temp1 = True temp2 = True Command1.Visible = False End Sub -------------------------------------------------------------------------------------- ‘Carga principal del formulario '-------------------------------------------------------------------------------------- Private Sub Form_Load() myInPipe = INVALID_HANDLE_VALUE myOutPipe = INVALID_HANDLE_VALUE OpenMPUSBDevice ApagaLeds conexion limpio_bd Timer2.Enabled = True End Sub ‘-------------------------------------------------------------------------------------- 'Apagando todas las salidas '-------------------------------------------------------------------------------------- Private Sub ApagaLeds() Dim i As Byte For i = 1 To 8 Control_Leds 2, i Next i End Sub ‘-------------------------------------------------------------------------------------- ' Reinicio del sistema para continuar con proceso de llamado o de vaciado '------------------------------------------------------------------------------------- Private Sub Reinicio_Click() Dim msj002 As Boolean Dim msj003 As Boolean Dim msj004 As Boolean Dim msj005 As Boolean

Page 206: Control de Dispositivos

186

Dim nivel As Variant Dim tabla As ADODB.Recordset Dim i As Integer limpio_bd Timer4.Enabled = False flag = True flag1 = True Set tabla = New Recordset sql = "Select * from tanque " tabla.Open sql, con, adOpenDynamic, adLockOptimistic tabla.MoveLast msj002 = True msj003 = True msj004 = True msj005 = True If temp1 Or temp2 Then MsgBox "Revise Bombas" Else j = tabla!ta_descripcion nivel = tabla!tan_tiempo direccion = tabla!arriba If direccion <> 0 Then Control_Leds 1, 7 aguante aguante aguante aguante aguante aguante Control_Leds 2, 7 While flag Confirbom1 Wend vacio = True Carga_Decarga (vacio) Nivel1.Value = nivel For i = j To 80 If BtParar.Enabled Then alertas = "Por Favor Confirme Bomba 1" + Chr(9) + Chr(9) + CStr(Time) + Chr(9) + CStr(Format(Date, "yy/mm/dd")) List1.AddItem alertas Reinicio.Visible = True Call llamalo(Nivel1.Value, i, vacio) alarma Call registro_fallo(Nivel1.Value, vacio) Timer4.Enabled = True Exit For Else If msj002 Then

Page 207: Control de Dispositivos

187

info = "Completando LLenado Bom1" + Chr(9) + CStr(Time) + Chr(9) + CStr(Format(Date, "yy/mm/dd")) List1.AddItem info msj002 = False End If aguante alarma Nivel1.Value = Nivel1.Value + 0.125 Call registro(Nivel1.Value, vacio, "L") If Nivel1.Value = 5 Then info = "Nivel Medio Activado" + Chr(9) + Chr(9) + CStr(Time) + Chr(9) + CStr(Format(Date, "yy/mm/dd")) List1.AddItem info End If If Nivel1.Value >= 10 Then Bomba1.Visible = False info = "Nivel Alto Activado" + Chr(9) + Chr(9) + Chr(9) + CStr(Time) + Chr(9) + CStr(Format(Date, "yy/mm/dd")) List1.AddItem info info = "Llenado Exitoso " + Chr(9) + Chr(9) + Chr(9) + CStr(Time) + Chr(9) + CStr(Format(Date, "yy/mm/dd")) List1.AddItem info Event_Succes_Log Event_Alert_Log End If Reinicio.Visible = False End If Next i Limpia_Carga_Decarga Else Control_Leds 1, 6 aguante aguante aguante aguante aguante aguante Control_Leds 2, 6 While flag1 Confirbomba2 Wend vacio = False Carga_Decarga (vacio) info = "Completando Vaciado Bom2" + Chr(9) + Chr(9) + CStr(Time) + Chr(9) + CStr(Format(Date, "yy/mm/dd")) List1.AddItem info Nivel1.Value = nivel For i = 1 To j If BtParar.Enabled Then alertas = "Por Favor Confirme Bomba2" + Chr(9) + Chr(9) + Chr(9) +

Page 208: Control de Dispositivos

188

CStr(Time) + Chr(9) + CStr(Format(Date, "yy/mm/dd")) List2.AddItem alertas Reinicio.Visible = True Call llamalo(Nivel1.Value, j - i, vacio) alarma Call registro_fallo(Nivel1.Value, vacio) Timer4.Enabled = True Exit For Else If msj004 Then info = "Vaciando Tanque" + Chr(9) + Chr(9) + Chr(9) + CStr(Time) + Chr(9) + CStr(Format(Date, "yy/mm/dd")) List1.AddItem info msj004 = False End If aguante alarma Nivel1.Value = Nivel1.Value - 0.125 Call registro(Nivel1.Value, vacio, "L") If Nivel1.Value = 5 Then info = "Nivel Medio Desactivado" + Chr(9) + Chr(9) + CStr(Time) + Chr(9) + CStr(Format(Date, "yy/mm/dd")) List1.AddItem info End If If Nivel1.Value = 0.25 And msj003 Then bomba2.Visible = False info = "Nivel bajo Desactivado" + Chr(9) + Chr(9) + CStr(Time) + Chr(9) + CStr(Format(Date, "yy/mm/dd")) List1.AddItem info info = "Vaciado Exitoso" + Chr(9) + Chr(9) + Chr(9) + CStr(Time) + Chr(9) + CStr(Format(Date, "yy/mm/dd")) List1.AddItem info Event_Succes_Log Event_Alert_Log msj003 = False End If End If Next i Limpia_Carga_Decarga End If limpia_temporal End If tabla.Close End Sub ‘-------------------------------------------------------------------------------------- ‘Módulo para sensar las temperaturas mediante un procedimiento llamado alarma '-------------------------------------------------------------------------------------- Private Sub Timer1_Timer() clear

Page 209: Control de Dispositivos

189

DoEvents alarma End Sub ‘-------------------------------------------------------------------------------------- ' Módulo de las alarmas '-------------------------------------------------------------------------------------- Public Sub alarma() Dim alarm As Boolean Lectura aguante If temp1 Or temp2 Then Control_Leds 1, 5 alarm = True BtParar.Enabled = True Else Control_Leds 2, 5 BtParar.Enabled = False End If End Sub ‘-------------------------------------------------------------------------------------- ' Tiempo utilizado para la lectura de variables externas '-------------------------------------------------------------------------------------- Public Sub aguante() DoEvents Dim i As Integer Dim j As Integer For i = 1 To 1000 For j = 1 To 3500 Next j Next i End Sub ‘-------------------------------------------------------------------------------------- 'Procedimiento para el llenado de una tabla llamada tanque en el cual se almacena el ‘ nivel cada vez que ocurre un problema '-------------------------------------------------------------------------------------- Public Sub llamalo(tiempo As Variant, lazo As Integer, onde As Boolean) For i = 3 To 5 If chkEntrada(i).Value = vbChecked Then valor = valor + i Text1.Text = valor End If Next i Dim tabla As ADODB.Recordset Set tabla = New Recordset sql = "Select * from tanque " tabla.Open sql, con, adOpenDynamic, adLockOptimistic tabla.AddNew

Page 210: Control de Dispositivos

190

If Text1.Text = "5" Then tabla!tan_dis_id = 1 tabla!ta_descripcion = lazo tabla!tan_nivel1 = "1" tabla!tan_nivel2 = "0" tabla!tan_nivel3 = "0" tabla!tan_tiempo = tiempo tabla!arriba = onde End If If Text1.Text = "9" Then tabla!tan_dis_id = 1 tabla!ta_descripcion = lazo tabla!tan_nivel1 = "1" tabla!tan_nivel2 = "1" tabla!tan_nivel3 = "0" tabla!tan_tiempo = tiempo tabla!arriba = onde End If If Text1.Text = "12" Then tabla!tan_dis_id = 1 tabla!ta_descripcion = lazo tabla!tan_nivel1 = "1" tabla!tan_nivel2 = "1" tabla!tan_nivel3 = "1" tabla!tan_tiempo = tiempo tabla!arriba = onde End If tabla.Update tabla.Close End Sub ‘-------------------------------------------------------------------------------------- ' Seteo de variables en la base de datos '-------------------------------------------------------------------------------------- Public Sub Genesis() Dim tabla As ADODB.Recordset Set tabla = New Recordset sql1 = "SELECT * FROM apagado_general" tabla.Open sql1, con, 3, adLockOptimistic If tabla!apg_id = 1 Then sql = "update apagado_general set apg_estado = 'I' where apg_id = 1" End If con.Execute sql tabla.Close End Sub ‘-------------------------------------------------------------------------------------- ‘Activación del proceso remoto '-------------------------------------------------------------------------------------- Public Sub Onremote(remo As Boolean)

Page 211: Control de Dispositivos

191

If remo Then sql = "update apagado_general set apg_estado = 'A' where apg_id = 2" sql1 = "update tipo_mc set tmc_estado = 'A' where tmc_id = 2" Else sql = "update apagado_general set apg_estado = 'I' where apg_id = 2" sql1 = "update tipo_mc set tmc_estado = 'I' where tmc_id = 2" End If con.Execute sql con.Execute sql1 End Sub ‘-------------------------------------------------------------------------------------- 'Módulo para saber la direccion que se llevaba al momento de ocurrir una incidencia '-------------------------------------------------------------------------------------- Public Sub Carga_Decarga(recep As Boolean) If recep Then sql = "update dispositivo set dis_estado = 'A' where dis_id = 2" sql1 = "update dispositivo set dis_estado = 'I' where dis_id = 3" Else sql = "update dispositivo set dis_estado = 'I' where dis_id = 2" sql1 = "update dispositivo set dis_estado = 'A' where dis_id = 3" End If con.Execute sql con.Execute sql1 End Sub Public Sub Limpia_Carga_Decarga() sql = "update dispositivo set dis_estado = 'I' where dis_id = 2" sql1 = "update dispositivo set dis_estado = 'I' where dis_id = 3" con.Execute sql con.Execute sql1 End Sub ‘-------------------------------------------------------------------------------------- ' Gravo los datos que se van produciendo conforme el tanque se llena en la base de datos llamada registro '------------------------------------------------------------------------------------- Public Sub registro(cant As Variant, loco As Boolean, confirmado As String) Dim via As Integer Dim via1 As Integer Dim tabla22 As ADODB.Recordset Set tabla22 = New Recordset confirmado1 = confirmado Text5.Text = Format(Date, "yyyy/mm/dd") Text6.Text = Time Text4.Text = Text5.Text + " " + Text6.Text puro = loco If puro <> 0 Then via = "2" via1 = "1"

Page 212: Control de Dispositivos

192

Else via = "1" via1 = "2" End If ‘-------------------------------------------------------------------------------------- 'Lleno la tabla registro con datos obtenidos del sistema '-------------------------------------------------------------------------------------- sql = "Select * from registro_mc " tabla22.Open sql, con, 3, 3 tabla22.AddNew tabla22!rmc_dis_id = 1 tabla22!rmc_tmc_id = 1 tabla22!rmc_cantidad = cant tabla22!rmc_fecha = Text4.Text tabla22!rmc_estado_on_off = 1 tabla22!rmc_estado_confirmacion = confirmado1 tabla22.AddNew tabla22!rmc_dis_id = 2 tabla22!rmc_tmc_id = 2 tabla22!rmc_cantidad = 1 tabla22!rmc_fecha = Text4.Text tabla22!rmc_estado_on_off = via tabla22!rmc_estado_confirmacion = confirmado1 tabla22.AddNew tabla22!rmc_dis_id = 3 tabla22!rmc_tmc_id = 2 tabla22!rmc_cantidad = 1 tabla22!rmc_fecha = Text4.Text tabla22!rmc_estado_on_off = via1 tabla22!rmc_estado_confirmacion = confirmado1 tabla22.Update tabla22.Close ‘-------------------------------------------------------------------------------------- 'Lleno la tabla temporal de manera paralela a la de registro '-------------------------------------------------------------------------------------- Dim tabla As ADODB.Recordset Set tabla = New Recordset sql1 = "Select * from temporal " tabla.Open sql1, con, 3, 3 tabla.AddNew tabla!tmp_dis_id = 1 tabla!tmp_tmc_id = 1 tabla!tmp_cantidad = cant tabla!tmp_fecha = Text4.Text tabla!tmp_estado_on_off = 1 tabla!tmp_estado_confirmacion = confirmado1 tabla.AddNew tabla!tmp_dis_id = 2

Page 213: Control de Dispositivos

193

tabla!tmp_tmc_id = 2 tabla!tmp_cantidad = 1 tabla!tmp_fecha = Text4.Text tabla!tmp_estado_on_off = via tabla!tmp_estado_confirmacion = confirmado1 tabla.AddNew tabla!tmp_dis_id = 3 tabla!tmp_tmc_id = 2 tabla!tmp_cantidad = 1 tabla!tmp_fecha = Text4.Text tabla!tmp_estado_on_off = via1 tabla!tmp_estado_confirmacion = confirmado1 tabla.Update tabla.Close End Sub ‘-------------------------------------------------------------------------------------- 'Almaceno la incidencia en caso de existir algún problema con alguna bomba '-------------------------------------------------------------------------------------- Public Sub registro_fallo(tanq As Variant, loca As Boolean) Dim via2 As Integer Dim via3 As Integer puro1 = loca If puro1 <> 0 Then via2 = "2" via3 = "1" Else via2 = "1" via3 = "2" End If Dim tabla As ADODB.Recordset Set tabla = New Recordset sql = "Select * from registro_mc " tabla.Open sql, con, adOpenDynamic, adLockOptimistic tabla.AddNew If temp1 Then tabla!rmc_dis_id = 1 tabla!rmc_tmc_id = 1 tabla!rmc_cantidad = tanq tabla!rmc_fecha = Text4.Text tabla!rmc_estado_on_off = 1 tabla!rmc_estado_confirmacion = "ok" tabla.AddNew tabla!rmc_dis_id = 2 tabla!rmc_tmc_id = 2 tabla!rmc_cantidad = 0 tabla!rmc_fecha = Text4.Text tabla!rmc_estado_on_off = via2 tabla!rmc_estado_confirmacion = "fallo"

Page 214: Control de Dispositivos

194

tabla.AddNew tabla!rmc_dis_id = 3 tabla!rmc_tmc_id = 2 tabla!rmc_cantidad = 1 tabla!rmc_fecha = Text4.Text tabla!rmc_estado_on_off = via3 tabla!rmc_estado_confirmacion = "ok" Else tabla!rmc_dis_id = 1 tabla!rmc_tmc_id = 1 tabla!rmc_cantidad = tanq tabla!rmc_fecha = Text4.Text tabla!rmc_estado_on_off = 1 tabla!rmc_estado_confirmacion = "ok" tabla.AddNew tabla!rmc_dis_id = 2 tabla!rmc_tmc_id = 2 tabla!rmc_cantidad = 1 tabla!rmc_fecha = Text4.Text tabla!rmc_estado_on_off = via2 tabla!rmc_estado_confirmacion = "ok" tabla.AddNew tabla!rmc_dis_id = 3 tabla!rmc_tmc_id = 2 tabla!rmc_cantidad = 0 tabla!rmc_fecha = Text4.Text tabla!rmc_estado_on_off = via3 tabla!rmc_estado_confirmacion = "fallo" End If tabla.Update tabla.Close ‘-------------------------------------------------------------------------------------- 'Lleno de manera paralela la incidencia en la tabla temporal '-------------------------------------------------------------------------------------- Dim tabla22 As ADODB.Recordset Set tabla22 = New Recordset sql1 = "Select * from temporal " tabla22.Open sql1, con, adOpenDynamic, adLockOptimistic tabla22.AddNew If temp1 Then tabla22!tmp_dis_id = 1 tabla22!tmp_tmc_id = 1 tabla22!tmp_cantidad = tanq tabla22!tmp_fecha = Text4.Text tabla22!tmp_estado_on_off = 1 tabla22!tmp_estado_confirmacion = "ok" tabla22.AddNew tabla22!tmp_dis_id = 2 tabla22!tmp_tmc_id = 2

Page 215: Control de Dispositivos

195

tabla22!tmp_cantidad = 0 tabla22!tmp_fecha = Text4.Text tabla22!tmp_estado_on_off = via2 tabla22!tmp_estado_confirmacion = "fallo" tabla22.AddNew tabla22!tmp_dis_id = 3 tabla22!tmp_tmc_id = 2 tabla22!tmp_cantidad = 1 tabla22!tmp_fecha = Text4.Text tabla22!tmp_estado_on_off = via3 tabla22!tmp_estado_confirmacion = "ok" Else tabla22!tmp_dis_id = 1 tabla22!tmp_tmc_id = 1 tabla22!tmp_cantidad = tanq tabla22!tmp_fecha = Text4.Text tabla22!tmp_estado_on_off = 1 tabla22!tmp_estado_confirmacion = "ok" tabla22.AddNew tabla22!tmp_dis_id = 2 tabla22!tmp_tmc_id = 2 tabla22!tmp_cantidad = 1 tabla22!tmp_fecha = Text4.Text tabla22!tmp_estado_on_off = via2 tabla22!tmp_estado_confirmacion = "ok" tabla22.AddNew tabla22!tmp_dis_id = 3 tabla22!tmp_tmc_id = 2 tabla22!tmp_cantidad = 0 tabla22!tmp_fecha = Text4.Text tabla22!tmp_estado_on_off = via3 tabla22!tmp_estado_confirmacion = "fallo" End If tabla22.Update tabla22.Close End Sub ‘-------------------------------------------------------------------------------------- 'Se activa para observar si el cliente remoto, no realiza alguna acción en la base de datos '-------------------------------------------------------------------------------------- Public Sub censo_ag() Dim tabla As ADODB.Recordset sql = "SELECT * FROM apagado_general where apg_id = 1" Set tabla = New Recordset tabla.Open sql, con, adOpenDynamic, adLockReadOnly If (tabla!apg_estado = "A") Then ApagaLeds CloseMPUSBDevice cerradito

Page 216: Control de Dispositivos

196

Else If msjc001 Then info = "Iniciado Sistema Remoto" + Chr(9) + Chr(9) + CStr(Time) + Chr(9) + CStr(Format(Date, "yy/mm/dd")) List1.AddItem info msjc001 = False End If End If tabla.Close End Sub ‘-------------------------------------------------------------------------------------- 'Timer para el mantener el monitoreo de las temperaturas en las bombas '-------------------------------------------------------------------------------------- Private Sub Timer2_Timer() Control_Leds 1, 1 Timer3.Enabled = True Timer2.Enabled = False End Sub ‘-------------------------------------------------------------------------------------- 'Timer para el mantener el monitoreo de las temperaturas en las bombas '-------------------------------------------------------------------------------------- Private Sub Timer3_Timer() Control_Leds 2, 1 Timer2.Enabled = True Timer3.Enabled = False End Sub ‘-------------------------------------------------------------------------------------- 'Timer para el mantener el monitoreo de censo '-------------------------------------------------------------------------------------- Private Sub Timer4_Timer() censo_ag End Sub ‘-------------------------------------------------------------------------------------- 'Limpio la base de datos luego de alguna incidencia '-------------------------------------------------------------------------------------- Public Sub limpio_bd() sql = "update apagado_general set apg_estado = 'I' where apg_id = 1" sql1 = "update apagado_general set apg_estado = 'I' where apg_id = 2" sql2 = "update dispositivo set dis_estado = 'I' where dis_id = 2" sql3 = "update dispositivo set dis_estado = 'I' where dis_id = 3" sql4 = "update tipo_mc set tmc_estado = 'I' where tmc_id = 2" sql5 = "update dispositivo set dis_remoto = '0' where dis_id = 2" sql6 = "update dispositivo set dis_remoto = '0' where dis_id = 3" con.Execute sql con.Execute sql1 con.Execute sql2

Page 217: Control de Dispositivos

197

con.Execute sql3 con.Execute sql4 con.Execute sql5 con.Execute sql6 End Sub ‘-------------------------------------------------------------------------------------- 'Limpio la tabla del proceso que realizó remoto '-------------------------------------------------------------------------------------- Public Sub limpio_Remoto_bd() sql15 = "update dispositivo set dis_remoto = '0' where dis_id = 2" sql16 = "update dispositivo set dis_remoto = '0' where dis_id = 3" con.Execute sql15 con.Execute sql16 End Sub ‘-------------------------------------------------------------------------------------- 'Proceso de vaciado del tanque '-------------------------------------------------------------------------------------- Public Sub vaciado(confirma_vaciado As String) Beep Bomba1.Enabled = True Dim msj003 As Boolean msj003 = True Dim i As Integer Dim bandera As Variant flag1 = True Control_Leds 1, 6 aguante aguante aguante aguante aguante aguante Control_Leds 2, 6 While flag1 Confirbomba2 Wend vacio = False Carga_Decarga (vacio) bandera = 10 For i = 1 To 80 If BtParar.Enabled Then alertas = "ALERTA Suceso en las Bombas" + Chr(9) + Chr(9) + CStr(Time) + Chr(9) + CStr(Format(Date, "yy/mm/dd")) List2.AddItem alertas Reinicio.Visible = True Call llamalo(bandera, 80 - i, vacio) alarma Call registro_fallo(bandera, vacio)

Page 218: Control de Dispositivos

198

msjc001 = True Timer4.Enabled = True Exit For Else If msj003 Then info = "Vaciando Bom2 ==> 'OK'" + Chr(9) + Chr(9) + CStr(Time) + Chr(9) + CStr(Format(Date, "yy/mm/dd")) List1.AddItem info info = "Nivel Alto Desactivado" + Chr(9) + Chr(9) + CStr(Time) + Chr(9) + CStr(Format(Date, "yy/mm/dd")) List1.AddItem info msj003 = False End If aguante alarma Nivel1.Value = bandera - 0.125 bandera = Nivel1.Value Call registro(bandera, vacio, confirma_vaciado) If bandera = 5 Then info = "Nivel Medio Desactivado" + Chr(9) + Chr(9) + CStr(Time) + Chr(9) + CStr(Format(Date, "yy/mm/dd")) List1.AddItem info End If If bandera = 0 Then bomba2.Visible = False info = "Nivel bajo Desactivado" + Chr(9) + Chr(9) + CStr(Time) + Chr(9) + CStr(Format(Date, "yy/mm/dd")) List1.AddItem info info = "Vaciado Exitoso" + Chr(9) + Chr(9) + Chr(9) + CStr(Time) + Chr(9) + CStr(Format(Date, "yy/mm/dd")) List1.AddItem info Event_Succes_Log Event_Alert_Log End If End If Next i Limpia_Carga_Decarga limpia_temporal limpio_Remoto_bd End Sub ‘-------------------------------------------------------------------------------------- 'Comienzo el proceso de llenado del tanque '-------------------------------------------------------------------------------------- Public Sub llenado(confirma_llenado As String) Beep Dim msj001 As Boolean msj001 = True bomba2.Enabled = True Dim i As Integer

Page 219: Control de Dispositivos

199

Dim bandera As Variant flag = True Control_Leds 1, 7 aguante aguante aguante aguante aguante aguante Control_Leds 2, 7 While flag Confirbom1 Wend vacio = True Carga_Decarga (vacio) For i = 1 To 80 If BtParar.Enabled Then alertas = "ALERTA Suceso en las Bombas" + Chr(9) + Chr(9) + CStr(Time) + Chr(9) + CStr(Format(Date, "yy/mm/dd")) List2.AddItem alertas Reinicio.Visible = True Call llamalo(bandera, i, vacio) alarma Call registro_fallo(bandera, vacio) msjc001 = True Timer4.Enabled = True Exit For Else If msj001 Then info = "Llenando Bom1 ==> 'OK'" + Chr(9) + Chr(9) + CStr(Time) + Chr(9) + CStr(Format(Date, "yy/mm/dd")) List1.AddItem info msj001 = False info = "Nivel Bajo Activado" + Chr(9) + Chr(9) + Chr(9) + CStr(Time) + Chr(9) + CStr(Format(Date, "yy/mm/dd")) List1.AddItem info End If aguante alarma Nivel1.Value = bandera + 0.125 bandera = Nivel1.Value Call registro(bandera, vacio, confirma_llenado) If bandera = 5 Then info = "Nivel Medio Activado" + Chr(9) + Chr(9) + CStr(Time) + Chr(9) + CStr(Format(Date, "yy/mm/dd")) List1.AddItem info End If If bandera >= 10 Then Bomba1.Visible = False

Page 220: Control de Dispositivos

200

info = "Nivel Alto Activado" + Chr(9) + Chr(9) + Chr(9) + CStr(Time) + Chr(9) + CStr(Format(Date, "yy/mm/dd")) List1.AddItem info info = "Llenado Exitoso " + Chr(9) + Chr(9) + Chr(9) + CStr(Time) + Chr(9) + CStr(Format(Date, "yy/mm/dd")) List1.AddItem info Event_Succes_Log Event_Alert_Log End If End If Next i Limpia_Carga_Decarga limpio_Remoto_bd End Sub ‘-------------------------------------------------------------------------------------- 'Grabo en el registro el tipo de usuario que realizo el proceso un Local o un Remoto '-------------------------------------------------------------------------------------- Public Sub Remoto_Bombas() Dim tabla As ADODB.Recordset sql = "SELECT * FROM dispositivo" Set tabla = New Recordset tabla.Open sql, con, adOpenDynamic, adLockReadOnly Do Until tabla.EOF If (tabla!dis_remoto = 1) And (tabla!dis_id = 2) Then llenado ("R") Else If (tabla!dis_remoto = 1) And (tabla!dis_id = 3) Then vaciado ("R") End If End If tabla.MoveNext Loop tabla.Close End Sub ‘-------------------------------------------------------------------------------------- 'Censa actividad en el proceso remoto '-------------------------------------------------------------------------------------- Private Sub Timer5_Timer() Call Remoto_Bombas End Sub ‘-------------------------------------------------------------------------------------- 'Elimina los datos grabados en temporal luego de cada ciclo completo del proceso '-------------------------------------------------------------------------------------- Public Sub limpia_temporal() sql = "Delete from temporal" con.Execute sql End Sub

Page 221: Control de Dispositivos

201

‘-------------------------------------------------------------------------------------- 'Llenado del archivo para almacenar el evento log '-------------------------------------------------------------------------------------- Public Sub Event_Succes_Log() Dim ruta As String ruta = "c:\EventSucces.ini" Open ruta For Append Lock Write As 1 For i = 0 To List1.ListCount - 1 Me.List1.ListIndex = i Print #1, Me.List1.Text Next Close #1 time_late Me.List1.clear End Sub ‘-------------------------------------------------------------------------------------- 'Llenado del archivo para almacenar el evento alarmas '-------------------------------------------------------------------------------------- Public Sub Event_Alert_Log() Dim ruta As String ruta = "c:\EventAlert.ini" Open ruta For Append Lock Write As 1 For i = 0 To List2.ListCount - 1 Me.List2.ListIndex = i Print #1, Me.List2.Text Next Close #1 time_late Me.List2.clear End Sub

C.2.3 CONSULTAS

FORM1 Consulta realizada por dispositivos en la misma se utiliza formulas parámetros que

son enviados al reporte para que se llene el mismo con datos de importancia para la

emisión del mismo

‘-------------------------------------------------------------------------------------- 'Proceso para empezar a realizar la consulta '-------------------------------------------------------------------------------------- Private Sub Command1_Click() Dim f1 As Date Dim f2 As Date ‘se confirma que los datos estén correctamente ingresados’

Page 222: Control de Dispositivos

202

If Not IsDate(Mas1(0).Text) Then Call MsgBox("Fecha inicial mal ingresada", vbExclamation, "Consultas") Call SelText(Mas1(0)) Mas1(0).SetFocus Exit Sub End If If Not IsDate(Mas1(1).Text) Then Call MsgBox("Fecha final mal ingresada", vbExclamation, "Consultas") Call SelText(Mas1(1)) Mas1(1).SetFocus Exit Sub End If f1 = Mas1(0).Text f2 = Mas1(1).Text ‘Creación de parámetros que se enviaran a Crystal Report para que se muestren’ Me.CrystalReport1.ReportFileName = App.Path & "\ReporteLlenado.rpt" ' Dim formula As String formula = "" For i = 0 To Me.List2.ListCount - 1 If i = 0 Then formula = formula + " if {registro_mc.rmc_estado_on_off}='" & Mid(Me.List2.List(i), 1, 1) & "' then " formula = formula + " '" + Mid(Me.List2.List(i), 2, 100) + "' " Else formula = formula + " else if {registro_mc.rmc_estado_on_off}='" & Mid(Me.List2.List(i), 1, 1) & "' then " formula = formula + " '" + Mid(Me.List2.List(i), 2, 100) + "' " End If Next Debug.Print formula Dim formula1 As String formula1 = "" For i = 0 To Me.List3.ListCount - 1 If i = 0 Then formula1 = formula1 + " if {registro_mc.rmc_tmc_id}=" & Mid(Me.List3.List(i), 1, 1) & " then " formula1 = formula1 + " '" + Mid(Me.List3.List(i), 2, 100) + "' " Else formula1 = formula1 + " else if {registro_mc.rmc_tmc_id}=" & Mid(Me.List3.List(i), 1, 1) & " then " formula1 = formula1 + " '" + Mid(Me.List3.List(i), 2, 100) + "' " End If Next Debug.Print formula1 Me.CrystalReport1.Formulas(0) = "f=" & formula & ""

Page 223: Control de Dispositivos

203

Me.CrystalReport1.Formulas(1) = "g='" & Me.List1.Text & "'" Me.CrystalReport1.Formulas(2) = "h=" & formula1 & "" Me.CrystalReport1.WindowState = crptMaximized ‘Carga de datos obtenidos desde la formula se los esta parametrizando para enviarlos al reporte’ CrystalReport1.ReplaceSelectionFormula ("{registro_mc.rmc_dis_id} = " & Mid(Me.List1.Text, 1, 1) & " and {registro_mc.rmc_Fecha} in DateTime (" & Year(f1) & ", " & Month(f1) & ", " & Day(f1) & ",00, 00, 00) to DateTime (" & Year(f2) & ", " & Month(f2) & ", " & Day(f2) & ",00, 00, 00)") If Me.Check1.Value = 0 And Me.Check2.Value = 1 Then CrystalReport1.ReplaceSelectionFormula ("{registro_mc.rmc_estado_on_off} = '" & Mid(Me.List2.Text, 1, 1) & "' and {registro_mc.rmc_dis_id} = " & Mid(Me.List1.Text, 1, 1) & " and {registro_mc.rmc_Fecha} in DateTime (" & Year(f1) & ", " & Month(f1) & ", " & Day(f1) & ",00, 00, 00) to DateTime (" & Year(f2) & ", " & Month(f2) & ", " & Day(f2) & ",00, 00, 00)") End If Me.CrystalReport1.WindowTitle = "Informe detallado de Nivel de bombas" Me.CrystalReport1.Action = 1 ‘Presentación del reporte’ End Sub ‘-------------------------------------------------------------------------------------- 'Lleno los objetos del formulario con los datos de las tablas a los que pertenecen '-------------------------------------------------------------------------------------- Private Sub Form_Load() conexion Dim tabla As ADODB.Recordset Set tabla = New ADODB.Recordset sql = "select * from dispositivo" tabla.Open sql, con, 3, 3 Me.List1.clear Do Until tabla.EOF Me.List1.AddItem tabla!dis_id & " " & tabla!dis_descripcion tabla.MoveNext Loop tabla.Close sql = "select * from apagado_general" tabla.Open sql, con, 3, 3 Me.List2.clear Do Until tabla.EOF Me.List2.AddItem tabla!apg_id & " " & tabla!apg_descripcion tabla.MoveNext Loop tabla.Close sql = "select * from tipo_mc" tabla.Open sql, con, 3, 3

Page 224: Control de Dispositivos

204

Me.List3.clear Do Until tabla.EOF Me.List3.AddItem tabla!tmc_id & " " & tabla!tmc_descripcion tabla.MoveNext Loop tabla.Close End Sub FORM 6 Consulta realizada consulta por usuario en la misma se utiliza formulas parámetros que son enviados al reporte para que se llene el mismo ‘-------------------------------------------------------------------------------------- ' Contador para poder dar acciones al botón de avance y retroceso '-------------------------------------------------------------------------------------- Public contador As Integer Private Sub Check1_Click() If Check1.Value = 1 Then Combo1.Enabled = False Command1.Visible = True Command2.Visible = True Label7.Visible = True Text5.Visible = True Combo1.Text = "" limpia_text Else Combo1.Enabled = True Command1.Visible = False Command2.Visible = False Label7.Visible = False Text5.Visible = False limpia_text End If End Sub ‘Módulos de limpiar los text para la presentación de los siguientes datos Private Sub limpia_text() Text1.Text = "" Text2.Text = "" Text3.Text = "" Text4.Text = "" Text5.Text = "" End Sub ‘-------------------------------------------------------------------------------------- ‘Búsqueda de siguiente usuario '--------------------------------------------------------------------------------------

Page 225: Control de Dispositivos

205

Private Sub Command1_Click() limpia_text contador = contador - 1 Dim tabla As ADODB.Recordset Set tabla = New ADODB.Recordset sql = "select * from usuario" tabla.Open sql, con, 3, 3 Do Until tabla.EOF If tabla!usu_id = contador Then Text5.Text = tabla!usu_nombres Text1.Text = tabla!usu_apellidos Text2.Text = tabla!usu_direccion Text3.Text = tabla!usu_telefono Text4.Text = tabla!usu_cedula Exit Do End If tabla.MoveNext Loop If contador = 0 Then Command1.Enabled = False Command2.Enabled = True MsgBox "No hay mas registros en la tabla", vbInformation, "Consulta Usuarios" End If tabla.Close End Sub ‘-------------------------------------------------------------------------------------- 'Búsqueda de usuario anterior '-------------------------------------------------------------------------------------- Private Sub Command2_Click() limpia_text contador = contador + 1 Dim tabla As ADODB.Recordset Set tabla = New ADODB.Recordset sql = "select * from usuario" tabla.Open sql, con, 3, 3 Do Until tabla.EOF If tabla!usu_id = contador Then Text5.Text = tabla!usu_nombres Text1.Text = tabla!usu_apellidos Text2.Text = tabla!usu_direccion Text3.Text = tabla!usu_telefono Text4.Text = tabla!usu_cedula Exit Do End If tabla.MoveNext Loop If tabla.EOF Then Command2.Enabled = False Command1.Enabled = True

Page 226: Control de Dispositivos

206

MsgBox "No hay mas registros en la tabla", vbInformation, "Consulta Usuarios" End If tabla.Close End Sub ‘-------------------------------------------------------------------------------------- ‘Formulario para llenar los combos '-------------------------------------------------------------------------------------- Private Sub Form_Load() contador = 0 conexion Dim tabla As ADODB.Recordset Set tabla = New ADODB.Recordset sql = "select * from usuario" tabla.Open sql, con, 3, 3 Me.Combo1.clear Do Until tabla.EOF Combo1.AddItem tabla!usu_nombres tabla.MoveNext Loop tabla.Close End Sub Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button) On Error Resume Next Select Case Button.Key Case "Buscar" Call llena Case "Imprimir" llama_reporte Case "Salir" Unload Me End Select End Sub ‘-------------------------------------------------------------------------------------- 'Llamada de reportes para imprimir '-------------------------------------------------------------------------------------- Private Sub llama_reporte() If Check1.Value = 1 Then Me.CrystalReport1.ReportFileName = App.Path & "\pepito.rpt" Me.CrystalReport1.WindowState = crptMaximized Me.CrystalReport1.WindowTitle = "Informe detallado de Nivel de bombas" Me.CrystalReport1.Action = 1 Else Me.CrystalReport1.ReportFileName = App.Path & "\prueba.rpt" Me.CrystalReport1.WindowState = crptMaximized Me.CrystalReport1.WindowTitle = "Informe detallado de Nivel de bombas"

Page 227: Control de Dispositivos

207

Me.CrystalReport1.Action = 1 End If End Sub ‘-------------------------------------------------------------------------------------- 'Llena datos en el formulario para visualizarlos '-------------------------------------------------------------------------------------- Private Sub llena() Dim tabla As ADODB.Recordset Set tabla = New ADODB.Recordset sql = "select * from usuario" tabla.Open sql, con, 3, 3 Do Until tabla.EOF If Combo1.Text = tabla!usu_nombres Then Text1.Text = tabla!usu_apellidos Text2.Text = tabla!usu_direccion Text3.Text = tabla!usu_telefono Text4.Text = tabla!usu_cedula End If tabla.MoveNext Loop tabla.Close End Sub FORM7 Formulario que realiza la presentación de datos de encendido y apagado de los

dispositivos dentro del sistema durante los procesos.

Public opcion As Boolean ‘-------------------------------------------------------------------------------------- 'chequeo de opciones para saber si es una consulta por rango de fechas o por fecha explicita '-------------------------------------------------------------------------------------- Private Sub Option1_Click() Label5.Visible = True Label6.Visible = True Combo3.Visible = True Combo4.Visible = True Label7.Visible = False Combo5.Visible = False opcion = True End Sub Private Sub Option2_Click()

Page 228: Control de Dispositivos

208

Label5.Visible = False Label6.Visible = False Combo3.Visible = False Combo4.Visible = False Label7.Visible = True Combo5.Visible = True opcion = False End Sub ‘-------------------------------------------------------------------------------------- 'Módulo de elección de acción por medio del toolbar '-------------------------------------------------------------------------------------- Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button) On Error Resume Next Select Case Button.Key Case "Visualiza" Call verifica 'Call visual Case "Imprimir" 'Call imprime Case "Salir" Unload Me End Select End Sub ‘-------------------------------------------------------------------------------------- 'Verifica la opción que eligió el usuario de hacer la búsqueda por rango de fecha o por fecha especifica '-------------------------------------------------------------------------------------- Private Sub verifica() If (Combo1.Text <> "" And Combo2.Text <> "") Then If opcion Then If Combo3.Text = "" Or Combo4.Text = "" Then MsgBox "Por Favor Escoja Rango de Fechas", vbInformation Else visual End If Else If Combo5.Text = "" Then MsgBox "Por Favor Escoja la Fecha", vbInformation Else visual End If End If Else MsgBox "Llene por Favor Todos los datos", vbInformation End If End Sub

Page 229: Control de Dispositivos

209

C.2.4 MANTENIMIENTO

FORM3 Formulario que permite realizar el ingreso de nuevos usuarios a la base de datos ‘-------------------------------------------------------------------------------------- 'Permite grabar los datos obtenidos desde el formulario '-------------------------------------------------------------------------------------- Private Sub Command1_Click() Dim tabla As ADODB.Recordset sql = "SELECT * FROM usuario " Set tabla = New Recordset tabla.Open sql, con, adOpenDynamic, adLockReadOnly Do Until tabla.EOF If (tabla!usu_nombres = MaskEdBox1.Text) Then MsgBox "Usuario ya existe" MaskEdBox1.Text = "" Me.MaskEdBox1.SetFocus End If tabla.MoveNext Loop tabla.Close ‘-------------------------------------------------------------------------------------- 'Confirma si los campos fueron correctamente llenados '-------------------------------------------------------------------------------------- If MaskEdBox1.Text <> "" And MaskEdBox2.Text <> "" And MaskEdBox3.Text <> "" And MaskEdBox4.Text <> "" And MaskEdBox5.Text <> "" And Text1.Text <> "" Then res = MsgBox("Confirma Realizar Inserción de Nuevo Usuario", vbYesNoCancel, "Creación de usuario") If res = 6 Then llena Else If res = 7 Then MsgBox "No se realizó el ingreso" End If End If Else MsgBox "Por Favor Llene Todos los Campos", vbInformation, "Ingreso de Usuarios" End If End Sub ‘-------------------------------------------------------------------------------------- 'Salida del formulario

Page 230: Control de Dispositivos

210

'-------------------------------------------------------------------------------------- Private Sub Command2_Click() Unload Me End Sub Private Sub Form_Load() conexion End Sub Private Sub limpia() MaskEdBox1.Text = "" MaskEdBox2.Text = "" MaskEdBox3.Text = "" MaskEdBox4.Text = "" MaskEdBox5.Text = "" Text1.Text = "" End Sub ‘-------------------------------------------------------------------------------------- 'Procedimiento que llena la tabla de usuario '-------------------------------------------------------------------------------------- Public Sub llena() Dim tabla As ADODB.Recordset sql = "select * from usuario" Set tabla = New Recordset tabla.Open sql, con, 3, 3 tabla.AddNew tabla!usu_nombres = MaskEdBox1.Text tabla!usu_apellidos = MaskEdBox2.Text tabla!usu_direccion = MaskEdBox3.Text tabla!usu_telefono = MaskEdBox4.Text tabla!usu_cedula = MaskEdBox5.Text tabla!usu_password = Text1.Text tabla.Update tabla.Close limpia MsgBox "El registro ha sido guardado satisfactoriamente", vbInformation, "Ingreso de Clientes" End Sub ‘-------------------------------------------------------------------------------------- 'Control para que el despliegue sea realizado por medio de la tecla enter '-------------------------------------------------------------------------------------- Private Sub MaskEdBox1_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then Me.MaskEdBox2.SetFocus End If End Sub Private Sub MaskEdBox2_KeyPress(KeyAscii As Integer)

Page 231: Control de Dispositivos

211

If KeyAscii = 13 Then Me.MaskEdBox3.SetFocus End If End Sub Private Sub MaskEdBox3_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then Me.MaskEdBox4.SetFocus End If End Sub Private Sub MaskEdBox4_KeyPress(KeyAscii As Integer) If Not (KeyAscii >= 48 And KeyAscii <= 57 Or KeyAscii = 8 Or KeyAscii = 13) Then KeyAscii = 0 MsgBox "Ingrese solo valores Numéricos" Me.MaskEdBox4.SetFocus End If If KeyAscii = 13 Then If Len(MaskEdBox4.Text) = 7 Then Me.MaskEdBox5.SetFocus Else MsgBox "Este campo solicita 7 Dígitos" Me.MaskEdBox4.SetFocus End If End If End Sub ‘-------------------------------------------------------------------------------------- 'Control para que solo permita ingresar datos numéricos en el campo '-------------------------------------------------------------------------------------- Private Sub MaskEdBox5_KeyPress(KeyAscii As Integer) If Not (KeyAscii >= 48 And KeyAscii <= 57 Or KeyAscii = 8 Or KeyAscii = 13) Then KeyAscii = 0 MsgBox "Ingrese solo valores Numéricos" Me.MaskEdBox5.SetFocus End If If KeyAscii = 13 Then If Len(MaskEdBox5.Text) = 10 Then Me.Text1.SetFocus Else MsgBox "Este campo solicita 10 Dígitos" Me.MaskEdBox5.SetFocus End If End If End Sub Private Sub Text1_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then Me.Command1.SetFocus

Page 232: Control de Dispositivos

212

End If End Sub FORM4 Mantenimiento de dispositivos en la base de datos más no obstante se agregara al ningún formulario Dim radios As Boolean ‘-------------------------------------------------------------------------------------- 'Control de verificación si ira para monitoreo visual y remoto '-------------------------------------------------------------------------------------- Public Sub radius() If Frame1.Visible = True Then If Option1.Value = True Or Option2.Value = True Then radios = True Else radios = False End If Else radios = True End If End Sub ‘-------------------------------------------------------------------------------------- ‘Envío de focus a los siguientes niveles '-------------------------------------------------------------------------------------- Private Sub Combo1_Click() Me.Combo2.SetFocus End Sub Private Sub Combo1_LostFocus() If Combo1.Text = "Sensor" Then Frame1.Visible = True Else Frame1.Visible = False End If End Sub ‘-------------------------------------------------------------------------------------- ‘Grabo en la base de datos '-------------------------------------------------------------------------------------- Private Sub Command1_Click() radius confirma End Sub

Page 233: Control de Dispositivos

213

‘-------------------------------------------------------------------------------------- 'Cierra el formulario '-------------------------------------------------------------------------------------- Private Sub Command2_Click() Unload Me End Sub ‘-------------------------------------------------------------------------------------- 'Confirmación del ingreso de los datos '-------------------------------------------------------------------------------------- Private Sub confirma() If Combo1.Text <> "" And Combo2.Text <> "" And radios Then res = MsgBox("Confirma Realizar Inserción", vbYesNoCancel, "Creación de Dispositivo") If res = 6 Then inserto Else If res = 7 Then MsgBox "No se realizó el ingreso" End If End If Else MsgBox "Por Favor, Ingrese todos los datos" End If End Sub ‘-------------------------------------------------------------------------------------- 'Ingreso a las tablas de la base de datos '-------------------------------------------------------------------------------------- Public Sub inserto() Dim tabla As ADODB.Recordset sql = "select * from dispositivo" Set tabla = New Recordset tabla.Open sql, con, 3, 3 tabla.AddNew tabla!dis_descripcion = Combo1.Text If Combo2.Text = "Activo" Then tabla!dis_estado = "A" Else tabla!dis_estado = "I" End If If Check1.Value = 1 Then tabla!dis_remoto = 0 Else tabla!dis_remoto = "" End If tabla.Update tabla.Close limpia End Sub

Page 234: Control de Dispositivos

214

Private Sub Form_Load() conexion End Sub ‘-------------------------------------------------------------------------------------- 'Limpio los campos luego del ingreso '-------------------------------------------------------------------------------------- Public Sub limpia() MsgBox "El registro ha sido guardado satisfactoriamente", vbInformation, "Ingreso de Clientes" Combo1.Text = "" Combo2.Text = "" Check1.Value = 0 Check2.Value = 0 Option1.Value = False Option2.Value = False Me.Combo1.SetFocus End Sub

C.2.5 EVENTOS

FRMPRESENTA Se encarga de presentar el evento del proceso que se desarrollaron axial como

contiene un toolbar con las aplicaciones de abrir, guardar, refrescar e imprimir los

datos

‘-------------------------------------------------------------------------------------- 'Declaración de variables utilizables propias del win32 '-------------------------------------------------------------------------------------- Private Declare Function OSWinHelp% Lib "user32" Alias "WinHelpA" (ByVal hwnd&, ByVal HelpFile$, ByVal wCommand%, dwData As Any) Private Declare Function ShellExecute Lib "shell32.dll" Alias _ "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, _ ByVal lpFile As String, ByVal lpParameters As String, _ ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long Private Sub Command1_Click() List1.Visible = True rtfText.Visible = False Command1.Visible = False tbToolBar.Visible = True End Sub Private Sub Form_Load() actual

Page 235: Control de Dispositivos

215

End Sub ‘-------------------------------------------------------------------------------------- 'Control toolbar '-------------------------------------------------------------------------------------- Private Sub tbToolBar_ButtonClick(ByVal Button As MSComctlLib.Button) On Error Resume Next Select Case Button.Key Case "Actualiza" Call actual Case "Abrir" Call abre Case "Guardar" Call guarda Case "Imprimir" Call imprime Case "Salir" Unload Me End Select End Sub ‘-------------------------------------------------------------------------------------- 'Control para que solo permita ingresar actuales '-------------------------------------------------------------------------------------- Public Sub actual() List1.clear Open "C:\EventSucces.ini" For Input Lock Read As #1 Do While Not EOF(1) Input #1, linea_texto List1.AddItem linea_texto Loop Close 1 End Sub ‘-------------------------------------------------------------------------------------- 'Abre aplicaciones varias que se puedan desplegar en un archivo rpt '------------------------------------------------------------------------------------- Public Sub abre() List1.Visible = False rtfText.Visible = True Command1.Visible = True tbToolBar.Visible = False Dim sFile As String With dlgCommonDialog .DialogTitle = "Abrir" .CancelError = False 'Pendiente: establecer los indicadores y los atributos del control common dialog .Filter = "Todos los archivos (*.*)|*.*" .ShowOpen If Len(.FileName) = 0 Then

Page 236: Control de Dispositivos

216

Exit Sub End If sFile = .FileName End With rtfText.LoadFile sFile Caption = sFile End Sub ‘-------------------------------------------------------------------------------------- 'Guarda lo que se visualiza en la form rpt '-------------------------------------------------------------------------------------- Public Sub guarda() Dim sFile As String If True Then With dlgCommonDialog .DialogTitle = "Guardar" .CancelError = False .Filter = "Todos los archivos (*.*)|*.*" .ShowSave If Len(.FileName) = 0 Then Exit Sub End If sFile = .FileName End With rtfText.LoadFile ("c:\EventSucces.ini") rtfText.SaveFile sFile Else sFile = Caption rtfText.SaveFile sFile End If End Sub ‘-------------------------------------------------------------------------------------- 'Imprime el documento '-------------------------------------------------------------------------------------- Public Sub imprime() Dim res1 As Long res1 = ShellExecute(Me.hwnd, "Print", "c:\EventSucces.ini", "", "", 1) End Sub FORM5 Se encarga de presentar el evento de alertas proceso que se desarrollaron así como

contiene un toolbar con las aplicaciones de abrir, guardar, refrescar e imprimir los

datos.

‘-------------------------------------------------------------------------------------- 'Declaración de variables utilizables propias del win32 '--------------------------------------------------------------------------------------

Page 237: Control de Dispositivos

217

Private Declare Function OSWinHelp% Lib "user32" Alias "WinHelpA" (ByVal hwnd&, ByVal HelpFile$, ByVal wCommand%, dwData As Any) Private Declare Function ShellExecute Lib "shell32.dll" Alias _ "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, _ ByVal lpFile As String, ByVal lpParameters As String, _ ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long Private Sub Command1_Click() List1.Visible = True rtfText.Visible = False Command1.Visible = False tbToolBar.Visible = True End Sub Private Sub Form_Load() actual End Sub ‘-------------------------------------------------------------------------------------- 'Control toolbar para llamar a los diferentes procesos '-------------------------------------------------------------------------------------- Private Sub tbToolBar_ButtonClick(ByVal Button As MSComctlLib.Button) On Error Resume Next Select Case Button.Key Case "Actualiza" Call actual Case "Abrir" Call abre Case "Guardar" Call guarda Case "Imprimir" Call imprime Case "Salir" Unload Me End Select End Sub ‘-------------------------------------------------------------------------------------- 'Control para que solo permita ingresar datos actuales '-------------------------------------------------------------------------------------- Public Sub actual() List1.clear Open "C:\EventAlert.ini" For Input Lock Read As #1 Do While Not EOF(1) Input #1, linea_texto List1.AddItem linea_texto Loop Close 1 End Sub Public Sub abre() List1.Visible = False

Page 238: Control de Dispositivos

218

rtfText.Visible = True Command1.Visible = True tbToolBar.Visible = False Dim sFile As String With dlgCommonDialog .DialogTitle = "Abrir" .CancelError = False 'Pendiente: establecer los indicadores y los atributos del control common dialog .Filter = "Todos los archivos (*.*)|*.*" .ShowOpen If Len(.FileName) = 0 Then Exit Sub End If sFile = .FileName End With rtfText.LoadFile sFile Caption = sFile End Sub ‘-------------------------------------------------------------------------------------- 'Guarda lo que se visualiza en la form rpt '-------------------------------------------------------------------------------------- Public Sub guarda() Dim sFile As String If True Then With dlgCommonDialog .DialogTitle = "Guardar" .CancelError = False .Filter = "Todos los archivos (*.*)|*.*" .ShowSave If Len(.FileName) = 0 Then Exit Sub End If sFile = .FileName End With rtfText.LoadFile ("c:\EventAlert.ini") rtfText.SaveFile sFile Else sFile = Caption rtfText.SaveFile sFile End If End Sub ‘-------------------------------------------------------------------------------------- 'Imprime el documento rpt '-------------------------------------------------------------------------------------- Public Sub imprime() Dim res1 As Long res1 = ShellExecute(Me.hwnd, "Print", "c:\EventAlert.ini", "", "", 1)

Page 239: Control de Dispositivos

219

End Sub

C.2.6 Ayuda

FRMABOUT Presenta información acerca del sistema así como también respecto al desarrollo del programa. Option Explicit ' Opciones de seguridad de clave del Registro... Const READ_CONTROL = &H20000 Const KEY_QUERY_VALUE = &H1 Const KEY_SET_VALUE = &H2 Const KEY_CREATE_SUB_KEY = &H4 Const KEY_ENUMERATE_SUB_KEYS = &H8 Const KEY_NOTIFY = &H10 Const KEY_CREATE_LINK = &H20 Const KEY_ALL_ACCESS = KEY_QUERY_VALUE + KEY_SET_VALUE + _ KEY_CREATE_SUB_KEY + KEY_ENUMERATE_SUB_KEYS + _ KEY_NOTIFY + KEY_CREATE_LINK + READ_CONTROL ' Tipos ROOT de clave del Registro... Const HKEY_LOCAL_MACHINE = &H80000002 Const ERROR_SUCCESS = 0 Const REG_SZ = 1 ' Cadena Unicode terminada en valor nulo Const REG_DWORD = 4 ' Número de 32 bits Const gREGKEYSYSINFOLOC = "SOFTWARE\Microsoft\Shared Tools Location" Const gREGVALSYSINFOLOC = "MSINFO" Const gREGKEYSYSINFO = "SOFTWARE\Microsoft\Shared Tools\MSINFO" Const gREGVALSYSINFO = "PATH" Private Declare Function RegOpenKeyEx Lib "advapi32" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, ByRef phkResult As Long) As Long Private Declare Function RegQueryValueEx Lib "advapi32" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, ByRef lpType As Long, ByVal lpData As String, ByRef lpcbData As Long) As Long Private Declare Function RegCloseKey Lib "advapi32" (ByVal hKey As Long) As Long Private Sub cmdSysInfo_Click() Call StartSysInfo End Sub

Page 240: Control de Dispositivos

220

Private Sub cmdOK_Click() Unload Me End Sub Private Sub Form_Load() Me.Caption = "Acerca de " & App.Title lblVersion.Caption = "Versión " & App.Major & "." & App.Minor & "." & App.Revision lblTitle.Caption = App.Title End Sub Public Sub StartSysInfo() On Error GoTo SysInfoErr Dim rc As Long Dim SysInfoPath As String ' Intentar obtener ruta de acceso y nombre del programa de Info. Del sistema a partir del Registro... If GetKeyValue(HKEY_LOCAL_MACHINE, gREGKEYSYSINFO, gREGVALSYSINFO, SysInfoPath) Then ' Intentar obtener sólo ruta del programa de Info. Del sistema a partir del Registro... Else If GetKeyValue(HKEY_LOCAL_MACHINE, gREGKEYSYSINFOLOC, gREGVALSYSINFOLOC, SysInfoPath) Then ' Validar la existencia de versión conocida de 32 bits del archivo If (Dir(SysInfoPath & "\MSINFO32.EXE") <> "") Then SysInfoPath = SysInfoPath & "\MSINFO32.EXE" ' Error: no se puede encontrar el archivo... Else GoTo SysInfoErr End If ' Error: no se puede encontrar la entrada del Registro... Else GoTo SysInfoErr End If Call Shell(SysInfoPath, vbNormalFocus) Exit Sub SysInfoErr: MsgBox "La información del sistema no está disponible en este momento", vbOKOnly End Sub Public Function GetKeyValue(KeyRoot As Long, KeyName As String, SubKeyRef As String, ByRef KeyVal As String) As Boolean Dim i As Long ' Contador de bucle Dim rc As Long ' Código de retorno Dim hKey As Long ' Controlador de una clave de Registro abierta Dim hDepth As Long Dim KeyValType As Long ' Tipo de datos de una clave de Registro

Page 241: Control de Dispositivos

221

Dim tmpVal As String ‘Almacenamiento temporal para un valor de clave ‘de Registro Dim KeyValSize As Long ' Tamaño de variable de clave de Registro '------------------------------------------------------------ 'Abrir clave de registro bajo KeyRoot {HKEY_LOCAL_MACHINE...} '------------------------------------------------------------ rc = RegOpenKeyEx(KeyRoot, KeyName, 0, KEY_ALL_ACCESS, hKey) ' Abrir clave de Registro If (rc <> ERROR_SUCCESS) Then GoTo GetKeyError ' Error de controlador... tmpVal = String$(1024, 0) ' Asignar espacio de variable KeyValSize = 1024 ' Marcar tamaño de variable '------------------------------------------------------------ 'Obtener valor de clave de Registro... '------------------------------------------------------------ rc = RegQueryValueEx(hKey, SubKeyRef, 0, _ KeyValType, tmpVal, KeyValSize) ' Obtener o crear valor de clave If (rc <> ERROR_SUCCESS) Then GoTo GetKeyError ' Controlar errores If (Asc(Mid(tmpVal, KeyValSize, 1)) = 0) tmpVal = Left(tmpVal, KeyValSize - 1) ' Encontrado valor nulo, se va a ‘quitar de la cadena Else ' En WinNT las cadenas no terminan en valor nulo... tmpVal = Left(tmpVal, KeyValSize) ' No se ha encontrado valor nulo, sólo se va a extraer la cadena End If '------------------------------------------------------------ ' Determinar tipo de valor de clave para conversión... '------------------------------------------------------------ Select Case KeyValType ' Buscar tipos de datos... Case REG_SZ ' Tipo de datos String de clave de Registro KeyVal = tmpVal ' Copiar valor de cadena Case REG_DWORD ' Tipo de datos Double Word de clave del Registro For i = Len(tmpVal) To 1 Step -1 ' Convertir cada bit KeyVal = KeyVal + Hex(Asc(Mid(tmpVal, i, 1))) ' Generar valor carácter a carácter Next KeyVal = Format$("&h" + KeyVal) ' Convertir Double Word a cadena End Select

Page 242: Control de Dispositivos

222

GetKeyValue = True ' Se ha devuelto correctamente rc = RegCloseKey(hKey) ' Cerrar clave de Registro Exit Function ' Salir GetKeyError: ' Borrar después de que se produzca un error... KeyVal = "" ' Establecer valor a cadena vacía GetKeyValue = False ' Fallo de retorno rc = RegCloseKey(hKey) ' Cerrar clave de Registro End Function

ANEXO D

Codificación del sistema

Page 243: Control de Dispositivos

223

D.1 Aplicación Web

Web Services

o wsApagadoGeneral

o wsControlOnOffDispositivos

o wsObtenerRegistroDispositivo

o wsUsuario

Sources Package

• org.cliente

o ApagadoGeneralBean

o RegistroBean Objetos

o UsuarioBean

• org.servidor

o ConexionBDDataSource

o InterfaceConexionBD

o LogicaNegocio

o wsApagadoGeneral

o wsConotolOnOffDispositivos

o wsObtenerRegistroDispositivo

o wsUsuario

WebServices

wsApagadoGeneral

package org.servidor;

import javax.jws.WebMethod;

import javax.jws.WebParam;

import javax.jws.WebService;

import org.cliente.ApagadoGeneralBean;

//Definimos el Webservice

@WebService()

public class wsApagadoGeneral {

//instanciamos el objeto de lógica de negocio

Page 244: Control de Dispositivos

224

private LogicaNegocio ln = new LogicaNegocio();

//Definimos la operación ObtenerApagadoGenreal la cual nos retornará

un //objeto de tipo apagadoGeneralBean

@WebMethod(operationName = "obtenerApagadoGeneral")

public ApagadoGeneralBean obtenerApagadoGeneral(@WebParam(name

= "id")

int id) {

//

ApagadoGeneralBean apg = ln.obtenerApagadoGeneral(id);

return apg;

}

//Definimos la operación apagadoGeneral, mandamos a ejecutar el método

//que actualiza la tabla de apagado general, y nos retorna un boolean que

//nos indica si la acción se ejecuto con éxito o no.

@WebMethod(operationName = "apagadoGeneral")

public boolean apagadoGeneral(@WebParam(name = "id")

int id) {

boolean ok = ln.apagadoGeneral(id);

return ok;

}

}

wsControlOnOffDispositivos

package org.servidor;

import javax.jws.WebMethod;

import javax.jws.WebParam;

import javax.jws.WebService;

//Definimos el Webservice

@WebService()

public class wsConotolOnOffDispositivos {

//instanciamos el objeto de lógica de negocio

private LogicaNegocio ln = new LogicaNegocio();

//ejecutamos el ControlOnOffDispositivos el cual actualiza el estado de

encendio

Page 245: Control de Dispositivos

225

//o apagado de los dispositivos, y luego nos retorna un boolean que nos

indica si la acción se ejecuto con éxito o no.

@WebMethod(operationName = "ControlOnOffDispositivos")

public boolean ControlOnOffDispositivos(@WebParam(name = "id")

int id) {

boolean ok = ln.ControlOnOffDispositivos(id);

return ok;

}

}

wsObtenerRegistroDispositivo

package org.servidor;

import javax.jws.WebMethod;

import javax.jws.WebParam;

import javax.jws.WebService;

import org.cliente.RegistroBean;

//Definimos el Webservice

@WebService()

public class wsObtenerRegistroDispositivo {

//instanciamos el objeto de lógica de negocio

private LogicaNegocio ln = new LogicaNegocio();

//Definimos una clase de tipo RegistroBean, la cual me retorna el registro

de //todos los dispositivos

@WebMethod(operationName = "obtenerRegistroDispositivo")

public RegistroBean obtenerRegistroDispositivo(@WebParam(name =

"id")

int id) {

//TODO writes your implementation code here:

RegistroBean registro = ln.obtenerRegistroDispositivo(id);

return registro;

}

}

Page 246: Control de Dispositivos

226

wsUsuario

package org.servidor;

import javax.jws.WebMethod;

import javax.jws.WebParam;

import javax.jws.WebService;

import org.cliente.UsuarioBean;

//Definimos el Webservice

@WebService()

public class wsUsuario {

//instanciamos el objeto de lógica de negocio

private LogicaNegocio ln = new LogicaNegocio();

//Definimos una clase de tipo UsuarioBean, la cual me retorna el registro

del usuario correspondiente.

@WebMethod(operationName = "obtenerUsuario")

public UsuarioBean obtenerUsuario(@WebParam(name = "cedula")

String cedula,@WebParam(name = "password")

String password) {

UsuarioBean usuario = ln.obtenerUsuario(cedula,password);

return usuario;

}

Sources Packages

org.cliente

Objetos que registran tipos de datos específicos

• ApagadoGeneralBean

• RegistroBean

• UsuarioBean

org.servidor

ConexionBDDataSource

package org.servidor;

import java.sql.Connection;

Page 247: Control de Dispositivos

227

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import javax.naming.Context;

import javax.naming.InitialContext;

import javax.naming.NamingException;

import javax.sql.DataSource;

import org.cliente.UsuarioBean;

import org.cliente.RegistroBean;

import java.util.ArrayList;

import javax.ejb.FinderException;

import org.cliente.ApagadoGeneralBean;

public class ConexionBDDataSource implements InterfaceConexionBD{

private Connection con;

private DataSource ds;

private PreparedStatement ps;

private ResultSet rs;

public ConexionBDDataSource() {

}

public boolean conectarBD() {

try {

ds = getJdbcMyDatasourceMySQL();

try {

con = ds.getConnection();

} catch (SQLException ex) {

return false;

} catch(NullPointerException ex){

return false;

}

} catch (NamingException ex) {

Page 248: Control de Dispositivos

228

return false;

}

return true;

}

//verifica si el usuario existe o no

public boolean existeUsuario(String cedula) {

try {

ps = con.prepareStatement("select * from usuario where usu_cedula = " +

"'" + cedula + "'");

rs = ps.executeQuery();

if(rs.next()){

return true;

}

} catch (SQLException ex) {

ex.printStackTrace();

}

return false;

}

//obtiene los datos del usuario

public UsuarioBean obtenerUsuario(String cedula,String password) {

UsuarioBean usuario = new UsuarioBean();

String sqlUsuario="select * from usuario where usu_cedula = "+

" '" + cedula + "' and usu_password= "+ " '"+ password +"'";

try {

ps = con.prepareStatement(sqlUsuario);

rs = ps.executeQuery();

if(rs.next()){

usuario.setNombres(rs.getString("usu_nombres"));

usuario.setApellidos(rs.getString("usu_apellidos"));

usuario.setDireccion(rs.getString("usu_direccion"));

usuario.setTelefono(rs.getString("usu_telefono"));

}

Page 249: Control de Dispositivos

229

} catch (SQLException ex) {

ex.printStackTrace();

}

return usuario;

}

//obtiene el último registro del dispositivo requerido

public RegistroBean obtenerRegistroDispositivo(Integer id) {

RegistroBean registro = new RegistroBean();

try {

String sql_registro="";

sql_registro="select dis.dis_descripcion as dispositivo,"+

" tmc.tmc_descripcion as tipo, rmc.rmc_cantidad as cantidad,"+

" rmc.rmc_estado_on_off as estado"+

" FROM registro_mc rmc, dispositivo dis, tipo_mc tmc"+

"where rmc.rmc_dis_id=dis.dis_id and

rmc.rmc_tmc_id=tmc.tmc_id"+

" and rmc.rmc_dis_id= " + id +

" order by rmc.rmc_id desc limit 3";

ps = con.prepareStatement(sql_registro);

rs = ps.executeQuery();

if(rs.next()){

registro.setDispositivo(rs.getString("dispositivo"));

registro.setTipo(rs.getString("tipo"));

registro.setCantidad(rs.getString("cantidad"));

registro.setEstado(rs.getString("estado"));

}

} catch (SQLException ex) {

ex.printStackTrace();

}

return registro;

}

//Obtiene el estado del apagado general del sistema

Page 250: Control de Dispositivos

230

public ApagadoGeneralBean obtenerApagadoGeneral(Integer id) {

ApagadoGeneralBean apg = new ApagadoGeneralBean();

try {

String sql_apg="";

sql_apg="select apg_id as id, apg_descripcion as descripcion,"+

" apg_estado as estado"+

" FROM apagado_general"+

" where apg_id= " + id ;

ps = con.prepareStatement(sql_apg);

rs = ps.executeQuery();

if(rs.next()){

apg.setDescripcion(rs.getString("descripcion"));

apg.setEstado(rs.getString("estado"));

}

} catch (SQLException ex) {

ex.printStackTrace();

}

return apg;

}

//Actualiza el estado de los dispositivos para apagarlos o encenderlos

public boolean ControlOnOffDispositivos(Integer id) {

boolean ok = false;

try {

String sql_apg="";

sql_apg="update dispositivo "+

" set dis_estado='0' "+

" where dis_estado='A' and dis_id= " + id ;

ps = con.prepareStatement(sql_apg);

ps.executeUpdate();

ok=true;

} catch (SQLException ex) {

Page 251: Control de Dispositivos

231

ex.printStackTrace();

}

return ok;

}

public boolean apagadoGeneral(Integer id) {

boolean ok = false;

try {

String sql_apg="";

sql_apg="update apagado_general "+

" set apg_estado='0' "+

" where apg_estado='I' and apg_id= " + id ;

ps = con.prepareStatement(sql_apg);

ps.executeUpdate();

ok=true;

} catch (SQLException ex) {

ex.printStackTrace();

}

return ok;

}

//Código generado por Netbeans realiza el Data Source para la conexion con la

base

private DataSource getJdbcMyDatasourceMySQL() throws NamingException

{

Context c = new InitialContext();

return (DataSource) c.lookup("java:comp/env/jdbc/myDatasourceMySQL");

}

@Override

public void finalize(){

try {

if(!con.isClosed())

Page 252: Control de Dispositivos

232

con.close();

} catch (SQLException ex) {

} catch(NullPointerException ex){

}

}

}

LogicaNegocio

wsApagadoGeneral

wsConotolOnOffDispositivos

wsObtenerRegistroDispositivo

wsUsuario

LogicaNegocio

//Esta clase maneja la lógica del negocio

//Controla la clase de COnexionBDDatasource

package org.servidor;

import org.cliente.UsuarioBean;

import org.cliente.RegistroBean;

import java.util.ArrayList;

import javax.ejb.FinderException;

import org.cliente.ApagadoGeneralBean;

public class LogicaNegocio {

private ConexionBDDataSource con;

private boolean conectado = false;

public LogicaNegocio() {

conectado = conectarse();

}

public boolean conectarse(){

con = new ConexionBDDataSource();

if(!con.conectarBD())

return false;

else

Page 253: Control de Dispositivos

233

return true;

}

public UsuarioBean obtenerUsuario(String cedula,String password){

if(conectado){

if(!con.existeUsuario(cedula)){

return null;

}

else{

UsuarioBean usuario = con.obtenerUsuario(cedula,password);

return usuario;

}

}else

return null;

}

public RegistroBean obtenerRegistroDispositivo(Integer id){

if(conectado){

RegistroBean registro = con.obtenerRegistroDispositivo(id);

return registro;

}else

return null;

}

public ApagadoGeneralBean obtenerApagadoGeneral(Integer id){

if(conectado){

ApagadoGeneralBean apg = con.obtenerApagadoGeneral(id);

return apg;

}else

return null;

}

public boolean ControlOnOffDispositivos(Integer id){

if(conectado){

boolean ok = con.ControlOnOffDispositivos(id);

return ok;

Page 254: Control de Dispositivos

234

}else

return false;

}

public boolean apagadoGeneral(Integer id){

if(conectado){

boolean ok = con.apagadoGeneral(id);

return ok;

}else

return false;

}

}

D.2 Aplicación Móvil

Package hello

httpMidlet

package hello;

import javax.microedition.rms.*;

import javax.microedition.midlet.*;

import javax.microedition.lcdui.*;

import javax.microedition.io.*;

import java.io.*;

import java.rmi.Remote.*;

import wsusuarioservice.*;

import wsobtenerregistrodispositivoservice.*;

import wsapagadogeneralservice.*;

//import monitor.midlet.*;

import socket.Client;

//import socket.Server;

Page 255: Control de Dispositivos

235

import java.util.*;

import javax.microedition.midlet.*;

import javax.microedition.lcdui.*;

//import socket.*;

import wsapagadogeneralservice.apagadoGeneralBean;

import wsapagadogeneralservice.wsApagadoGeneralService_Stub;

import

wsconotolonoffdispositivosservice.wsConotolOnOffDispositivosService_Stu

b;

public class HttpMidlet extends MIDlet implements CommandListener{

private Command salir, ingresar, mostrar;

private Command cmdLogin, cmdBack, cmdMonitoreo, cmdControl,

cmdChat, cmdBievenidaControl;

private Command cmdBackBienvenida, cmdBackMonitoreo,

cmdIniciarChat, cmdAceptarControl, cmdBackControl,

cmdAceptarApagado, cmdAceptarEncendido;

private Display display;

private Form pantallaLogin, pantallaBienvenida,pantallaControl,

pantallaApagadoGeneral,

pantallaEncendidoDispositivos,pantallaOKEncendidoDispositivos;

//private reporteGrafico pantallaMonitoreo;

public monitorear pantallaMonitoreo;

private TextField cedula, password;

private List elijeDispositivo;

private ChoiceGroup chOnOff,chEnciendeBomba, chApagadoGeneral;

private StringItem sUsuario, sBombaCarga ,sBombaDescarga, sTanque,

sApagadoGeneral, sEncendidoBombas;

private registroBean registro;

//Bloque Chat

private boolean isPaused;

// private Server server;

private Client client;

Page 256: Control de Dispositivos

236

private boolean llenando=false;

private Timer tm; // Timer

private TestTimerTask tt; // Task

public HttpMidlet() {

display = Display.getDisplay(this);

//Pantalla Login

salir = new Command("Salir", Command.EXIT, 2);

cmdLogin = new Command("Login", Command.OK, 1);

cedula = new TextField("Cedula : ", "",50,TextField.ANY);

password = new TextField("Contraseña", "", 50,

TextField.ANY);

pantallaLogin = new Form("Login");

pantallaLogin.append(cedula);

pantallaLogin.append(password);

pantallaLogin.addCommand(salir);

pantallaLogin.addCommand(cmdLogin);

pantallaLogin.setCommandListener(this);

//Pantalla Bienvenida

cmdBack = new Command("Regresar", Command.BACK, 1);

cmdMonitoreo = new Command("Monitoreo", Command.OK, 1);

cmdBievenidaControl = new Command("Control", Command.OK,

2);

cmdChat = new Command("Chat", Command.OK, 3);

sUsuario = new StringItem("Bienvenido :","");

pantallaBienvenida = new Form("Sistema de Monitoreo y

Control");

pantallaBienvenida.append(sUsuario);

pantallaBienvenida.addCommand(cmdBack);

pantallaBienvenida.addCommand(cmdMonitoreo);

pantallaBienvenida.addCommand(cmdBievenidaControl);

Page 257: Control de Dispositivos

237

pantallaBienvenida.addCommand(cmdChat);

pantallaBienvenida.setCommandListener(this);

//Pantalla Monitoreo

cmdBackBienvenida = new Command("Regresar",

Command.BACK, 1);

cmdChat = new Command("Chat", Command.OK, 1);

cmdControl = new Command("Control", Command.OK, 2);

pantallaMonitoreo = new monitorear();

pantallaMonitoreo.addCommand(cmdBackBienvenida);

pantallaMonitoreo.addCommand(cmdControl);

pantallaMonitoreo.addCommand(cmdChat);

pantallaMonitoreo.setCommandListener(this);

sBombaCarga = new StringItem("Bomba Carga :","");

sBombaDescarga = new StringItem("Bomba Descarga :","");

sTanque = new StringItem("Tanque", "");

//Pantalla Monitoreo

//Pantalla Control

cmdBackMonitoreo = new Command("Regresar",

Command.BACK, 1);

cmdAceptarControl = new Command("Aceptar", Command.OK,

1);

chOnOff = new ChoiceGroup("Apagado/Ecendido de

Dispositivos", Choice.EXCLUSIVE);

chOnOff.append("Apagado General", null);

chOnOff.append("Encendido de Bombas", null);

pantallaControl = new Form("Sistema de Control");

pantallaControl.append(chOnOff);

pantallaControl.addCommand(cmdAceptarControl);

pantallaControl.addCommand(cmdBackMonitoreo);

pantallaControl.setCommandListener(this);

Page 258: Control de Dispositivos

238

cmdBackControl = new Command("Regresar", Command.BACK,

1);

pantallaApagadoGeneral = new Form("Sistema de Control");

chApagadoGeneral = new ChoiceGroup("Apagado General del

Sistema", Choice.EXCLUSIVE);

chApagadoGeneral.append("Si", null);

chApagadoGeneral.append("No", null);

cmdAceptarApagado = new Command("Aceptar", Command.OK,

1);

pantallaApagadoGeneral.append(chApagadoGeneral);

pantallaApagadoGeneral.addCommand(cmdBackControl);

pantallaApagadoGeneral.addCommand(cmdAceptarApagado);

pantallaApagadoGeneral.setCommandListener(this);

pantallaEncendidoDispositivos = new Form("Sistema de Control");

chEnciendeBomba = new ChoiceGroup("Enciende Bomba",

Choice.EXCLUSIVE);

chEnciendeBomba.append("Carga", null);

chEnciendeBomba.append("Descarga", null);

cmdAceptarEncendido = new Command("Aceptar", Command.OK,

1);

pantallaEncendidoDispositivos.append(chEnciendeBomba);

pantallaEncendidoDispositivos.addCommand(cmdBackControl);

pantallaEncendidoDispositivos.addCommand(cmdAceptarEncendido);

pantallaEncendidoDispositivos.setCommandListener(this);

}

public void startApp() {

display.setCurrent(pantallaLogin);

}

public boolean isPaused() {

return isPaused;

Page 259: Control de Dispositivos

239

}

public void pauseApp() {

}

public void destroyApp(boolean unconditional) {

}

public void commandAction(Command c, Displayable s) {

if(c == cmdBack){

display.setCurrent(pantallaLogin);

}

if(c== cmdBackBienvenida){

tm.cancel();

display.setCurrent(pantallaBienvenida);

}

if(c== cmdBackMonitoreo){

llamarTimer();

//wsObtenerRegistroDispotivo();

}

if (c == salir) {

destroyApp(false);

notifyDestroyed();

}

/*if (c == mostrar){

llamarTimer();

}*/

if(c == cmdLogin){

wsLogin();

}

if(c == cmdMonitoreo){

//display.setCurrent(pantallaMonitoreo);

//wsObtenerRegistroDispotivo();

llamarTimer();

//reporteGrafico();

Page 260: Control de Dispositivos

240

}

if(c == cmdChat){

client = new Client(this);

client.start();

}

if (c == cmdIniciarChat) {

tm.cancel();

client = new Client(this);

client.start();

}

if(c == cmdControl){

tm.cancel();

display.setCurrent(pantallaControl);

}

if(c == cmdBievenidaControl){

//tm.cancel();

display.setCurrent(pantallaControl);

//display.setCurrent(elijeDispositivo);

}

if(c == cmdAceptarControl){

//tm.cancel();

if(chOnOff.getSelectedIndex()==0){

display.setCurrent(pantallaApagadoGeneral);

}

if(chOnOff.getSelectedIndex()==1){

display.setCurrent(pantallaEncendidoDispositivos);

}

//display.setCurrent(elijeDispositivo);

}

if(c == cmdBackControl){

display.setCurrent(pantallaControl);

}

Page 261: Control de Dispositivos

241

if(c == cmdAceptarApagado){

wsApagarGeneral();

//display.setCurrent(pantallaControl);

}

if(c == cmdAceptarEncendido){

wsControlDispositivos();

//display.setCurrent(pantallaControl);

}

}

//Clase que maneja el logueo del usuario mediante el consumo del

servicio web y retorna los datos del usuario

public void wsLogin(){

Thread getinfo = new Thread(){/*pasamos como parámetro la instancia

del Thread Principal que no servirá para regresar los datos*/

public void run(){

try{

usuarioBean usuario = new usuarioBean();

wsUsuarioService_Stub wsUsuario = new wsUsuarioService_Stub();

usuario

=wsUsuario.obtenerUsuario(cedula.getString(),password.getString());

sUsuario.setText(usuario.getNombres()+" "+usuario.getApellidos());

if(usuario.getNombres()==null){

Alert alertaUserInvalido = new Alert("Guardar”, “Usuario no

válido...",null,AlertType.CONFIRMATION);

alertaUserInvalido.setTimeout(Alert.FOREVER);

cedula.setString("");

password.setString("");

display.setCurrent(alertaUserInvalido,pantallaLogin);

}else{

display.setCurrent(pantallaBienvenida);

Page 262: Control de Dispositivos

242

}

}catch(IOException e){

e.printStackTrace();

}

}

};

getinfo.start();

}

//Clase que maneja el encendido y apagado de dispositivos dentro del

sistema mediante el consumo de un servicio web el cual actualiza los

estados en la tabla de dispositivos.

public void wsControlDispositivos (){

Thread getinfo = new Thread(){/*pasamos como parámetro la instancia

del Thread Principal que no servirá para regresar los datos*/

public void run(){

try{

boolean ok;

wsConotolOnOffDispositivosService_Stub

wsControlOnOffDispositivos = new

wsConotolOnOffDispositivosService_Stub();

ok

=wsControlOnOffDispositivos.ControlOnOffDispositivos(chEnciendeBomba

.getSelectedIndex()+2);

if(ok==true){

Alert apgControlOnOffDispositivos = new Alert("OK", "Bomba

encendida", null,AlertType.CONFIRMATION);

apgControlOnOffDispositivos.setTimeout(Alert.FOREVER);

display.setCurrent(apgControlOnOffDispositivos,pantallaEncendidoDispositi

vos);

}/*else{

display.setCurrent(pantallaEncendidoDispositivos);

}*/

}catch(IOException e){

Page 263: Control de Dispositivos

243

e.printStackTrace();

}

}

};

getinfo.start();

}

//Clase que maneja el encendido y apagado general del sistema mediante

el consumo de un servicio web el cual actualiza los estados en la tabla de

apagado general.

public void wsApagarGeneral (){

Thread getinfo = new Thread(){/*pasamos como parámetro la instancia

del Thread Principal que no servirá para regresar los datos*/

public void run(){

try{

boolean ok=false;

wsApagadoGeneralService_Stub wsApagarGeneral = new

wsApagadoGeneralService_Stub();

if(chApagadoGeneral.getSelectedIndex()==0){

ok =wsApagarGeneral.apagadoGeneral(1);

}

if(ok==true){

Alert alertApagadoGeneral = new Alert("OK","Apagado General

desde Móbil",null,AlertType.CONFIRMATION);

alertApagadoGeneral.setTimeout(Alert.FOREVER);

display.setCurrent(alertApagadoGeneral,pantallaApagadoGeneral);

}/*else{

display.setCurrent(pantallaEncendidoDispositivos);

}*/

}catch(IOException e){

e.printStackTrace();

}

}

};

Page 264: Control de Dispositivos

244

getinfo.start();

}

//Clase que realiza un reporte gráfico mediante un servicio web que

retorna los registro de los datos actuales de todos y cada uno de los

dispositivos.

public void reporteGrafico(){

Thread getinfo = new Thread(){

public void run(){

try{

registroBean registroTanque = new registroBean();

registroBean registroBombaCarga = new registroBean();

registroBean registroBombaDescarga = new registroBean();

apagadoGeneralBean apg = new apagadoGeneralBean();

wsObtenerRegistroDispositivoService_Stub wsRegistro = new

wsObtenerRegistroDispositivoService_Stub();

wsApagadoGeneralService_Stub wsApg = new

wsApagadoGeneralService_Stub();

apg = wsApg.obtenerApagadoGeneral(2);

registroTanque =wsRegistro.obtenerRegistroDispositivo(1);

registroBombaCarga = wsRegistro.obtenerRegistroDispositivo(2);

registroBombaDescarga = wsRegistro.obtenerRegistroDispositivo(3);

pantallaMonitoreo.setregistroTanque(registroTanque);

pantallaMonitoreo.setregistroBombaCarga(registroBombaCarga);

pantallaMonitoreo.setregistroBombaDescarga(registroBombaDescarga);

pantallaMonitoreo.start();

display.setCurrent(pantallaMonitoreo);

}catch(IOException e){

e.printStackTrace();

Page 265: Control de Dispositivos

245

}

}

};

getinfo.start();

}

public void llamarTimer(){

tm = new Timer();

tt = new TestTimerTask();

tm.schedule(tt,5000, 5000);

}

private class TestTimerTask extends TimerTask

{

public final void run()

{

reporteGrafico();

}

}

}

Monitorear

package hello;

import javax.microedition.lcdui.*;

import javax.microedition.lcdui.game.*;

import javax.microedition.midlet.*;

import java.io.*;

import javax.microedition.media.*;

import java.util.*;

import wsobtenerregistrodispositivoservice.*;

import wsapagadogeneralservice.*;

public class monitorear extends GameCanvas implements Runnable{

private boolean llenando = false;

private long delay;

private Timer tm; // Timer

Page 266: Control de Dispositivos

246

private TestTimerTask tt; // Task

public int tanquex = 0,tanquey = 0;

public int fuenteBomba1X=0, fuenteBomba1Y=0;

public int fuenteBomba2X=0, fuenteBomba2Y=0;

public int fuenteOnOffX=0, fuenteOnOffY=0;

public int fuenteTempX=0, fuenteTempY=0;

public int centroX, centroY, anchoCisterna, altoCisterna;

public int ancho;

public int alto;

private Image image;

//private TiledLayer tiledMapa;

private LayerManager LM;

private Sprite cisterna;

private final Vector gotas = new Vector();

private final Player sonido;

public apagadoGeneralBean apg ;

public registroBean registroTanque;

public registroBean registroBombaCarga;

public registroBean registroBombaDescarga;

//HttpMidlet p;

//Instanciación de Objetos

public void setApagadoGeneral(apagadoGeneralBean apg){

this.apg = apg;

}

public apagadoGeneralBean getApagadoGeneral(){

return apg;

}

public void setregistroTanque(registroBean registroTanque){

this.registroTanque = registroTanque;

}

public registroBean getregistroTanque(){

return registroTanque;

}

public void setregistroBombaCarga(registroBean registroBombaCarga){

Page 267: Control de Dispositivos

247

this.registroBombaCarga = registroBombaCarga;

}

public registroBean getregistroBombaCarga(){

return registroBombaCarga;

}

public void setregistroBombaDescarga(registroBean

registroBombaDescarga){

this.registroBombaDescarga = registroBombaDescarga;

}

public registroBean getregistroBombaDescarga(){

return registroBombaDescarga;

}

//Constructor de la Clase

public monitorear() {

super(true);

ancho = getWidth();

alto = getHeight();

// getDatos();

try {

image= Image.createImage("/cisterna.png");

} catch (IOException e) {

throw new RuntimeException ("Unable to load Image: "+e);

}

cisterna = new Sprite (image,image.getWidth(),image.getHeight());

anchoCisterna=cisterna.getWidth();

altoCisterna=cisterna. GetHeight();

ancho = getWidth();

alto = getHeight();

//varibles de posición de la barra que llena el tanque

//Variables de Fuente

fuenteBomba1X=70;

Page 268: Control de Dispositivos

248

fuenteBomba1Y=(alto/2)+(altoCisterna/2)+20;

fuenteBomba2X=(ancho/2)+(anchoCisterna/2)+20;

fuenteBomba2Y=(alto/2)+(altoCisterna/2)+20;

fuenteOnOffX=10;

fuenteOnOffY=(alto/2)+(altoCisterna/2)+40;

fuenteTempX=10;

fuenteTempY=(alto/2)+(altoCisterna/2)+60;

centroX = (ancho/2)-(anchoCisterna/2);

centroY = (alto/2)-(altoCisterna/2);

cisterna.setPosition(centroX, centroY);

delay = 20;

LM = new LayerManager();

LM.append(cisterna);

//LM.append(tiledMapa);

try {

image= Image.createImage("/gota2.png");

} catch (IOException e) {

throw new RuntimeException ("Unable to load Image: "+e);

}

sonido = createSoundPlayer("/disparo.wav", "audio/x-wav");

}

public void start() {

Thread t = new Thread(this);

t.start();

}

public void stop() {

}

public void run() {

//Instancia la variable gráfica

Graphics g = getGraphics();

//llama a la función que dibuja la animación

llenarCisterna();

while (true) {

//dibuja la pantalla

Page 269: Control de Dispositivos

249

drawScreen(g);

try {

//manda un retardo al hilo que está ejecutándose

Thread.sleep(delay);

} catch (InterruptedException ie) {

}

}

}

//función que dibuja la pantalla

private void drawScreen(Graphics g) {

monitor(g);

//Seteo de Letras Temperatura Bomba de Carga

LM.paint(g,0,0);

flushGraphics();

}

//función que genera un sonido

private Player createSoundPlayer(String filename, String format) {

Player p = null;

try {

InputStream is = getClass().getResourceAsStream(filename);

p = Manager.createPlayer(is, format);

p.prefetch();

} catch (IOException ex){

}

catch (MediaException ex){

}

return p;

}

//función q genera la parte estática del reporte gráfico y muestra los

datos de los dispositivos y del tanque.

private void monitor(Graphics g){

tanquex = (ancho/2)-((anchoCisterna-40)/2);

Page 270: Control de Dispositivos

250

tanquey = ((alto/2)+(altoCisterna/2))-

(Integer.parseInt(registroTanque.getCantidad())*10);

g.setColor(0xffffff);

g.fillRect(0, 0, getWidth(), getHeight());

g.setColor(0x0000ff);

g.setColor(1,1,155);

//g.setColor(1,1,255);

//g.drawRect((ancho/2)-((anchoCisterna-1)/2),(alto/2)-

(altoCisterna/2),anchoCisterna,altoCisterna);

g.setColor(40,155,155);

g.fillRect(tanquex,tanquey,anchoCisterna-

40,Integer.parseInt(registroTanque.getCantidad())*10);

//Seteo Bomba Carga

g.setColor(1,1,155);

Font fBomba1 =

Font.getFont(Font.FACE_SYSTEM,Font.STYLE_BOLD,Font.SIZE_MEDI

UM);

g.setFont(fBomba1);

g.drawString("Bomba 1",fuenteBomba1X, fuenteBomba1Y,

Graphics.HCENTER | Graphics.BOTTOM);

//Seteo Bomba Descarga

g.setColor(1,1,155);

Font fBomba2 =

Font.getFont(Font.FACE_SYSTEM,Font.STYLE_BOLD,Font.SIZE_MEDI

UM);

g.setFont(fBomba2);

g.drawString("Bomba 2",fuenteBomba2X, fuenteBomba2Y,

Graphics.HCENTER | Graphics.BOTTOM);

//Seteo de Letras ON/OF

g.setColor(1,1,155);

Font fOnnOff =

Font.getFont(Font.FACE_SYSTEM,Font.STYLE_BOLD,Font.SIZE_MEDI

UM);

g.setFont(fOnnOff);

Page 271: Control de Dispositivos

251

g.drawString("On/Off",fuenteOnOffX, fuenteOnOffY, Graphics.LEFT |

Graphics.BOTTOM);

//Seteo de Letras Temperatura

g.setColor(1,1,155);

Font fTemp =

Font.getFont(Font.FACE_SYSTEM,Font.STYLE_BOLD,Font.SIZE_MEDI

UM);

g.setFont(fTemp);

g.drawString("Temp",fuenteTempX, fuenteTempY, Graphics.LEFT |

Graphics.BOTTOM);

g.setColor(1,1,155);

Font fB1OnOff =

Font.getFont(Font.FACE_SYSTEM,Font.STYLE_BOLD,Font.SIZE_MEDI

UM);

g.setFont(fB1OnOff);

g.drawString(registroBombaCarga.getEstado(),fuenteBomba1X,

fuenteOnOffY, Graphics.LEFT | Graphics.BOTTOM);

//Seteo de Letras OnOFF Bomba de DesCarga

g.setColor(1,1,155);

Font fB2OnOff =

Font.getFont(Font.FACE_SYSTEM,Font.STYLE_BOLD,Font.SIZE_MEDI

UM);

g.setFont(fB2OnOff);

g.drawString(registroBombaDescarga.getEstado(),fuenteBomba2X,

fuenteOnOffY, Graphics.LEFT | Graphics.BOTTOM);

//Seteo de Letras Temperatura Bomba de Carga

g.setColor(1,1,155);

Font fB1Temp =

Font.getFont(Font.FACE_SYSTEM,Font.STYLE_BOLD,Font.SIZE_MEDI

UM);

g.setFont(fB1Temp);

g.drawString(registroBombaCarga.getCantidad(),fuenteBomba1X,

fuenteTempY, Graphics.LEFT | Graphics.BOTTOM);

//Seteo de Letras Temperatura Bomba de DesCarga

Page 272: Control de Dispositivos

252

g.setColor(1,1,155);

Font fB2Temp =

Font.getFont(Font.FACE_SYSTEM,Font.STYLE_BOLD,Font.SIZE_MEDI

UM);

g.setFont(fB2Temp);

g.drawString(registroBombaDescarga.getCantidad(),fuenteBomba2X,

fuenteTempY, Graphics.LEFT | Graphics.BOTTOM);

}

private String estadoBomba(int numBomba, String tipoMonitoreo){

String estadoBomba="";

return estadoBomba;

}

//Función que genera la animación de llenado del tanque

private void llenarCisterna(){

if(registroBombaCarga.getEstado().compareTo("1")==0){

if (!llenando) {

llenando = true;

Sprite misil = new Sprite(image);

misil.setPosition(cisterna.getX()+2,cisterna.getY()+cisterna.getHeight()-2);

gotas.addElement(misil);

LM.insert(misil, 1);

}

// llenando= false;

}else{

//llenando= false;

}

//llenando = false;

for (int i = 0; i < gotas.size(); ++i) {

for (int j = 0; j < 2; ++j) {

Sprite misil = (Sprite)(gotas.elementAt(i));

if(misil.getX() == cisterna.getX()+2 || misil.getY() ==

cisterna.getY()+cisterna.getHeight()-2 ){

Page 273: Control de Dispositivos

253

misil.move(0, -1);

}

if (misil.getY() < cisterna.getY()+cisterna.getHeight()-82 &&

misil.getX() <= cisterna.getX()+22){

misil.move(1, 0);

}

if(misil.getX() >= cisterna.getX()+22 &&

misil.getY() <= cisterna.getY()+cisterna.getHeight()-10){

misil.move(0,1);

}

if(misil.getY() == cisterna.getY()+cisterna.getHeight()-10

&& misil.getX()== cisterna.getX()+22){

gotas.removeElementAt(i);

LM.remove(misil);

//misil.move(1, 0);

i--;

llenando = false;

break;

}

}

}

}

//función que maneja el tiempo de las tareas predeterminadas

private class TestTimerTask extends TimerTask

{

public final void run()

{

//fmMain.append("run count: " + ++count + "\n");

//llenarCisterna();

}

}

}

ANEXO E

Page 274: Control de Dispositivos

254

E.1 PROGRAMA DEL PIC 18F4550 //*******************************************************************

// Realizado por Universidad Politécnica Salesiana.

// Compilado con el PCW Compiler 4.057

// ******************************************************************

#include <18F4550.h>

#fuses

HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL3,CPUDIV1,V

REGEN

#use delay(clock=48000000)

#define USB_HID_DEVICE FALSE //Deshabilitamos el uso de las directivas

HID

#define USB_EP1_TX_ENABLE USB_ENABLE_BULK // Activa

EP1(EndPoint1) para las transferencias IN Bulk/Interrupt

#define USB_EP1_RX_ENABLE USB_ENABLE_BULK // Activa

EP1(EndPoint1) para las transferencias OUT Bulk/Interrupt

#define USB_EP1_TX_SIZE 8 // Tamaño reservado para el Buffer

Tx EndPoint1

#define USB_EP1_RX_SIZE 8 // Tamaño reservado para el Buffer

Rx EndPoint1

//===========================================================

#include <pic18_usb.h> // Microchip PIC18Fxx5x Hardware para el CCS PIC

USB Driver

#include <PicUSB.h> // Configuración del USB y los descriptores para este

dispositivo

#include <usb.c> // Handles usb ,tokens y descriptores

#define LED0 PIN_B7 // sensor 1

#define LED1 PIN_B6 // sensor 2

#define LED2 PIN_B5 // nivel bajo

#define LED3 PIN_B4 // nivel medio

#define LED4 PIN_B3 // nivel alto

Page 275: Control de Dispositivos

255

#define LED5 PIN_B2 // confirma bomba1

#define LED6 PIN_B1 // confirma bomba 2

#define LED7 PIN_B0 //on / off general

#define entrada_0 envia[0] //

#define entrada_1 envia[1] //

#define entrada_2 envia[2] //

#define entrada_3 envia[3] //

#define entrada_4 envia[4] //

#define entrada_5 envia[5] //

#define entrada_6 envia[6] //

#define entrada_7 envia[7] //

#define LED_ON output_high // Salida en alto

#define LED_OFF output_low // Salida en bajo

#define modo recibe[0] // Byte que indica el modo de operación

#define param1 recibe[1] // Primer parámetro recibido

#define param2 recibe[2] // Segundo parámetro recibido

#define ENCIENDE_LED 1 // Modo de encender leds

#define APAGA_LED 2 // Modo de apagar leds

#define ENTRADAS 3 // Modo de leer las entradas

void main(void){ // Función Principal

int8 recibe[8]; // Declaramos la variable recibe de 8 bytes

int8 envia[8]; // Declaramos la variable envía de 8 bytes

LED_off(LED0);

LED_OFF(LED1);

LED_OFF(LED2);

LED_OFF(LED3);

LED_OFF(LED4);

LED_OFF(LED5);

LED_OFF(LED6);

LED_OFF(LED7);

set_tris_b(0x00); //pto b como salidas

usb_init(); // Inicializamos el USB

Page 276: Control de Dispositivos

256

usb_task(); // Habilita el periférico USB y las interrupciones

usb_wait_for_enumeration(); // Esperamos hasta que el PicUSB sea configurado

por el PC

while (true){

if (input(PIN_A0)&& (usb_enumerated()) ){

led_off(led0);

led_on(Led1);

delay_ms (200);

led_on(Led0);

led_off(Led1);

delay_ms (400);

}

led_off(Led1);

if(usb_enumerated()) // Si el PicUSB está configurado

{

if (usb_kbhit(1)) // Si el EndPoint de salida contiene datos del PC

{

usb_get_packet(1, recibe, 8); // Cogemos el paquete de tamaño 8 bytes del

EP1

// y lo almacenamos en la variable recibe

if (modo==ENCIENDE_LED) // Modo Encender Leds

{

//if (param1==1) {LED_ON(LED0);} // Encendemos led 0

//if (param1==2) {LED_ON(LED1);} //

if (param1==3) {LED_ON(LED2);} //

if (param1==4) {LED_ON(LED3);} //

if (param1==5) {LED_ON(LED4);} //

if (param1==6) {LED_ON(LED5);} //

if (param1==7) {LED_ON(LED6);} //

if (param1==8) {LED_ON(LED7);} //

}

if (modo==APAGA_LED) // Modo Apaga Leds

{

Page 277: Control de Dispositivos

257

//if (param1==1) {LED_OFF(LED0);} //

//if (param1==2) {LED_OFF(LED1);} //

if (param1==3) {LED_OFF(LED2);} //

if (param1==4) {LED_OFF(LED3);} //

if (param1==5) {LED_OFF(LED4);} //

if (param1==6) {LED_OFF(LED5);} //

if (param1==7) {LED_OFF(LED6);} //

if (param1==8) {LED_OFF(LED7);} //

}

if (modo==ENTRADAS) // Modo Entradas

{

entrada_0=input(PIN_D0); //

entrada_1=input(PIN_D1); //

entrada_2=input(PIN_D2); //

entrada_3=input(PIN_D3); //

entrada_4=input(PIN_D4); //

entrada_5=input(PIN_D5); //

entrada_6=input(PIN_D6); //

entrada_7=input(PIN_D7); //

usb_put_packet(1,envia,8,USB_DTS_TOGGLE); // Enviamos el

paquete de tamaño 8 bytes del EP1 al PC

}

}

}

}

}

E.2 PROGRAMA DEL PIC 16F877

Page 278: Control de Dispositivos

258

; Programa General PIC 16F877A

; UNIVERSIDAD POLITECNICA SALESIANA.

; SISTEMA CONTROL INDUSTRIAL MOVIL.

; ----Oscar Santistevan-----Rubén Puma----Roger Córdova----;

Define ADC_BITS 8 ;Fije número de BITS del resultado (5,8,10)

Define ADC_CLOCK 3 ;Fije EL CLOCK (rc = 3)

Define ADC_SAMPLEUS 50 ;Fije el tiempo de muestreo en Us

;ADC_SAMPLEUS es el número de microsegundos que el programa espera

;entre fijar el canal y comenzar la conversión analógica/digital.

TRISA =%11111111 ;el puerto A es de entrada

TRISB =%00000000 ;el puerto B es de salida

TRISC =%01001111 ;C7..4 out, C3..0 in

TRISD =%11111101 ;el puerto D es de entrada

ADCON1 = %00000101;el puerto A.0,A.1 análogos--A.2 Dig--A.3 +Vref--A.4 Dig

;---Declaración de variables---

i var byte : k var byte

x var byte : y var byte

dato var BYTE ;dato para guardar temp1

dato2 var byte ;dato2 para guardar temp2

temp1 var byte ; temp1 inicial para comparar con dato

temp2 var byte ; temp2 inicial para comparar con dato2

; Declaro los nombres de los pines

;A.0 canal temp_1 ---------A.1 canal temp_2

;-----------------------------------------------------------------------

;-----------------------------------------------------------------------

Nivel_Bajo var portA.2 ;IN Nivel Bajo de la Cisterna

Nivel_Alto var portA.4 ;IN Nivel Alto de la Cisterna

Control_Sist_Total var portA.5 ;IN Encendido total del Sistema.

;---PUERTO B--- SALIDAS---

S_1 var portB.0 ;Indica tempertura alta de la bomba1, se conecta alarma1

S_2 var portB.1 ;Indica tempertura alta de la bomba2, se conecta alarma2

bomba1 var portB.2 ;Enciende bomba1

bomba2 var portD.1 ;Enciende bomb2

Page 279: Control de Dispositivos

259

Tanque_LLeno var portB.4 ;Indica estado sensor Nivel_Alto

Tanque_Vacio var portB.6 ;Indica estado sensor Nivel_Bajo

On_Off_Sistema_Total var portB.7 ;habilita el sistema total

;---PUERTO C--- ENTRADAS Y SALIDAS---

Confirma_B1 var portC.0 ;IN confirmación ON de bomba_1 desde Sist Electrónico

Confirma_B2 var portC.1 ;IN confirmación ON de bomba_2 desde Sist Electrónico

On_Off_B1 var portC.2 ;IN confirmación encendido bomba_1 desde receptor

On_Off_B2 var portC.3 ;IN confirmación encendido bomba_2 desde receptor

Conf1_B1 var portC.4 ;Out conf. ON de B1 hacia Emisor

Conf2_B2 var portC.5 ;Out conf. ON de B2 hacia Emisor

Ok var portC.7 ;Out Indica estado del sistema

;-----------------------------------------------------------------------

reinicio var portD.0

temporal var word

temporal = 0

;-----------------------------------------------------------------------

INICIO:

portb=%00000000

low portc.4

low portc.5

low portc.7

;-----------------

low bomba2

;-----------------------------------------------------------------------

eeprom 0,[45,45] ;contenido inicial de la EEPROM

READ 0,temp1 ;lee la EEPROM 0 y lo guarda en temp1

READ 1,temp2 ;lee la EEPROM 1 y lo guarda en temp2

low ok

;-----------------------------------------------------------------------

Sensa1:

ADCIN 0, dato ;leer el canal 0 (A0) y guarde en dato

dato = dato /2 ;el dato dividir para 2

if dato > temp1 then Alarma1

Page 280: Control de Dispositivos

260

Sensa2:

ADCIN 1, dato2 ;leer el canal 0 (A0) y guarde en dato

dato2 = dato2 /2 ;el dato dividir para 2

if dato2 > temp2 then Alarma2

;-----------------------------------------------------------------------

SistemaTotal:

if Control_Sist_Total=1 then inicializa

goto INICIO

;-----------------------------------------------------------------------

inicializa :

for x=1 to 1

LOW Ok

pause 100

HIGH Ok

pause 100

next

PAUSE 100

;-----------------------------------------------------------------------

;-----------------------------------------------------------------------

Control1:

high ON_Off_Sistema_Total

low S_1 ; Apago led_Alarma1

low S_2 ; Apago led_Alarma2

low Bomba1

low bomba2

Estado1:

if (Nivel_Bajo=0 or nivel_bajo=1) and temporal = 0 then AccionNivelBajo

if temporal = 1 then high TANQUE_VACIO

if temporal = 1 and nivel_bajo = 1 then Temp_vaciado

if Nivel_bajo=1 and nivel_alto=1 then AccionNivelAlto

goto Estado1

AccionNivelBajo:

if Nivel_Bajo=1 and nivel_Alto=1 then AccionNivelAlto

Page 281: Control de Dispositivos

261

LOW TANQUE_VACIO

low Tanque_LLeno

low bomba2

low conf2_B2

if On_Off_B1 = 1 then ActivaB1

Goto AccionNivelBajo

ActivaB1:

high bomba1

if Confirma_B1 = 1 then Activa2_B1

goto ActivaB1

Activa2_B1:

pause 100

HIGH TANQUE_VACIO ; INDICO QUE EL TANQUE LLENANDO

high Conf1_B1

Sensar1:

ADCIN 0, dato ;leer el canal 0 (A0) y guarde en dato

dato = dato /2 ;el dato dividir para 2

for y = 1 to 2

if nivel_Alto=1 then AccionNivelAlto

pause 1

next

if dato > temp1 then Alarma1

goto Sensar1

Alarma1:

high S_1

low ok

goto Desactiva

Desactiva:

Page 282: Control de Dispositivos

262

if Reinicio=1 then ApagaTotalS1

goto Desactiva

ApagaTotalS1:

low On_Off_Sistema_Total

low bomba1

low bomba2

LOW OK

goto finaliza

;-----------------------------------------------------------------------

Temp_vaciado:

temporal = 0

high tanque_vacio

low tanque_lleno

low bomba1

low conf1_B1

if On_Off_B2 = 1 then ActivaB2

Goto AccionNivelAlto

;-----------------------------------------------------------------------

AccionNivelAlto:

temporal = 0

high Tanque_LLeno

high tanque_vacio

low bomba1

low conf1_B1

if On_Off_B2 = 1 then ActivaB2

Goto AccionNivelAlto

ActivaB2:

high bomba2

if Confirma_B2 = 1 then Activa2_B2

goto ActivaB2

Page 283: Control de Dispositivos

263

Activa2_B2:

pause 100

high Conf2_B2

Sensar2:

ADCIN 1, dato2 ;leer el canal 0 (A0) y guarde en dato

dato2 = dato2 /2 ;el dato dividir para 2

for y = 1 to 2

IF NIVEL_ALTO=0 THEN LOW TANQUE_LLENO

if Nivel_Bajo=0 then finaliza

pause 1

next

if dato2 > temp2 then Alarma2

goto Sensar2

Alarma2:

temporal = 1

high S_2

low ok

goto Desactiva

;-----------------------------------------------------------------------

Finaliza:

LOW TANQUE_VACIO

low bomba2

low conf2_b2

goto inicio

;-----------------------------------------------------------------------

End

E.2 PROGRAMA DEL PIC 16F870 (Celular)

Page 284: Control de Dispositivos

264

@ device HS_OSC

DEFINE OSC 4

include "modedefs.bas"

text var byte

dat0 VAR BYTE

dat1 var byte

dat2 VAR BYTE

ini:

SEROUT2 portb.1,84,[13]

pause 300

SEROUT2 portb.1,84,["AT+CMGL=0",13]

PAUSE 300

uno:

SERIN2 portb.0,84,[dat0]

IF dat0="O" THEN INI

IF dat0="E" THEN INI

IF dat0!="O" THEN dos

PAUSE 300

dos:

SERIN2 portb.0,84, [wait(", ,"),DEC2 dat1]

IF dat1 = 27 then tres

IF dat1 <= 26 then SEIS

IF dat1 >= 28 then SEIS

PAUSE 300

tres:

Serin2 portb.0,84, [wait("097482141"),SKIP 5,dec2 dat2]

IF dat2 = 11 then CUATRO

if dat2 >=13 then seis

if dat2<= 10 then seis

IF dat2=12 then cinco

if dat2>=13 then seis

Page 285: Control de Dispositivos

265

if dat2<=10 then seis

PAUSE 300

cuatro:

high portb.3

GOTO seis

PAUSE 300

cinco:

low portb.3

goto seis

pause 300

seis:

serout2 portb.1,84, [13]

PAUSE 300

serout2 portb.1,84, ["AT+CMGD=1",13]

pause 1000

goto ini

END

Page 286: Control de Dispositivos

266

ANEXO F

Base de Datos

F.1 Introducción

Una base de datos es una colección de información organizada de forma que un programa de ordenador pueda seleccionar rápidamente los fragmentos de datos que necesite. Una base de datos es un sistema de archivos electrónico. Las bases de datos tradicionales se organizan por campos, registros y archivos. Un campo es una pieza única de información; un registro es un sistema completo de campos; y un archivo es una colección de registros. Por ejemplo, una guía de teléfono es análoga a un archivo. Contiene una lista de registros, cada uno de los cuales consiste en tres campos: nombre, dirección, y número de teléfono. Un Sistema Gestor de base de datos (SGBD) es un conjunto de programas que permiten crear y mantener una Base de datos, asegurando su integridad, confidencialidad y seguridad. Por tanto debe permitir:

Definir una base de datos: especificar tipos, estructuras y restricciones de datos.

Construir la base de datos: guardar los datos en algún medio controlado por el mismo

SGBD.

Manipular la base de datos: realizar consultas, actualizarla, generar informes.

Así se trata de un software de propósito general. Ejemplo de SGBD son Oracle y

SQL Server de Microsoft, Mysql( SGBD el cual se usará para el Proyecto de

Tópico).

Algunas de las características deseables en un Sistema Gestor de base de datos

SGBD son:

Control de la redundancia: La redundancia de datos tiene varios efectos negativos

(duplicar el trabajo al actualizar, desperdicia espacio en disco, puede provocar

inconsistencia de datos) aunque a veces es deseable por cuestiones de rendimiento.

F.2 Análisis

Se realizó un Análisis minucioso y profundo de los procesos que se debería tener en

el Sistema y se llegó al Siguiente Modelo Entidad Relación (MER).

Page 287: Control de Dispositivos

267

F.3 Modelo Entidad-Relación

Page 288: Control de Dispositivos

268

F.4 Dirección de Datos

Acciones

Registra las posibles acciones que se pueden realizar dentro del Sistema de Tanque elevado

apagado_general

Campo Tipo Nulo Predeterminado Clave Ejemplo

acc_id int(11) No - Primaria 1

apg_descripcion varchar(50) Sí - - Apagado general, apagado

bomba carga, apagado

bomba descarga

apg_estado varchar(1) Sí A - A/I

Campo Tipo Nulo Predeterminado Clave Ejemplo

apg_id int(11) No - Primaria 1

apg_descripcion varchar(50) Sí - - General

Page 289: Control de Dispositivos

269

Guarda los estados de encendido y apagado general, tabla que se actualiza constantemente dependiendo de los eventos de la parte

electrónica o requerimientos de dispositivos móviles

Dispositivo

Registra los datos de los dispositivos que se usurarán en el Sistema

Campo Tipo Nulo Predeterminado Clave Ejemplo

dis_id int(11) No - Primaria 1

dis_descripcion varchar(50) No - - Tanque

dis_estado varchar(11) No A - A/I

logs

Registra quien realizó determinada acción, permitiendo llevar un control de todos los sucesos dentro del Sistema.

Campo Tipo Nulo Predeterminado Clave Ejemplo

logs_id int(11) No - Primaria 1

logs_user_id int(11) Sí NULL Foránea 1

apg_estado varchar(1) Sí A - A/I

Page 290: Control de Dispositivos

270

logs_accion_id int(11) Sí NULL Foránea 1

logs_estado varchar(1) Sí NULL - 1 o 2

registro_mc

Registro del historial de todos los sucesos de los dispositivos en lo referente a los tipo de monitoreo y control ej.: estados de

encendido/apagado, niveles o temperatura

Campo Tipo Nulo Predeterminado Clave Ejemplo

rmc_id int(11) No - Primaria 1

rmc_dis_id int(11) Sí NULL Foránea 1

rmc_tmc_id int(11) Sí NULL Foránea 1

rmc_cantidad int(11) Sí NULL - estados de

temperatura,

niveles de

tanque

rmc_estado_on_off varchar(1) Sí NULL - 1 o 2

Page 291: Control de Dispositivos

271

rmc_estado_confirmacion varchar(1) Sí NULL - 1 o 2

temporal

Cumple las mismas funciones de la tabla de registro con la particularidad que esta va a ser accedida por los dispositivos móviles por la

razón que solo va a registrar los datos actuales, es decir cada vez que se cumpla un ciclo de llenado y vaciado esta tabla será vaciada los

registros teniendo así solo temporalmente los registros actuales dentro del Sistema.

Campo Tipo Nulo Predeterminado Clave Ejemplo

tmp_id int(11) No - Primaria 1

tmp_dis_id int(11) Sí NULL Foránea 1

tmp_tmc_id int(11) Sí NULL Foránea 1

tmp_cantidad int(11) Sí NULL - estados de

temperatura,

niveles de

tanque

tmp_estado_on_off varchar(1) Sí NULL - 1 o 2

tmp_estado_confirmacion varchar(1) Sí NULL - 1 o 2

Page 292: Control de Dispositivos

272

Tanque

Registra los niveles del tanque elevado de manera eventual

Campo Tipo Nulo Predeterminado Clave Ejemplo

tan_id int(11) No - Primaria 1

tan_dis_id int(11) Sí NULL Foránea 1

ta_descripcion varchar(50) Sí NULL - Tanque1

tan_nivel1 varchar(1) Sí NULL - 1

tan_nivel2 varchar(1) Sí NULL - 1

tan_nivel3 varchar(1) Sí NULL - 1

tan_tiempo varchar(50) Sí NULL - 2

tipo_mc

registra los tipo de monitoreo y control ej.: estado encendido/apagado, temperatura

Campo Tipo Nulo Predeterminado Clave Ejemplo

tmc_id int(11) No - Primaria 1

Page 293: Control de Dispositivos

273

tmc_descripcion varchar(50) No - - Temperatura/Nivel

tmc_estado varchar(1) No A - A

Usuario.-Registro de los usuarios que usarán el sistema

Campo Tipo Nulo Predeterminado Clave Ejemplo

usu_id int(11) No - Primaria 1

usu_nombres varchar(50) Sí - - Oscar

usu_apellidos varchar(50) Sí - - Santistevan

usu_direccion varchar(50) Sí - - Cdla.

Montebello

usu_telefono varchar(10) Sí - - 096439657

usu_fechaNacimiento date Sí NULL - 12/03/85

usu_cedula varchar(10) Sí - - 0924101835

usu_password varchar(50) Sí - - 123

Page 294: Control de Dispositivos

274

usu_estado var(1) Sí - A/I

ANEXO G

Diagramas

G.1 Diagramas DFD

Monitoreo

Requerimiento de Autenticación

A

Monitoreo

Verificación

de Usuario Pantalla de

Bienvenida

Verificación de Estado:

Bomba Carga Bomba Descarga Nivel de Tanque

R

Reporte

Gráfico

Chat Cliente

Registro

verificado

Petición de

monitor

Entrega de

datos

Monitoreo

Page 295: Control de Dispositivos

275

Técnico

G1.2 Control de Dispositivos

Base de Datos

Petición de

apagado

Base de Datos

Verificación

de Usuario

Socket en estado

escucha

Chat Server

Apagado

manual de

dispositivos

Apagado del sistema

general.

Esperando

conexión

Registro

verificado

Verificación

de Usuario

Pantalla de bienvenida

Control del

dispositivo

Verificación

de estado de

dispositivos

Encendido.

Bomba Carga.

Bomba Descarga.

Apagado General.

Petición de

estado

Petición de

control

Registro

verificado

A

Control

Registro

Selección de

la acción

Page 296: Control de Dispositivos

276

G.2 Diagramas IPO

Entrada

Ingreso de datos user y password para validación

Archivos de usuarios

Proceso

Autentificación Usuario

Monitoreo dispositivos

Control dispositivos

Salida

Reporte gráfico monitoreo

Encender: Bomba carga, bomba descarga.Apagado general.

Archivo de dispositivos

Mensaje de bienvenida a

usuarios

Page 297: Control de Dispositivos

277

G2.1 Diagrama IPO Detallado Monitoreo

Entrada

Monitoriar

Archivos de dispositivos

ProcesoVerificar estado.

Dsipositivos on/off, temperatura.Nivel de tanque

Llamar Web Service (WS)Consultar Dispositos

Manipular XML file

Salida

Reporte gráfico de dispositivos:

Nivel del Tanque.Estado on/off de las bombas.Alertas de temperatura.

Page 298: Control de Dispositivos

278

G2.2 Diagrama IPO Detallado Control

Entrada

Control

Archivos de dispositivos

ProcesoVerificar estado.

Dsipositivos on/off, temperatura.

Nivel de tanque

Llamar Web Service (WS)Actualizar estados de Dispositos

Salida

Encerder bombas carga, descarga.Apagado general

Page 299: Control de Dispositivos

279

G2.3 Diagrama IPO Detallado Chat

Entrada

Monitorear

Controlar

Proceso

Iniciar semilla de chat.(Técnico de Planta)

Inicia cliente de chat.(Jefe de Planta)

Salida

Apagado manual de dispositivos.

Page 300: Control de Dispositivos

280

G.3 Diagramas de Jerarquía

Sistema de Monitoreo y

Control

Monitoreo

Autenticar Usuario Dispositivo

Control

Autenticar Usuario

Encendido de Bombas

Apagado General

Page 301: Control de Dispositivos

281

ANEXO H

COSTOS H.1 Costo materiales eléctricos de maqueta y tubería

Materiales de Eléctricos de Maqueta y tubería.

20,00%

Descripción de Producto. Marca Costo Unit. P. Unit. Cantidad Unidad

Costo Total

Precio Total.

Envases de CD´s IMATION $0,80 $1,00 2 U $1,60 $2,00 Rieles de hierro GENÉRICO $2,00 $2,50 1 U $2,00 $2,50 Neplo pequeños GENÉRICO $0,50 $0,63 2 U $1,00 $1,25 Cinta Teflon GENÉRICO $0,50 $0,63 1 U $0,50 $0,63 Codo PLASTIGAMA $0,65 $0,81 1 U $0,65 $0,81 Sellante de Tubo GENÉRICO $2,50 $3,13 1 U $2,50 $3,13 Fungibles (brocas, lijas, etc.) GENÉRICO $5,50 $6,88 2 U $11,00 $13,75 Canaletas plasticas 2" GENÉRICO $3,00 $3,75 3 U $9,00 $11,25 Cable UTP categoría #5 NOGANET $0,60 $0,75 2 Mts. $1,20 $1,50 Borneras GENÉRICO $1,00 $1,25 3 U $3,00 $3,75 Sensores de Nivel GENÉRICO $1,00 $1,25 3 U $3,00 $3,75 Pulsante Marcha-Paro Bombas GENÉRICO $1,00 $1,25 2 U $2,00 $2,50

Subtotal. 1 $37,45 $46,81

Page 302: Control de Dispositivos

282

H.2 Costos componentes electrónicos

Materiales electrónicos

20,00%

Descripción de Producto. Marca C.U: P. Unit. Cantidad Unidad Costo Total

Precio Total.

PIC 18F4550 MICROCHIP $15,00 $18,75 1 U $15,00 $18,75 PIC 16F877A MICROCHIP $10,00 $12,50 1 U $10,00 $12,50 PIC 16F870 MICROCHIP $8,00 $10,00 1 U $8,00 $10,00 HT-12D HOLTEK $6,00 $7,50 3 U $18,00 $22,50 HT-12E HOLTEK $6,00 $7,50 3 U $18,00 $22,50 TWS-434 N/A $7,00 $8,75 3 U $21,00 $26,25 RWS-434 N/A $7,00 $8,75 3 U $21,00 $26,25 LM-35 NATIONAL SEMICONDUCTOR $4,50 $5,63 2 U $9,00 $11,25 LM-358 NATIONAL SEMICONDUCTOR $1,25 $1,56 2 U $2,50 $3,13 74LS73 TEXAS INSTRUMENTS $0,50 $0,63 1 U $0,50 $0,63 LM-555 NATIONAL SEMICONDUCTOR $0,65 $0,81 1 U $0,65 $0,81 74LS32 FAIRCHILD SEMICONDUCTOR $0,50 $0,63 1 U $0,50 $0,63 74LS86 FAIRCHILD SEMICONDUCTOR $0,50 $0,63 1 U $0,50 $0,63 Relay 5 voltios (2 comues-4 contactos) GENÉRICO $2,00 $2,50 3 U $6,00 $7,50 Conector USB GENÉRICO $1,20 $1,50 1 U $1,20 $1,50 Capacitor 22pf GENÉRICO $0,15 $0,19 2 U $0,30 $0,38 Cristal 4Mhz GENÉRICO $0,70 $0,88 1 U $0,70 $0,88 Resistencias GENÉRICO $0,05 $0,06 25 U $1,25 $1,56 Celular 3220 NOKIA $51,50 $64,38 1 U $51,50 $64,38 Diodos led GENÉRICO $0,10 $0,13 10 U $1,00 $1,25 LM-317 NATIONAL SEMICONDUCTOR $0,65 $0,81 2 U $1,30 $1,63 Potenciómetro 5k GENÉRICO $0,40 $0,50 2 U $0,80 $1,00 Puente diodos N/A $0,80 $1,00 2 U $1,60 $2,00

Page 303: Control de Dispositivos

283

Transistor potencia TIP-42 NATIONAL SEMICONDUCTOR $0,85 $1,06 1 U $0,85 $1,06 Transistor 2N3906 NATIONAL SEMICONDUCTOR $0,26 $0,33 1 U $0,26 $0,33 Motores Eléctricos (Bombas) GENÉRICO $3,00 $3,75 3 U $9,00 $11,25 Cristal 12Mhz GENÉRICO $0,70 $0,88 1 U $0,70 $0,88 Tarjetas Impresas PC-USB N/A $15,00 $18,75 1 U $15,00 $18,75 Tarjetas Impresas Sist. A controlar N/A $30,00 $37,50 1 u $30,00 $37,50 Varios (Utilerías) N/A $30,00 $37,50 1 U $30,00 $37,50

Subtotal. 2 $276,11 $345,14

Page 304: Control de Dispositivos

284

H.3 Costo Total

Mano de obra 20,00% Descripción de Producto. Marca C.U P. Unit. Cantidad Unidad Costo

Total Precio Total.

Desarrollo de Ingeniería AUTORES $ 5,00 6,25 300 Horas $1.500,00 $1.875,00 Desarrollo de Maqueta AUTORES $ 2,00 2,50 20 Horas $40,00 $50,00 Subtotal. 3 $1.540,00 $1.925,00

Costos indirectos 20,00% Descripción de Producto. Marca C.U P. Unit. Cantidad Unidad Costo

Total Precio Total.

Documentación del proyecto N/A 25,00 31,25 3 $75,00 $93,75 Movilización de los autores N/A 3,00 3,75 100 $300,00 $375,00 Alimentación N/A 2,00 2,50 100 $200,00 $250,00 Varios N/A 1,00 1,25 50 $50,00 $62,50 Subtotal. 4 $625,00 $781,25

CONSOLIDADO Materiales de Eléctricos de Maqueta y tubería.

$37,45 $46,81

Materiales electrónicos $276,11 $345,14 Mano de obra $1.540,00 $1.925,00 Costos indirectos $625,00 $781,25 Precios no incluyen IVA TOTAL PROYECTO $2478,56 $2098,20 LICENCIA VISUAL STUDIO PROFESIONAL V 6.0 $200,00

LICENCIA MEASUREMENT STUDIO 8.5 $1.250,00 COSTO DEL PROYECTO PARA SU COMERCIALIZACIÓN $4.548,20

Page 305: Control de Dispositivos

285

5.1 GLOSARIO.

HARDWARE

ASCII: es un código de caracteres basado en el alfabeto latino tal como se usa en

inglés moderno y en otras lenguas occidentales

BIOS: El sistema Básico de entrada/salida, es un software muy básico instalado en la

placa base que permite que ésta cumpla su cometido. Proporciona la comunicación

de bajo nivel, el funcionamiento y configuración del hardware del sistema que, como

mínimo, maneja el teclado y proporciona salida básica (emitiendo pitidos

normalizados por el altavoz de la computadora si se producen fallos) durante el

arranque.

EEPROM: Es un tipo de memoria ROM que puede ser programado, borrado y

reprogramado eléctricamente, a diferencia de la EPROM que ha de borrarse

mediante rayos ultravioletas. Aunque una EEPROM puede ser leída un número

ilimitado de veces, sólo puede ser borrada y reprogramada entre 100.000 y 1.000.000

de veces.

HDX: significa que el método o protocolo de envío de información es bidireccional

pero no simultáneo.

ISO: Organización Internacional para la Estandarización (ISO) investigó modelos de

conexión como la red de Digital Equipment Corporation (DECnet), la Arquitectura

de Sistemas de Red (SNA) y TCP/IP a fin de encontrar un conjunto de reglas

aplicables de forma general a todas las redes. Con base en esta investigación, la ISO

desarrolló un modelo de red que ayuda a los fabricantes a crear redes que sean

compatibles con otras redes. LF

MHz: Es una unidad de medida de frecuencia. Recordando que frecuencia es una

medida para indicar el número de repeticiones de cualquier fenómeno o suceso

periódico en una unidad de tiempo

MS-DOS: Sistema operativo de disco de Microsoft. Es un sistema operativo

comercializado por Microsoft perteneciente a la familia DOS. Fue un sistema

operativo para el IBM PC que alcanzó gran difusión

Page 306: Control de Dispositivos

286

PC: También denominada como ordenador o computador, es una máquina

electrónica que recibe y procesa datos para convertirlos en información útil. Una

computadora es una colección de circuitos integrados y otros componentes

relacionados que puede ejecutar con exactitud, sorprendente rapidez, y de acuerdo a

lo indicado por un usuario o automáticamente por otro programa, una múltiple

variedad de secuencias o rutinas de instrucciones que son ordenadas, organizadas y

sistematizadas en función a una amplia gama de aplicaciones prácticas y

precisamente determinadas

PIC: El nombre completo es PICmicro, aunque generalmente se utiliza como

Peripheral Interface Controller (Controlador de Interfaz Periférico)

RAM: La memoria de acceso aleatorio, o memoria de acceso, se compone de uno o

más chips y se utiliza como memoria de trabajo para programas y datos. Es un tipo

de memoria temporal que pierde sus datos cuando se queda sin energía (por ejemplo,

al apagar la computadora), por lo cual es una memoria volátil

ROM: Es una memoria de semiconductor destinada a ser leída y no destructible, es

decir, que no se puede escribir sobre ella y que conserva intacta la información

almacenada, incluso en el caso de que se interrumpa la corriente (memoria no

volátil). La ROM suele almacenar la configuración del sistema o el programa de

arranque de la computadora.

RS-232 : Es una interfaz que designa una norma para el intercambio serie de datos

binarios entre un DTE (Equipo terminal de datos) y un DCE (Data Communication

Equipment, Equipo de Comunicación de datos), aunque existen otras situaciones en

las que también se utiliza la interfaz RS-232.

SMS: Son las iníciales de Short Messages Standard o lo que es lo mismo: sistema de

mensajes cortos sin hilos. Se trata de una tecnología europea que apareció en 1991 en

nuestro continente, donde también nació la tecnología digital sin hilos que fue

bautizada GSM, Global Standard for Mobiles o patrón global para móviles

USB: Conductor Universal en Serie es un puerto que sirve para conectar periféricos a

una computadora, El estándar incluye la transmisión de energía eléctrica al

dispositivo conectado. Algunos dispositivos requieren una potencia mínima, así que

se pueden conectar varios sin necesitar fuentes de alimentación extra

Page 307: Control de Dispositivos

287

Wi-Fi: Es un sistema de envío de datos sobre redes computacionales que utiliza

ondas de radio en lugar de cables.

WLAN: Es un sistema de comunicación de datos inalámbrico flexible, muy utilizado

como alternativa a las redes LAN cableadas o como extensión de éstas. Utiliza

tecnología de radiofrecuencia que permite mayor movilidad a los usuarios al

minimizar las conexiones cableadas.

FIRMWARE

ADO: Conjunto de objetos COM para el acceso a recursos de datos. Prevé una capa

entre los lenguajes de programación y las base de datos OLE, lo que permite a los

programadores escribir programas que accedan a datos, sin saber cómo está

implementada la base de datos (sólo se debe tener cuidado en la conexión a la

misma). Tampoco es necesario conocer sobre SQL cuando se usa ADO, aunque

también pueden utilizarse comandos SQL, pero esto crearía en el programa una

dependencia del tipo de base de datos usado.

DAQ: La Adquisición de Datos es la toma de muestras del mundo real para generar

datos que pueden ser manipulados por un ordenador. Consiste en tomar un conjunto

de variables físicas, convertirlas en tensiones eléctricas y digitalizarlas de manera

que se puedan procesar en una computadora o PAC. Se requiere una etapa de

acondicionamiento que adecua la señal a niveles compatibles con el elemento que

hace la transformación a señal digital. El elemento que hace dicha transformación es

el módulo o tarjeta de Adquisición de Datos (DAQ).

HTML: Es el lenguaje de marcado predominante para la construcción de páginas

web. Es usado para describir la estructura y el contenido en forma de texto, así como

para complementar el texto con objetos tales como imágenes. HTML se escribe en

forma de "etiquetas", rodeadas por corchetes angulares (<,>). HTML también puede

describir, hasta un cierto punto, la apariencia de un documento, y puede incluir un

script (por ejemplo Javascript), el cual puede afectar el comportamiento de

navegadores web y otros procesadores de HTML

Page 308: Control de Dispositivos

288

IDE: Controla los dispositivos de almacenamiento masivo de datos, como los discos

duros y ATAPI (Advanced Technology Attachment Packet Interface) y además

añade dispositivos como las unidades CD-ROM.

ODBC: Si escribimos una aplicación para acceder a las tablas de una DB de Access,

¿qué ocurrirá si después queremos que la misma aplicación, y sin reescribir nada,

utilice tablas de SQL Server u otra DB cualquiera? La respuesta es sencilla: no

funcionará. Nuestra aplicación, diseñada para un motor concreto, no sabrá dialogar

con el otro. Evidentemente, si todas las DB funcionaran igual, no tendríamos este

problema.... aunque eso no es probable que ocurra nunca.

SOFTWARE

APIs: es el conjunto de funciones y procedimientos (o métodos si se refiere a

programación orientada a objetos) que ofrece cierta biblioteca para ser utilizado por

otro software como una capa de abstracción.

J2ME: La plataforma J2ME es una familia de especificaciones que definen varias

versiones minimizadas de la plataforma Java 2; estas versiones minimizadas pueden

ser usadas para programar en dispositivos electrónicos; desde teléfonos celulares, en

PDAs, hasta en tarjetas inteligentes, etc. Estos dispositivos presentan en común que

no disponen de abundante memoria ni mucha potencia en el procesamiento, ni

tampoco necesitan de todo el soporte que brinda el J2SE, (la plataforma estándar de

Java usada en sistemas de escritorio y servidor)

JSP: Son las iníciales de Java Server Pages, en español significa Páginas de Servidor

Java. En sí es una tecnología orientada a crear páginas web con programación en

Java

KVM: Es una solución para implementar virtualización completa con Linux sobre

hardware x86. Está formada por un módulo del núcleo (con el nombre kvm.ko) y

herramientas en el espacio de usuario, siendo en su totalidad software libre. El

componente KVM para el núcleo está incluido en Linux desde la versión 2.6.20.

KVM permite ejecutar máquinas virtuales utilizando imágenes de disco que

contienen sistemas operativos sin modificar.

Page 309: Control de Dispositivos

289

PDA: Es un computador de mano originalmente diseñado como agenda electrónica

(calendario, lista de contactos, bloc de notas y recordatorios) con un sistema de

reconocimiento de escritura. Hoy día se puede usar como una computadora

doméstica (ver películas, crear documentos, juegos, correo electrónico, navegar por

Internet, reproducir archivos de audio, etc.).

VMD: Es una interfaz gráfica dentro de NetBeans Mobility que le permite diseñar

aplicaciones móviles usando arrastrar y soltar los componentes. El VMD le permite

definir la aplicación de flujo y el diseño de su interfaz gráfica utilizando los

componentes suministrados por el IDE, o componentes que usted mismo diseño, El

VMD contiene muchas estándar de interfaz de usuario (UI) componentes que puede

utilizar para crear aplicaciones como listas, Alertas, formas e imágenes

UML: Es el lenguaje de modelado de sistemas de software más conocido y utilizado

en la actualidad; está respaldado por el OMG (Object Management Group). Es un

lenguaje gráfico para visualizar, especificar, construir y documentar un sistema de

software. UML ofrece un estándar para describir un "plano" del sistema (modelo),

incluyendo aspectos conceptuales tales como procesos de negocios y funciones del

sistema, y aspectos concretos como expresiones de lenguajes de programación,

esquemas de bases de datos y componentes de software reutilizables.

WEP: Es el sistema de cifrado incluido en el estándar IEEE 802.11 como protocolo

para redes Wireless que permite cifrar la información que se transmite. Proporciona

un cifrado a nivel 2. Está basado en el algoritmo de cifrado RC4, y utiliza claves de

64 bits (40 bits más 24 bits del vector de iniciación IV) o de 128 bits (104 bits más

24 bits del IV). Los mensajes de difusión de las redes inalámbricas se transmiten por

ondas de radio, lo que los hace más susceptibles, frente a las redes cableadas, de ser

captados con relativa facilidad. Presentado en 1999, el sistema WEP fue pensado

para proporcionar una confidencialidad comparable a la de una red tradicional

cableada.

XML: Es un metalenguaje extensible de etiquetas desarrollado por el World Wide

Web Consortium (W3C). Es una simplificación y adaptación del SGML y permite

definir la gramática de lenguajes específicos (de la misma manera que HTML es a su

vez un lenguaje definido por SGML). Por lo tanto XML no es realmente un lenguaje

en particular, sino una manera de definir lenguajes para diferentes necesidades.

Page 310: Control de Dispositivos

290

5.2 VOCABULARIO

HARDWARE

ASCII (American Standard Code for Information Interchange,)

AWG (American Wire Gauge)

BIOS (Basic Input Output System

BSAP (Bristol Synchronous/Asynchronous Protocol

BSC (Binary Synchronous Communications)

CTI (Computer Telephony Integrations)

CTS (Clear To Send)

DDCMP (Digital Data Communication Message Protocol

DSR (Data Set Ready)

DTR (Data Terminal Ready)

ECP (Extended Capability Port)

EEPROM (Electrically Erasable Programmable Read Only Memory

EPP (Enhanced Parallel Port)

HART (Highway Addressable Remote Transducer)

HDLC (High-Level Data Link Control Protocol)

HDX (Half Duplex)

HF (Higth Frecuency)

HNP (Host Negotiation Protocol)

HSSI (High Speed Serial Interface)

HT12D (Decodificador asociado Holtek)

IBM (International Business Machines)

ISO/OSI (International Standards Organization/ Open Systems Interconnection)

LF (Low Frecuency)

MF (Medium Frecuencia)

MHz (Mega Hertz)

MS-DOS (System Operator Dir – Microsoft)

MTU (Master Terminal Unit)

PC (Personal Computer)

PIC (Peripheral Interface Controller)

PS/2 (Port Serial Bidireccional)

RAM (Random Access Memory)

Page 311: Control de Dispositivos

291

ROM (Read Only Memory)

RS-232 (Modo de comunicación vía serial)

RTS (Request to Send)

RTU (Unidades remotas de transmisión)

SMS (Small Message)

TE (Transmission Enable)

UART (Transmisor-Receptor-Asíncrono Universal

UHCI (Universal Host Controller Interface)

USB (Universal Series Bus)

VT (Valid Transmission )

Wi-Fi (Wireless Fidelity)

WLAN (Wireless Local Area Network)

FIRMWARE

ADO (Active Data Object)

DAQ (Data Adquision Quality)

HTML (HyperText Markup Language)

IDE (Integrated Device Electronics)

ODBC (Open Database Connectivity)

SOFTWARE

APIs (Application Program Interface)

CLDC (Connected Limited Device Configuration)

J2ME (Java 2 Edición micro)

JSP (Java Server Page)

KVM (Kernel-based Virtual Machine)

MIDP (Mobile Information Device Profile)

PIM (Protocol Independent Multicast)

PDA (Personal Digital Assintant),

VMD (Visual Designer Mobile)

UML (Unified Modeling Language)

WEP (Wired Equivalent Privacy)

WSDL (Web Services Description Language)

XML (Extensible Markup Language)