Upload
dinhlien
View
219
Download
1
Embed Size (px)
Citation preview
Comunicación Punto a Punto
Vía Módem GSM
Titulación: Ingenieria Técnica Industrial en Electrónica Industrial
AUTOR: ALBERTO LORENZO BONILLO DIRECTOR: ERNEST GIL DOLCET
FECHA: ENERO / 2004.
Comunicación Punto a Punto Vía Módem GSM Índice
3
1.ÍNDICE
Comunicación Punto a Punto Vía Módem GSM Índice
4
ÍNDICE 1. ÍNDICE.........................................................................................................3 2. PRESENTACIÓN-OBJETIVOS...............................................................7 3. SISTEMAS DE COMUNICACIÓN..........................................................9
3.1 Introducción......................................................................................................10 3.2 SMS ...................................................................................................................10
3.2.1 Características................................................ .....................................10 3.2.2 Principales aplicaciones................................................ ... ..................10
3.3 Llamadas de VOZ.............................................................................................11 3.3.1 Características........................................... ..........................................11 3.3.2 Principales aplicaciones........................................... ...........................11
3.4 FACSIMIL...................................................................... .................................11 3.4.1 Características........................................... ..........................................11
3.5 HSCSD ...................................................................... .......................................12 3.5.1 Características........................................... ..........................................12 3.5.2 Principales aplicaciones........................................... ...........................12 3.5.3 Ventajas y desventajas........................................... .............................12
3.6 GPRS ...................................................................... .........................................13 3.6.1 Características de Funcionamiento........................................... ..........13 3.6.2 Principales aplicaciones........................................... ...........................13
3.7 Conclusiones...................................................................... ...............................14 4. COMANDOS AT.......................................................................................15
4.1 Introducción...................................................................... ...............................16 4.2 Tipos de Comandos AT....................................................................................16 4.3 Modos De Funcionamiento Del MODEM......................................................16 4.4 Listado de comandos utilizados.......................................................................17
4.4.1 Control Errores....................................................................................17 4.4.2 Codigos De Acceso.............................................................................17 4.4.3 Mensajes Sms........................................... ..........................................17 4.4.4 Transferencia De Datos CSD-HSCSD................................................18 4.4.5 Lectura De La Agenda Y Del Registro Llamadas...............................19 4.4.6 Fecha Y Hora........................................... ...........................................19 4.4.7 Identificación........................................... ...........................................20
5. PROGRAMACIÓN DEL PUERTO SERIE RS-232.............................21
5.1 Introducción......................................................................................................22 5.2 Configuración del puerto serie........................................................................22 5.3 Acceso al puerto serie mediante el control MsComm...................................23
5.3.1 Propiedades De Configuración Previa A Su Uso................................23 5.3.2 Propiedades Propias Del Tiempo De Ejecución..................................26 5.3.3 Eventos Del MsComm........................................... .............................27
Comunicación Punto a Punto Vía Módem GSM Índice
5
6. DISEÑO DE LA APLICACIÓN CON VISUAL BASIC.......................29 6.1 Introducción...................................................................... ...............................30 6.2 Estructura de programación...........................................................................30
6.2.1 Módulos de formulario........................................... ............................30 6.2.2 Módulos estándar........................................... .....................................30 6.2.3 Controles........................................... ..................................................31
7. DIAGRAMAS DE FLUJO.......................................................................34
7.1 Introducción..................................... ...............................................................35 7.2 Funcionamiento General Del Programa.......................................................36 7.3 Formato General De Comunicación PC-Módem.........................................37 7.4 Enviar Tramas: Enviar Comando, Obtener Y Tratar Respuesta..............38 7.5 Espera De La Respuesta Completa...............................................................39
metodología a) ........................................... .................................................39 metodología b) ........................................... .................................................40 metodología c) ........................................... .................................................41 metodología d) ........................................... .................................................42
7.6 Tratar Respuesta (Procedimiento Treat_Responses) ..................................43 7.7 Configuración Del Puerto Serie..................................... ...............................44 7.8 Control Del Código De Acceso (Acción PIN_CONTROL) .........................45 7.9 Formulario De Introducción Del Código Pin................................................46 7.10 Tratar Respuesta Introducción De Código Pin (Acción Pin_Code) ........47 7.11 Formulario De Introducción Del Código PUK............................................48 7.12 Tratar Respuesta a la Introducción De Código PUK (PUK_Code) .........49 7.13 Menú Principal............... ............... ............... ............... ............... ...............50 7.14 Cargar La Configuración Del Programa............... ............... .....................51 7.15 Registro De Llamadas............... ............... ............... ............... ....................53 7.16 Lectura De La Memoria Del Módem (Acción Phonebook_Read) ............54 7.17 Menú De La Agenda Telefónica............... ............... ............... ....................56 7.18 Búsqueda Por Nombre En La Agenda Telefónica............... .......................57 7.19 Búsqueda Por Posición En La Agenda Telefónica............... ......................59 7.20 Insertar Nueva Entrada En La Agenda Telefónica............... .....................60 7.21 Menú Mensajes SMS............... ............... ............... ............... ......................61 7.22 Configuración De Los Mensajes SMS............... ............... ..........................62 7.23 Acción Preferred Message Storage............... ............... ............... ...............64 7.24 Leer, Borrar y Reenviar SMS Desde Memoria............... ............... ...........65 7.25 Leer Mensaje (Acción Read_Message) ............... ............... ........................66 7.26 Formulario Escribir Mensajes (Guardar o Enviar) ............... ...................68 7.27 Enviar o Guardar (Acción SEND_OR_WRITE _MESSAGES) ...............69 7.28 Formulario Enviar Mensaje............... ............... ............... ..........................71 7.29 Formulario Transferencia De Datos CSD............... ............... ....................72 7.30 Finalizar Una Llamada, Colgar (Accion Hang Up) ............... ...................73 7.31 Transferencia De Datos CSD (“Connected”) ............... ............... ..............74 7.32 Acceso Al Modo Comandos (Acción Command Mode) ............... .............75 7.33 Configuración De Parámetros Para La Transferencia CSD-HSCSD.......76
Comunicación Punto a Punto Vía Módem GSM Índice
6
8. MANUAL DE USUARIO.........................................................................78 8.1 Introducción............... ............... ............... ............... ............... ......................79 8.2 Configuración Del Puerto Serie ............... ............... ............... .....................80 8.3 Control De Códigos............... ............... ............... ............... ..........................81 8.4 Menú Principal............... ............... ............... ............... ............... .................82 8.5 Agenda Telefónica............... ............... ............... ............... ............................83 8.6 Mensajes De Texto (SMS) ............... ............... ............... ............... ..............85 8.7 Transferencia De Datos............... ............... ............... ............... ....................88 8.8 Registro De Llamadas............... ............... ............... ............... ......................90
9. CONCLUSIONES.....................................................................................91 10. CÓDIGO FUENTE COMENTADO.....................................................94
10.1 Introducción............... ............... ............... ............... ...................................95 10.2 Código Fuente............... ............... ............... ............... ................................95
MÓDULOS DE FORMULARIO 10.2.1 PRESENTATION.frm........................................... ..............96 10.2.2 COM_PORT_CONFIGURATION.frm...............................97 10.2.3 PIN_CODE.frm........................................... ......................102 10.2.4 PUK_CODE.frm........................................... .....................103 10.2.5 MENU.frm........................................... ..............................104 10.2.6 CALL_REGISTER.frm......................................................109 10.2.7 DATA_TRANSFER_CSD_HSCSD.frm............................111 10.2.8 CSD_CONFIGURATION.frm...........................................114 10.2.9 PHONEBOOK.frm.......................................... ..................119 10.2.10 PHONEBOOK_NAME_SEARCH.frm.............................121 10.2.11 PHONEBOOK_POSITION_SEARCH.frm......................122 10.2.12 PHONEBOOK_SEARCH_RESULTS.frm.......................124 10.2.13 PHONEBOOK_WRITE.frm.............................................125 10.2.14 SMS.frm........................................... .................................127 10.2.15 SMS_CONFIGURATION.frm.........................................128 10.2.16 READ_SMS.frm.......................................... .....................134 10.2.17 WRITE_SMS.frm........................................... ..................136 10.2.18 SEND_SMS.frm........................................... ....................137 10.2.19 NEW_SMS_NOTIFY.frm.................................................139 10.2.20 CALL_NOTIFY.frm.................................................140 10.2.21 MODULE_SIM_IDENTIFICATION.frm.........................141 10.2.22 TRAMAS_ENV_RECEPC.frm.........................................142
MÓDULOS ESTANDAR 10.2.23 VARIABLES.bas........................................... ...................143 10.2.24 PROCEDURES.bas........................................... ...............144 10.2.25 TREAT_RESPONSES.bas............................................... 153 10.2.26 Dxb.bas.................................... ............ ................ ...........161 10.2.27 sNi.bas........................................ ............ .............. ..........162 10.2.28 SOUNDS.bas............................... .....................................163
11. ANEXOS................................................................................................164 12. BIBLIOGRAFÍA..................................................................................166
Comunicación Punto a Punto Vía Módem GSM Presentación-Objetivos
7
2. PRESENTACIÓN-OBJETIVOS
Comunicación Punto a Punto Vía Módem GSM Presentación-Objetivos
8
PRESENTACIÓN - OBJETIVOS
El objetivo del presente proyecto es realizar una comunicación entre dos terminales, los cuales pueden ser o bien dos dispositivos módem de tipo GSM, o entre un dispositivo móvil (teléfono móvil) y un módem GSM.
Un módem GSM es un dispositivo que se conecta a la red GSM para enviar y / o recibir dicha información. Considerando que la red GSM es una red totalmente digital, no es necesaria la utilización del módem (que realizan una conversión analógico-digital MOdulador-DEModulador), sino que se necesita sólo un adaptador especial que adapta el flujo de datos proveniente del PC, al flujo de datos utilizado en el enlace digital entre el teléfono y la red GSM.
Los módem GSM empleados en este estudio son modelos GM29 de la compañía SONY-ERICSSON, que han estado suministrados por el CITEE (Centre d’Innovació Tecnològica en Enginyeria Electrònica de Tarragona).
Se estudiaran diferentes tipos de comunicación mediante la red GSM y se implementaran dos de ellos: el mensaje de texto SMS (short message service) y la transferencia de datos CSD (Circuit Switched Data).
Denotar que no nos adentraremos en el formato ni en el sistema de comunicación de la red GSM, sino que profundizaremos en la comunicación PC-MÓDEM, realizando una interficie de usuario que gobierne dicho módem. Todo ello con el propósito de conseguir la comunicación con otro terminal.
La comunicación PC-MÓDEM se establece a través del puerto serie, el cual será objeto de análisis en cuanto a la forma de actuación y estudio de su programación y acceso para controlar el dispositivo conectado a él.
El GM29 trabaja mediante un conjunto de instrucciones denominados comandos AT (HAYES). El envío de estos comandos y la recepción y posterior tratamiento de las respuestas son la base de este proyecto.
Todo ello se realizará mediante la programación en lenguaje VISUAL BASIC.
Comunicación Punto a Punto Vía Módem GSM Sistemas de Comunicación
9
3. SISTEMAS DE COMUNICACIÓN
Comunicación Punto a Punto Vía Módem GSM Sistemas de Comunicación
10
SISTEMAS DE COMUNICACIÓN
3.1 Introducción A continuación presentaremos los diferentes tipos de comunicación existentes, así
como una breve descripción de sus características, funcionamiento y principales aplicaciones de cada una de ellos.
Hablaremos de los mensajes de texto (SMS), de las llamadas de voz, del envío de faxes, y finalmente de la trasferencia de datos y conexión a Internet (CSD-HSCSD, GRPS). 3.2 SMS (Mensajes cortos de texto)
SMS (Servicio de mensajes cortos) es un sistema para enviar y recibir mensajes de
texto para y desde teléfonos móviles (o dispositivos GSM conectados a algún procesador). El SMS fue creado como una parte del estándar GSM fase 1 en 1992. 3.2.1 Características
Hay varias características únicas del servicio de mensajes cortos (SMS), según lo definido dentro del estándar digital de telefonía móvil GSM:
• Un mensaje corto puede tener una longitud de hasta 160 caracteres. Éstos pueden
ser palabras, números o una combinación alfanumérica. Los mensajes cortos basados en No-texto (por ejemplo, en formato binario) también se utilizan.
• Los mensajes cortos no se envían directamente del remitente al receptor, sino que
se envían a través de un centro de SMS. Cada red de telefonía móvil que utiliza SMS tiene uno o más centros de mensajería para manejar los mensajes cortos.
• Los mensajes cortos se pueden enviar y recibir simultáneamente a la voz, datos y
llamadas del fax. Esto es posible porque mientras que éstas asumen el control de un canal de radio dedicado durante la llamada, los mensajes cortos viajan sobre un canal dedicado a señalización independiente de los de tráfico.
3.2.2 Principales aplicaciones
Las principales aplicaciones basadas en SMS son: Comunicación entre usuarios,
Notificaciones del buzón de voz, Fax, E-mail, Servicios de Información, Comercio electrónico, Supervisión remota,...
Comunicación Punto a Punto Vía Módem GSM Sistemas de Comunicación
11
3.3 Llamadas de VOZ Sistema de comunicación basado en la transferencia digital de paquetes de información en formato voz a través de la red inalámbrica. Esta comunicación se realiza a través de ondas hertzianas y a una frecuencia de 900 y 1800 MHz dependiendo del sistema. 3.3.1 Características
En una comunicación por voz es necesario una estación móvil (teléfono móvil, módem GSM, ...) que además de permitir el acceso a la red a través de la interfaz de radio con funciones de procesado de señales y de radio frecuencia, debe ofrecer también una interfaz al usuario humano (un micrófono, altavoz, display y tarjeta, para la gestión de las llamadas de voz). Dicha tarjeta (SIM) nos permite el acceso a una operadora que nos preste el servicio de la conexión.
Para efectuar una comunicación, una red integrada de estaciones base debe proporcionar la suficiente cobertura de radio a todas las estaciones móviles. Las estaciones base, a su vez, deben estar conectadas a un eje central llamado Centro de Conmutación Móvil (MSC). El MSC proporciona conectividad entre la Red Telefónica de Conmutación Pública (PSTN) y las numerosas estaciones base, y por último, entre todos los abonados móviles de un sistema. La PSTN forma la red de telecomunicaciones global que interconecta los centros de conmutación de telefonía convencional (terrestres), llamados oficinas centrales, con los MSCs de todo el mundo. 3.3.2 Principales aplicaciones Comunicación entre usuarios, comunicaciones rápidas directas y fluidas, en las que es importante el contacto con el interlocutor, Servicios de Información, Centralitas, Atención al cliente, ... 3.4 FACSIMIL
Su abreviatura es el FAX. Sistema para el envío y recepción de una página impresa entre lugares distantes.
3.4.1 Características
Básicamente, estos dispositivos digitalizan una o más hojas de papel, las convierten en paquetes de datos que se transmiten a través de una línea de comunicación (Internet, BBS, GSM, cualquier red, etc...) a otro aparato de fax, e imprimen dicha información en un papel para que el receptor del mensaje pueda leerlo. Las máquinas de fax se componen de un escáner, que digitaliza la página de papel, un módem, que transmite la información, y una impresora, que devuelve una copia en papel del documento recibido.
Comunicación Punto a Punto Vía Módem GSM Sistemas de Comunicación
12
Los módems GSM para computadora son capaces de enviar y recibir facsímiles. Los datos a enviar provienen de imágenes o textos almacenados en la computadora, y la impresión de los documentos recibidos es opcional, ya que los podemos ver en pantalla. La utilización de esta característica requiere un software adicional específico. 3.5 HSCSD (Datos por Conmutación de Circuitos a Alta Velocidad)
El HSCSD (High Speed Circuit Switched Data) es una especificación de la Fase 2+ de GSM, homologada por el ETSI (European Stándard Institute) en febrero de 1997 y comercializada a partir de 1999. 3.5.1 Características
HSCSD es una plataforma multi-canal para transmisión de datos a alta velocidad mediante circuitos conmutados GSM. Elimina la barrera de las redes de bajo rendimiento, proporcionando a los usuarios el mismo rendimiento, o incluso mayor, que las conexiones fijas. HSCSD puede ofrecer transmisión de datos a una velocidad de hasta 57,6 kbit/s o superior, cuando se combina con productos de compresión y filtro (combinando varios canales de 9,6 Kbit/s o 14,4 Kbit/s.)
Con esta tecnología el número de canales usados en cada instante por una comunicación de datos es variable dependiendo de la saturación de la célula en la que esté operando el teléfono móvil. 3.5.2 Principales aplicaciones
Las aplicaciones que se pueden beneficiar del HSCSD son: E-mail, Fax, acceso a
LAN, transferencia de fichero, videoconferencia, seguridad, difusión TV, navegación por Internet... 3.5.3 Ventajas y desventajas
La mayor ventaja del HSCSD, es que la inversión para ser implantado es mínima, ya que básicamente se trata de una modificación software, unos mínimos cambios hardware y ninguna dotación física. Así pues, aunque algunos operadores y fabricantes se han volcando directamente con la tecnología GPRS, el HSCSD permite a aquellos que lo implanten en su red adelantarse en la oferta de servicios avanzados con una inversión que no va a perder rentabilidad a largo plazo, ya que muchas de las aplicaciones GPRS, se inician con el HSCSD; algunas se trasladarán al sistema de transmisión por paquetes, pero otras seguirán utilizando el HSCSD, más adecuado a aquellas funciones que necesitan una velocidad constante y un mínimo retraso, como puede ser la transmisión de imágenes de vídeo o imágenes en tiempo real.
La mayor desventaja del HSCSD es el coste para los usuarios, el uso de 4 canales significa que el coste es 4 veces superior al de una llamada de voz (uso de un solo canal).
Comunicación Punto a Punto Vía Módem GSM Sistemas de Comunicación
13
3.6 GPRS (Servicio General de Paquetes por Radio) A mediados de la década de los 90, el ETSI (European Telecommunication
Standard Institute), tomó la decisión de establecer un nuevo estándar basado en la interfaz aire del sistema GSM, para la transmisión de paquetes vía radio denominado GPRS (General Packet Radio System), también conocido como GSM-IP ya que permite una adecuada integración de los protocolos de Internet TCT/IP con la red móvil instalada GSM
La tecnología GPRS se basa en la conmutación de paquetes realizando la
transmisión sobre la red GSM, que básicamente es la tecnología de conmutación de circuitos. En vez de enviar una corriente continua de datos a través de una conexión permanente, la conmutación de paquetes sólo utiliza la red cuando hay datos que enviar. El uso de GPRS permite a los usuarios enviar y recibir datos a una velocidad máxima de 115kbit./s. La tecnología GPRS está particularmente indicada para enviar y recibir pequeños y grandes volúmenes de datos, como e-mail y buscador de web. 3.6.1 Características de Funcionamiento
Cuando un usuario transmite datos, éstos son encapsulados en paquetes cortos, en cuya cabecera se indican las direcciones origen y destino; cada uno de estos paquetes puede seguir rutas diferentes a través de la red hasta llegar a su destino, así mismo, los paquetes originados por distintos usuarios pueden ser intercalados, de esta forma se comparte la capacidad de transmisión. Los paquetes no son enviados a intervalos de tiempo, sino que cuando se necesita, se asigna la capacidad de la red, siendo liberada cuando no es necesaria. GPRS utiliza los recursos radio solamente cuando hay datos que enviar o recibir, adaptándose así perfectamente a la muy intermitente naturaleza de las aplicaciones de datos.
Mientras el sistema GSM fue originariamente diseñado con un especial énfasis en las sesiones de voz, el principal objetivo de GPRS es ofrecer un acceso a redes de datos estándar, como TCT/IP.
El actual sistema GSM opera en un modo de transmisión de circuitos conmutados "extremo a extremo" (CSD-HSCSD), en el cual los circuitos son reservados a lo largo del sistema para el uso de una sola comunicación incluso cuando no se transmiten datos.
El GPRS ofrece una transmisión de paquetes "enlace a enlace" a lo largo de la red en distintas fases. Por ejemplo, una vez que el paquete de datos ha sido transmitido a través de la interfaz aérea, los recursos radio pueden ser liberados para el uso por parte de otros usuarios. Después de esto, el paquete viaja hacia su destino a través de la red troncal GPRS, y posiblemente otra serie de redes incluyendo, por ejemplo, Internet.
El uso de los enlaces de este modo conserva la capacidad de red y la interfaz.
Además permite a los operadores ofrecer un servicio a mejor precio, ya que la facturación se puede basar en la cantidad de datos enviados o recibidos. 3.6.2 Principales aplicaciones
Ejemplos de estas aplicaciones son: Correo electrónico, servicios de chat, información visual y textual, mensajes cortos optimizados, transmisión de imágenes fijas,
Comunicación Punto a Punto Vía Módem GSM Sistemas de Comunicación
14
transmisión de imágenes en movimiento, navegación web, teletrabajo, servicios de audio, ubicación de vehículos, acceso remoto a redes locales, transferenc ia de ficheros... 3.7 Conclusiones
Conocidos los diferentes sistemas de comunicación posibles a través de la red GSM, en este proyecto se implementaran el sistema de envío de mensajes cortos (SMS) y la transferencia de datos CSD-HSCSD (se diferencian en el número de slots utilizados, una es más rápida que la otra y por tanto más cara), como comunicaciones significativas de las anteriormente estudiadas. La mensajería en formato SMS es un sistema consolidado y en constante auge, dada su versatilidad y bajo coste, válido para infinidad de aplicaciones y consideramos que una comunicación de este tipo es un modo muy representativo de nuestros tiempos.
La transferencia de datos vía CSD nos permitirá comunicarnos con otro módem a través de la red inalámbrica desde cualquier punto donde alcance la cobertura suministrada por la operadora, sin necesidad de la conexión a un sistema fijo. De este modo una comunicación de este tipo nos puede ser válida para aquellos lugares a donde no alcance la red fija convencional y sea necesario un constante contacto e intercambio de información.
Aunque, como hemos estudiado, el sistema GRPS gana usuarios en cuanto a
aplicaciones se implementan y los operadores de red lo potencian dado su optimización de los recursos, su fundamento y su base radican en la transferencia CSD, y por ese motivo optamos por llevar a cabo el caso práctico de esta última.
De este modo, debemos gobernar el módem y enviarle una serie de instrucciones a través del puerto serie para conseguir nuestro propósito y que establezca la comunicación deseada con otro terminal.
Esas instrucciones son los denominados comandos HAYES o AT y los presentamos en el capítulo siguiente.
Comunicación Punto a Punto Vía Módem GSM Comandos AT
15
4. COMANDOS AT
Comunicación Punto a Punto Vía Módem GSM Comandos AT
16
4. COMANDOS AT 4.1 Introducción
El control del módem GSM a través de la interfaz de usuario creada, se basa en el
uso de instrucciones o comandos denominados Hayes o AT, de los que exponemos brevemente algunas referencias.
Hayes es el nombre de una empresa que en los orígenes de la comunicación por módem definió una serie de comandos u órdenes para que el software de comunicaciones pudiera comunicarse con el módem, pudiendo controlar este último.
Estos comandos tuvieron tanto éxito que se convirtieron en el virtual estándar de
comunicaciones, y los módems que los comprenden (el 99,99% de los módems modernos) se denominan compatibles Hayes.
Todos los comandos de este protocolo comienzan por AT y acaban por CR (aunque
este último carácter es configurable). 4.2 Tipos de Comandos AT Existen dos tipos principales de comandos :
• Comandos que ejecutan acciones inmediatas (ATD marcación, ATA contestación o ATH desconexión)
• Comandos que cambian algún parámetro del módem (ATS2=43 configuración del carácter de escape).
4.3 Modos De Funcionamiento Del Módem
El módem está en modo comandos (command mode) si éste responde a los
comandos que envía el ordenador. En este modo es posible configurar o realizar diversas operaciones, consulta, lectura o de marcado y conexión.
Cuando el módem se conecta con otro terminal pasa al modo en línea (online data
mode). En este modo cualquier información que reciba del puerto serie del ordenador será enviada al terminal distante. El módem no procesa la información y simplemente la trasmite a través de la línea de comunicación.
Para salir del modo en línea y pasar de nuevo al modo comandos se envía al módem
+++(secuencia de escape).
Comunicación Punto a Punto Vía Módem GSM Comandos AT
17
4.4 Listado de comandos utilizados
A continuación presentamos un listado de comandos AT utilizados en este proyecto así como una breve explicación de las instrucciones que ejecuta el módem al recibir dichos comandos.
El listado completo de comandos AT soportados por el GM29 de Sony-Ericsson lo
podremos encontrar en el “GM29 Integrators Manual R1B” ubicado en el Anexo.
4.4.1 CONTROL ERRORES
• AT+CMEE (Mobile Equipment Error). Este comando nos permite configurar el formato de la respuesta en caso de que se produzca algún error. Dependiendo del parámetro que le pasemos, la respuesta sería ERROR, ERROR + un código numérico, o, ERROR + descripción del error. Empleamos este último modo para poder concretar más que tipo de error se ha producido en el envío y recepción de cada uno de los comandos.
4.4.2 CODIGOS DE ACCESO
• AT+CPIN (PIN Control). Dispone de 2 metodologías de uso.
a) mediante la interrogación AT+CPIN? podemos decretar el estado del módem en cuanto a su control de acceso, si es necesario un primer código PIN (personal identification number), si por el contrario la tarjeta SIM esta anclada y es necesario un segundo código denominado PUK (personal unlock code) e incluso si es necesario la introducción de la tarjeta en el módulo.
b) Para introducir los códigos anteriormente comentados (PIN o PUK), debemos
enviar el comando AT+CPIN y el código requerido. En este caso nos informará si el código es correcto (y el terminal se encuentra preparado), si es incorrecto, si es necesario el código PUK o si la tarjeta resta bloqueada por una introducción repetitiva incorrecta de los códigos.
4.4.3 MENSAJES SMS Podemos dividir los comandos en 2 tipos, según su funcionalidad:
a) configuración del sistema de envío o recepción
• AT+CMGF (Message Format). Configura el tipo de mensajes que se van a usar. Existen dos tipos, TEXTO o PDU (modo binario).
• AT+CPMS (Preferred Message Storage). Selecciona los valores de las 3
memorias existentes. La primera es la que permite la lectura, borrado y reenviado de mensajes, la segunda es la que contiene los mensajes escritos pero no enviados, mientras que la tercera es donde se almacenan los nuevos
Comunicación Punto a Punto Vía Módem GSM Comandos AT
18
mensajes recibidos. Estas memorias pueden tomar los valores de módem o de tarjeta SIM.
• AT+CSCA (Service Centre Address). Establece el número del centro de
servicio. Este número, correspondiente al servidor, es específico para cada operadora y es destinatario intermedio entre el emisor y el receptor.
• AT+CSMP (Set Text Mode Parameters). Entre otros, configura el tiempo
máximo de permanencia de un mensaje en el centro de servicio antes de que sea posible el envío al destinatario final.
• +CNMI (New Message Indications to TE). Configura la metodología de
notificación de un nuevo mensaje recibido.
b) ejecución de acciones
• AT+CMGR (Read Message). Lee un mensaje almacenado en la posición pasada como parámetro.
• AT+CMGD (Delete Message). Borra un mensaje almacenado en la posición
pasada como parámetro.
• AT+CMGW (Write Message to Memory). Memoriza un mensaje (el contenido del cual es pasado como parámetro) en la primera posición de memoria libre para un posterior envío, lectura, modificación, etc.
• AT+CMGS (Send Message). Envía un mensaje, cuyo contenido debemos
escribir, a un destinatario especificado.
• AT+CMSS (Send From Storage). Envía un mensaje almacenado en una determinada posición de memoria.
4.4.4 TRANSFERENCIA DE DATOS CSD-HSCSD Se dividen también en 2 tipos, según su funcionalidad:
a) configuración del sistema de envío o recepción
• ATP (Select Pulse Dialling). Selecciona el modo de llamadas por pulsos.
• ATT (Select Tone Dialling). Selecciona el modo de llamadas por tonos.
• ATS0 (Automatic Answer Control). Controla el formato de respuesta ante una llamada entrante. Éste puede ser manual o automático, especificando previamente el número de RINGS que deben acontecer antes de la aceptación de la llamada.
Comunicación Punto a Punto Vía Módem GSM Comandos AT
19
• AT+CBST (Select Bearer Service Type). Establece entre otros aspectos, la velocidad de conexión de la transferencia de datos. Podemos elegir un valor específico o configurarlo de modo automático, ya que permite una selección óptima en cada instante (aumentará la velocidad cuando sea posible).
• ATS2 (Escape Sequence Character). Configura el carácter de la secuencia
de escape. Para pasar de modo en línea a modo comando, debemos enviar al módem la secuencia +++AT (donde + es el carácter establecido por este comando)
b) ejecución de acciones
• ATD (Dial). Establece la comunicación con un terminal remoto. Se debe adjuntar el número del destinatario. La conexión puede ser de datos o de voz, aunque nosotros solo implementaremos la de datos.
• ATA (Answer). Mediante este comando aceptamos una llamada entrante.
• ATH (Hang up). Se finaliza una llamada en curso.
• AT+CHUP. Se rechaza una llamada entrante.
• ATO (Return to Online Data Mode). Pasamos del modo comando al modo
en línea. 4.4.5 LECTURA DE LA AGENDA Y DEL REGISTRO LLAMADAS
• AT+CPBS (Phone Storage). Se establece el registro al que queremos acceder. Si se trata de la agenda telefónica podemos escoger entre la agenda guardada en el módem o en la tarjeta SIM. Si queremos acceder al registro de llamadas seleccionaremos entre DC, RC, MC (llamadas enviadas, recibidas o no contestadas respectivamente).
• AT+CPBF (Phonebook Find).Se realiza una búsqueda por nombre de la agenda
seleccionada en el comando anterior.
• AT+CPBR (Phonebook Read). Permite realizar la lectura tanto del registro de llamadas como de la agenda (dependiendo de CPBS). Se especifica una posición o un rango.
• AT+CPBW (Phonebook Write). Se introduce una nueva entrada en la agenda (se
aportan los campos posición, número y nombre) 4.4.6 FECHA Y HORA
• AT+CCLK (Set Clock and Date). Establece la fecha y la hora actual.
Comunicación Punto a Punto Vía Módem GSM Comandos AT
20
4.4.7 IDENTIFICACIÓN Muestra información referente al módem y a la tarjeta SIM.
• AT+CGMI (Read MS Manufacturer Identification). Fabricante.
• AT+CGMM (Read MS Model Identification). Modelo.
• AT+CGMR (Read MS Revision Identification).Revisión.
• AT+CGSN (Read MS Product Serial Number Identification). Número de serie.
• AT+CIMI (Subscriber Identification). Número de serie de la tarjeta.
Comunicación Punto a Punto Vía Módem GSM Programación del Puerto Serie
21
5. PROGRAMACIÓN DEL PUERTO SERIE RS-232
Comunicación Punto a Punto Vía Módem GSM Programación del Puerto Serie
22
PROGRAMACIÓN DEL PUERTO SERIE RS-232 5.1 Introducción
El canal serie del PC es uno de los recursos más comunes para la conexión de periféricos, como pueden ser dispositivos de puntero (mouse) o de comunicación (módem, cables de conexión entre PC’s). Esta compuesto por un integrado del tipo 16550 en modelos actuales, mientras que anteriormente se utilizaba el UART8250.
Un PC convencional suele disponer de 4 puertos COM, normalmente 2 internos integrados en la placa base y 2 más externos para el uso del usuario.
El acceso a cada uno de ellos se realiza a través de sus direcciones BASE COM1=3F8, COM2=2F8, COM3=3E8 , COM4=2E8. 5.2 Configuración del puerto serie
Cada uno de los puertos COM tiene 11 registros a comentar, que son a los que
debemos acceder para realizar las acciones requeridas. BASE+0: tiene 3 registros
• Reciver Buffer Register (RBR): Registro buffer de recepción. Su función es la de recibir un dato del puerto.
• Divisor Latch LSB (DLL): Divisor de Velocidad, parte baja. • Transmitter Holding Register (THR): Registro de retención de transmisión. Su
función es la de transmitir un dato por el puerto. BASE+1: tiene 2 registros
• Divisor latch MSB (DLM): Divisor de velocidad, parte alta. • Interrupt Enable Register (IER): Registro de habilitación de interrupciones.
BASE +2:
• Interrupt Identification Register (IIR): Registro de identificación de interrupciones. Controla la prioridad de las mismas.
BASE +3:
• Line Control Register (LCR): Registro de control de línea. Controla los parámetros de configuración del canal serie (bits de datos, bits de stop, tipo de paridad...).
BASE +4:
• Modem Control Register (MCR): Registro de control del módem. Activa las señales del mismo.
BASE +5:
• Line Status Register (LSR): Registro de estado de la línea. Muestra el estado del canal serie (errores, etc).
Comunicación Punto a Punto Vía Módem GSM Programación del Puerto Serie
23
BASE +6: • Modem Status Register (MSR): Registro de estado del módem. Muestra el estado
del mismo. BASE +7:
• Scratch Register (SCR) :Registro residual. 5.3 Acceso al puerto serie mediante el control MsComm
Ahora bien, dado que programaremos la interfaz de usuario en VISUAL BASIC, encontramos un control personalizado denominado MSCOMM que nos permite comunicarnos con el puerto serie para poder transmitir y recibir datos a través de él.
Este control nos ayudará en gran medida a paliar la ardua tarea de la comunicación de nuestra aplicación con el puerto serie (con tal de configurarlo y permitir el acceso al puerto) en el caso de que tuviéramos que acceder manualmente a cada uno de los registros que lo componen. Por tanto trabajaremos con él con el fin de simplificar nuestra labor.
A continuación destacaremos las propiedades mas importantes de este control, que
son las que nos permiten interactuar con el módem conectado al puerto serie. 5.3.1 Propiedades De Configuración Previa A Su Uso
Debemos configurar el puerto serie en tiempo de diseño. Este se corresponde al modo de funcionamiento cuando se crea una aplicación. En tiempo de diseño, se generan los componentes de la aplicación y se establecen sus propiedades (aun existiendo la opción de ser modificados por el usuario una vez iniciado el programa, consideramos que es en tiempo de diseño porque aún no hemos establecido la conexión con el puerto serie). CommPort
Indica el número del puerto serie usado. Cambiando esa propiedad podemos
cambiar el puerto de comunicación que vamos a usar. Su valor dependerá del puerto al que conectemos el dispositivo GM29.
Settings
Indica la velocidad, paridad, número de bits y bits de stop (parada) que se van a
usar en la comunicación.
Figura 0. Control MsComm
Comunicación Punto a Punto Vía Módem GSM Programación del Puerto Serie
24
*Los valores posibles para velocidad son (en baudios) : 50 100 110 300 600 1200 2400 4800 9600 14400 19200 y 28800 *Los valores posibles para paridad son :
N - No envía bit de paridad ni hace comprobación de paridad en la recepción. O - Envía y comprueba paridad, con el criterio de paridad IMPAR E - Envía y comprueba paridad, con criterio de paridad PAR
*Los valores para el parámetro Bits de Información pueden ser : 7 - Se envían / reciben 7 bits por trama de información. 8 - Se envían / reciben 8 bits por trama de información 5 - Se envían / reciben 5 bits por trama de información. *Los valores para el parámetro Bits de parada pueden ser : 1 - Se envía un bit de parada 2 - Se envían 2 bits de parada
Tanto el puerto serie al cual conectemos el módem como la velocidad, paridad, número de bits de información y número de bits de stop (parada) pueden ser configurados por el usuario mediante unas listas desplegables que aparecerán al iniciarse nuestra aplicación.
De todos modos, las recomendaciones del fabricante SONY ERICSSON, las cuales restan reflejadas en el GM29 Integrator’s manual (anexo2), son las que presentamos a continuación: Velocidad =9600 baudios, paridad = ninguna, Bits de Información = 8, Bits de parada =1 Handshaking
Especifica el método de control sobre el flujo de información. En una
comunicación serie se necesita conocer si el puerto puede enviar información (necesita saber si el módem está preparado para recibirla) y necesita indicarle al módem que él está preparado para recibir información. Establece las condiciones de control que uno va a tener sobre otro. El Control de Flujo puede hacerse de dos formas :
• mediante las señales auxiliares del puerto (RTS, CTS, DSR, DTR), que son cables adicionales que tendrán una tensión positiva respecto a los 0V del equipo si esa señal está activada, o una tensión negativa si no lo está.
• mediante señales especiales que se envían por los dos cables que transportan la
información. Mediante estas dos señales podemos controlar que el ordenador envíe información o deje de enviarla. De igual forma, podemos indicarle al módem que envíe o no envíe. Estas señales especiales se denominan X-ON y X-OFF.
La propiedad Handshaking controla la forma de realizar este proceso. Puede tomar los siguientes valores : 0 - No existe Control de Flujo 1 - Control de Flujo mediante XON - XOFF
Comunicación Punto a Punto Vía Módem GSM Programación del Puerto Serie
25
2 - Control de Flujo mediante Request To Send (RTS) y Clear To Send (CTS) 3 - Control de Flujo mediante XON - XOFF y RTS - CTS
Trabajaremos sin control de flujo alguno, ya que para gobernar un módem de este tipo la trasferencia de datos no va a ser muy grande y por tanto no necesitamos de un protocolo que nos gestione ese tráfico. Si la aplicación fuese mayor sí que deberíamos implementar algún tipo de control de flujo. InBufferSize
Mediante esta propiedad establecemos el tamaño del Buffer (almacén de datos) de entrada. Este Buffer sirve para poder recibir datos sin que tenga que intervenir la aplicación continuamente para controlar el puerto de entrada.
Configuramos el buffer de entrada a 1024 caracteres. Valor suficiente para nuestra aplicación
OutBufferSize
Mediante esta propiedad controlamos el tamaño del Buffer de salida. El tamaño de los Buffers depende de la aplicación y de la velocidad de
comunicación. Tanto más grande cuánta mayor sea la velocidad de transferencia de datos. Configuramos el buffer de salida para 512 caracteres de capacidad. Valor
suficiente para nuestra aplicación.
RThreshold, SThreshold
Estas dos propiedades especifican el número de caracteres que deben estar presentes en los Buffers de Recepción y Transmisión respectivamente, para que se produzca el evento OnComm relativo a recepción y transmisión de caracteres. (Eventos EvReceive y EvSend)
Dado que la nuestra es una pequeña aplicación forzaremos que se genere el evento
a cada carácter que reciba o envíe el puerto serie. De este modo, aunque se ejecutará un procedimiento asociado a él cada vez que se genere dicho evento (lo que hará perder tiempo a la aplicación, impidiéndole realizar otras funciones) hemos comprobado que no perjudica a la evolución normal del programa y así tenemos un control más fiable de las transferencias. InputLen
Por defecto, cuando se lee el Buffer de recepción, se leen todos los caracteres,
quedando el Buffer vacío. Si se le asigna a esta propiedad un valor distinto de 0, cada vez que leamos el Buffer de recepción leerá un número de caracteres igual a esa cantidad, permaneciendo los caracteres restantes en el Buffer a la espera de una nueva lectura.
Comunicación Punto a Punto Vía Módem GSM Programación del Puerto Serie
26
Cada vez que se genere el evento de recepción leeremos la totalidad del buffer, dado que la transferencia va a ser discontinua y de tamaños variables cabría la posibilidad de no leer caracteres del buffer si pusiésemos un valor determinado. De este modo nos aseguramos la lectura de todos los caracteres a medida los vayamos recibiendo. ParityReplace
Si la comunicación se realiza con bit de paridad (Par o Impar), en recepción se comprueba byte a byte la recepción de la paridad correcta. Si se recibe un Byte que no tiene paridad correcta, lo más probable es que ese Byte (carácter) se haya recibido defectuoso. Esta propiedad nos permite sustituir un carácter que ha llegado con bit de paridad incorrecto por otro carácter ( ? predeterminado) o por una cadena de caracteres (Error, por ejemplo).
Dado que no usaremos paridad alguna, este apartado podemos omitirlo. RTSEnable
Activa (Pone a 1) la señal RTS (Request To Send - Petición de envío). Esta señal debe ponerse a 1 para indicar al módem (o al equipo que va a recibir nuestra comunicación) que deseamos enviar datos. Debe estar activada durante toda la transmisión de datos. DTREnable
Activa (Pone a 1) la salida DTR (Data Terminal Ready - Terminal de Datos Listo). Esta señal se emplea para decirle al módem que el terminal (Ordenador) está preparado para recibir datos.
Estas 2 señales (RTSEnable, DTREnable) las tendremos siempre activas ya que al no tener control de flujo alguno que las gobierne nos interesa que el módem siempre este dispuesto tanto para enviar como para recibir información. 5.3.2 Propiedades Propias Del Tiempo De Ejecución
El tiempo de ejecución es el período durante el cual se ejecuta una aplicación. Durante este tiempo se puede interactuar con una aplicación. PortOpen
Abre el puerto de comunicación. Puede tener los valores True (para abrirlo) y False (para cerrarlo). (Mscomm1.PortOpen = True / False)
Comunicación Punto a Punto Vía Módem GSM Programación del Puerto Serie
27
Output Envía caracteres al Buffer de salida. (Mscomm1.Output = “texto” o variable)
Input
Lee el Buffer de recepción. Se leerá un número de caracteres igual al valor de la
propiedad InputLen. Cuando la propiedad InputLen tiene el valor 0, el Buffer se lee completo. CommEvent
Devuelve el evento más reciente que ha ocurrido para generar el evento general
OnComm (MSComm.CommEvent) 5.3.3 Eventos Del MsComm
El MsComm tiene varios eventos, pero un solo Procedimiento: el Procedimiento OnComm. Este procedimiento se ejecuta cada vez que se produce alguno de los eventos del MSComm.
Esto quiere decir que para escribir el código apropiado en el procedimiento del
MSComm será necesario analizar qué evento se ha producido y tratar cada uno de ellos. Para averiguar qué evento se ha producido puede hacerse consultando el valor de la propiedad CommEvent. Se ejecutará el Procedimiento OnComm cuando ocurra alguno de los siguientes eventos : ComEvRing
Cambio en la línea de detección de llamada (Ring). Este evento se produce cuando
hay un cambio en la línea Ring (Detección de llamada en el módem). Destacar que la UART del PC utilizado no soporta esta señal con lo que se ha
tenido que contrastar la llegada de esta señal mediante un polling cada vez que se recibía un carácter por el puerto serie. ComEvReceive
Cuando se recibe un número igual o mayor de caracteres que el indicado en la
Propiedad Rthreshold
En el momento que recibimos un carácter, lo extraemos del puerto serie y lo introducimos en una variable para su posterior uso y / o tratamiento.
Comunicación Punto a Punto Vía Módem GSM Programación del Puerto Serie
28
ComEvSend
Cuando quedan en el búfer de transmisión menos caracteres que los indicados en la Propiedad SThreshold
Se realiza una confirmación de que el envío ha sido correcto. De este modo tenemos la certeza de que el envío ha sido satisfactorio. comEventBreak
Se ha recibido una señal de interrupción. (Break)
ComEventOverrun
Se sobrepasó la capacidad del Buffer de entrada sin haber leído todos los caracteres. Los caracteres no leídos se han perdido. Debemos aprovechar este evento para solicitar al interlocutor una repetición de los datos perdidos. ComEventRxOver
Desbordamiento del búfer de recepción. No hay espacio para más datos en el búfer
de recepción. ComEventRxParity
Error de paridad. El hardware ha detectado un error de paridad. No tratamos esta circunstancia ya que no utilizamos paridad ComEventTxFull
Búfer de transmisión lleno. El búfer de transmisión estaba lleno cuando se ha
intentado agregar un carácter a la cola de transmisión.
Para todos estos eventos considerados de error o alerta, debemos realizar un tratamiento similar que consistirá en presentar un mensaje de aviso para posteriormente tratar dicho evento.
Estos eventos de error están relacionados con el buffer de transmisión o recepción
y será necesario realizar una nueva transferencia para recuperar la información o paralizar las restantes con tal de vaciar el contenido de los buffer en el caso de que estos resulten completos.
Comunicación Punto a Punto Vía Módem GSM Diseño de la Aplicación con VB
29
6. DISEÑO DE LA APLICACIÓN CON VISUAL BASIC 6.0
Comunicación Punto a Punto Vía Módem GSM Diseño de la Aplicación con VB
30
DISEÑO DE LA APLICACIÓN CON VISUAL BASIC 6.1 Introducción
Una vez contemplados los sistema de comunicación que queremos implementar, las instrucciones necesarias para ejecutar dichos procesos y la metodología de comunicación con el propio módem a través del puerto serie, realizaremos una aplicación que nos permita, mediante una interfaz clara y sencilla, el envío de dichos comandos al módem para que éste, finalmente, nos permita establecer la comunicación deseada a través de la red GSM.
Para construir dicha aplicación, utilizaremos el lenguaje de programación Visual
Basic en su versión 6.0. Se trata de un producto con una interfaz gráfica de usuario que sirve para crear aplicaciones para Windows basado en el lenguaje Basic y en la programación orientada a objetos.
Para crear una aplicación se crean ventanas y sobre ellas se dibujan objetos llamados controles (etiquetas, botones, cajas de texto, ...) y a continuación se escribe el código fuente relacionado con cada objeto. Esto es, cada objeto está ligado a un código que permanece inactivo hasta que se dé el evento que lo activa (por ejemplo, un clic del ratón). 6.2 Estructura de programación
La programación en visual Basic se fundamenta en módulos. En ellos se almacena el código. Hay tres tipos de módulos: de formulario, estándar y de clase.
En este proyecto se han utilizado los dos primeros y procedemos a su explicación.
6.2.1 Módulos de formulario
Los módulos de formulario (extensión de nombre de archivo .frm) son la base de las aplicaciones de Visual Basic. Pueden contener procedimientos que controlen eventos, procedimientos generales y declaraciones a nivel de formulario de variables, constantes, tipos y procedimientos externos. El código que se escribe en un módulo de formulario es específico de la aplicación a la que pertenece el formulario y puede hacer referencia a otros formularios u objetos de la aplicación.
6.2.2 Módulos estándar Los módulos estándar (extensión de nombre de archivo .bas) son contenedores de
los procedimientos y declaraciones a los que tienen acceso otros módulos de la aplicación. Pueden contener declaraciones globales (disponibles para toda la aplicación) o a nivel de módulo de variables, constantes, tipos, procedimientos externos y procedimientos globales. El código que se escribe en un módulo estándar no está ligado necesariamente a una aplicación determinada; se puede reusar un módulo estándar en distintas aplicaciones
Comunicación Punto a Punto Vía Módem GSM Diseño de la Aplicación con VB
31
6.2.3 Controles
Son los objetos gráficos, como un cuadro de texto, o un botón de comando, que se colocan en un formulario para mostrar datos, realizar una acción o facilitar la lectura del formulario. Los controles tienen asociado un código que se ejecuta cuando se activa un determinado evento de dicho control.
Los controles que hemos usado en este estudio así como los eventos que provocan
la ejecución del código asociado son los comentados a continuación.
CommandButton (1)
Es un control que está asociado a un comando. El evento que lo acciona es el clic
(bien del ratón o mediante el teclado). Cuando se hace clic en el botón de comando en tiempo de ejecución, el código asociado al botón se ejecuta. Textbox (2)
Crea un cuadro de texto con el cual podemos interactuar. Mostrar un determinado
texto, introducir un nuevo valor con el que se podrá modificar el contenido de una variable asociada, etc. Son algunas de sus funciones.
Las propiedades utilizadas son
• Maxlenght, con la que establecemos el valor máximo de caracteres (para prevenir
errores en la posible variable asociada)
• Multiline + scrollbar, se permiten diversas líneas y desplazarse a través de ellas (útil para la presentación de resultados con varias líneas)
• Text, es el texto que muestra la caja. Podemos mostrar un texto deseado o asociar dicho texto a una variable.
Figura1. Controles
(3)
(2)
(1) (4)
(5)
(6)
(7)
Comunicación Punto a Punto Vía Módem GSM Diseño de la Aplicación con VB
32
Los eventos que activan el control son:
• Change : Indica que el contenido ha cambiado. Nos servirá para saber cuando se ha modificado una caja de texto y cuando debe asociarse a la variable.
• Keypress Ocurre cuando el usuario presiona y suelta una tecla. Válido para
discriminar posibles entradas erróneas. En un texto sólo numérico descartamos las teclas que no se correspondan a este requerimiento.
Label
Es un control gráfico que se puede usar para mostrar texto. Se diferencia del
textbox en que el usuario no podrá cambiar directamente dicho texto, sino que será a través de la ejecución del programa. Timer
Nos Permite Ejecutar código a intervalos periódicos produciendo un evento Timer.
Se configura la frecuencia de ejecución de éste (en milisegundos), y se asocia un código que se realizará cuando se produzca el evento. Optionbutton
Pequeño botón redondo más una etiqueta (explicativa) que selecciona una opción. Los controles de este tipo se utilizan en grupo para mostrar opciones entre las cuales el usuario sólo puede seleccionar una (agrupados dentro de un contenedor como un control Frame). Cuando un usuario selecciona un OptionButton, los otros controles del mismo grupo dejan de estar disponibles automáticamente.
La opción se selecciona mediante el evento clic del ratón o teclado.
Cuando un optionbutton está seccionado la propiedad value = verdadera,
mostrándose en el interior del botón una redonda negra. Frame
Un control de este tipo proporciona un agrupamiento identificable para controles o
para subdividir un formulario funcionalmente; por ejemplo, para separar grupos de controles OptionButton.
Utilizamos su propiedad enabled para habilitar (true) o deshabilitar (false) los
controles contenidos en él (para preservar su valor y no sea modificado involuntariamente).
Comunicación Punto a Punto Vía Módem GSM Diseño de la Aplicación con VB
33
Combobox
Nos permite introducir información en la parte del cuadro de texto o seleccionar directamente un elemento de la lista desplegable. Se utiliza para seleccionar una opción entre las mostradas en dicha lista.
Mediante el evento clic se seleccionará una de las opciones y se efectuará el tratamiento requerido asociado a dicho evento. MsComm
Este control nos proporciona comunicarnos con el puerto serie para poder transmitir y recibir datos a través de él. Las propiedades y los diferentes eventos han sido ampliamente comentados en el capítulo anterior (5.Programación del Puerto Serie).
Los módulos de formulario también pueden tener asociado código a eventos
propios no sólo de los controles de los que dispone. A continuación comentaremos los más importantes tratados en este proyecto: Load
Ocurre cuando se carga un formulario. Utilizamos este evento para incluir código
de inicialización de un formulario (código que especifica los valores predeterminados de los controles, indica el contenido que se va a cargar en controles ComboBox e inicializa variables a nivel del formulario). Unload
Ocurre cuando un formulario está a punto de quitarse de la pantalla. Cuando ese
formulario se vuelve a cargar, el contenido de todos sus controles se reinicializa. Este evento se desencadena cuando se cierra el formulario mediante el comando Cerrar del menú Control o una instrucción Unload.
Para visualizar u ocultar los formularios utilizamos la propiedad Visible, que estará con valor true cuando queramos que sea visible y con valor false cuando deseemos ocultarlo. Utilizaremos este método para mostrar u ocultar el formulario sin necesidad de descargarlo y volverlo a cargar de memoria.
Comunicación Punto a Punto Vía Módem GSM Diagramas de Flujo
34
7. DIAGRAMAS DE FLUJO
Comunicación Punto a Punto Vía Módem GSM Diagramas de Flujo
35
DIAGRAMAS DE FLUJO 7.1 Introducción
Los diagramas de flujo son representaciones del flujo que siguen las instrucciones de un programa.
Los diagramas de flujo fueron muy utilizados durante la década de los sesenta, pero
resultaron inadecuados como herramienta de modelado de sistemas, debido a que facilitan la creación de código no estructurado y complejo. Frente a ellos, el pseudocódigo fue una alternativa realmente mejor.
Pero si bien estos diagramas han caído en desuso para el diseño de programas, éstos nos resultaran útiles:
• Para seguir la secuencia lógica de procesos complejos. • Para intercambiar entre estructuras de control. • Para redireccionar el flujo. • Para cambiar un programa de un lenguaje a otro. • Para esbozar fácilmente un procedimiento complejo.
De este modo presentamos en este formato de representación nuestro programa.
Mostraremos tanto la evolución de los diferentes formularios como las acciones que conllevan asociadas los controles. Todo ello con el fin de aclarar y transmitir la idea general de funcionamiento del programa, sin la necesidad de conocer y/o comprender el lenguaje de programación utilizado en este estudio.
Figura 2. Figuras Usadas en los Diagramas de Flujo
Comunicación Punto a Punto Vía Módem GSM Diagramas de Flujo
36
7.2 Funcionamiento General Del Programa
“INICIO”
CONFIGURACIÓN PUERTO SERIE
“FIN”
CONTROL CODIGOS DE ACCESO
CARGAR CONFIGURACIÓN PROGRAMA
MENU PRINCIPAL
Submenus?
MENSAJES (envio, recepción)
TRANSFERENCIA DE DATOS
AGENDA TELEFONICA
REGISTRO DE LLAMADAS
La evolución normal del programa sería una vez iniciado éste, configurar el puerto
serie al cual tenemos conectado el módem. Posteriormente, tras el análisis de los códigos de acceso y su posible necesidad de
introducirlos para acceder al sistema, se procede a la carga de la configuración del programa, que abarca aspectos de las llamadas, mensajes, información,...
Seguidamente estaremos en disposición de efectuar cualquiera de las acciones disponibles en el menú principal, accediendo a los diferentes submenús de agenda, mensajes, transferencia de datos o registro de llamadas. También se permite el acceso a una aplicación calculadora.
Figura 3. Funcionamiento General del Programa
Comunicación Punto a Punto Vía Módem GSM Diagramas de Flujo
37
7.3 Formato General De Comunicación PC-Módem
TRATAR RESPUESTA
“INICIO”
PREPARAR TRAMA
“FIN”
ENVIAR TRAMA
Cada Trama estará compuesta por un comando AT específico + parámetros (opcionales) + un retorno de carro (carácter ASCII num.13).
Enviar trama consiste en introducir dicha instrucción en el buffer de datos de salida del puerto serie (SEND_COMMAND), mediante la instrucción Mscomm.output, y esperar la respuesta.
Finalmente, cuando tengamos la respuesta del módem a nuestra petición de ejecución (se generará un evento que nos permitirá conocer cuando se ha recibido respuesta en el puerto serie), haremos un tratamiento específico dependiendo del resultado obtenido.
Figura 4. Formato General de Comunicación PC-Módem
Comunicación Punto a Punto Vía Módem GSM Diagramas de Flujo
38
7.4 Enviar Tramas: Enviar Comando, Obtener y Tratar Respuesta
TRATAR RESPUESTA
“INICIO”
SEND COMMAND
TRATAR TIMEOUT
“FIN”
Si
No Timeout Respuesta
Completa?
El envío de tramas se compone del envío del comando AT + la espera de la respuesta completa para su posterior tratamiento.
En el caso que se exceda un tiempo límite de espera de la respuesta se considera timeout (fuera de tiempo) y se trata esta circunstancia.
El proceso de Timeout se compone de 3 acciones, la de ejecución del Timer + dos que lo gobiernan
• INI_TIMER_OUT: Después de enviar el comando, habilitaremos el timer que provocará que una variable timeout_cont se actualice cada segundo.
• TIMER Cuando dicha variable timeout_cont tome el valor 70 (segundos), timeout
será cierto y saldremos del bucle de espera de la respuesta.
• TIME_OUT. Una vez fuera del bucle debemos comprobar si la salida se produjo por timeout. Se deshabilitará el timer y se reiniciará el contador hasta una nueva llamada. Se tratará el caso de que se haya producido timeout.
Figura 5. Enviar Tramas
Comunicación Punto a Punto Vía Módem GSM Diagramas de Flujo
39
7.5 Espera De La Respuesta Completa
Dado que tenemos diferenciados 3 tipos de respuestas, la condición de obtención completa de la misma variará dependiendo de dicha respuesta. Los comandos que tienen el mismo formato de respuesta utilizaran todos ellos el mismo método de resolución. Los 3 métodos de tratamiento son los siguientes: Método a) ACCIÓN WAIT_RESULT_CODES
“FIN”
SI
NO
CONDICION= Instr(Len(str)+2,strBUFFER,vbCrLf)
DoEvents STRBUFFER
“INICIO”
Condicion Fin Respuesta
Esta acción es general a todos aquellos comandos AT cuya respuesta sigue el formato:
AT + instrucción + <parámetros> + Cr + CrLf + mensaje + CrLf
Se considera que se ha recibido toda la respuesta cuando se cumple la condición marcada.
Ésta consiste en saber si han llegado los 2 últimos caracteres de final de respuesta (CrLf) a partir del envío del comando y posterior al mensaje de la respuesta.
La función Instr (inicio, cadena de caracteres, texto a buscar) realizará la comprobación, devolviendo la posición donde encontró la similitud, en caso contrario devuelve 0.
La variable strBUFFER se actualiza cada vez que se produce el evento OnComm, y se activa la propiedad evRECEIVED (llegada de un nuevo carácter al puerto serie).
Figura 6. Metodología tipo a)
Comunicación Punto a Punto Vía Módem GSM Diagramas de Flujo
40
Método b)
“INICIO”
“FIN”
SI
NO Condicion Fin Respuesta
CONDICION= vbCrLf + ”OK” + vbCrLf
straux=strBUFFER Right(straux,8)
DoEvents STRBUFFER
Método utlizado para la comprobación de respuestas por parte del módem a
aquellos comandos en cuya respuesta pueda haber diferentes líneas de mensaje siguiendo el formato que presentamos a continuación: AT + instrucción + <parámetros> + Cr + CrLf + mensaje1 + CrLf + + mensaje2 + CrLf + ... + mensajeX + CrLf + CrLf + “OK” + CrLf
Cuando los últimos 8 caracteres se correspondan a CrLf + CrLf +“OK”+CrLf, se considera que se ha recibido completamente la respuesta y podemos tratar la misma.
Las acciones implementadas para la ejecución de los comandos AT con este tipo de respuesta son específicas para cada comando, porque no se ha encontrado formato general, ya que pueden tener varios tipos de respuesta además de éste (respuesta tipo A si el mensaje es de error).
Por tanto, la única manera de comprobar ambos formatos de respuesta en la misma acción, es consultar por un lado mediante el método b) y si el resultado no es satisfactorio comparar la totalidad de la respuesta con el mensaje hipotéticamente esperado (método c)
Figura 7. Metodología tipo b)
Comunicación Punto a Punto Vía Módem GSM Diagramas de Flujo
41
Método c)
Considerar que ha llegado la totalidad de la respuesta cuando coincida exactamente con una de las respuestas posibles.
No se realiza un tratamiento a la respuesta sino que se compara en su totalidad. Un ejemplo claro es la acción PIN CONTROL, no podemos utilizar ninguno de los
dos métodos anteriormente mencionados ya que el formato de la respuesta no esté definido, puede tomar diferentes formatos.
STRBUFFER= cond X, donde condX puede tomar estos valores condX = str(trama enviada)+CrLf+mensaje1+CrLf condX = str(trama enviada)+CrLf+mensaje1+CrLf+CrLf+mensaje2+CrLf
Cond 1
TRATAR Condicion 4
ElseCase
Cond 2
TRATAR Condicion 1
TRATAR Condicion 2
TRATAR Condicion 3
strBUFFER ?
Cond 3 Cond 4
DoEvents STRBUFFER
...
...
Figura 8. Metodología tipo c)
Comunicación Punto a Punto Vía Módem GSM Diagramas de Flujo
42
Método d) NOTIFICACIONES (POLLING)
También destacar las notificaciones que nos envía el módem cuando se recibe una llamada o un nuevo mensaje de texto.
Son respuestas que debemos comprobar mediante polling cada vez que se reciban
caracteres al puerto serie. Dado que son notificaciones específicas y definidas, debemos comparar el texto recibido con dichas notificaciones:
CrLf + RING + CrLf en caso de llamada entrante, y CrLf + "+CMTI: " + mem3 + ",1" + CrLf en caso de recepción de nuevo mensaje
GENERACIÓN DEL EVENTO ONCOMM
NEW SMS (llegó msg?)
“INICIO”
EvReceived Recibido caracter
“FIN”
Read Buffer (strBUFFER)
PROPIEDAD? Otras
TRATAR PROPIEDAD
RING (llamada?)
Figura 9. Tratamiento Polling
Comunicación Punto a Punto Vía Módem GSM Diagramas de Flujo
43
7.6 Tratar Respuesta (Procedimiento Treat_Responses)
TRATAR “ERROR”
“INICIO”
TRATAR “OK”
“FIN”
OK ERROR Results Code?
TREAT_RESPONSES es el procedimiento de tratamiento de la respuesta común a
todos aquellos comandos cuyo formato de respuesta es AT + instrucción + <parámetros> + Cr + CrLf + mensaje + CrLf, pero la acción que realiza dicho tratamiento es específica para cada uno de ellos,
llevando cada una como nombre el del comando AT para facilitar la asociación y comprensión.
A partir de la respuesta completa, la funcion RESULTS_CODE discrimina tanto la
secuencia enviada por el usuario como los caracteres de control y de separación (Cr,Lf) y devuelve el mensaje.
Con la parte importante de la respuesta, el mensaje, realizaremos un tratamiento conforme el mismo.
Destacar que la mayoría de comandos sólo disponen de la respuesta OK y ERROR
de confirmación o error de la llegada de la trama, aunque podemos comprobar que en otros comandos también existe alguno de los mensajes CONNECT, BUSY, NO CARRIER,+CME: INCORRECT PASSWORD,BLOCKED,...
En futuros diagramas podrá encontrar el siguiente bloque:
Esto responde a que el tratamiento de la respuesta al envio anterior del comando se
efectúa según la metodología TREAT_RESPONSE. Obviamente cada comando tendrá un tratamiento a los resultados diferente y por ello se especifica el nombre de la acción que se ejecuta (del mismo nombre que el comando enviado).
TREAT_RESPONSE NOMBRE ACCION
Figura 10. Tratar Respuesta
Figura 11. Bloque TREAT_RESPONSE
Comunicación Punto a Punto Vía Módem GSM Diagramas de Flujo
44
7.7 Configuración Del Puerto Serie
Establecer Configuración
AbrirPuerto
No
CerrarPuerto
Abierto? Si No
Ok
Msg Error
Si
Msg Error ABRIR CERRAR
PrepararTrama ”AT+CMEE”
SALIR
“FIN”
“INICIO”
Botón?
Controlar el código de acceso
Cerrado?
TRAMA
TREAT RESPONSE
M.EQUIP.ERROR
Mediante las diferentes listas desplegables debemos configurar el puerto serie en
cuanto a su ubicación, velocidad, paridad, bits de datos y bits de parada. Queda reflejada la configuración anterior mediante el registro de Windows y cabe
la posibilidad de acceder a una predeterminada. Una vez aceptados los cambios podemos proceder a la apertura el puerto.
Se realiza tratamiento de errores en cuanto a la apertura y el cierre del puerto, si
queremos modificar algun parámetro antes debe estar éste cerrado. Una vez abierto, pulsando OK se envían diferentes tramas, una de configuración
AT+CMEE (el mensaje de error, en caso de que se produjera, se presenta mediante un formato explicativo, no numérico) y una de control de acceso AT+CPIN? (que determina el estado del código de bloqueo de la tarjeta SIM).
Figura 12. Configurar Puerto Serie
Comunicación Punto a Punto Vía Módem GSM Diagramas de Flujo
45
7.8 Control Del Código De Acceso (Acción PIN_CONTROL)
“INICIO”
...Sim PIN...
Introducir Tarjeta + ACEPTAR
NO
SI ElseCase
...Sim PUK... ...READY... ...Sim Not Inserted...
PrepararTrama ”AT+CPIN?”
CARGAR FORM PIN. Aux=1
CARGAR FORM PUK. Aux=1
CARGAR FORM MENU. Aux=1
strBUFFER ?
“FIN”
Timeout?
NO TRATAR TIMEOUT
SI
Aux=1 or Timeout
DoEvents STRBUFFER
SEND
COMMAND
Mediante la trama AT+CPIN? se comprueba el estado del código de acceso. Se prepara la trama, se envía el comando (mediante la acción SEND_COMMAND)
y se espera a obtener la respuesta completa para su posterior tratamiento.
El sistema de esperar a la respueta completa sigue la metodología tipo c) explicada anteriormente. No finalizará hasta que no coincida exactamente con una de las 4 posibles respuestas (se opta por este método, ya que se combinan diferentes formatos de respuesta y no es viable otra forma de proceder), o en el caso de que se produzca Error de Tiemout. La respuesta nos indica
• si es necesario el código PIN (en cuyo caso accederemos al formulario de introdución de dicho código),
• si es necesario el código PUK (accederemos a otro formulario donde se nos reclamará este código),
• si no es necesario ningun código y el sistema ya está READY (se accede al menú principal directamente)
• o si por el contrario es necesario INTRODUCIR LA TARJETA (una vez introducida se hará una rellamada a esta acción).
Figura 13. Control del Código de Acceso (PIN_CONTROL)
Comunicación Punto a Punto Vía Módem GSM Diagramas de Flujo
46
7.9 Formulario De Introducción Del Código Pin
“INICIO”
“FIN”
OK
Text_PIN Boton?
Boton? Salir
Salir
Introducir código PIN
TRAMA
TREAT RESPONSE PIN_CODE
PrepararTrama ”AT+CPIN”
En este formulario introducimos el código PIN.
El código PIN (personal identification number) es un código de seguridad que se requiere cuando queremos acceder a los servicios de comunicación que la operadora ofrece.
Se envía la trama correspondiente (AT+CPIN = ”PIN” + Cr) y se trata la respuesta.
Existe la posibilidad de salir del programa si desconocemos el código PIN, para evitar un posible bloqueo de la tarjeta SIM.
Figura 14. Formulario Código PIN
Comunicación Punto a Punto Vía Módem GSM Diagramas de Flujo
47
7.10 Tratar Respuesta Introducción De Código Pin (Acción Pin_Code)
“INICIO”
Cargar Form MENU
“FIN”
OK SIM PUK Results Code?
Recargar Form PIN
Incorrect Psw
Cargar Form PUK
Tratamiento de la respuesta.
Dependiendo de la validez del código PIN introducido podemos encontrarnos con 3 tipos de respuesta: OK Código correcto. Accederemos al menú principal. +CME ERROR: Incorrect password Código incorrecto. Tenemos la posibilidad de introducirlo de nuevo. +CME ERROR: SIM PUK required: Hemos introducido erróneamente 2 veces el código PIN. Accederemos al formualrio 03 con el fín de introducir el código PUK.
Figura 15. Acción PIN_CODE
Comunicación Punto a Punto Vía Módem GSM Diagramas de Flujo
48
7.11 Formulario De Introducción Del Código PUK
Introducir código PUK
“INICIO”
“FIN”
OK
Text_PUK,Text_PIN Boton?
Boton? Salir
Salir
Introducir código PIN
TRAMA
TREAT RESPONSE PUK_CODE
PrepararTrama ”AT+CPIN”
En este formulario introducimos el código PUK y un nuevo código PIN.
El código PUK (personal unlock code) es un segundo código de seguridad que se requiere cuando se ha introducido erróneamente 2 veces el código PIN.
Se envía la trama correspondiente (AT + CPIN = ”PUK , ”NUEVO PIN” + Cr ) y se trata la respuesta.
Existe la posibilidad de salir del programa si no conocemos el código PUK, con tal de no bloquear la tarjeta SIM definitivamente
Figura 16. Formulario Código PUK
Comunicación Punto a Punto Vía Módem GSM Diagramas de Flujo
49
7.12 Tratar Respuesta a la Introducción De Código PUK (PUK_Code)
“INICIO”
“FIN”
OK BLOCKED Results Code?
Incorrect Psw
END (salir del programa)
Cargar Form MENU
Msg ERROR
Recargar Form PUK
Tratamiento de la respuesta.
Dependiendo de la validez del código introducido podemos encontrarnos con 3 tipos de respuesta: OK y accederemos al menú principal +CME ERROR: Incorrect password Contraseña incorrecta y tendremos la posibilidad de introducirlo de nuevo. BLOCKED hemos introducido erróneamente 8 veces el código PUK. Aparece un mensaje de error y salimos del programa ya que la tarjeta SIM ha quedado bloqueada por la operadora que presta el servicio.
Figura 17. Acción PUK_CODE
Comunicación Punto a Punto Vía Módem GSM Diagramas de Flujo
50
7.13 Menú Principal
SMS
CERRAR FORMULARIOS
CARGAR FORM TRANSFER. CSD
AGENDA
CARGAR FORM Registro Llamadas
“FIN”
CALC
CSD LLAMADAS ACERCA del
MODEM
Cargar Config. Del Programa (1 vez)
CARGAR FORM AGENDA
CARGAR Aplicación CALC
SALIR
“INICIO”
BOTON ?
CARGAR FORM INFO MODEM
CARGAR FORM MENSAJES
Pantalla principal del programa, es la base del mismo.
Cerraremos los formularios de procedencia.
La 1ª vez que accedemos al menú principal se carga la configuracion del programa,
a partir de la lectura de un archivo (que conserva la última configuración guardada por el usuario) o de una configuración predeterminada (en el caso de no existir dicho archivo). Se envían una serie de tramas configurando los mensajes, el formato de llamada, etc
Mediante la pulsación de diferentes botones accederemos a los submenús que lo componen: Agenda, Mensajes, Transferencia De Datos, Registro De Llamadas, Información Del Módem y Calculadora.
Existe la posibilidad de dejarlo en Standby (apareciendo el icono en la barra de tareas) a la espera de nuevas acciones.
Figura 18. Formulario Menú Principal
Comunicación Punto a Punto Vía Módem GSM Diagramas de Flujo
51
7.14 Cargar La Configuración Del Programa
“FIN”
TRAMA
TREAT RESPONSE
SET_CLOCK
PrepararTrama ”AT+CCLK”
“INICIO”
...
PREFERRED MESSAGE STORAGE
La primera vez que iniciemos el formulario del menú principal realizaremos la carga de la configuración del programa. Mediante una serie de envíos consecutivos de tramas (envío de comando + espera y tratamiento de la respuesta) se realizará dicho establecimiento de los parámetros de funcionamiento de nuestro programa acorde a nuestras necesidades.
El procedimiento consiste en recoger del fichero (o de una predeterminada guardada en el mismo código) los valores del registro config (creado por el programador) utilizados en la última ocasión.
Posteriormente se prepararan las tramas, para, a continuación, enviarlas y tratar su
respuesta. Una vez finalizado este proceso, se procede a repetir éste mismo para la siguiente
instrucción.
Esta configuración responde tanto a parámetros de los mensajes, como a la transferencia de datos o llamada, así como del reloj del sistema, metodología de la notificación de nuevos mensajes, etc.
Presentamos a continuación dichos parámetros o comandos implementados en la carga inicial: RELOJ
• Clock "AT+CCLK" (configura la hora y la fecha actual, referente importante para el conocimiento de la recepción de llamadas u mensajes)
Figura 19. Cargar Configuración del Programa
Comunicación Punto a Punto Vía Módem GSM Diagramas de Flujo
52
AGENDA • Phonebook Storage, "AT+CPBS" (establece el lugar de almacenamiento de la
agenda telefónica: Módem o tarjeta SIM) MENSAJES
• Service Centre Address, "AT+CSCA" (establece el número del centro de mensajes, que canaliza el envío de los mensajes)
• Message Format, "AT+CMGF" (establece el tipo de mensajes: texto o binario) • Message Text Time Max, "AT+CSMP" (se configura el tiempo máximo de
almacenamiento de mensajes) • Preferred Message Storage, (selecciona las diferentes memorias para las
diferentes acciones con los mensajes) NOTA: al tener un formato de respuesta que combina tipo b) y c) se crea una acción especifica PREFERRED_MSG_STORAGE, donde se prepara y se trata la respuesta en la misma acción
• New Message Indication, "AT+CNMI” configura el modo de alerta al recibir un nuevo mensaje
LLAMADA-TRANSFERENCIA DE DATOS
• Select Dialling, “ATT” o “ATP” (selecciona el modo de llamada: tono o pulsos) • Automatic Answer Control, "ATS0" (configura el modo de respuesta de llamada:
manual o automático) • Select Bearer Service, "AT+CBST" configura la velocidad de la conexión • Escape Sequence Character, "ATS2" configura el carácter de escape del modo
online data mode
Comunicación Punto a Punto Vía Módem GSM Diagramas de Flujo
53
7.15 Registro De Llamadas
“INICIO”
BOTON ? Recibidas
CARGAR FORMULARIO 9
Call_reg=”RC” Preparar TRAMA
“FIN”
Enviadas Perdidas Menu
PhoneBook READ
Call_reg=”DC” Preparar TRAMA
Call_reg=”MC” Preparar TRAMA
TRAMA
TREAT RESPONSE
Ph_CallStorage
Mediante la pulsacion de 3 botones se mostrarán: Llamadas RECIBIDAS,
ENVIADAS o NO CONTESTADAS, según corresponda al botón pulsado. Se prepara la trama oportuna a cada una de ellas, configurando mediante el
parámetro call_reg (distintivo entre ambas), el registro de la memoria del módem a leer: AT+CPBS=”RC” para consultar llamadas recibidas AT+CPBS=”DC” para consultar llamadas enviadas AT+CPBS=”MC” para consultar llamadas no contestadas
Se envía mediante la acción TRAMA y se trata la respuesta.
Posteriormente se ejecuta la acción PHONEBOOK READ, que es la acción que
realizará la lectura del registro de llamadas y presentará los resultados en el caso de que los hubiera. Dicha acción se puede ver detallada en la pág.siguiente.
Se retorna al MENÚ principal cuando haya finalizado la consulta, previo accionamiento del botón correspondiente.
Figura 20. Formulario Registro de Llamadas
Comunicación Punto a Punto Vía Módem GSM Diagramas de Flujo
54
7.16 Lectura De La Memoria Del Módem (Acción Phonebook_Read)
“INICIO”
“FIN”
NO
SI
Aux=1 or Timeout
SEND COMMAND
Timeout?
NO
SI
TRATAR TIMEOUT
NO
Cond1
StrBuffer?
DoEvents STRBUFFER
“ERROR en la Trama” (aux=1)
“No Resultados” (aux=1)
NO
SI
Straux=cond3?
En Busqueda Agenda (aux=1)
1 2
i?
En Form Llamadas (aux=1)
OTRA
Cond2
straux=strBUFFER Right(straux,8)
SHOW RESULTS
Esta acción permite la lectura de la memoria del módem. Éste tiene varios registros destinados cada uno de ellos a un almacenamiento de información determinada.
Por lo tanto, antes de realizar una lectura, debemos especificar que registro queremos leer (comando AT+CPBS). Esta configuración se realizará previamente a la llamada de esta acción.
Nosotros implementaremos el acceso al registro de las llamadas y a la agenda. Como la metodología es la misma en ambos casos, hemos implementado una sola
acción que tendrá acceso a cualquiera de los registros. De este modo, pasaremos como parámetro el tipo de lectura queremos realizar
i=1 será para leer el registro de llamadas e i=2 para la agenda telefónica.
Figura 21. Acción PHONEBOOK_READ
Comunicación Punto a Punto Vía Módem GSM Diagramas de Flujo
55
El proceso consistirá en enviar la trama correspondiente y esperar la respuesta completa pars su posterior tratamiento.
Esta acción combina 2 tipos de respuesta y debemos usar metodologías diferentes.
Metodología tipo c. Comparar respuesta completa (strBUFFER) a una determinada: strBUFFER = str + vbCrLf + "OK" + vbCrLf ? (Cond1) Se obtiene esta respuesta en el caso de que no haya resultados a la petición de búsqueda requerida strBUFFER = str + vbCrLf + "ERROR" + vbCrLf ? (Cond2) en el caso de error en el envío del comando.
Si no coincidiera con ninguna de estas 2 condiciones deberíamos realizar otra comprobación de la respuesta. Se implementa, para este segundo análisis, la metodología b (ya que si existen resultados, pueden obtenerse diferentes líneas en la respuesta). Por tanto debemos leer los 8 últimos caracteres de la respuesta y comparar con la condición 3. straux = vbCrLf + vbCrLf + "OK" + vbCrLf? (Cond3)
En este caso debemos utilizar la variable i, pasada como parámetro, como discriminatoria para conocer quien realizó la petición de lectura de los registros del módem.
Si i = 1 se muestran los resultados mediante la función SHOW_RESULTS en el formulario del registro de llamadas, mientras que
Si i=2 se mostrarán los resultados obtenidos en el formulario de resultados de la agenda telefónica.
Como en el resto de acciones anteriores se tratara la condición de tiemout al salir del bucle de espera de la respuesta, por si se hubiese producido dicha situación.
Comunicación Punto a Punto Vía Módem GSM Diagramas de Flujo
56
7.17 Menú De La Agenda Telefónica
“INICIO”
Busq Nombre
CARGAR FORMULARIO 9
CARGAR FORMULARIO 10
Configurar Memoria (ME-SM)
CARGAR FORMULARIO 11
Busq Posicion Insertar New
Configuración memoria
“FIN”
BOTON ?
Se puede seleccionar (mediante un botón de opción) tanto la memoria del teléfono como la de la tarjeta SIM para realizar las funciones asociadas, que son
• Búsqueda de un número de teléfono por su nombre o inicial • Búsqueda de un número de teléfono por su posición en la agenda o visualizar un
rango determinado • Insertar un nuevo número al listado existente
Para ello se debe acceder a los diferentes submenús pulsando el botón correspondiente.
Figura 22. Formulario Agenda Telefónica
Comunicación Punto a Punto Vía Módem GSM Diagramas de Flujo
57
7.18 Búsqueda Por Nombre En La Agenda Telefónica
“FIN”
OK
Text
Boton?
Boton?
Salir
Salir
Boton?
Ocultar Resultados Anteriores
Recoger TEXTO BUSQUEDA
Salir
Nueva Búsqueda
PhoneBook READ
TRAMA
TREAT RESPONSE
PhBook Storage
PrepararTrama ”AT+CPBF”
PrepararTrama ”AT+CPBS”
“INICIO”
Se inicia este formulario enviando la configuración correspondiente a la memoria
escogida para realizar la consulta (ME o SIM). (AT+CPBS).
Figura 23. Formulario Búsqueda por nombre
Comunicación Punto a Punto Vía Módem GSM Diagramas de Flujo
58
Posteriormente se introduce el texto de búsqueda que puede ser una cadena alfanumérica o la inicial del nombre a buscar (de este modo aparecerán todas las entradas que se correspondan que empiecen por ese carácter).
Al pulsar el botón OK se ejecutará la acción PHONEBOOK_READ que será la
encargada de realizar la consulta y presentar resultados en el caso de que los hubiera. Se pueden realizar tantas búsquedas como se desee. PULSANDO NUEVA
BÚSQUEDA, se vaciará el texto de búsqueda así como la pantalla de los resultados de búsquedas anteriores.
Al salir, accederemos al menú principal o al formulario que hizo la llamada (enviar
SMS, o transferencia de datos).
Comunicación Punto a Punto Vía Módem GSM Diagramas de Flujo
59
7.19 Búsqueda Por Posición En La Agenda Telefónica
“INICIO”
“FIN”
OK
Text
Boton?
Boton?
Salir
Salir
Boton?
O cultar Resultados Anteriores
Recoger RANGO BUSQUEDA
Salir
Nueva Búsqueda
PhoneBook READ
TRAMA
TREAT RESPONSE
PhBook Storage
PrepararTrama ”AT+CPBR”
PrepararTrama ”AT+CPBS”
Este formulario actúa de manera idéntica al de la búsqueda por nombre. La única
diferencia radica en el motor de búsqueda, que en éste se realiza por posición o rango. A partir de un valor númerico pasado como parámetro, se presenta a modo de
resultado la entrada (nombre y numero de teléfono) correspondiente a dicha posición que ocupa en la memoria.
Si se introduce un rango se mostrarán todas las entradas comprendidas entre esos valores.
Figura 24. Formulario Búsqueda por Posición
Comunicación Punto a Punto Vía Módem GSM Diagramas de Flujo
60
7.20 Insertar Nueva Entrada En La Agenda Telefónica
“FIN”
OK
Boton?
Cancelar
TREAT RESPONSE
PhoneBookwrite
TextBox’s
Cancelar
TRAMA
TRAMA
TREAT RESPONSE
PhBook Storage
PrepararTrama ”AT+CPBS”
“INICIO”
RELLENAR CAMPOS
Boton?
Inicialmente se carga la memoria de la agenda (módem o SIM) seleccionada en el
menú de la agenda (AT+CPBS). Posteriormente se rellenan los campos correspondientes a posición (si se deja en
blanco ocupará la primera posición libre de la memoria), número de teléfono y nombre del mismo.
Al aceptar estos campos, se enviará la trama correspondiente (AT+CPBW) que establecerá los cambios si no se produce algún error de envío de trama (en cuyo caso se tratará con la acción correspondiente a este comando).
Cabe la posibilidad de cancelar el proceso y retornar la menú de la agenda.
Figura 25. Formulario Insertar Nueva Entrada
Comunicación Punto a Punto Vía Módem GSM Diagramas de Flujo
61
7.21 Menú Mensajes SMS
“INICIO”
Escribir
CARGAR FORMULARIO 9
“FIN”
Leer
Configuracion
Menu
CARGAR FORM ESCRIBIR (16)
CARGAR FORM LEER MSG (15)
CARGAR FORM CONFIG (14)
BOTON ?
Este es el formulario del menú de los mensajes SMS. Desde él, pulsando el botón correspondiente accederemos a los diferentes submenús
• Configuración de los mensajes • Lectura de mensajes (borrado, y reenviado) • Escritura y envío de mensajes
Finalmente retornaremos al menú principal.
Figura 26. Menú Mensajes
Comunicación Punto a Punto Vía Módem GSM Diagramas de Flujo
62
7.22 Configuración De Los Mensajes SMS
“INICIO”
Modificar Memoria Msgs
VISUALIZAR CONFIG.
MODIFICAR PARAMETROS
MODIFICAR PARÁMETROS
“FIN”
Modificar T.permanencia
Modificar Formato Msg
Modificar Nª Centro Servicio
DESHABILITAR CONTROLES
SMS-MENU
HABILITAR CONTROLES
MODIFICAR PARAMETROS
MODIFICAR PARAMETROS
OK OK OK OK
TRAMA
TRAMA
TRAMA
TREAT RESPONSE
SERV_CENTRE
TREAT RESPONSE
MSG_TIME_MAX
TREAT RESPONSE
MSG_FORMAT
HABILITAR CONTROLES
PREPARAR TRAMA AT+CSMP
HABILITAR CONTROLES
HABILITAR CONTROLES
PREPARAR TRAMA AT+CMGF
PREPARAR TRAMA AT+CSCA
BOTON ?
PREFERRED MESSAGE STORAGE
Este formulario controla el envío de comandos que configuran los mensajes.
Al cargarse éste, se muestra la configuración que existe actualmente. Para modificar alguno de los 4 parámetros existentes, debemos pulsar el botón
modificar específico de cada uno de ellos. Con esta acción se habilita el resto de controles y se posibilita la modificación.
Una vez realizados los cambios oportunos, pulsamos OK, que tiene asociado el código de recoger los cambios obtenidos en el panel, preparar la trama de envío y enviarla.
Posteriormente tratará la respuesta. Por último se volverán a deshabilitar los controles con tal de preservar posibles
cambios no deseados.
Figura 27. Configuración de los Mensajes
Comunicación Punto a Punto Vía Módem GSM Diagramas de Flujo
63
Los parámetros de configuración que se han implementado son
• Selección de la memoria de almacenaje • Tiempo máximo de permanencia en el centro servidor antes del envío • Formato del mensaje (texto o binario) • Número del centro de servicio
Todos ellos siguen el formato de envío TRAMA y TREAT_RESPONSE, a
excepción del primero, para el cual se ha generado una acción específica (PREFERRRED_MESSAGE_STORAGE) ya que combina varios tipos de respuesta. Dicha acción se puede ver detallada en la pág.siguiente.
Comunicación Punto a Punto Vía Módem GSM Diagramas de Flujo
64
7.23 Acción Preferred Message Storage
“INICIO”
NO
SI
“FIN”
PrepararTrama ”AT+CPMS”
DoEvents STRBUFFER
Tratar Envío Correcto (aux=1)
straux=strBUFFER Right(straux,8)
NO
SI
Tratar Error Envío (aux=1)
NO
SI
Timeout?
NO
SI
Straux=cond1?
StrBuffer=cond2?
TRATAR TIMEOUT
Aux=1 or Timeout
SEND COMMAND
Mediante esta acción enviamos la trama de configuración de la memoria de los mensajes. Comprobamos que llegue correctamente la respuesta y se trata el resultado.
Existen 3 tipos de memorias: la primera es la que permite la lectura, borrado y
reenviado de mensajes, la segunda es la que contiene los mensajes escritos pero no enviados, mientras que la tercera es donde se almacenan los nuevos mensajes recibidos. Estas memorias pueden tomar los valores de módem o tarjeta SIM.
Se prepara la trama con los diferentes parámetros (las 3 memorias) y se procede al envío. Realizamos una acción específica para el envío, recepción y tratamiento de la respuesta, ya que ésta ultima se nos presenta de forma variable :
• AT+CPMS + parámetros + CR +CRLF+ mensaje +CRLF+CRLF+ OK +CRLF (para denotar que llegó esta respuesta utilizamos straux= CrLf+ CrLf +OK+ CrLf ?)
• AT+CPMS + parámetros + CR +CRLF+ ERROR +CRLF (debemos comprobar si se corresponde con la respuesta contenida en StrBUFFER) Así, debemos considerar 2 tipos de respuestas y, por tanto, un tratamiento especial.
Figura 28. Acción PREFERRED_MSGE_STORAGE
Comunicación Punto a Punto Vía Módem GSM Diagramas de Flujo
65
7.24 Leer, Borrar y Reenviar SMS Desde Memoria
“INICIO”
Leer Anterior
CARGAR FORM ENVIAR (17)
“FIN”
Reenviar Borrar
Leer Siguiente
Menu SMS
READMsg (true)
READMsg (false)
READMsg (true)
TRAMA
BOTON ?
Index++ (Variable Lectura)
Index-- (Variable Lectura)
Preparar TRAMA AT+CMGD
TREAT RESPONSE
DELETE
Este formulario implementa además de la lectura de mensajes otras acciones como borrar y reenviar mensajes desde la memoria.
Al iniciarse se ejecuta la acción READ_MESSAGE (Dicha acción se puede ver detallada en la pág. siguiente) que nos presentará por pantalla el primer mensaje de la memoria1 (va desplazándose posición a posición hasta que encuentra un mensaje o ha revisado la memoria completa).
La variable index contendrá la posición del mensaje actual, y ésta nos será útil para posteriores aplicaciones.
Se podrá tratar ese mensaje,
• borrándolo (al pulsar el botón borrar se envía el comando específico AT+CMGD, que borra la posición de memoria que especifiquemos, contenida en index)
• reenviándolo (se cargará el formulario 17 de envío de mensaje, para introducir el número del destinatario y el posterior envío a través de la trama AT+CMSS).
La función de lectura se ve mejorada con la posibilidad de acceder a los mensajes
de forma secuencial en ambos sentidos, hacia adelante o hacia atrás, lo que facilita en gran medida el acceso a ellos. Pulsando siguiente o anterior incrementaremos o decrementaremos index, desplazándonos así por las diferentes posiciones de memoria.
Figura 29. Leer, Borrar y Reenviar Mensajes
Comunicación Punto a Punto Vía Módem GSM Diagramas de Flujo
66
7.25 Leer Mensaje (Acción Read_Message)
“INICIO”
NO
SI
“FIN”
PrepararTrama ”AT+CPMS”
DoEvents STRBUFFER
SHOW RESULTS (aux=1)
straux=strBUFFER Right(straux,8)
NO
SI
“Posición vacia” (aux=1)
NO
SI
Timeout?
NO
SI
Straux=cond1?
StrBuffer=cond2?
TRATAR TIMEOUT
Aux=1 or Timeout
Avanzar o Retroceder index
SEND COMMAND
Esta acción realiza la lectura de los mensajes. Inicialmente se prepara la trama a enviar, que consiste en el comando AT+CMGR+
la posición de memoria a leer (variable index). Se envía dicha trama y se espera respuesta completa.
Si los últimos 8 caracteres de la respuesta se corresponden con la condición 1
(vbCrLf + "OK" + vbCrLf ), en la posición index sí hay mensaje de texto y se muestra su contenido mediante la función SHOW_RESULTS. Se usa esta metodología, tipo b), ya que un mensaje de texto puede componerse de varias líneas.
Si la posición requerida se encontrase vacía se cumpliría la condición 2 strBUFFER = str + vbCrLf + "+CMS ERROR: 500" + vbCrLf Or _ strBUFFER = str + vbCrLf + "+CMS ERROR: 321" + vbCrLf
Figura 30. Acción READ_MESSAGE
Comunicación Punto a Punto Vía Módem GSM Diagramas de Flujo
67
Se realiza una comparación de la respuesta en su totalidad con las posibles respuestas de error.
En este caso el tratamiento consistiría en avanzar o retroceder posiciones hasta encontrar una posición que contenga un mensaje y mostrarlo, o hasta que recorriéramos todas las posiciones de la memoria.
El sentido de lectura de los mensajes es determinado por la variable pasada por
parámetro Front, que determina si el recorrido por la memoria se produce en sentido ascendente o descendente, incrementando o decrementando el valor de index.
Comunicación Punto a Punto Vía Módem GSM Diagramas de Flujo
68
7.26 Formulario Escribir Mensajes (Guardar o Enviar)
“FIN”
Guardar Enviar
Boton?
Cancelar
SEND OR WRITE MSG
PrepararTrama ”AT+CMGW”
“INICIO”
CARGAR FORM ENVIAR (17)
ESCRIBIR TEXTO
El formulario consta de una caja de texto en la cual escribimos el texto del mensaje.
Éste puede ser guardado en la memoria (en la primera posición libre) o bien ser enviado. Cuando pulsamos guardar, se prepara la trama AT+CMGW y se ejecuta la acción
SEND_OR_WRITE_MESSAGE (dicha acción se puede ver detallada en la pág. siguiente). Si queremos enviar, accederemos al formulario 17, en el que especificaremos el
número del destinatario primero y se enviará la trama correspondiente después. Se puede cancelar cualquiera de estos procesos y retornaremos al menú de los
mensajes.
Figura 31. Formulario Escribir Mensajes (guardar-enviar)
Comunicación Punto a Punto Vía Módem GSM Diagramas de Flujo
69
7.27 Enviar o Guardar (Acción SEND_OR_WRITE _MESSAGES)
“INICIO”
NO
SI
“FIN”
DoEvents STRBUFFER
Ready Par a Enviar Texto (aux=1)
NO
SI
Timeout?
NO
SI
StrBuffer=cond1?
TRATAR TIMEOUT
Aux=1 or Timeout
SEND COMMAND
PrepararTrama TEXTO+CrtlZ
NO
SI
Aux=1 or Timeout
SEND COMMAND
Timeout?
NO
SI
TRATAR TIMEOUT
NO
straux=strBUFFER Right(straux,8)
NO
SI
Straux=cond2?
DoEvents STRBUFFER
“SMS Enviado“ (aux=1)
1 2
i?
“SMS Guardado“ (aux=1)
NO
SI
Straux=cond3?
“ERROR Enviar“ (aux=1)
1 2
i?
“ERROR Guardar“ (aux=1)
Accion común tanto para el envío como para el almacenamiento de un mensaje. Se opta por esta acción compartida ya que los 2 comandos se componen de una primera parte idéntica y un tratamiento similar en cuanto a la obtención de la respuesta completa. Por tanto, sólo deberemos discriminar en la parte final qué comando hizo la llamada para hacer un tratamiento específico para cada uno.
Figura 32. Acción SEND_OR_WRITE_MESSAGES
Comunicación Punto a Punto Vía Módem GSM Diagramas de Flujo
70
En un principio se envía el comando, ya sea AT+CMGW o AT+CMGS, dependiendo de si queremos guardar o enviar el mensaje respectivamente. También deberemos especificar la posición de memoria donde se almacenará (o omitirla y se colocará en la primera libre) y el número del destinatario al cual queremos enviar. Debemos esperar a que el módem responda
(Trama enviada) + vbCrLf + "> " + Chr(0)
indicativo de que el sistema esta listo para la recepción del texto. Dado que es una respuesta concreta, debemos esperar a que se produzca la coincidencia en su totalidad (metodología tipo c).
Una vez se haya obtenido dicha respuesta o se haya producido timeout mientras se esperaba la misma, se saldrá del bucle de espera, y se tratará la posible incidencia de timeout.
Posteriormente enviaremos la trama formada por el Texto del Mensaje + CRTL-Z (carácter de finalización del texto), y esperaremos la respuesta final del módem.
Esta puede acontecer de 2 formas, o un mensaje de error o de un correcto envío. Ambas las trataremos del mismo modo, leyendo los últimos 8 caracteres de la respuesta y comparándolas con las siguientes condiciones:
Condición2 = vbCrLf + vbCrLf + "OK" + vbCrLf El mensaje ha sido guardado o enviado correctamente, Condición3 = vbLf + "ERROR" + vbCrLf Ha ocurrido un error al guardar o enviar el mensaje.
El tratamiento a ambas respuestas será discriminado por la variable i (pasada como
parámetro) indicadora de si el comando a ejecutar era el almacenamiento (i=1) o envío (i=2) de mensajes.
Comunicación Punto a Punto Vía Módem GSM Diagramas de Flujo
71
7.28 Formulario Enviar Mensaje
“INICIO”
“FIN”
Num Destinatario
Escribir Msg
Salir
Agenda
Llamada desde?
Reenviar Msg
SEND OR WRITE MSG
TRAMA
TREAT RESPONSE Send Storage
PrepararTrama ”AT+CMSS”
CARGAR FORM AGENDA (08)
Boton?
Para realizar el envío debemos aportar el número de teléfono del destinatario con el
que se realizará la comunicación. Este número puede ser consultado en la agenda de teléfonos (a la cual se tiene acceso mediante un pulsador) o introduciéndolo manualmente.
El envío puede tener 2 formas de proceder:
• Si provenimos de la escritura de un mensaje, entonces ejecutaremos la acción
SEND_OR_WRITE_MESSAGE, la cual se encargará de construir la trama con los diferentes parámetros (texto, núm. destinatario), realizará el envío y tratará la respuesta.
• Si queremos reenviar un mensaje, entonces mediante la instrucción AT+CMSS y el
valor de index (posición en la memoria), enviaremos la trama y analizaremos posteriormente los resultados.
Figura 33. Formulario Enviar Mensaje
Comunicación Punto a Punto Vía Módem GSM Diagramas de Flujo
72
7.29 Formulario Transferencia De Datos CSD
Colgar
CARGAR FORM CONFIG. CSD
Dial
CARGAR FORM aGENDA
“FIN”
Aceptar Llamada
Opciones Agenda
Rechazar Llamada
MENU
“INICIO”
BOTON ?
TRAMA
TREAT RESPONSE
ATD
PrepararTrama ”ATD”
TRAMA
TREAT RESPONSE ANSWER
PrepararTrama ”ATA”
HANG UP
TRAMA
TREAT RESPONSE
HANGUPCALL
PrepararTrama ”AT+CHUP”
Este es el formulario destinado a realizar transferencias de datos. Se implementan distintos botones que tienen asociadas distintas funcionalidades.
De este modo tenemos ESTABLECER LLAMADA, que prepara la trama de envío
del comando ATD + número destinatario, se ejecuta la acción TRAMA que envía y espera la respuesta completa y finalmente se trata dicha respuesta obtenida.
Se puede acceder a la AGENDA también desde este formulario, para consultar el número del futuro interlocutor.
Si seleccionamos COLGAR, se ejecuta la acción HANG UP (se puede observar con más detalle en la página xxxx) con el objetivo de finalizar una comunicación, existente o en proceso de establecerse.
Mediante Aceptar llamada o Rechazar llamada, aceptamos o rehuimos la comunicación con una llamada entrante. Ambas actuaciones se componen de preparar la trama correspondiente (comandos ATA y AT+CHUP, respectivamente), ejecutar la acción TRAMA y tratar la respuesta obtenida.
Pulsando Opciones o menú, tendremos acceso al formulario de configuración de la transferencia de datos CSD o al menú principal respectivamente.
Figura 34. Formulario Transferencia de Datos
Comunicación Punto a Punto Vía Módem GSM Diagramas de Flujo
73
7.30 Finalizar Una Llamada, Colgar (Accion Hang Up)
“INICIO”
NO
SI
“FIN”
PrepararTrama ”ATH”
DoEvents STRBUFFER
NO
SI
Cond1
Cond2
Cond3
ElseCase
StrBuffer?
“Ll. Interrumpida “ (aux=1)
“Fin de Llamada” (aux=1)
Error Envío Trama (aux=1)
Aux=1 or Timeout
TRATAR TIMEOUT
Timeout?
SEND COMMAND
Con esta acción finalizaremos una llamada. En un principio enviaremos la trama ”ATH”, para posteriormente esperar y tratar la
respuesta obtenida. La respuesta puede presentarse de 3 formas: Cond1 = ATH +Cr + CrLf + OK + CrLf 'estamos en una conexión y la finalizamos Cond2 = ATH +Cr + CrLf + ERROR + CrLf ‘error en el intento de colgar Cond3 = CrLf + OK + vbCrLf ‘llamada interrumpida
Dado que son 2 formatos distintos, y a causa de la estructura de la última, no podemos implementar la metodología a. Así que debemos optar por el tipo c, esperar a que alguna de las respuestas coincida en su totalidad con alguna de estas tres condiciones, y posteriormente tratar la respuesta.
Figura 35. Acción HANG_UP
Comunicación Punto a Punto Vía Módem GSM Diagramas de Flujo
74
7.31 Transferencia De Datos CSD (“Connected”)
Colgar
GUARDAR T.RECIBIDO
Texto Enviar
“FIN”
Texto Recibido Modo
Comandos Modo en linea
“INICIO”
BOTON ?
ESCRIBIR TEXTO
MOSTRAR T.RECIBIDO
HANG UP
TRAMA
TREAT RESPONSE
ONLINEDATA
PrepararTrama ”ATO=0”
CommandMODE
ENVIAR
Una vez esté establecida la comunicación con el interlocutor, podremos realizar las siguientes acciones:
• Escribir texto y enviarlo, simplemente se coloca en el buffer de transmisión.
• Recibir texto y visualizarlo, realizando la lectura del buffer y mostrándolo por pantalla.
• Acceder al modo comandos, mediante la acción COMMAND MODE (la cual
podemos ver desarrollada en la página XXXX) se envía la secuencia de escape y se comprueba que la respuesta certifica que estamos en ese estado de funcionamiento.
• Para retornar al modo en línea debemos enviar el comando ATO (se repite el
proceso preparar trama, envío y espera de respuesta, tratamiento-confirmación del nuevo modo de operación).
• Finalizar la comunicación. Debemos colgar y se ejecutará la acción HANG UP. Se
debe recordar que debemos estar en modo comandos para que esta acción tenga efecto ya que sino enviaremos al interlocutor el comando como si de un dato se tratara.
• Posteriormente se pueden GUARDAR en un fichero de texto los datos recibidos.
Figura 36. Transferencia de Datos
Comunicación Punto a Punto Vía Módem GSM Diagramas de Flujo
75
7.32 Acceso Al Modo Comandos (Acción Command Mode)
“INICIO”
NO
SI
“FIN”
PrepararTrama +++AT (seqEsc)
DoEvents STRBUFFER
NO
SI
Cond1 Cond2
ElseCase
StrBuffer?
“error trama“ (aux=1)
“modo comando” (aux=1)
Aux=1 or Timeout
TRATAR TIMEOUT
Timeout?
SEND COMMAND
Para pasar de modo en línea a modo comando debemos enviar la trama +++AT
(denominada secuencia de escape donde + es el char(43), aunque es configurable). Posteriormente debemos esperar y tratar la respuesta. Dado que las posibles respuestas son
Cond1 = vbCrLf + "OK" + vbCrLf ‘acceso correcto al modo comandos Cond2 = vbCrLf + "ERROR" + vbCrLf ‘error al intentar acceder
no podemos hacer un tratamiento del tipo a, ya que la respuesta no contiene la instrucción enviada y por tanto es de longitud inferior para tratarla con la acción TRAMA
Así pues, utilizaremos un tipo c puro, que consistirá en comprobar si corresponde totalmente la respuesta obtenida con una de estas 2 posibles.
Figura 37. Acción COMMAND_MODE
Comunicación Punto a Punto Vía Módem GSM Diagramas de Flujo
76
7.33 Configuración De Parámetros Para La Transferencia CSD-HSCSD
“INICIO”
Modificar Velocidad Conexion
VISUALIZAR CONFIG.
MODIFICAR PARAMETROS
MODIFICAR PARÁMETROS
“FIN”
Modificar Modo Llamada
Modificar Carácter Escape
DESHABILITAR CONTROLES
CSD-MENU
HABILITAR CONTROLES
MODIFICAR PARAMETROS
MODIFICAR PARAMETROS
OK OK OK OK
TRAMA
TRAMA
TRAMA
TREAT RESPONSE
ESC_SEQ_CHAR
TREAT RESPONSE
ANSWER_MODE
TREAT RESPONSE
SEL_DIALLING
HABILITAR CONTROLES
PREPARAR TRAMA ATT/ATP
HABILITAR CONTROLES
HABILITAR CONTROLES
PREPARAR TRAMA ATS0
PREPARAR TRAMA ATS2
BOTON ?
Modificar Modo Respuesta
TRAMA
TREAT RESPONSE
BEARER_SERV
PREPARAR TRAMA AT+CBST
Se configuran los parámetros necesarios para la transferencia de datos CSD-
HSCSD. Al cargarse este formulario, se muestra la configuración que existe actualmente. Para modificar alguno de los 4 parámetros existentes, debemos pulsar el botón
modificar específico de cada uno de ellos.Con esta acción se habilita el resto de controles y se posibilita la modificación.
Una vez realizados los cambios oportunos, pulsamos OK, que realizará el proceso de recoger los cambios obtenidos en el panel, preparará la trama de envio y la enviará. Posteriormente tratará la respuesta.
Por último se volverán a deshabilitar los controles con tal de preservar posibles cambios no deseados.
Figura 38. Formulario Configuración Transferencia de Datos
Comunicación Punto a Punto Vía Módem GSM Diagramas de Flujo
77
Los parámetros de configuración que se han implementado son:
• Velocidad de conexión • Modo de llamada • Modo de Respuesta • Carácter de escape
Todos ellos siguen el formato de envío TRAMA y TREAT_RESPONSE
Comunicación Punto a Punto Vía Módem GSM Manual de Usuario
78
8. MANUAL DE USUARIO
Comunicación Punto a Punto Vía Módem GSM Manual de Usuario
79
MANUAL DE USUARIO 8.1 Introducción
Se presenta un pequeño manual explicativo de la aplicación programada. En él se contemplan las posibles acciones a realizar así como la asociación de éstas
a los controles de los formularios. De este modo será mucho más sencillo implementar una acción, ya que éstas están desglosadas por pasos mostrando imágenes de la aplicación e indicando que controles deben pulsarse en cada ocasión.
El manual se desglosará en 7 apartados
• Configuración Del Puerto Serie • Control De Códigos • Menú Principal • Agenda Telefónica • Mensajes De Texto (SMS) • Transferencia De Datos • Registro De Llamadas
Comunicación Punto a Punto Vía Módem GSM Manual de Usuario
80
8.2 Configuración Del Puerto Serie
Al iniciar el programa aparecerá esta pantalla:
Listas desplegables: Selección del puerto Velocidad Paridad Guarda los cambios Bits de información Bits de stop Muestra la config. predeterminada Abrir puerto serie Cerrar el puerto serie Salir del programa Acceder al módem Para configurar el puerto serie debe
• Seleccionar en las listas desplegables los valores adecuados. • Pulsar Aceptar Cambios, para que los cambios resten guardados. • Pulsar Abrir Puerto. • Pulsar OK.
Recuerde que para efectuar cambios en la configuración el puerto serie debe estar cerrado.
El fabricante expone en su manual la configuración necesaria, aunque ésta se puede modificar. Es la siguiente:
Velocidad =9600 baudios, Paridad = ninguna, Bits de Información = 8, Bits de parada =1.
Ésta aparecerá cuando pulsemos
• Configuración Predeterminada.
Cada vez que se inicie el programa se visualizará la ultima configuración utilizada, recogida del registro de Windows. Para salir del programa
• Pulse EXIT.
Figura 39. Configuración Puerto Serie
Comunicación Punto a Punto Vía Módem GSM Manual de Usuario
81
8.3 Control De Códigos
Si nos aparece la siguiente ventana es indicativo de que la tarjeta SIM está protegida con un código denominado PIN (Personal Identification Number) de 4 hasta 8 dígitos. Introduzca aquí el código Salir del programa Aceptación del código
• Introduzca el código PIN • Pulse OK
Si el código introducido es correcto, el terminal estará activado a la red, y accederemos al menú principal. Si desea salir del programa
• Pulse EXIT
En el caso de introducción errónea del código se le permite introducirlo de nuevo. Si resultara fallido en 2 ocasiones, sería necesario un segundo código de seguridad denominado PUK (Personal Unblock Code). Introduzca aquí el código PUK
Introduzca aquí un nuevo codigo PIN
Salir del programa Aceptación de códigos
• Introduzca el código PUK • Introduzca el código PIN • Pulse OK
Figura 40. Formulario Código PIN
Figura 41. Formulario Código PUK
Comunicación Punto a Punto Vía Módem GSM Manual de Usuario
82
Si el código PUK introducido es correcto, el terminal estará activado a la red, y se accederá al menú principal.
En el caso de introducción errónea del código se le permite introducirlo de nuevo. Si resultara fallido en 8 ocasiones, la tarjeta restaría bloqueada por la operadora, y debería recurrir a ella. Si desea salir del programa
• Pulse EXIT 8.4 Menú Principal
En este momento el módem se encuentra en estado espera a llamada y listo para servicio. El menú principal se nos presenta de la siguiente manera: Reloj del sistema Standby Acceso a la Transferencia Agenda de datos Aplicación extra Libre (calculadora) Información del Salir del módem y SIM Programa Mensajes (SMS) Registro de llamadas
Pulsando en el botón correspondiente se accede a los diferentes submenús.
Esta pantalla puede estar en STANDBY, esto es, una vez no necesitamos operar con la aplicación pero queremos seguir conectados al servicio, ésta se minimizará y aparecerá un icono en la barra de tareas para su posterior reapertura, y que aun estando minimizado nos notificará los eventos que se produzcan, ya sea un llamada o un nuevo mensaje recibido.
Figura 42. Formulario Menú Principal
Figura 43. Programa en STANDBY
Comunicación Punto a Punto Vía Módem GSM Manual de Usuario
83
8.5 Agenda Telefónica
Es posible almacenar números de teléfono y los nombres asociados a ellos en la memoria del teléfono (agenda interna de teléfono) o en la tarjeta SIM (agenda SIM del teléfono). Puede acceder a la agenda desde
• el menú principal • la transferencia de datos • el envío de mensajes SMS.
Selección de la agenda de teléfonos (Memoria)
Pulse uno de los dos botones o ME (corresponde a la memoria del modulo) o SIM (memoria de la tarjeta)
Memorización de un número de teléfono con un nombre (nueva entrada)
Es posible memorizar nombres y números de teléfono en la agenda interna de teléfonos o en la agenda SIM.
• Pulse NUEVA ENTRADA, y aparecerá una nueva pantalla
• Rellene los campos POSICIÓN, NÚMERO Y NOMBRE • Pulse INSERTAR para grabar el nuevo registro • Pulse CANCELAR para anular el proceso
Selección de memoria
Búsqueda
Nueva Entrada
Salir de la agenda
Cancelar
Campos de texto
Insertar
Figura 44. Menú AGENDA
Figura 45. Nueva Entrada AGENDA
Comunicación Punto a Punto Vía Módem GSM Manual de Usuario
84
Búsqueda de un nombre y un numero de teléfono Pulse
• Búsqueda por nombre si desea buscar por la inicial o el nombre del destinatario • Búsqueda por posición si desea visualizar una posición concreta o un rango de
posiciones
Dependiendo de la opción seleccionada le aparecerá una de estas dos ventanas.
• Introduzca el texto de búsqueda en la caja de texto • Pulse OK
Si existen resultados se presentarán como se muestra a continuación, en caso
contrario parecerá un mensaje de aviso comentando la incidencia
Si desea realizar otra búsqueda pulse
• NUEVA BÚSQUEDA, y la búsqueda y resultados anteriores desaparecerán. Para salir de la agenda pulse
• SALIR
Resultados de la búsqueda
Nueva búsquela
Iniciar Texto de búsqueda
Salir
Figura 46. Búsqueda por Nombre Figura 47. Búsqueda por Posición
Figura 48. Resultados de la Búsqueda
Comunicación Punto a Punto Vía Módem GSM Manual de Usuario
85
8.6 Mensajes De Texto (SMS) Se presenta el siguiente formulario. Escritura y almacenamiento Leer, borrar y reenviar msj. desde la memoria configuración retorno al menú
Las opciones que dispone este Menú son:
• LEER mensaje (para leer, borrar o reenviar un mensaje) • ESCRIBIR mensaje (para guardarlo o enviarlo) • CONFIG. Mensajes (establecer los parámetros de los mensajes) • Volver al MENÚ PRINCIPAL
Lectura de un mensaje Si proviene de una notificación
• Pulse LEER AHORA, ó • CANCELAR si desea leerlo mas tarde
Si se encuentra en el MENÚ PRINCIPAL
• Acceda al menú SMS • Pulse LEER MENSAJE • Pulse SIGUIENTE para leer el próximo mensaje (2) • Pulse ANTERIOR para leer el mensaje anterior (1)
Leer Cancelar Ahora Borrar un mensaje
• Acceda al menú SMS • Pulse leer mensaje Una vez mostrado el mensaje a borrar • Pulse borrar mensaje
(1) (2) Reenviar Borrar Menú
Figura 49. Menú de Mensajes SMS
Figura 50. Notificación mensaje recibido
Figura 51.Ventana LEER Mensaje
Comunicación Punto a Punto Vía Módem GSM Manual de Usuario
86
Escribir un mensaje Texto del mensaje
Enviar Guardar Cancelar y volver al menú SMS
• Acceda al menú SMS • Pulse ESCRIBIR mensaje • Escriba el texto
SI PULSA
• GUARDAR, se guardará en la primera posición libre de memoria • CANCELAR, se borra el texto y se retorna al MENÚ-SMS • ENVIAR, se abrirá formulario de envío y deberá:
o *introducir el número del destinatario y o *pulsar ENVIAR, o o *CANCELAR, para anular el envío
Num. Destino Acceso a la agenda Cancelar envío Enviar mensaje
Reenviar un mensaje
• Acceda al menú SMS • Pulse leer mensaje Una vez mostrado el mensaje a reenviar • Pulse REENVIAR mensaje • Se abrirá un formulario de envío y deberá:
o *introducir el número del destinatario y o *pulsar ENVIAR, o o *CANCELAR, para anular el envío
Figura 53. Enviar mensaje
Figura 52. Escribir mensaje
Comunicación Punto a Punto Vía Módem GSM Manual de Usuario
87
Configurar los mensajes
• Acceda al menú SMS • Pulse CONFIG. Mensajes • Pulse el botón MODIFICAR del parámetro que desea cambiar • Modifique su valor • Pulse OK para validar los cambios • Repita el proceso tantas veces como desee cambiar la configuración • Pulse SMS-MENÚ para retornar al menú de los mensajes
Se puede configurar:
*Almacenamiento (mem1,mem2,mem3, ME o SIM) Configura las memorias para el tratamiento de los mensajes. Selección entre ME (memoria del MODEM GM29) y SIM (tarjeta)
La memoria 1 corresponde a la lectura y borrado de mensajes. La memoria 2 para la escritura y envío. La memoria 3 almacena los nuevos mensajes recibidos.
*Formato (tipo texto o PDU)
Determina el tipo de mensaje, modo texto o modo binario. *Numero del centro de mensajes
Configura el número del centro que nos proporciona el servicio de mensajería SMS. *Permanencia
Establece el tiempo máximo de validez de los mensajes. El tiempo máximo de permanencia en el centro servidor hasta que sea posible el envío al destinatario (el envío depende de la disponibilidad del receptor)
Memoria Formato
Permanencia Centro Servicio
Menú
Validar cambios
Modificar
Figura 54. Ventana de Configuración de los mensajes
Comunicación Punto a Punto Vía Módem GSM Manual de Usuario
88
8.7 TRANSFERENCIA DE DATOS Se accede a través del Menú Principal, pulsando TRANSFER CSD-HSCSD.
Cuando reciba una llamada de petición de transferencia de datos le aparecerá por pantalla el siguiente diálogo conjuntamente con el formulario de transferencia de datos
Aceptar la llamada
• Pulse Aceptar Llamada (5)
Rechazar la llamada • Pulse rechazar Llamada (8)
Para Establecer una comunicación de transferencia de datos, acceda al formulario a través del Menú principal:
• Introduzca el número del destinatario(2) Puede acceder a la Agenda si pulsa el botón (3)
• Pulse Establecer conexión (1) Finalizar la comunicación
• Pulse Colgar (4) (si ha establecido una comunicación, recuerde estar en modo comandos)
Figura 55. Formulario de Transferencia de datos CSD-HSCSD
Figura 56. Notificación de llamada entrante
(1)
(2)
(3)
(4)
(9)
(5)
(6)
(7)
(8)
(10)
(11)
(12)
(13)
(14)
Comunicación Punto a Punto Vía Módem GSM Manual de Usuario
89
Para retornar al menú principal • Pulse MENÚ (7)
ENVÍO Y RECEPCIÓN DE DATOS
Una vez establecida comunicación con el interlocutor, puede realizar diversas acciones Enviar datos
• Introduzca el texto a enviar en la caja de texto (11) • Pulse ENVIAR (13)
Recibir Datos
• Aparecerán en la caja de texto (12) los datos recibidos Acceder al modo comandos
• Pulse COMMAND MODE (9) Retornar al modo en línea
• Pulse ONLINE DATA MODE (10) Guardar datos
• Pulse GUARDAR (14) y los datos recibidos se guardarán en un fichero de texto. Para configurar los parámetros de la transferencia CSD
• Pulse OPCIONES del formulario de transferencia CSD • Pulse el botón MODIFICAR del parámetro que desea cambiar • Modifique su valor • Pulse OK para validar los cambios • Repita el proceso tantas veces como desee cambiar la configuración • Pulse VOLVER A CSD-HSCSD para retornar a la pantalla de transferencias
Se puede configurar:
*Velocidad de conexión Establece o bien el modo automático de velocidad (velocidad según posibilidades) o bien un valor de los mostrados en la lista desplegable.
Figura 57. Configuración CSD-HSCSD
(1)
(1)
(1)
(1)
(1)
Comunicación Punto a Punto Vía Módem GSM Manual de Usuario
90
*Modo de llamada (Tono o Pulsos) Puede seleccionar el formato de llamada, por tonos o por pulsos.
*Modo de respuesta (tipo Manual o Automático)
Determina el sistema de actuación a una llamada entrante. Bien modo manual o automático, en cuyo caso se deberá especificar el numero de RINGS que deben acontecer antes de aceptar dicha llamada.
*Carácter de la secuencia de escape
Establece el carácter que formara la secuencia de escape (+++AT, donde + es el carácter de escape). Esta secuencia nos permitirá pasar de modo en línea a modo comandos. 8.8. Registro De Llamadas El formulario que se presenta es el siguiente: Para acceder al registro de llamadas a través del menú principal
• Pulse REGISTRO DE LLAMADAS
Tiene la opción de acceder a 3 registros (pulse el botón correspondiente a cada uno de ellos para visualizar los resultados).
• Pulsando Llamadas enviadas
visualizará una lista de los 30 últimos números de teléfono a los que ha llamado o ha intentado llamar más recientemente, así como la fecha y la hora de cada llamada.
• Pulsando Llamadas recibidas visualizará una lista de los 30 últimos números de teléfono de los que ha aceptado llamadas más recientemente, así como la fecha y la hora de cada llamada.
• Pulsando Llamadas perdidas visualizará una lista de los 30 últimos números de teléfono desde los que alguien ha intentado llamarle sin éxito, así como la fecha y la hora de cada llamada.
• Pulsando MENU retornará al Menú Principal.
Resultados
Menú Principal
Ll. Recibidas
Ll. Perdidas Ll. Enviadas
Figura 58. Formulario de lectura del Registro de Llamadas
Comunicación Punto a Punto Vía Módem GSM Conclusiones
91
9. CONCLUSIONES
Comunicación Punto a Punto Vía Módem GSM Conclusiones
92
CONCLUSIONES El objetivo de comunicar 2 terminales, sean ámbos dos módems GSM o un módem GSM y un teléfono móvil, se ha conseguido establecer. Las posibilidades que nos proporciona la red inalámbrica GSM ha permitido establecer un tipo de comunicación móvil que anteriormente no hubiese sido imposible realizar. Hace unos años estábamos sometidos a un sistema fijo, estático. El sistema convencional de comunicación telefónica limitaba las comunicaciones a la conexión de una toma fija. Ésta podía o no existir, a causa de imposibilidades geográficas, en aquellos lugares donde era complicado el acceso y establecimiento de los sistemas de cableado y centralitas (valles, montañas, etc).
También existía la limitación de que las comunicaciones debían hacerse desde dos lugares concretos, estáticos, siendo imposible la movilidad de los interlocutores.
Con la implantación del sistema GSM y de las diferentes subestaciones que
proporcionan servicio o cobertura (actualmente existe cobertura GSM en el 87 % del estado español y se permite la interacción con el resto de redes mundiales) las comunicaciones son móviles. Esto es, podremos realizar cualquier tipo de comunicación desde una oficina, un medio de transporte en movimiento, nuestro lugar de residencia o vacaciones, y en lugares donde la red fija convencional no tiene alcance (alto de una montaña, valle, etc).
Para conseguir dichas comunicaciones, se ha tenido que analizar los diferentes
sistemas de comunicación que la red GSM permite para evaluar el sistema más adecuado a nuestro propósito. Entre ellos se ha optado por el servicio de mensajes cortos y la trasferencia de datos CSD.
Además de las comunicaciones entre interlocutores se ha debido estudiar el
funcionamiento del terminal que nos permitía dichas comunicaciones. El módem GSM GM29 trabaja, como el 99% de los módems convencionales, mediante comandos AT o Hayes.
La metodología de envío y recepción de diferentes tramas (compuestas por el
comando AT correspond iente a cada acción a ejecutar más los parámetros que lo componen y diversos caracteres de control) ha sido la base de este estudio. Posteriormente se debían tratar las respuestas que el módem enviaba a nuestras instrucciones conforme los resultados esperados. La recepción y análisis de dichas respuestas (de diferentes formatos) ha sido la tarea principal para el programador, ya que la no existencia de un formato general ha generado que se deba realizar un tratamiento especial a cada respuesta.
La ínter actuación con el módem se debía realizar mediante el puerto serie (RS232), el cual se ha debido estudiar con anterioridad para conocer su funcionamiento.
Comunicación Punto a Punto Vía Módem GSM Conclusiones
93
La implementación de estas comunicaciones ha sido realizada mediante el lenguaje de programación VISUAL BASIC.
El desconocimiento por parte del programador de este lenguaje antes de este
proyecto, provocó que debiera estudiarlo en profundidad con tal de llevar a cabo la programación. La fuente de aprendizaje fueron diferentes libros los cuales quedan detallados en la bibliografía correspondiente a este proyecto.
Trabajar con VISUAL BASIC facilita al programador que el usuario final pueda
disponer de una interfaz simple, clara y sencilla de comprender y utilizar. Mediante los diferentes controles empleados (botones, cajas de texto, etc) el usuario puede ejecutar los diferente sistemas de comunicación sin necesidad de conocer la metodología de funcionamiento de los comandos AT. La aplicación generada en este proyecto puede tener suma importancia en aspectos como el control remoto de procesos, tanto a nivel informativo como a nivel de actuación, o el intercambio de información desde recónditos lugares.
La gestión de alarmas podía ser una de ellas. La posibilidad de ser alertados mediante un mensaje SMS de cualquier incidencia respecto a nuestro trabajo, anomalías varias, error en un proceso automatizado, válvula defectuosa, necesidad de reposición de stock ..., podría considerarse tarea de nuestra aplicación.
También puede sernos útil para mantenernos informados periódicamente de una
serie de datos que un dispositivo (por ejemplo un sensor) capte desde algún lugar donde no exista red telefónica convencional o como auxiliar en caso de que ésta fallase. Podría ser el caso de un proceso automatizado o estaciones meteorológicas a altitudes elevadas.
Comunicación Punto a Punto Vía Módem GSM Código Fuente
94
10. CÓDIGO FUENTE
Comunicación Punto a Punto Vía Módem GSM Código Fuente
95
CÓDIGO FUENTE 10.1 Introducción
En este apartadao incluiremos el código fuente redactado para la ejecución de la aplicación.
Presentamos el código comentado extensamente haciendo referencia a las particularidades y evolución del mismo.
10.2 Código
Divideremos el código en 2 partes: módulos de formulario y módulos estándar. La estructura de presentación será la compuesta por el diseño gráfico de cada uno
de los módulos de formulario (dado el carácter “visual” del lenguaje de programación utilizado,VISUAL BASIC) y el código asociado a dicho módulo y a los controles que lo componen.
En los módulos estándar se incluirán las acciones y funciones generales, que
pueden ser ejecutadas desde cualquier módulo de formulario.
Comunicación Punto a Punto Vía Módem GSM Código Fuente
96
10.2.1 FORMULARIO 00.(PRESENTATION.FRM) PRESENTACIÓN DEL PROGRAMA
'SE CARGA EL FORMULARIO. SE PRESENTAN LAS DIFERENTES ETIQUETAS Private Sub Form_Load() lblVersion.Caption = "Versión " & App.Major & "." & App.Minor & "." & App.Revision lblProductName.Caption = App.Title End Sub ‘************************************************************************ 'AL PULSAR EL BOTÓN SE VISUALIZA EL FORMULARIO DE CONFIGURACIÓN DEL PUERTO SERIE Y DEL FORMULARIO DE CONTROL DE TRAMAS DE ENVÍO-RECEPCION Private Sub cmdOK_Click() Form01.Visible = True Form21.Visible = True Unload Me End Sub ‘************************************************************************
Figura 59. PRESENTATION.frm
Comunicación Punto a Punto Vía Módem GSM Código Fuente
97
10.2.2 FORMULARIO 01.(COM_PORT_CONFIG.FRM) CONFIGURACIÓN DEL PUERTO SERIE
'DECLARACION DE VARIABLES LOCALES DE FORMULARIO Private port As Integer Private baud As String Private parity As String Private databits As String Private stopbits As String ‘************************************************************************ 'CARGA DEL FORMULARIO Private Sub Form_Load()
DisableX Form01 'se deshabilita el botón CERRAR del formulario GET_SETTINGS VIEW_CONFIGURATION
End Sub ‘************************************************************************ 'ADQUISICION DE INFORMACIÓN DEL REGISTRO DE WINDOWS 'DE LA ULTIMA CONFIGURACIÓN UTILIZADA Private Sub GET_SETTINGS()
port = GetSetting(App.Title, "Mscomm", "puerto", 1) baud = GetSetting(App.Title, "Mscomm", "baudios", "9600") parity = GetSetting(App.Title, "Mscomm", "paridad", "NONE") databits = GetSetting(App.Title, "Mscomm", "bitscar", "8") stopbits = GetSetting(App.Title, "Mscomm", "bitsparada", "1")
End Sub ‘************************************************************************ 'VISUALIZACION EN LAS LISTAS DESPLEGABLES DE LA ULTIMA CONFIG UTILIZADA Private Sub VIEW_CONFIGURATION()
Combo_Port.Text = "COM" & port Combo_Baudrate.Text = baud
Figura 60. COM_PORT_CONFIG.frm
Comunicación Punto a Punto Vía Módem GSM Código Fuente
98
Combo_Parity.Text = parity Combo_DataBits.Text = databits Combo_StopBits.Text = stopbits
End Sub ‘************************************************************************ 'SE GUARDAN LOS CAMBIOS EFECTUADOS EN LAS LISTAS DESPLEGABLES Private Sub cmdSaveChanges_Click() If MSComm1.PortOpen = True Then 'confirmación si puerto esta abierto
MsgBox ("cierra primero el puerto") Exit Sub 'salida de la rutina
End If 'se guardan los cambios en las variables correspondientes
port = Mid(Combo_Port.Text, 4) baud = Combo_Baudrate.Text parity = Combo_Parity.Text databits = Combo_DataBits.Text stopbits = Combo_StopBits.Text
End Sub ‘************************************************************************ 'SE CARGA LA CONFIGURACIÓN PREDETERMINADA(RECOMENDADA POR EL FABRICANTE) Private Sub cmdDefaultConfig_Click()
Combo_Port.Text = "COM1" Combo_Baudrate.Text = "9600" Combo_Parity.Text = "NONE" Combo_DataBits.Text = "8" Combo_StopBits.Text = "1"
End Sub ‘************************************************************************ 'SE CONFIGURA Y SE ABRE EL PUERTO SERIE. SE TRATAN LOS POSIBLES ERRORES Private Sub cmdOpenPort_Click()
On Error GoTo treat_errors 'tratamiento de errores PORT_CONFIG 'configuración del puerto serie MSComm1.PortOpen = True 'abrimos el puerto cmdOK.Enabled = True 'permitimos el acceso al siguiente form GoTo salir treat_errors: MsgBox ("Error al intentar abrir COM") 'mensajes de error detectados MsgBox ("Error detectado por Visual Basic: " + Err.Description) salir:
End Sub ‘************************************************************************ 'CONFIGURACIÓN DEL PUERTO SERIE Private Sub PORT_CONFIG()
Select Case parity ‘selección de paridad Case "NONE" parity = "N" Case "ODD" parity = "O" Case "EVEN" parity = "E" End Select With MSComm1 ‘se configura Mscomm .InputLen = 0 .InputMode = comInputModeText
Comunicación Punto a Punto Vía Módem GSM Código Fuente
99
.RThreshold = 1
.SThreshold = 1
.Handshaking = comNone
.InBufferSize = 1024
.OutBufferSize = 512
.Settings = baud + "," + parity + "," + databits + "," + stopbits
.CommPort = port End With
End Sub ‘************************************************************************ 'SE CIERRA EL PUERTO SERIE. SE TRATAN LOS POSIBLES ERRORES Private Sub cmdClosePort_Click()
On Error GoTo treat_errors 'tratamiento de errores MSComm1.PortOpen = False 'se cierra puerto serie cmdOK.Enabled = False 'botón OK deshabilitado GoTo salir treat_errors: MsgBox ("Error al intentar cerrar COM") 'mensajes de error detectados MsgBox ("Error detectado por Visual Basic: " + Err.Description) salir:
End Sub ‘************************************************************************ 'ENVÍO DE LA TRAMA DE MODO DE NOTIFICACIÓN DE ERRORES Y SE TRATA LA RESPUESTA OBTENIDA + ENVÍO DE LA TRAMA DE CONTROL DEL CÓDIGO PIN Private Sub cmdOK_Click() 'trama MOBILE_EQUIPMENT_ERROR,selecciona el modo de anuncio de errores
str = "AT+CMEE=2" + vbCr TRAMA 'envío MOBILE_EQUIPMENT_ERROR 'tratamiento de la respuesta
PIN_CONTROL 'envío AT+CPIN? + tratamiento respuesta
End Sub ‘************************************************************************ 'SALIDA DEL PROGRAMA Private Sub cmdEXIT_Click() If MSComm1.PortOpen = True Then _ MSComm1.PortOpen = False 'se cierra el puerto si esta abierto End End Sub ‘************************************************************************ 'CIERRE DEL FORMULARIO Private Sub Form_Unload(Cancel As Integer)
SAVE_SETTINGS End Sub ‘************************************************************************ 'SE SALVAN LOS CAMBIOS EFECTUADOS EN LA CONFIGURACIÓN DEL PUERTO SERIE EN EL REGISTRO DE WINDOWS Private Sub SAVE_SETTINGS()
SaveSetting App.Title, "Mscomm", "puerto", port SaveSetting App.Title, "Mscomm", "baudios", baud SaveSetting App.Title, "Mscomm", "paridad", parity SaveSetting App.Title, "Mscomm", "bitscar", databits SaveSetting App.Title, "Mscomm", "bitsparada", stopbits
End Sub ‘************************************************************************
Comunicación Punto a Punto Vía Módem GSM Código Fuente
100
'CONTROL DEL EVENTO ONCOMM A TRAVÉS DE LA PROPIEDAD COMMEVENT 'MENSAJES DE AVISO Y ACTUACIONES A CADA UNO DE ELLOS Public Sub MSComm1_OnComm() Select Case MSComm1.CommEvent Case comEvSend Form21.Text_StateSending.Text = "CORRECTO"
Case comEvReceive READ_BUFFER 'lectura del buffer
Case comEvRing 'INCOMPATIBILIDAD VISUAL BASIC - ERICSSON GM29
Case comEvCD MsgBox ("Cambio en la línea CD.")
Case comEvCTS MsgBox ("Cambio en la línea CTS.")
Case comEvDSR MsgBox ("Cambio en la línea DSR.") ' Errores Case comBreak MsgBox ("Se ha recibido una interrupción.")
Case comEventFrame MsgBox ("Error de trama.")
Case comEventOverrun MsgBox ("Puerto desbordado. No se leyó un carácter desde el hardware antes de llegar otro carácter y el primero se ha perdido!!")
Case comEventRxOver MsgBox ("Desbordamiento del búfer de recepción.No hay espacio suficiente en el búfer de recepción.")
Case comEventRxParity MsgBox ("Error de paridad.")
Case comEventTxFull MsgBox ("Búfer de transmisión lleno. Se ha intentado colocar un carácter más en la cola mientras el búfer de transmisión estaba lleno.")
Case comEventDCB MsgBox ("Error inesperado al recuperar el DCB.") End Select End Sub ‘************************************************************************ 'LECTURA DEL BUFFER DEL PUERTO SERIE Private Sub READ_BUFFER()
strBUFFER = strBUFFER & MSComm1.Input Form21.Text_Response.Text = strBUFFER 'visualización del buffer
'En modo online, la lectura del buffer se visualiza en Text_CSDReceived If online_data = True Then Form06.Text_CSDReceived.Text = Form06.Text_CSDReceived.Text & strBUFFER
Comunicación Punto a Punto Vía Módem GSM Código Fuente
101
strBUFFER = "" 'se vacia la variable que recoge contenido del buffer End If 'POLLING PARA DENOTAR UNA LLAMADA ENTRANTE
RING 'POLLING PARA AVISAR DE NUEVO MENSAJE RECIBIDO
NEW_SMS End Sub ‘************************************************************************ 'TIMER CONTROLADOR DEL TIMPO DE ESPERA PARA RECIBIR RESPUESTA 'configurado para que se jecute cada segundo Private Sub Timer_Mscomm_Timer()
timeout_cont = timeout_cont + 1 'actualización cont timeout If timeout_cont = 70 Then '70 seg maximo tiempo de espera
Timer_Mscomm.Enabled = False 'deshabilitamos timer timeout_cont = 0 'reinicializamos contador timeout = True 'se ha producido timeout
End If End Sub ‘************************************************************************
Comunicación Punto a Punto Vía Módem GSM Código Fuente
102
10.2.3 FORMULARIO 02.(PIN_CODE.FRM) FORMULARIO DE CONTROL DE ACCESO MEDIANTE CÓDIGO PIN
'CARGA DEL FORMULARIO Private Sub Form_Load()
Form01.Visible = False 'se hace invisible el formulario 01 DisableX Form02 'se deshabilita el botón CERRAR del form TEXT_PIN.Text = "" 'se borra el texto de la caja TEXT_PIN
End Sub ‘************************************************************************ 'CÓDIGO PIN SOLO ADMITE VALORES NUMÉRICOS. TAMBIÉN SE PERMITE LA TECLA BORRAR (8) Private Sub TEXT_PIN_KeyPress(KeyAscii As Integer) If (KeyAscii <> 8) And (KeyAscii < 48 Or KeyAscii > 57) Then KeyAscii = 0 End If End Sub ‘************************************************************************ 'ENVÍO DE LA TRAMA DEL CÓDIGO PIN Y TRATAMIENTO DE LA RESPUESTA OBTENIDA Private Sub cmdOK_PIN_Click() Dim PIN As String
If TEXT_PIN.Text = "" Then 'confirmación si TEXT_PIN en blanco MsgBox ("INTRODUZCA CÓDIGO PIN EN LA CAJA DE TEXTO") Exit Sub 'se sale de la rutina End If PIN = Chr(34) + TEXT_PIN.Text + Chr(34) 'código PIN entre comillas str = "AT+CPIN=" + PIN + vbCr TRAMA 'envío de la trama PIN_CODE 'tratamiento de la respuesta
End Sub ‘************************************************************************ 'SE SALE DEL PROGRAMA Private Sub cmdEXIT_PIN_Click()
End End Sub ‘************************************************************************
Figura 61. PIN_CODE.FRM
Comunicación Punto a Punto Vía Módem GSM Código Fuente
103
10.2.4 FORMULARIO 03.(PUK_CODE.FRM) FORMULARIO DE INTRODUCCIÓN DEL CÓDIGO PUK
'SE CARGA EL FORMULARIO Private Sub Form_Load()
Form01.Visible = False 'se hace invisible el formulario 01 Unload Form02 'se cierra el formulario 02 DisableX Form03 'se deshabilita el botón CERRAR del form TEXT_PUK.Text = "" 'se borra el texto de la caja TEXT_PIN TEXT_PIN.Text = "" 'se borra el texto de la caja TEXT_PUK
End Sub ‘************************************************************************ 'CÓDIGO PUK SOLO ADMITE VALORES NUMÉRICOS. SE PERMITE LA TECLA BORRAR (8) Private Sub TEXT_PUK_KeyPress(KeyAscii As Integer) If (KeyAscii <> 8) And (KeyAscii < 48 Or KeyAscii > 57) Then KeyAscii = 0 End If End Sub ‘************************************************************************ 'CÓDIGO PIN SOLO ADMITE VALORES NUMÉRICOS. SE PERMITE LA TECLA BORRAR (8) Private Sub TEXT_PIN_KeyPress(KeyAscii As Integer) If (KeyAscii <> 8) And (KeyAscii < 48 Or KeyAscii > 57) Then KeyAscii = 0 End If End Sub ‘************************************************************************ 'ENVÍO DE LA TRAMA DEL CÓDIGO PUK Y TRATAMIENTO DE LA RESPUESTA OBTENIDA Private Sub cmdOK_Click() Dim PUK As String * 10 Dim PIN As String
PUK = Chr(34) + TEXT_PUK.Text + Chr(34) PIN = Chr(34) + TEXT_PIN.Text + Chr(34) str = "AT+CPIN=" + PUK + "," + PIN + vbCr TRAMA 'envío trama PUK PUK_PIN_CODES 'tratamiento de la respuesta
End Sub ‘************************************************************************ 'SE SALE DEL PROGRAMA Private Sub cmdEXIT_Click() End End Sub ‘************************************************************************
Figura 62. PUK_CODE.FRM
Comunicación Punto a Punto Vía Módem GSM Código Fuente
104
10.2.5 FORMULARIO 04.(MENÚ.FRM) FORMULARIO DEL MENÚ PRINCIPAL
'DECLARACION DE VARIABLES LOCALES PARA ESTE FORMULARIO
Private NUMFICH As Integer Private ruta As String Private nid As NOTIFYICONDATA
‘************************************************************************ 'SE CARGA EL FORMULARIO DEL MENÚ PRINCIPAL Private Sub Form_Load()
DisableX Form04 'se deshabilita el botón CERRAR del form. UNLOAD_FORMS SETVALUES_NOTFYICONDATA READ_ONCE_CONFIGURATION_FILE
End Sub ‘************************************************************************ 'SE CIERRAN EL RESTO DE FORMULARIOS ABIERTOS Private Sub UNLOAD_FORMS()
Unload Form02 Unload Form03 Unload Form05 Unload Form06 Unload Form08 Unload Form09 Unload Form10 Unload Form11 Unload Form13
Figura 63. MENU.FRM
Figura 64. Programa en STANDBY
Comunicación Punto a Punto Vía Módem GSM Código Fuente
105
Unload Form15 Unload Form16 Unload Form17 Unload Form18 Unload Form19 Unload Form20
End Sub ‘************************************************************************ 'ESTABLECE VALORES PARA EL TIPO NOTIFYICONDATA Private Sub SETVALUES_NOTFYICONDATA() With nid .cbSize = Len(nid) .hWnd = Me.hWnd .uId = vbNull .uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE .uCallBackMessage = WM_MOUSEMOVE .hIcon = Me.Icon .szTip = "MÓDEM GSM GM29" & vbNullChar End With End Sub ‘************************************************************************ 'LECTURA DEL FICHERO DE CONFIGURACIÓN DEL PROGRAMA Private Sub READ_ONCE_CONFIGURATION_FILE()
Static cont_reg As Integer If cont_reg <> 1 Then 'solo la primera vez que carguemos form04 READ_CONFIGURATION_FILE cont_reg = 1 End If
End Sub ‘************************************************************************ 'LECTURA DEL FICHERO DE CONFIGURACIÓN DEL PROGRAMA Private Sub READ_CONFIGURATION_FILE() Dim a As String 'variable local de la acción NUMFICH = FreeFile 'posición libre ruta = CurDir 'directorio actual ruta = ruta + "\CONFIGURACIÓN.alb" 'CONFIGURACIÓN.alb = fichero a = Dir(ruta) If (a <> "") Then 'el fichero sí existe
Open ruta For Random As #NUMFICH Len = Len(config) 'abrir fichero Get #NUMFICH, 1, config 'se recoge la información Close NUMFICH 'se cierra el fichero SEND_CONFIGURATION 'envío de tramas
Else 'si no existe LOAD_DEFAULT_CONFIGURATION 'se carga la config. predeterminada SEND_CONFIGURATION 'envío de tramas
End If End Sub ‘************************************************************************ 'SE CARGA LA CONFIGURACIÓN PREDETERMINADA Private Sub LOAD_DEFAULT_CONFIGURATION()
config.mem1 = Chr(34) + "SM" + Chr(34) 'memoria1 = tarjeta SIM config.mem2 = Chr(34) + "SM" + Chr(34) 'memoria2 = tarjeta SIM config.mem3 = Chr(34) + "SM" + Chr(34) 'memoria3 = tarjeta SIM config.MsgFormat = "1" 'formato mensaje= TEXTO
Comunicación Punto a Punto Vía Módem GSM Código Fuente
106
config.PhoneBook = Chr(34) + "SM" + Chr(34) 'agenda teléfonos = SIM config.SERV_CENT = "+34607003110" 'nºcentro msjes vodafone config.time_max = "17,167,0,0" 'tiempo max permanencia config.dialling = "ATT" 'llamada por tonos config.answer_mode = "0" 'contestacion manual config.bearer_Service = "0" 'selección automat. bps config.escape_sequence = "43" 'char de escape = 43
End Sub ‘************************************************************************ 'ENVÍO DE TRAMAS DE CONFIGURACIÓN Private Sub SEND_CONFIGURATION() 'trama CLOCK , establece la fecha y hora. La coge del reloj de Windows Dim FECHA As String Dim HORA As String Dim clock As String
FECHA = Date HORA = Time clock = Chr(34) + FECHA + "," + HORA + "+00" + Chr(34) str = "AT+CCLK=" + clock + vbCr TRAMA 'envío de la trama SET_CLOCK SET_CLOCK 'tratamiento de la respuesta
'trama SERVICE CENTRE ADRESS,establece el número del centro de mensajes
str = "AT+CSCA=" + Chr(34) + config.SERV_CENT + Chr(34) + vbCr TRAMA 'envío SERVICE_CENTRE_ADRESS 'tratamiento de la respuesta
'trama MESSAGE FORMAT, establece el tipo de mensajes
str = "AT+CMGF=" + config.MsgFormat + vbCr TRAMA 'envío MESSAGE_FORMAT 'tratamiento de la respuesta
'trama PHONEBOOK STORAGE,establece el lugar de la agenda telefonica
str = "AT+CPBS=" + config.PhoneBook + vbCr TRAMA 'envío PHONEBOOK_STORAGE 'tratamiento de la respuesta
'trama MESSAGE TEXT TIME MAX, configura el tiempo maximo de ‘almacenamiento de mensajes
str = "AT+CSMP=" + config.time_max + vbCr TRAMA 'envío MSGTXT_TIME_MAX 'tratamiento de la respuesta
'trama SELECT DIALLING, selecciona el modo de llamada
str = config.dialling + vbCr TRAMA 'envío SELECT_DIALLING 'tratamiento de la respuesta
'trama AUTOMATIC ANSWER CONTROL, configura el modo de respuesta de 'llamada
str = "ATS0=" + config.answer_mode + vbCr TRAMA 'envío AUTOMATIC_ANSWER_CONTROL 'tratamiento de la respuesta
'trama SELECT BEARER SERVICE,configura la velocidad de la conexión
str = "AT+CBST=" + config.bearer_Service + ",0,1" + vbCr TRAMA 'envío SELECT_BEARER_SERVICE 'tratamiento de la respuesta
Comunicación Punto a Punto Vía Módem GSM Código Fuente
107
'trama ESCAPE SEQUENCE CHARACTER, configura el carácter de escape del 'modo online data mode
str = "ATS2=" + config.escape_sequence + vbCr TRAMA 'envío ESCAPE_SEQUENCE_CHARACTER 'tratamiento de la respuesta
'trama NEW MESSAGE INDICATION, configura el modo de alerta al recibir un nuevo mensaje
str = "AT+CNMI=3,1,0,0" + vbCr TRAMA 'envío NEWMSG_INDICATION 'tratamiento de la respuesta
'trama PREFERRED MESSAGE STORAGE,selecciona las diferentes memorias para 'los diferentes acciones con los mensajes. Se trata respuesta obtenida
PREFERRED_MSG_STORAGE End Sub ‘************************************************************************ 'PRESENTACION DE LA HORA ACTUAL Private Sub Timer_clock_Timer()
Lblclock.Caption = Time End Sub ‘************************************************************************ 'ACCESO A LA AGENDA DE TELÉFONOS Private Sub cmdPhoneBookMenu_Click()
Form08.Visible = True End Sub ‘************************************************************************ 'ACCESO AL MENÚ DE LOS MENSAJES SMS Private Sub CmdSMSMENÚ_Click()
Form13.Visible = True End Sub ‘************************************************************************ 'ACCESO A LA TRANSFERENCIA CSD Private Sub cmdCSDMENÚ_Click()
Form06.Visible = True End Sub ‘************************************************************************ 'ACCESO A LA CALCULADORA (aplicación extra) Private Sub cmdCALC_Click() Dim vr As Long Dim aplic As String
On Error GoTo treat_errors 'deteccion de errores aplic = CurDir aplic = aplic + "\calc\CALCDEF.EXE" 'calculadora de inf.ind. 1 vr = Shell(aplic, vbNormalFocus) 'se ejecuta la aplicacion Exit Sub treat_errors: MsgBox Err.Description 'mensaje de error detectado
End Sub ‘************************************************************************ 'ACCESO AL REGISTRO DE LLAMADAS Private Sub cmdCallRegister_Click()
Form05.Visible = True End Sub ‘************************************************************************
Comunicación Punto a Punto Vía Módem GSM Código Fuente
108
'INFORMACIÓN ACERCA DEL MÓDEM Y LA TARGETA SIM Private Sub cmdABOUTmódem_Click()
Form20.Visible = True ABOUT_MODEM
End Sub ‘************************************************************************ 'ESCONDER EL FORMULARIO.DEJARLO EN STANDBY Private Sub cmdSTANDBY_Click() Me.Hide 'esconder formulario Shell_NotifyIcon NIM_ADD, nid 'mostrar icono en barra de tareas End Sub ‘************************************************************************ 'AL FINALIZAR PROGRAMA ELIMINAR ICONO Private Sub Form_Terminate() Shell_NotifyIcon NIM_DELETE, nid End Sub ‘************************************************************************ 'CONTROL DE MOVIMIENTO DEL RATON SOBRE EL FORMULARIO Private Sub Form_MouseMove(Button As Integer, Shift As Integer, _ X As Single, Y As Single) Dim lngButtonAction As Long lngButtonAction = X / Screen.TwipsPerPixelX If (lngButtonAction = WM_LBUTTONDBLCLK) Then 'doble click botón izquierdo del raton sobre el icono
If Me.Visible = False Then 'si el formulario esta ocultado Me.Show 'se muestra el formulario
Shell_NotifyIcon NIM_DELETE, nid 'y se borra el icono de la barra de tareas
End If End If End Sub ‘************************************************************************ 'SALIR DEL PROGRAMA Private Sub cmdEXIT_Click()
Form01.MSComm1.PortOpen = False 'se cierra puerto serie SAVE_CONFIGURATION_FILE 'se salva la config del programa End
End Sub ‘************************************************************************ 'SALVAR LA CONFIGURACIÓN EN EL ARCHIVO Private Sub SAVE_CONFIGURATION_FILE()
Open ruta For Random As #NUMFICH Len = Len(config) 'abrir fichero Put #NUMFICH, 1, config 'escribir Close NUMFICH 'cerrar
End Sub ‘************************************************************************
Comunicación Punto a Punto Vía Módem GSM Código Fuente
109
10.2.6 FORMULARIO 05.(CALL_REGISTER.FRM) FORMULARIO DEL REGISTRO DE LLAMADAS
'SE CARGA EL FORMULARIO Private Sub Form_Load()
Unload Form04 'se cierra MENÚ principal DisableX Form05 'se deshabilita el botón CERRAR del formulario
End Sub ‘************************************************************************ 'PETICIÓN DE LISTADO DE LLAMADAS REALIZADAS Private Sub cmdDialledCalls_Click() call_reg = Chr(34) + "DC" + Chr(34) 'DC = LLAMADAS REALIZADAS 'trama PHONEBOOK STORAGE, selecciona la memoria del registro de llamadas str = "AT+CPBS=" + call_reg + vbCr TRAMA 'envío PHONE_CALL_STORAGE 'tratamiento de la respuesta 'trama PHONEBOOK READ, envia trama y presenta resultados de la lectura str = "AT+CPBR=1,30" + vbCr PHONEBOOK_READ (1) '1=lectura de llamadas End Sub ‘************************************************************************ 'PETICIÓN DE LISTADO DE LLAMADAS RECIBIDAS Private Sub cmdReceiveCalls_Click() call_reg = Chr(34) + "RC" + Chr(34) 'RC = LLAMADAS RECIBIDAS str = "AT+CPBS=" + call_reg + vbCr TRAMA PHONE_CALL_STORAGE str = "AT+CPBR=1,30" + vbCr PHONEBOOK_READ (1) End Sub ‘************************************************************************
Figura 65. CALL_REG.FRM
Comunicación Punto a Punto Vía Módem GSM Código Fuente
110
'PETICIÓN DE LISTADO DE LLAMADAS NO CONTESTADAS Private Sub cmdMissedCalls_Click() call_reg = Chr(34) + "MC" + Chr(34) 'MC = LLAMADAS NO CONTESTADAS str = "AT+CPBS=" + call_reg + vbCr TRAMA PHONE_CALL_STORAGE str = "AT+CPBR=1,30" + vbCr PHONEBOOK_READ (1) End Sub ‘************************************************************************ 'RETORNO AL MENÚ PRINCIPAL Private Sub cmdMENÚ_Click()
Form04.Visible = True 'se hace visible el MENÚ principal End Sub ‘************************************************************************
Comunicación Punto a Punto Vía Módem GSM Código Fuente
111
10.2.7 FORMULARIO 06.(DATA_TRANSFER_CSD_HSCSD.FRM) FORMULARIO DE TRANSFERENCIA DE DATOS CSD
'CARGA DEL FORMULARIO Private Sub Form_Load()
Unload Form04 'se cierran el resto de formularios Unload Form07 DisableX Form06 'se deshabilita el botón CERRAR del formulario
End Sub ‘************************************************************************ 'SE REALIZA UNA LLAMADA A UN DESTINATARIO ESPECIFICADO Private Sub cmdDIAL_Click()
Unload Form19 'se cierra el formulario 19 si estaba abierto
'trama DIAL, establece conexión con un destinatario str = "ATD" + Text_DestinationNumber.Text + vbCr TRAMA 'envío ATD 'tratamiento de la respuesta
End Sub ‘************************************************************************ 'EL NUMER0 DE TELÉFONO DEL DESTINATARIO ES UN VALOR NUMÉRICO 'TAMBIÉN SE PERMITE LA TECLA BORRAR (8) Y EL PREFIJO + Private Sub Text_DestinationNumber_KeyPress(KeyAscii As Integer)
If (KeyAscii <> 8) And (KeyAscii <> 43) And (KeyAscii < 48 Or KeyAscii > 57) Then
KeyAscii = 0 End If End Sub ‘************************************************************************
Figura 66. DATA_TRANSFER_CSD_HSCSD.FRM
Comunicación Punto a Punto Vía Módem GSM Código Fuente
112
'ACCESO A LA AGENDA DE TELÉFONOS Private Sub cmdPhoneBook_Click()
Form08.Visible = True End Sub ‘************************************************************************ 'ACEPTAR LLAMADA ENTRANTE Private Sub cmdAcceptCall_Click()
Unload Form19 'trama ANSWER, acepta una llamada entrante str = "ATA" + vbCr TRAMA 'envío ANSWER 'tratamiento de la respuesta
End Sub ‘************************************************************************ 'FINALIZAR UNA LLAMADA Private Sub cmdHangUP_Click()
Unload Form19 'trama HANG UP, finaliza una llamada establecida o un intento de 'conexión y se trata la respuesta obtenida HANG_UP
End Sub ‘************************************************************************ 'RECHAZAR UNA LLAMADA ENTRANTE Private Sub cmdRejectCall_Click()
Unload Form19 str = "AT+CHUP" + vbCr TRAMA 'envío HANG_UP_CALL 'tratamiento de la respuesta
End Sub ‘************************************************************************ 'SE ACCEDE AL MODO COMANDO Private Sub cmdCommandMode_Click()
COMMAND_MODE End Sub ‘************************************************************************ 'SE ACCEDE AL MODO ONLINE DATA MODE Private Sub cmdOnlineDataMode_Click()
str = "ATO=0" + vbCr TRAMA 'envío RETURN_TO_ONLINE_DATA_MODE 'tratamiento de la respuesta
End Sub ‘************************************************************************ 'ENVÍO DE DATOS EN LA TRNSFERENCIA CSD Private Sub cmdCSDSend_Click()
'los datos a enviar se colocan en el buffer Form01.MSComm1.Output = Text_CSDSend.Text + vbCrLf Text_CSDSend.Text = "" 'se vacía la caja de texto
End Sub ‘************************************************************************ 'GUARDAR DATOS RECIBIDOS Private Sub CmdSaveCSD_Click() Dim NUMFICH As Integer 'variables locales de esta accion Dim ruta As String NUMFICH = FreeFile 'posición libre
Comunicación Punto a Punto Vía Módem GSM Código Fuente
113
ruta = CurDir 'directorio actual ruta = ruta + "\CSD_RECEIVE.alb " 'CSD_RECEIVE.alb nombre del fichero Open ruta For Output As #NUMFICH 'se abre para escritura Write #NUMFICH, Text_CSDReceived.Text 'se escriben los datos recibidos Close #NUMFICH 'cierre del fichero End Sub ‘************************************************************************ 'ACCESO A LA CONFIGURACIÓN DE LA TRANSFERENCIA CSD Private Sub cmdCSDconfig_Click()
Unload Form19 Form07.Visible = True
End Sub ‘************************************************************************ 'ACCESO AL MENÚ PRINCIPAL Private Sub cmdMENÚ_Click()
Form04.Visible = True End Sub ‘************************************************************************
Comunicación Punto a Punto Vía Módem GSM Código Fuente
114
10.2.8 FORMULARIO 07.(CSD_CONFIGURATION.FRM) FORMULARIO DE CONFIGURACIÓN DE LA TRANSFERENCIA CSD
'SE CARGA EL FORMULARIO Private Sub Form_Load()
Unload Form06 'se cierra el formulario de CSD DisableX Form07 'se deshabilita el botón CERRAR del formulario LOAD_combo_speed_connection VIEW_CONFIGURATION DISABLE_FRAMES
End Sub ‘************************************************************************ 'SE CARGA LA LISTA DESPLEGABLE CON LOS VALORES Private Sub LOAD_combo_speed_connection()
combo_speed_connection.AddItem ("AUTO SELECTION OF BAUDRATE") combo_speed_connection.AddItem ("2400 bps V.22bis") combo_speed_connection.AddItem ("4800 bps V.32") combo_speed_connection.AddItem ("9600 bps V.32") combo_speed_connection.AddItem ("9600 bps V.34") combo_speed_connection.AddItem ("19200 bps V.34") combo_speed_connection.AddItem ("2400 bps V.110 (ISDN)") combo_speed_connection.AddItem ("4800 bps V.110 (ISDN)") combo_speed_connection.AddItem ("9600 bps V.110 (ISDN)") combo_speed_connection.AddItem ("14400 bps V.110 (ISDN)") combo_speed_connection.AddItem ("19200 bps V.110 (ISDN)") combo_speed_connection.AddItem ("28800 bps V.110 (ISDN)") combo_speed_connection.AddItem ("38400 bps V.110 (ISDN)") combo_speed_connection.AddItem ("48000 bps V.110 (ISDN)") combo_speed_connection.AddItem ("56000 bps V.110 (ISDN)")
End Sub ‘************************************************************************ 'SE VISUALIZA LA CONFIGURACIÓN ACTUAL Private Sub VIEW_CONFIGURATION() 'velocidad de conexión
Select Case config.bearer_Service Case "0" combo_speed_connection.Text = "AUTO SELECTION OF BAUDRATE"
Figura 67. CSD_CONFIGURATION.FRM
Comunicación Punto a Punto Vía Módem GSM Código Fuente
115
Case "4" combo_speed_connection.Text = "2400 bps V.22bis" Case "6" combo_speed_connection.Text = "4800 bps V.32" Case "7" combo_speed_connection.Text = "9600 bps V.32" Case "12" combo_speed_connection.Text = "9600 bps V.34" Case "15" combo_speed_connection.Text = "19200 bps V.34" Case "68" combo_speed_connection.Text = "2400 bps V.110 (ISDN)" Case "70" combo_speed_connection.Text = "4800 bps V.110 (ISDN)" Case "71" combo_speed_connection.Text = "9600 bps V.110 (ISDN)" Case "75" combo_speed_connection.Text = "14400 bps V.110 (ISDN)" Case "79" combo_speed_connection.Text = "19200 bps V.110 (ISDN)" Case "80" combo_speed_connection.Text = "28800 bps V.110 (ISDN)" Case "81" combo_speed_connection.Text = "38400 bps V.110 (ISDN)" Case "82" combo_speed_connection.Text = "48000 bps V.110 (ISDN)" Case "83" combo_speed_connection.Text = "56000 bps V.110 (ISDN)" End Select
'modo de llamada
If config.dialling = "ATT" Then 'tonos Opt_Tone.Value = True
Else 'pulsos Opt_Pulse.Value = True
End If 'modo de respuesta de llamadas
If config.answer_mode = "0" Then 'modo manual Opt_Manual_Answer.Value = True
Else Text_AutoRings.Text = config.answer_mode 'modo automatico, Opt_Auto_Answer.Value = True 'nº de rings
End If 'carácter de escape
Text_EscapeSEQ.Text = config.escape_sequence End Sub ‘************************************************************************ 'DESHABILITAR CONTROLES '(de este modo no se pueden modificar valores involuntariamente) Private Sub DISABLE_FRAMES()
FrmMODE_DIALLING.Enabled = False cmdOKMODEDIAL.Enabled = False FrmANSWER.Enabled = False cmdOKANSWER.Enabled = False FrmBEARER_SERVICE.Enabled = False cmdOKBEARSERV.Enabled = False FrmESCAPESEQ.Enabled = False cmdOKESCSEQ.Enabled = False
Comunicación Punto a Punto Vía Módem GSM Código Fuente
116
End Sub ‘************************************************************************ 'MODIFICAR MODO DE RESPUESTA A UNA LLAMADA ENTRANTE Private Sub cmdModifyANSWER_Click()
FrmANSWER.Enabled = True cmdOKANSWER.Enabled = True
End Sub ‘************************************************************************ 'SELECCIÓN DE MODO MANUAL Private Sub Opt_Manual_Answer_Click()
Text_AutoRings.Text = "" config.answer_mode = "0"
End Sub ‘************************************************************************ 'SELECCIÓN DE MODO AUTOMATICO Private Sub Opt_Auto_Answer_Click()
config.answer_mode = Text_AutoRings.Text 'nº rings End Sub ‘************************************************************************ 'CAPTACIÓN DEL VALOR DE RINGS Private Sub Text_AutoRings_Change()
config.answer_mode = Text_AutoRings.Text 'nº rings End Sub ‘************************************************************************ 'NÚMERO DE RINGS ES UN VALOR NUMÉRICO DEL 1 AL 7 'TAMBIÉN SE PERMITE LA TECLA BORRAR (8) Private Sub Text_AutoRings_KeyPress(KeyAscii As Integer) If (KeyAscii <> 8) And (KeyAscii < 49 Or KeyAscii > 55) Then KeyAscii = 0 End If End Sub ‘************************************************************************ 'VALIDAR MODO DE RESPUESTA A UNA LLAMADA ENTRANTE Private Sub cmdOKANSWER_Click()
FrmANSWER.Enabled = False cmdOKANSWER.Enabled = False
'trama AUTOMATIC ANSWER CONTROL, configura modo de respuesta de llamada str = "ATS0=" + config.answer_mode + vbCr TRAMA 'envío AUTOMATIC_ANSWER_CONTROL 'tratamiento de la respuesta
End Sub ‘************************************************************************ 'MODIFICAR MODO DE LLAMADA Private Sub cmdModifyMODEDIAL_Click()
FrmMODE_DIALLING.Enabled = True cmdOKMODEDIAL.Enabled = True
End Sub ‘************************************************************************ 'SELECCIÓN DE LLAMADA POR PULSOS Private Sub Opt_Pulse_Click()
config.dialling = "ATP"
Comunicación Punto a Punto Vía Módem GSM Código Fuente
117
End Sub ‘************************************************************************ 'SELECCIÓN DE LLAMADA POR TONOS Private Sub Opt_Tone_Click()
config.dialling = "ATT" End Sub ‘************************************************************************ 'VALIDAR MODO DE LLAMADA Private Sub cmdOKMODEDIAL_Click()
FrmMODE_DIALLING.Enabled = False cmdOKMODEDIAL.Enabled = False
'trama SELECT DIALLING, selecciona el modo de llamada
str = config.dialling + vbCr TRAMA 'envío SELECT_DIALLING 'tratamiento de la respuesta
End Sub ‘************************************************************************ 'MODIFICAR VELOCIDAD DE CONEXIÓN Private Sub cmdModifyBEARSERV_Click()
FrmBEARER_SERVICE.Enabled = True cmdOKBEARSERV.Enabled = True
End Sub ‘************************************************************************ 'SELECCIÓN DE VELOCIDAD DE CONEXIÓN Private Sub combo_speed_connection_Click() Select Case combo_speed_connection.Text
Case "AUTO SELECTION OF BAUDRATE" config.bearer_Service = "0" Case "2400 bps V.22bis" config.bearer_Service = "4" Case "4800 bps V.32" config.bearer_Service = "6" Case "9600 bps V.32" config.bearer_Service = "7" Case "9600 bps V.34" config.bearer_Service = "12" Case "19200 bps V.34" config.bearer_Service = "15" Case "2400 bps V.110 (ISDN)" config.bearer_Service = "68" Case "4800 bps V.110 (ISDN)" config.bearer_Service = "70" Case "9600 bps V.110 (ISDN)" config.bearer_Service = "71" Case "14400 bps V.110 (ISDN)" config.bearer_Service = "75" Case "19200 bps V.110 (ISDN)" config.bearer_Service = "79" Case "28800 bps V.110 (ISDN)" config.bearer_Service = "80" Case "38400 bps V.110 (ISDN)" config.bearer_Service = "81" Case "48000 bps V.110 (ISDN)" config.bearer_Service = "82" Case "56000 bps V.110 (ISDN)" config.bearer_Service = "83"
Comunicación Punto a Punto Vía Módem GSM Código Fuente
118
End Select End Sub ‘************************************************************************ 'VALIDAR VELOCIDAD DE CONEXIÓN Private Sub cmdOKBEARSERV_Click()
FrmBEARER_SERVICE.Enabled = False cmdOKBEARSERV.Enabled = False
'trama SELECT BEARER SERVICE, configura la velocidad de la conexión
str = "AT+CBST=" + config.bearer_Service + ",0,1" + vbCr TRAMA 'envío SELECT_BEARER_SERVICE 'tratamiento de la respuesta
End Sub ‘************************************************************************ 'MODIFICAR CARÁCTER DE LA SECUENCIA DE ESCAPE Private Sub cmdModifyESCSEQ_Click()
FrmESCAPESEQ.Enabled = True cmdOKESCSEQ.Enabled = True
End Sub ‘************************************************************************ 'CONFIGURACIÓN DEL CARÁCTER DE LA SECUENCIA DE ESCAPE Private Sub Text_EscapeSEQ_Change()
config.escape_sequence = Text_EscapeSEQ.Text End Sub ‘************************************************************************ 'CARÁCTER DE ESCAPE ES UN VALOR NUMÉRICO. SE PERMITE LA TECLA BORRAR (8) Private Sub Text_EscapeSEQ_KeyPress(KeyAscii As Integer) If (KeyAscii <> 8) And (KeyAscii < 48 Or KeyAscii > 57) Then KeyAscii = 0 End If End Sub ‘************************************************************************ 'VALIDAR CARÁCTER DE LA SECUENCIA DE ESCAPE Private Sub cmdOKESCSEQ_Click()
FrmESCAPESEQ.Enabled = False cmdOKESCSEQ.Enabled = False
'trama ESCAPE SEQUENCE CHARACTER, configura el carácter de escape del 'modo online data mode
str = "ATS2=" + config.escape_sequence + vbCr TRAMA 'envío ESCAPE_SEQUENCE_CHARACTER 'tratamiento de la respuesta
End Sub ‘************************************************************************ 'RETORNA AL FORMULARIO CSD Private Sub cmdReturnCSD_Click()
Form06.Visible = True End Sub ‘************************************************************************
Comunicación Punto a Punto Vía Módem GSM Código Fuente
119
10.2.9 FORMULARIO 08.(PHONEBOOK.FRM) FORMULARIO DE LA AGENDA DE TELÉFONOS
'SE CARGA EL FORMULARIO Private Sub Form_Load()
Unload Form04 'cerrar resto de formularios que restan visibles Unload Form12 DisableX Form08 'se deshabilita el botón CERRAR del formulario VIEW_CONFIGURATION
End Sub ‘************************************************************************ 'SE VISUALIZA LA CONFIGURACIÓN DE LA AGENDA DE TELÉFONOS Private Sub VIEW_CONFIGURATION()
If config.PhoneBook = Chr(34) + "SM" + Chr(34) Then 'tarj. SIM Optmem_SIM.Value = True
Else 'módem GM29 Optmem_ME.Value = True
End If End Sub ‘************************************************************************ 'SELECCIÓN DEL ALMACENAMIENTO DE LA AGENDA, módulo GM29 Private Sub Optmem_ME_Click()
config.PhoneBook = Chr(34) + "ME" + Chr(34) End Sub ‘************************************************************************ 'SELECCIÓN DEL ALMACENAMIENTO DE LA AGENDA, tarjeta SIM Private Sub Optmem_SIM_Click()
config.PhoneBook = Chr(34) + "SM" + Chr(34) End Sub ‘************************************************************************ 'ACCESO A LA BÚSQUEDA POR NOMBRE Private Sub cmdNameSearch_Click()
Form09.Visible = True Unload Me
End Sub ‘************************************************************************ 'ACCESO A LA BÚSQUEDA POR POSICIÓN Private Sub cmdSearchPosition_Click()
Form10.Visible = True Unload Me
Figura 68. PHONEBOOK.FRM
Comunicación Punto a Punto Vía Módem GSM Código Fuente
120
End Sub ‘************************************************************************ 'INSERTAR NUEVA ENTRADA EN LA AGENDA Private Sub cmdAddToPhoneBook_Click()
Form12.Visible = True End Sub ‘************************************************************************ 'SALIR DE LA AGENDA Private Sub cmdSALIR_Click()
If Form06.Visible = True Or Form17.Visible = True Then Unload Me ‘cerrar form08 y volver a CSD o envío SMS
Else Form04.Visible = True 'ir al MENÚ principal
End If End Sub ‘************************************************************************
Comunicación Punto a Punto Vía Módem GSM Código Fuente
121
10.2.10 FORMULARIO 09.(PHONEBOOK_NAME_SEARCH.FRM) FORMULARIO DE LA BÚSQUEDA POR NOMBRE EN LA AGENDA
‘SE CARGA EL FORMULARIO Private Sub Form_Load()
DisableX Form09 'se deshabilita el botón CERRAR del formulario 'trama PHONEBOOK STORAGE, establece el lugar de la agenda telefónica
str = "AT+CPBS=" + config.PhoneBook + vbCr TRAMA 'envío PHONEBOOK_STORAGE 'tratamiento de la respuesta
End Sub ‘************************************************************************ 'INICIA LA BÚSQUEDA Private Sub cmdOK_Click()
Form11.Text_ResultPhoneBook.Text = "" 'borrar resultados anteriores If Text_NameSearch.Text = "" Then 'tratar posible error
MsgBox ("INTRODUZCA TEXTO DE BÚSQUEDA") Exit Sub
End If
'trama PHONEBOOK READ, envia trama y presenta nombres y números de tlf. 'de la agenda
str = "AT+CPBF=" + Chr(34) + Text_NameSearch.Text + Chr(34) + vbCr PHONEBOOK_READ (2) '2=agenda teléfonos
End Sub ‘************************************************************************ 'REALIZAR NUEVA BÚSQUEDA Private Sub cmdNewSearch_Click()
Text_NameSearch.Text = "" 'borrar texto de búsqueda anterior Unload Form11 'ocultar form. de resultados anteriores
End Sub ‘************************************************************************ 'SALIR DE LA BÚSQUEDA Private Sub cmdExitSearch_Click()
Unload Form11 If Form06.Visible = True Or Form17.Visible = True Then
Unload Me 'si proviene de CSD o de envío SMS, cerrar form Else
Form04.Visible = True 'sino mostrar MENÚ principal End If
End Sub ‘************************************************************************
Figura 69. PHONEBOOK_NAME_SEARCH.FRM
Comunicación Punto a Punto Vía Módem GSM Código Fuente
122
10.2.11 FORMULARIO 10.(PHONEBOOK_POSITION_SEARCH.FRM) FORMULARIO DE LA BÚSQUEDA POR POSICIÓN O RANGO EN LA AGENDA
'SE CARGA EL FORMULARIO Private Sub Form_Load()
DisableX Form10 'se deshabilita el botón CERRAR del formulario 'trama PHONEBOOK STORAGE, establece el lugar de la agenda telefonica
str = "AT+CPBS=" + config.PhoneBook + vbCr TRAMA 'envío PHONEBOOK_STORAGE 'tratamiento de la respuesta
End Sub ‘************************************************************************ 'INICIA LA BÚSQUEDA Private Sub cmdOK_Click()
Form11.Text_ResultPhoneBook.Text = "" 'borrar resultados anteriores If Text_PositionSearch.Text = "" Then 'tratar posible error MsgBox ("INTRODUZCA TEXTO DE BÚSQUEDA") Exit Sub End If
'trama PHONEBOOK READ, envia trama y presenta nombres y números de 'teléfonos de la agenda
str = "AT+CPBR=" + Text_PositionSearch.Text + vbCr PHONEBOOK_READ (2) '2=agenda teléfonos
End Sub ‘************************************************************************ 'POSICIÓN O RANGO SON VALORES NUMÉRICOS 'TAMBIÉN SE PERMITE LA TECLA BORRAR (8) Y "," (44) COMO SEPARADOR Private Sub Text_PositionSearch_KeyPress(KeyAscii As Integer)
If (KeyAscii <> 8) And (KeyAscii <> 44) And (KeyAscii < 48 Or KeyAscii > 57) Then
KeyAscii = 0 End If End Sub ‘************************************************************************ 'REALIZAR NUEVA BÚSQUEDA Private Sub cmdNewSearch_Click()
Text_PositionSearch.Text = "" 'borrar texto de búsqueda anterior Unload Form11 'ocultar form de resultados anteriores
End Sub ‘************************************************************************
Figura 70. PHONEBOOL_POSITION_SEARCH.FRM
Comunicación Punto a Punto Vía Módem GSM Código Fuente
123
'SALIR DE LA BÚSQUEDA Private Sub cmdExitSearch_Click()
Unload Form11 If Form06.Visible = True Or Form17.Visible = True Then
Unload Me 'si proviene de CSD O de envío SMS, cerrar form Else
Form04.Visible = True 'sino mostrar MENÚ principal End If
End Sub ‘************************************************************************
Comunicación Punto a Punto Vía Módem GSM Código Fuente
124
10.2.12 FORMULARIO 11.(PHONEBOOK_SEARCH_RESULTS.FRM) FORMULARIO DE PRESENTACION DE RESULTADOS DE LA BÚSQUEDA EN LA
AGENDA DE TELÉFONOS
‘SE CARGA EL FORMULARIO Private Sub Form_Load()
DisableX Form11 'se deshabilita el botón CERRAR del formulario End Sub ‘************************************************************************
Figura 71. PHONEBOOK_SEARCH_RESULTS.FRM
Comunicación Punto a Punto Vía Módem GSM Código Fuente
125
10.2.13 FORMULARIO 12.(PHONEBOOK_WRITE.FRM) FORMULARIO INSERTAR NUEVA ENTRADA A LA AGENDA DE TELÉFONOS
'SE CARGA FORMULARIO Private Sub Form_Load()
Unload Form08 DisableX Form12 'se deshabilita el botón CERRAR del formulario
'trama PHONEBOOK STORAGE, establece el lugar de la agenda telefonica
str = "AT+CPBS=" + config.PhoneBook + vbCr TRAMA 'envío PHONEBOOK_STORAGE 'tratamiento de la respuesta
End Sub ‘************************************************************************ 'AÑADIR NUEVA ENTRADA Private Sub cmdADD_Click() Dim position As String 'variables locales Dim number As String Dim name As String
position = Text_SavePosition.Text 'posición en la agenda number = Chr(34) + Text_SaveNumber.Text + Chr(34) 'num de telf name = Chr(34) + Text_SaveName.Text + Chr(34) 'nombre
‘trama PHONEBOOK WRITE, añade un nuevo registro en la agenda de telf
str = "AT+CPBW=" + position + "," + number + ",," + name + vbCr TRAMA 'envío PHONEBOOK_WRITE 'tratamiento de la respuesta
End Sub ‘************************************************************************ 'LA POSICIÓN EN LA AGENDA ES UN VALOR NUMÉRICO. 'TAMBIÉN SE PERMITE LA TECLA BORRAR (8) Private Sub Text_SavePosition_KeyPress(KeyAscii As Integer) If (KeyAscii <> 8) And (KeyAscii < 48 Or KeyAscii > 57) Then KeyAscii = 0 End If End Sub ‘************************************************************************ 'EL NÚMERO DE TELÉFONO ES UN VALOR NUMÉRICO. TAMBIÉN SE PERMITE LA TECLA BORRAR (8) Y EL PREFIJO + (43) Private Sub Text_SaveNumber_KeyPress(KeyAscii As Integer)
Figura 72. PHONEBOOK_WRITE.FRM
Comunicación Punto a Punto Vía Módem GSM Código Fuente
126
If (KeyAscii <> 8) And (KeyAscii <> 43) And (KeyAscii < 48 Or KeyAscii > 57) Then KeyAscii = 0 End If End Sub ‘************************************************************************ 'SE CANCELA LA INSERCION Private Sub cmdCancel_Click()
Form08.Visible = True 'retorno al MENÚ de la agenda End Sub ‘************************************************************************
Comunicación Punto a Punto Vía Módem GSM Código Fuente
127
10.2.14 FORMULARIO 13.(SMS.FRM) FORMULARIO MENÚ DE MENSAJES SMS
'SE CARGA EL FORMULARIO Private Sub Form_Load()
UNLOAD_FORMS 'se cierran resto de formularios abiertos DisableX Form13 'se deshabilita el botón CERRAR del formulario
End Sub ‘************************************************************************ 'SE CIERRAN FORMULARIOS Private Sub UNLOAD_FORMS()
Unload Form04 Unload Form14 Unload Form15 Unload Form16 Unload Form17
End Sub ‘************************************************************************ 'ACCESO A LA LECTURA DE MENSAJES Private Sub cmdReadMsg_Click()
Form15.Visible = True End Sub ‘************************************************************************ 'ACCESO A LA ESCRITURA DE MENSAJES Private Sub cmdWriteMsg_Click()
Form16.Visible = True End Sub ‘************************************************************************ 'ACCESO A LA CONFIGURACIÓN DE LOS MENSAJES Private Sub cmdMsgConfig_Click()
Form14.Visible = True End Sub ‘************************************************************************ 'ACCESO AL MENÚ PRINCIPAL Private Sub cmdMENÚ_Click()
Form04.Visible = True End Sub ‘************************************************************************
Figura 73. SMS.FRM
Comunicación Punto a Punto Vía Módem GSM Código Fuente
128
10.2.15 FORMULARIO 14.(SMS_CONFIGURATION.FRM) FORMULARIO CONFIGURACIÓN DE MENSAJES SMS
'SE CARGA EL FORMULARIO Private Sub Form_Load()
Unload Form13 DisableX Form14 'se deshabilita el botón CERRAR del formulario DISABLE_CONTROLS VIEW_CONFIGURATION
End Sub ‘************************************************************************ 'DESHABILITAR CONTROLES Private Sub DISABLE_CONTROLS()
frmMEM1.Enabled = False frmMEM2.Enabled = False frmMEM3.Enabled = False cmdOKPREFMES.Enabled = False FrmSERV_CENT2.Enabled = False cmdOKSERVCENT.Enabled = False FrmMESS_FORMAT2.Enabled = False cmdOKMESSFORMAT.Enabled = False FrmSET_TEXT_PARAM2.Enabled = False cmdOKtimeMax.Enabled = False
End Sub ‘************************************************************************
Figura 74. SMS_CONFIGURATION.FRM
Comunicación Punto a Punto Vía Módem GSM Código Fuente
129
'VISUALIZAR CONFIGURACIÓN Private Sub VIEW_CONFIGURATION() 'Almacenamiento de mensajes
'3 MEMORIAS:mem1,mem2,mem3.2 TIPOS: SM(SIM), ME(GM29) If config.mem1 = Chr(34) + "SM" + Chr(34) Then
Optm1SM.Value = True Else
Optm1ME.Value = True End If If config.mem2 = Chr(34) + "SM" + Chr(34) Then
Optm2SM.Value = True Else
Optm2ME.Value = True End If If config.mem3 = Chr(34) + "SM" + Chr(34) Then
Optm3SM.Value = True Else
Optm3ME.Value = True End If
'Numero del Centro de servicio de mensajes
Select Case config.SERV_CENT Case "+34607003110" Opt_Vodafone.Value = True Case "+34609090909" Opt_Movistar.Value = True Case "+34656000311" Opt_Amena.Value = True Case Else Opt_Other.Value = True
End Select 'Formato del mensaje
If config.MsgFormat = "1" Then OptTEXT.Value = True 'TEXT
Else OptPDU.Value = True 'PDU
End If 'Tiempo máximo permanencia
Select Case config.time_max Case "17,011,0,0" Opt1h.Value = True Case "17,071,0,0" Opt6h.Value = True Case "17,167,0,0" Opt24h.Value = True Case "17,169,0,0" Opt72h.Value = True Case "17,173,0,0" Opt1w.Value = True Case "17,255,0,0" OptTmax.Value = True
End Select End Sub ‘************************************************************************ 'MODIFICAR MEMORIAS ALMACENAMIENTO 'se habilitan los controles correspondientes Private Sub cmdModifyPREFMES_Click()
frmMEM1.Enabled = True
Comunicación Punto a Punto Vía Módem GSM Código Fuente
130
frmMEM2.Enabled = True frmMEM3.Enabled = True cmdOKPREFMES.Enabled = True
End Sub ‘************************************************************************ 'SELECCIÓN DE ME PARA LA MEMORIA 1 Private Sub Optm1ME_Click()
config.mem1 = Chr(34) + "ME" + Chr(34) End Sub ‘************************************************************************ 'SELECCIÓN DE SM PARA LA MEMORIA 1 Private Sub Optm1SM_Click()
config.mem1 = Chr(34) + "SM" + Chr(34) End Sub ‘************************************************************************ 'SELECCIÓN DE ME PARA LA MEMORIA 2 Private Sub Optm2ME_Click()
config.mem2 = Chr(34) + "ME" + Chr(34) End Sub ‘************************************************************************ 'SELECCIÓN DE SM PARA LA MEMORIA 2 Private Sub Optm2SM_Click()
config.mem2 = Chr(34) + "SM" + Chr(34) End Sub ‘************************************************************************ 'SELECCIÓN DE ME PARA LA MEMORIA 3 Private Sub Optm3ME_Click()
config.mem3 = Chr(34) + "ME" + Chr(34) End Sub ‘************************************************************************ 'SELECCIÓN DE SM PARA LA MEMORIA 2 Private Sub Optm3SM_Click()
config.mem3 = Chr(34) + "SM" + Chr(34) End Sub ‘************************************************************************ 'VALIDAR CAMBIOS Private Sub cmdOKPREFMES_Click()
frmMEM1.Enabled = False 'deshabilitar controles frmMEM2.Enabled = False frmMEM3.Enabled = False
'trama PREFERRED MESSAGE STORAGE,selecciona las diferentes memorias para 'los diferentes acciones con los mensajes. Se trata respuesta obtenida.
PREFERRED_MSG_STORAGE cmdOKPREFMES.Enabled = False
End Sub ‘************************************************************************ 'MODIFICAR NÚMERO DEL CENTRO DE SERVICIO 'se habilitan los controles correspondientes Private Sub cmdModifySERVCENT_Click()
FrmSERV_CENT2.Enabled = True cmdOKSERVCENT.Enabled = True
End Sub ‘************************************************************************
Comunicación Punto a Punto Vía Módem GSM Código Fuente
131
'SELECCIÓN DE LA OPERADORA AMENA Private Sub Opt_Amena_Click()
config.SERV_CENT = "+34656000311" End Sub ‘************************************************************************ 'SELECCIÓN DE LA OPERADORA MOVISTAR Private Sub Opt_Movistar_Click()
config.SERV_CENT = "+34609090909""+34656000311" End Sub ‘************************************************************************ 'SELECCIÓN DE LA OPERADORA VODAFONE Private Sub Opt_Vodafone_Click()
config.SERV_CENT = "+34607003110" End Sub ‘************************************************************************ 'SELECCIÓN DE OTRA OPERADORA. INTRODUCIR VALOR Private Sub Opt_Other_Click()
Text_SCA.SetFocus config.SERV_CENT = Text_SCA.Text 'introducir número
End Sub ‘************************************************************************ 'CAPTACION DEL VALOR DEL CENTRO DE SERVICIO Private Sub Text_SCA_Change()
config.SERV_CENT = Text_SCA.Text End Sub ‘************************************************************************ 'NÚMERO DEL CENTRO DE SERVICIO SOLO ADMITE VALORES NUMÉRICOS 'Y EL PREFIJO + (43). TAMBIÉN SE PERMITE LA TECLA BORRAR (8) Private Sub Text_SCA_KeyPress(KeyAscii As Integer)
If (KeyAscii <> 8) And (KeyAscii <> 43) And (KeyAscii < 48 Or KeyAscii > 57) Then
KeyAscii = 0 End If End Sub ‘************************************************************************ 'VALIDAR CAMBIOS Private Sub cmdOKSERVCENT_Click()
FrmSERV_CENT2.Enabled = False 'trama SERVICE CENTRE ADRESS,establece el número del centro de mensajes
str = "AT+CSCA=" + Chr(34) + config.SERV_CENT + Chr(34) + vbCr TRAMA 'envío SERVICE_CENTRE_ADRESS 'tratamiento de la respuesta cmdOKSERVCENT.Enabled = False
End Sub ‘************************************************************************ 'MODIFICAR FORMATO DEL MENSAJE 'se habilitan los controles correspondientes Private Sub cmdModifyMESSFORMAT_Click()
FrmMESS_FORMAT2.Enabled = True cmdOKMESSFORMAT.Enabled = True
End Sub ‘************************************************************************
Comunicación Punto a Punto Vía Módem GSM Código Fuente
132
'SELECCIÓN DE FORMATO DE MENSAJES = PDU Private Sub OptPDU_Click()
config.MsgFormat = "0" End Sub ‘************************************************************************ 'SELECCIÓN DE FORMATO DE MENSAJES = TEXTO Private Sub OptTEXT_Click()
config.MsgFormat = "1" End Sub ‘************************************************************************ 'VALIDAR CAMBIOS Private Sub cmdOKMESSFORMAT_Click()
FrmMESS_FORMAT2.Enabled = False 'trama MESSAGE FORMAT, establece el tipo de mensajes
str = "AT+CMGF=" + config.MsgFormat + vbCr TRAMA 'envío MESSAGE_FORMAT 'tratamiento de la respuesta cmdOKMESSFORMAT.Enabled = False
End Sub ‘************************************************************************ 'MODIFICAR TIEMPO MAXIMO PERMANENCIA 'se habilitan los controles correspondientes Private Sub cmdModifyTimeMax_Click() FrmSET_TEXT_PARAM2.Enabled = True cmdOKtimeMax.Enabled = True End Sub ‘************************************************************************ 'SELECCIÓN DE TIEMPO MAXIMO = 1H Private Sub Opt1h_Click()
config.time_max = "17,011,0,0" End Sub ‘************************************************************************ 'SELECCIÓN DE TIEMPO MAXIMO = 1SEMANA Private Sub Opt1w_Click()
config.time_max = "17,173,0,0" End Sub ‘************************************************************************ 'SELECCIÓN DE TIEMPO MAXIMO = 24H Private Sub Opt24h_Click()
config.time_max = "17,167,0,0" End Sub ‘************************************************************************ 'SELECCIÓN DE TIEMPO MAXIMO = 6H Private Sub Opt6h_Click()
config.time_max = "17,071,0,0" End Sub ‘************************************************************************ 'SELECCIÓN DE TIEMPO MAXIMO = 72H Private Sub Opt72h_Click()
config.time_max = "17,169,0,0" End Sub ‘************************************************************************
Comunicación Punto a Punto Vía Módem GSM Código Fuente
133
'SELECCIÓN DE TIEMPO MAXIMO = TIEMPO MAXIMO Private Sub OptTmax_Click()
config.time_max = "17,255,0,0" End Sub ‘************************************************************************ 'VALIDAR CAMBIOS Private Sub cmdOKtimeMax_Click()
FrmSET_TEXT_PARAM2.Enabled = False 'trama MESSAGE TEXT TIME MAX, se configura el tiempo maximo de almacenamiento de mensajes
str = "AT+CSMP=" + config.time_max + vbCr TRAMA 'envío MSGTXT_TIME_MAX 'tratamiento de la respuesta cmdOKtimeMax.Enabled = False
End Sub ‘************************************************************************ 'RETORNAR AL MENÚ DE MENSAJES SMS Private Sub CmdSMSMENÚ_Click()
Form13.Visible = True End Sub ‘************************************************************************
Comunicación Punto a Punto Vía Módem GSM Código Fuente
134
10.2.16 FORMULARIO 15.(READ_SMS.FRM) FORMULARIO DE LECTURA, BORRADO Y REENVIADO DE SMS
'SE CARGA EL FORMULARIO Private Sub Form_Load()
Unload Form13 'cerrar resto de formularios Unload Form18 DisableX Form15 'se deshabilita el botón CERRAR del formulario index = 1 'posición del mensaje a leer
'trama READ MESSAGE, envío de la trama y lectura del mensaje SMS READ_MESSAGE (True)
End Sub ‘************************************************************************ 'LEER PRÓXIMO MENSAJE Private Sub cmdNEXT_Click()
Text_ReadSMS.Text = "" index = index + 1 'se avanza una posición de lectura If (index = 18) Then 'final de los mensajes
MsgBox ("NO HAY MAS MENSAJES") index = 1 'retornamos al inicial
End If 'trama READ MESSAGE, envío de la trama y lectura del mensaje SMS
READ_MESSAGE (True) 'true=sentido de lectura hacia adelante End Sub ‘************************************************************************ 'LEER MENSAJE ANTERIOR Private Sub cmdPREVIOUS_Click()
Text_ReadSMS.Text = "" index = index - 1 'se retrocede una posición de lectura If (index = 0) Then 'final de los mensajes
MsgBox ("NO HAY MAS MENSAJES") index = 17 'retornamos al inicial
End If READ_MESSAGE (False) 'false=sentido de lectura hacia atras
End Sub ‘************************************************************************
Figura 75. READ_SMS.FRM
Comunicación Punto a Punto Vía Módem GSM Código Fuente
135
'BORRAR MENSAJE Private Sub cmdDELETE_Click() Dim index2 As String
index2 = CStr(index) 'Conversion de tipo integer a tipo string 'trama DELETE MESSAGE, borra un mensaje de una posición determinada
str = "AT+CMGD=" + index2 + vbCr TRAMA 'envío DELETE_MESSAGE 'tratamiento de la respuesta
End Sub ‘************************************************************************ 'REENVIAR MENSAJE Private Sub cmdFORWARD_Click()
Form17.Visible = True End Sub ‘************************************************************************ 'RETORNAR AL MENÚ DE MENSAJES SMS Private Sub CmdSMSMENÚ_Click()
Form13.Visible = True End Sub ‘************************************************************************
Comunicación Punto a Punto Vía Módem GSM Código Fuente
136
10.2.17 FORMULARIO 16.(WRITE_SMS.FRM) FORMULARIO ESCRIBIR MENSAJES,GUARDAR O ENVIAR
'SE CARGA FORMULARIO Private Sub Form_Load()
Unload Form13 DisableX Form16 'se deshabilita el botón CERRAR del formulario
End Sub ‘************************************************************************ 'GUARDAR MENSAJE EN LA MEMORIA Private Sub cmdSaveSMS_Click()
str = "AT+CMGW=" + Chr(34) + "2" + Chr(34) + vbCr 'trama para guardar mensaje en la memoria
SEND_OR_WRITE_MESSAGE_TO_MEMORY Text_SMS.Text, 1 '1=guardar End Sub ‘************************************************************************ 'ENVIAR MENSAJE Private Sub cmdSendSMS_Click()
Form17.Visible = True End Sub ‘************************************************************************ 'CANCELAR Private Sub cmdCancel_Click()
Text_SMS.Text = "" 'borrado del texto Form13.Visible = True 'retorno al MENÚ de mensajes
End Sub ‘************************************************************************
Figura 76. WRITE_SMS.FRM
Comunicación Punto a Punto Vía Módem GSM Código Fuente
137
10.2.18 FORMULARIO 17.(SEND_SMS.FRM)
FORMULARIO ENVIAR MENSAJES
'SE CARGA FORMULARIO Private Sub Form_Load()
DisableX Form17 'se deshabilita el botón CERRAR del formulario End Sub ‘************************************************************************ 'ENVIAR MENSAJE Private Sub cmdSendSMS_Click() 'variables locales Dim DestinationNumber As String 'número de teléfono Dim index2 As String 'posición DestinationNumber = Chr(34) + Text_DestinationNumber.Text + Chr(34) index2 = CStr(index) 'conversion integer-string If Form16.Visible = True Then
str = "AT+CMGS=" + DestinationNumber + vbCr 'escribir y enviar sms SEND_OR_WRITE_MESSAGE_TO_MEMORY Form16.Text_SMS.Text, 2 '2=enviar
Else 'trama SEND FROM STORAGE,envia un sms guardado en una posición de memoria
str = "AT+CMSS=" + index2 + "," + DestinationNumber + vbCr TRAMA 'envío SEND_FROM_STORAGE 'tratamiento de la respuesta
End If End Sub ‘************************************************************************ 'EL NÚMERO DE TELÉFONO ES UN VALOR NUMÉRICO 'TAMBIÉN SE PERMITE LA TECLA BORRAR (8) Y EL PREFIJO + (43) Private Sub Text_DestinationNumber_KeyPress(KeyAscii As Integer)
If (KeyAscii <> 8) And (KeyAscii <> 43) And (KeyAscii < 48 Or KeyAscii > 57) Then
KeyAscii = 0 End If End Sub ‘************************************************************************
Figura 77. SEND_SMS.FRM
Comunicación Punto a Punto Vía Módem GSM Código Fuente
138
'ACCESO A LA AGENDA DE TELÉFONOS Private Sub cmdPhoneBook_Click()
Form08.Visible = True End Sub ‘************************************************************************ 'CANCELAR Private Sub cmdCancel_Click()
Unload Me End Sub ‘************************************************************************
Comunicación Punto a Punto Vía Módem GSM Código Fuente
139
10.2.19 FORMULARIO 18.(NEW_SMS_NOTIFY.FRM) FORMULARIO DE NOTIFICACIÓN DE NUEVO MENSAJE RECIBIDO
'SE CARGA FORMULARIO Private Sub Form_Load()
strBUFFER = "" 'se vacia la variable que contine la información 'del buffer
DisableX Form18 'se deshabilita el botón CERRAR del formulario End Sub ‘************************************************************************ 'LEER MENSAJE Private Sub cmdReadNOW_Click()
Form15.Visible = True index = 1 'posición de lectura
'trama READ MESSAGE, envío de la trama y lectura del mensaje SMS READ_MESSAGE (True) 'true=sentido de lectura hacia adelante
End Sub ‘************************************************************************
Figura 78. NEW_SMS_NOTIFY.FRM
Comunicación Punto a Punto Vía Módem GSM Código Fuente
140
10.2.20 FORMULARIO 19.(CALL_NOTIFY.FRM) FORMULARIO DE NOTIFICACIÓN DE LLAMADA ENTRANTE
‘AL CERRARSE EL FORMULARIO SE REINICIALIZA LA VARIABLE CONTADOR Private Sub Form_Unload(Cancel As Integer) RINGS = 0 End Sub ‘************************************************************************
Figura 79. CALL_NOTIFY.FRM
Comunicación Punto a Punto Vía Módem GSM Código Fuente
141
10.2.21 FORMULARIO 20.(MODULE_SIM_IDENTIFICATION.FRM) FORMULARIO DE INFORMACIÓN DEL MÓDEM Y DE LA TARGETA SIM
'SE CARGA EL FORMULARIO Private Sub Form_Load()
Unload Form04 'cerramos el MENÚ principal DisableX Form20 'se deshabilita el botón CERRAR del formulario
End Sub ‘************************************************************************ 'RETORNO AL MENÚ PRINCIPAL Private Sub cmdOK_Click()
Form04.Visible = True End Sub ‘************************************************************************
Figura 80. MODULE_SIM_IDENTIFICATION.FRM
Comunicación Punto a Punto Vía Módem GSM Código Fuente
142
10.2.22 FORMULARIO 21.(TRAMAS_ENV_RECEPC.FRM) FORMULARIO DE VISUALIZACIÓN DE LAS TRAMAS DE ENVÍO Y RECEPCIÓN
Figura 81. TRAMAS_ENV_RECEP.FRM
Comunicación Punto a Punto Vía Módem GSM Código Fuente
143
10.2.23 MODULE VARIABLES.(Variables.bas) 'MÓDULO de declaración de variables
'Declaracion de variables publicas
Public str As String 'preparacion de tramas Public index As Integer 'lectura de sms Public online_data As Boolean 'modo online o comand Public strBUFFER As String 'contiene datos del buffer Public RINGS As Integer 'número de rings (llamadas) Public timeout_cont As Integer 'contador de segundos (timeout) Public timeout As Boolean 'fuera de tiempo?
'Declaracion de registro tipo reg
Public Type REG mem1 As String * 4 mem2 As String * 4 mem3 As String * 4 PhoneBook As String * 4 MsgFormat As String * 1 SERV_CENT As String * 12 time_max As String * 10 dialling As String * 3 answer_mode As String * 1 bearer_Service As String escape_sequence As String
End Type
Public config As REG 'constantes definidas por visual basic
'vbCr = Chr(13) 'vbLf = Chr(10) 'vbCrLf = Chr(13)+Chr(10)
Comunicación Punto a Punto Vía Módem GSM Código Fuente
144
10.2.24 MODULE PROCEDURES.(Procedures.bas) 'MÓDULO de declaración de acciones de envío de tramas
‘DECLARACION DE VARIABLES LOCALES PARA ESTE MÓDULO Private aux As Integer Private straux As String ‘************************************************************************ 'ACCIÓN GENERAL TRAMA. ENVIA COMANDO, ESPERA RESPUESTA Y TRATA TIMEOUT 'COMUN PARA TODOS AQUELLOS COMANDOS CUYO FORMATO DE RESPUESTA ES TIPO A 'AT...+<parametros>+CR + CRLF+ mensaje + CRLF Public Sub TRAMA()
SEND_COMMAND INI_TIMER_OUT WAIT_RESULT_CODES TIME_OUT
End Sub ‘************************************************************************ 'ENVÍO DEL COMANDO AT Public Sub SEND_COMMAND() aux = 0 'variable de control de respuesta completa Form01.MSComm1.Output = str 'introduce en el buffer el comando AT Form21.Text_CommandSent.Text = str 'se visualiza la transferencia End Sub ‘************************************************************************ 'INICIALIZACIÓN DEL TIMER PRA EL CONTROL DEL TIMEOUT Public Sub INI_TIMER_OUT()
timeout_cont = 0 'reinicio de la variable de control Form01.Timer_Mscomm.Enabled = True 'se activa timer
End Sub ‘************************************************************************ 'ESPERA DE LA RESPUESTA COMPLETA PARA SU POSTERIOR TRATAMIENTO 'Restaremos en el bucle hasta que que se encunetren los caracteres CRLF de final de respuesta. Para ello debemos comparar con la variable que lee el buffer strBUFFER a partir de len(str)+2 caracteres (tamaño de la trama de envío) Public Sub WAIT_RESULT_CODES()
Do DoEvents 'se permiten eventos para la actualización de strBUFFER Loop Until (InStr(Len(str) + 2, strBUFFER, vbCrLf) Or timeout)
End Sub ‘************************************************************************ 'TIMEOUT.SE COMPRUEVBA SI HA EXISTIDO UN TIEMPO EXCESIVAMENTE GRANDE PARA RESPONDER. Si ha ocurrido timeout se trata, sino se deshabilita el timer y se reinican los contadores para la proximo envío de comandos Public Sub TIME_OUT() If timeout Then 'ha ocurrido timeout
MsgBox "ERROR DE TIMEOUT" + vbCrLf + "Compruebe que el módem este enchufado correctamente y ejecute de nuevo el programa", vbOKOnly + vbCritical End 'finalizamos el programa. Ha ocurrido un error en el módem
Else Form01.Timer_Mscomm.Enabled = False 'dehabilita el timer timeout_cont = 0 'reinician contadores timeout = False 'condicion falsa End If
End Sub ‘************************************************************************
Comunicación Punto a Punto Vía Módem GSM Código Fuente
145
'ACCIÓN QUE REALIZA EL CONTROL DE LOS CÓDIGOS DE ACCESO. 'INTERROGA A LA TARJETA SIM PARA CONOCER SU ESTADO: READY, SIM PIN, SIMPUK Public Sub PIN_CONTROL() str = "AT+CPIN?" + vbCr 'se prepara la trama SEND_COMMAND 'se envia comando INI_TIMER_OUT 'se inicia el timer Do 'bucle de espera a la respuesta completa o timeout DoEvents 'se permiten eventos (actualización strBUFFER) 'TIPO C. Comparación completa de la respuesta Select Case strBUFFER Case str + vbCrLf + "+CPIN: " + "READY" + vbCrLf + vbCrLf + "OK" + vbCrLf 'tratamiento de la respuesta: SISTEMA PREPARADO strBUFFER = "" 'se vacia contenido (lectura buffer) MsgBox "SISTEMA PREPARADO", vbOKOnly + vbInformation 'msg control Form21.Text_StateSending.Text = "" Form01.Visible = False 'se oculta formulario inicial Form04.Visible = True 'se muestra MENÚ principal aux = 1 'salimos del bucle Case str + vbCrLf + "+CPIN: " + "SIM PIN" + vbCrLf + vbCrLf + "OK" + vbCrLf 'tratamiento de la respuesta: NECESARIO CÓDIGO PIN
MsgBox "ES NECESARIO QUE INTRODUZCA EL CÓDIGO PIN", vbOKOnly + vbInformation
strBUFFER = "" 'se vacia contenido (lectura buffer) Form02.Visible = True 'se muestra form introduccion código PIN aux = 1 'salimos del bucle Case str + vbCrLf + "+CPIN: " + "SIM PUK" + vbCrLf + vbCrLf + "OK" + vbCrLf 'tratamiento de la respuesta:NECESARIO CÓDIGO PUK
MsgBox "ES NECESARIO QUE INTRODUZCA EL CÓDIGO PUK", vbOKOnly + vbInformation
strBUFFER = "" 'se vacia contenido (lectura buffer) Form03.Visible = True 'se muestra form. introduccion código PUK aux = 1 'salimos del bucle Case str + vbCrLf + "+CME ERROR: SIM not inserted" + vbCrLf 'tratamiento de la respuesta
MsgBox "INTRODUZCA LA TARJETA SIM Y PULSE ACEPTAR", vbOKOnly + vbExclamation 'mensaje de aviso
strBUFFER = "" 'se vacia contenido (lectura buffer) aux = 1 'salimos del bucle PIN_CONTROL 'rellamada a la accion End Select 'condiciones de salida(respuesta completa o timeout) Loop Until (aux = 1 Or timeout) TIME_OUT 'se produjo timeout? tratamiento del mismo End Sub ‘************************************************************************
Comunicación Punto a Punto Vía Módem GSM Código Fuente
146
'LECTURA DEL REGISTRO DEL TELÉFONO O DE LA TARJETA SIM. 'DEPENDIENDO DE LA CONFIGURACIÓN DE AT+CPBS (ver accion) SE TIENE ACCESO ‘AL REGISTRO DE LLAMADAS (RECIBIDAS, ENVIADAS, NO CONTESTADAS) O A LA ‘AGENDA TELEFONICA (ME o SIM) 'accion compartida por lectura de llamadas(1) y búsquedas en la agenda(2) Public Sub PHONEBOOK_READ(i As Integer) SEND_COMMAND 'envío del comando correspondiente. (AT+CPBF o AT+CPBR) INI_TIMER_OUT 'se inicia el timer Do 'bucle de espera a la respuesta completa o timeout DoEvents 'se permiten eventos (actualización strBUFFER) straux = strBUFFER straux = Right(straux, 8) 'leemos los 8 últimos caracteres del buffer 'Respuesta tipo c. Coincidencia respuesta con la esperada? 'comun para búsqueda por nombre,posición y reg llamadas Select Case strBUFFER Case str + vbCrLf + "OK" + vbCrLf 'tratamiento de la respuesta: no hay resultados MsgBox "NO SE HAN ENCONTRADO RESULTADOS", vbOKOnly + vbExclamation aux = 1 Case str + vbCrLf + "ERROR" + vbCrLf 'tratamiento de la respuesta: error en el envío MsgBox "ERROR EN LA TRAMA DE BÚSQUEDA", vbOKOnly + vbCritical aux = 1 End Select 'Respuesta tipo b. Consultamos 8 últimos caracteres ya que anteriormente 'hay diversas lineas con distintos mensajes If (straux = vbCrLf + vbCrLf + "OK" + vbCrLf) Then 'tratamiento de la respuesta: existen resultados MsgBox "PRESENTACIÓN RESULTADOS", vbOKOnly + vbInformation
Select Case i 'discriminamos si agenda o llamadas, presentacion diferente Case 1 Form05.text_ShowCalls.Text = SHOW_RESULTS 'función que discrimina y se queda solo con los mensajes Case 2 Form11.Visible = True Form11.Text_ResultPhoneBook.Text = SHOW_RESULTS End Select aux = 1 End If 'condiciones de salida(respuesta completa o timeout) Loop Until (aux = 1 Or timeout) strBUFFER = "" 'se vacia contenido (lectura buffer) TIME_OUT 'se produjo timeout? tratamiento del mismo End Sub ‘************************************************************************
Comunicación Punto a Punto Vía Módem GSM Código Fuente
147
'VISUALIZA INFORMACIÓN DEL MÓDEM Y DE LA TARGETA SIM 'SE REALIZA BUCLE FOR CON TAL DE MOSTRAR TODA LA INFORMACIÓN A LA VEZ Public Sub ABOUT_MODEM() Dim i As Integer i = 1 str = "AT+CGMI" + vbCr 'trama MANUFACTURED For i = 1 To 5 'Envio de todas lsa tramas de informacion consecutivas SEND_COMMAND 'envío de comandos INI_TIMER_OUT 'se inicia el timer Do 'bucle de espera a la respuesta completa o timeout DoEvents 'se permiten eventos (actualización strBUFFER) straux = strBUFFER straux = Right(straux, 8) 'leemos los 8 últimos caracteres del buffer 'RESPUESTA tipo b. Consultamos 8 últimos caracteres ya que anteriormente 'hay diversas lineas con distintos mensajes If (straux = vbCrLf + vbCrLf + "OK" + vbCrLf) Then 'tratamiento de la respuesta: se presenta resultado, y se prepara trama siguiente
Select Case i Case 1 Form20.LblMANUFACTURED2.Caption = SHOW_RESULTS str = "AT+CGMM" + vbCr 'MODEL Case 2 Form20.LblMODEL2.Caption = SHOW_RESULTS str = "AT+CGMR" + vbCr 'REVISION Case 3 Form20.LblREVISION2.Caption = SHOW_RESULTS str = "AT+CGSN" + vbCr 'PRODUCT SERIAL (IMEI) Case 4 Form20.LblPRODUCTSERIAL2.Caption = SHOW_RESULTS str = "AT+CIMI" + vbCr 'INDIVIDUAL SIM Case 5 Form20.LblIMSI2.Caption = SHOW_RESULTS
End Select
aux = 1 strBUFFER = "" ElseIf (straux = vbLf + "ERROR" + vbCrLf) Then 'tratamiento de la respuesta: error
MsgBox "ERROR EN LAS TRAMAS DE INFORMACIÓN ACERCA DEL MÓDEM", vbOKOnly + vbCritical aux = 1 strBUFFER = ""
End If 'condiciones de salida(respuesta completa o timeout) Loop Until (aux = 1 Or timeout) TIME_OUT 'se produjo timeout? tratamiento del mismo Next i 'siguiente trama End Sub ‘************************************************************************
Comunicación Punto a Punto Vía Módem GSM Código Fuente
148
'FINALIZA UNA LLAMADA O INTERRUMPE UN INTENTO DE ESTABLECER UNA COMUNICACIÓN Public Sub HANG_UP() strBUFFER = "" str = "ATH" + vbCr 'se prepara la trama SEND_COMMAND 'envío del comando INI_TIMER_OUT 'se inicia el timer Do 'bucle de espera a la respuesta completa o timeout DoEvents 'se permiten eventos (actualización strBUFFER) 'Respuesta TIPO C. Comparación completa de la respuesta Select Case strBUFFER Case str + vbCrLf + "OK" + vbCrLf 'tratamiento de la respuesta: estamos en una conexión y la finalizamos
online_data = False strBUFFER = "" MsgBox "LLAMADA FINALIZADA", vbOKOnly + vbInformation aux = 1
ase str + vbCrLf + "ERROR" + vbCrLf 'tratamiento de la respuesta: error. imposible finalizar la conexión
strBUFFER = "" MsgBox "ERROR AL INTENTAR FINALIZAR LA LLAMADA.INTENTELO DE NUEVO", vbOKOnly + vbCritical aux = 1
Case vbCrLf + "OK" + vbCrLf 'tratamiento de la respuesta: llamada interrumpida antes de establecer conexión
strBUFFER = "" MsgBox "LLAMADA INTERRUMPIDA", vbOKOnly + vbInformation aux = 1
End Select 'condiciones de salida(respuesta completa o timeout) Loop Until (aux = 1 Or timeout) TIME_OUT 'se produjo timeout? tratamiento del mismo End Sub ‘************************************************************************ 'SE PASA DE MODO EN LINEA A MODO COMANDOS Public Sub COMMAND_MODE() 'de este modo no enviamos al interlocutor la petición de pasar a modo comandos
online_data = False strBUFFER = ""
'se prepara la trama +++AT, siendo + el carácter de escape
str = Chr(config.escape_sequence) + Chr(config.escape_sequence) + Chr(config.escape_sequence) + "AT" + vbCr
SEND_COMMAND 'se envia comando INI_TIMER_OUT 'se inicia el timer
Comunicación Punto a Punto Vía Módem GSM Código Fuente
149
Do 'bucle de espera a la respuesta completa o timeout DoEvents 'se permiten eventos (actualización strBUFFER) 'Respuesta TIPO C. Comparación completa de la respuesta Select Case strBUFFER Case vbCrLf + "OK" + vbCrLf 'tratamiento de la respuesta:paso correcto a modo comandos strBUFFER = ""
MsgBox "ACCESO CORRECTO AL MODO COMANDO", vbOKOnly + vbInformation aux = 1 Case vbCrLf + "ERROR" + vbCrLf 'tratamiento de la respuesta:error al intentar pasar a modo comandos
strBUFFER = "" MsgBox "ERROR AL INTENTAR ACCEDER AL MODO COMANDO. INTENTELO DE NUEVO", vbOKOnly + vbCritical online_data = True 'permitimos el envío de datos al interlocutor aux = 1
End Select 'condiciones de salida(respuesta completa o timeout) Loop Until (aux = 1 Or timeout) TIME_OUT 'se produjo timeout? tratamiento del mismo End Sub ‘************************************************************************ 'CONFIGURA EL ALMACENAMIENTO DE LOS MENSAJES Public Sub PREFERRED_MSG_STORAGE() 'se prepara la trama str = "AT+CPMS=" +config.mem1+ "," +config.mem2+ "," +config.mem3+ vbCr SEND_COMMAND 'se envia comando INI_TIMER_OUT 'se inicia el timer Do 'bucle de espera a la respuesta completa o timeout DoEvents 'se permiten eventos (actualización strBUFFER) 'Respuesta TIPO B.leemos los 8 últimos caracteres del buffer straux = strBUFFER straux = Right(straux, 8) If straux = vbCrLf + vbCrLf + "OK" + vbCrLf Then 'tratamiento de la respuesta: Trama llegó correctamente
MsgBox "LA CONFIGURACIÓN DE ALMACENAMIENTO DE MENSAJES SE HA MODIFICADO SATISFACTORIAMENTE", vbOKOnly + vbInformation
strBUFFER = "" aux = 1 'Resppuesta TIPO C. Comparación completa de la respuesta ElseIf strBUFFER = str + vbCrLf + "ERROR" + vbCrLf Then 'tratamiento de la respuesta: error en el envío
MsgBox "ERROR AL MODIFICAR LA CONFIGURACIÓN DE ALMACENAMIENTO DE MENSAJES.INTENTELO DE NUEVO", vbOKOnly + vbCritical
strBUFFER = "" aux = 1 End If 'condiciones de salida(respuesta completa o timeout) Loop Until (aux = 1 Or timeout) TIME_OUT 'se produjo timeout? tratamiento del mismo End Sub ‘************************************************************************
Comunicación Punto a Punto Vía Módem GSM Código Fuente
150
'LECTURA DE LOS MENSAJES 'PASAMOS POR PARAMETRO FRONT, QUE INDICA EL SENTIDO DE LA LECTURA 'HACIA DELANTE O HACIA ATRAS Public Sub READ_MESSAGE(front As Boolean) Dim index2 As String index2 = CStr(index) 'conversion de tipo integer a string str = "AT+CMGR=" + index2 + vbCr 'se prepara la trama SEND_COMMAND 'se envia comando INI_TIMER_OUT 'se inicia el timer Do 'bucle de espera a la respuesta completa o timeout DoEvents 'se permiten eventos (actualización strBUFFER) straux = Right(straux, 6) 'leemos los 6 últimos caracteres del buffer 'Respuesta tipo b. Consultamos los 6 últimos caracteres ya que 'anteriormente hay diversas lineas con distintos mensajes If straux = vbCrLf + "OK" + vbCrLf Then 'tratamiento de la respuesta: en la posición index sí hay mensaje MsgBox "PRESENTACION DE MENSAJES", vbOKOnly + vbInformation Form15.Text_ReadSMS.Text = SHOW_RESULTS 'presentacion de resultados strBUFFER = "" aux = 1 'Respuesta TIPO C. Comparación completa de la respuesta ElseIf (strBUFFER = str + vbCrLf + "+CMS ERROR: 500" + vbCrLf) Or _ (strBUFFER = str + vbCrLf + "+CMS ERROR: 321" + vbCrLf) Then 'tratamiento de la respuesta: error, posición vacía
MsgBox "EN LA POSICIÓN " + index2 + " NO HAY MENSAJE", vbOKOnly + vbExclamation
strBUFFER = "" 'se avanza o retrocede (segun indique front)una posiciónhasta encontrar 'una posición que contenga mensaje If front Then index = index + 1 'siguiente Else index = index - 1 'anterior End If If (index > 1) And (index < 17) Then READ_MESSAGE (front) Else 'tratamiento de final de mensajes MsgBox "NO HAY MAS MENSAJES", vbOKOnly + vbExclamation aux = 1 End If End If 'condiciones de salida(respuesta completa o timeout) Loop Until (aux = 1 Or timeout) TIME_OUT 'se produjo timeout? tratamiento del mismo End Sub ‘************************************************************************
Comunicación Punto a Punto Vía Módem GSM Código Fuente
151
'ENVIA O GUARDA UN MENSAJE. PRIMERA PARTE COMUN. SEGUNDA PARTE 'DEPENDIENDO DEL PARAMETRO i EJECUTA UNA ACCIÓN U OTRA Public Sub SEND_OR_WRITE_MESSAGE_TO_MEMORY(Text_SMS As String, i As Integer) SEND_COMMAND 'envío del comando (AT+CMGW=guardar o AT+CMGS=enviar) INI_TIMER_OUT 'se inicia el timer Do 'bucle de espera a la respuesta completa o timeout DoEvents 'se permiten eventos (actualización strBUFFER) If (strBUFFER = str + vbCrLf + "> " + Chr(0)) Then 'el sistema esta listo par escribir el mensaje
strBUFFER = "" aux = 1
End If 'condiciones de salida(respuesta completa o timeout) Loop Until (aux = 1 Or timeout) TIME_OUT 'se produjo timeout? tratamiento del mismo str = Text_SMS + Chr(26) 'se prepara trama: texto+crtlZ (fin de mensaje) SEND_COMMAND 'envío de la trama INI_TIMER_OUT 'se inicia el timer Do 'bucle de espera a la respuesta completa o timeout DoEvents 'se permiten eventos (actualización strBUFFER) 'Respuesta tipo b .Consultamos 8 últimos caracteres ya que anteriormente 'hay diversas lineas con distintos mensajes straux = strBUFFER straux = Right(straux, 8) Select Case straux Case (vbCrLf + vbCrLf + "OK" + vbCrLf) 'correcto
Select Case i 'discriminacion dependiendo del comando enviado Case 1
'tratamiento de la respuesta:SMS guardado correctamente MsgBox "SMS GUARDADO CORRECTAMENTE", vbOKOnly + vbInformation strBUFFER = "" Form13.Visible = True aux = 1 Case 2 'tratamiento de la respuesta:SMS enviado correctamente MsgBox "SMS ENVIADO CORRECTAMENTE", vbOKOnly + vbInformation
strBUFFER = "" Form04.Visible = True aux = 1 End Select Case (vbLf + "ERROR" + vbCrLf) 'error comando
Select Case i 'discriminacion dependiendo del comando enviado Case 1
'tratamiento de la respuesta:error guardar MsgBox "ERROR AL INTENTAR GUARDAR EL SMS", vbOKOnly + vbCritical strBUFFER = "" aux = 1 Case 2 'tratamiento de la respuesta:error enviar MsgBox "ERROR EN EL ENVÍO DEL SMS", vbOKOnly + vbCritical strBUFFER = "" aux = 1 End Select End Select 'condiciones de salida(respuesta completa o timeout) Loop Until (aux = 1 Or timeout) TIME_OUT 'se produjo timeout? tratamiento del mismo End Sub ‘************************************************************************
Comunicación Punto a Punto Vía Módem GSM Código Fuente
152
'NOTIFICA LA LLEGADA DE UN NUEVO MENSAJE SMS 'SE REALIZA POLLING CADA VEZ QUE RECIBIMOS UN CARÁCTER EN EL BUFFER 'SI CONCUERDA CON LA CADENA DE NOTIFICACIÓN, SE CARGA EL FORMULARIO 18 Public Sub NEW_SMS() If (strBUFFER = vbCrLf + "+CMTI: " + config.mem3 + "," + "1" + vbCrLf) Then Sonido = sndPlaySound(ByVal "cuac.wav", 1) 'reproduce sonido CUAC Form18.Visible = True 'presenta el formulario de notificación index = 1 End If End Sub ‘************************************************************************ 'FUNCION QUE DETERMINA SI SE ESTA RECIBIENDO UNA LLAMADA ENTRANTE 'CADA VEZ QUE SE RECIBE UN CARÁCTER/ES AL PUERTO SERIE, SE COMPRUEBA. 'SE REALIZA POLLING YA QUE NO ES POSIBLE DETECTAR LA SEÑAL DE RING Public Sub RING() If strBUFFER = vbCrLf + "RING" + vbCrLf Then Sonido = sndPlaySound(ByVal "RING.wav", 1) 'reproduce sonido ring strBUFFER = "" Form19.Visible = True 'presenta el formu de notificación RINGS = RINGS + 1 'actualiza la variable RINGS Form19.Text_RINGS = RINGS 'presenta por pantalla Form06.Visible = True 'abre dialogo de transferencia CSD End If End Sub ‘************************************************************************ 'DISCRIMINA DE UNA RESPUESTA LA TRAMA ENVIADA Y LOS COMANDOS DE CONTROL CrLf y DEVUELVE EL MENSAJE Public Function SHOW_RESULTS() Dim Str2 As String Dim Str3 As String Dim straux1 As String Dim straux2 As String Str2 = vbCr + vbCrLf Str3 = vbCrLf + "OK" + vbCrLf straux1 = Mid(strBUFFER, InStr(strBUFFER, Str2) + 3) straux2 = Mid(strBUFFER, InStr(strBUFFER, Str2) + 3, InStr(straux1, Str3) - 1) SHOW_RESULTS = straux2 End Function ‘************************************************************************
Comunicación Punto a Punto Vía Módem GSM Código Fuente
153
10.2.25 MODULE TREAT_RESPONSES (Treat_Responses.bas) 'MÓDULO de declaración de tratamiento a las respuestas
‘************************************************************************ 'EN ESTE MÓDULO SE REFLEJAN EL TRATAMIENTO A LAS DIFERENTES RESPUESTAS 'PARA CADA UNA DE LAS TRAMAS IMPLEMENTADAS QUE SIGUEN EL FORMATO DE 'RESPUESTA "AT..." + PARÁMETROS + CR + CRLF + MENSAJE + CRLF ‘************************************************************************ 'TRAMA DE TRATAMIENTO DE LA RESPUESTA AT+CMEE 'se comprueba que la trama llego correctamente y el nuevo parámetro ha quedado configurado Public Sub MOBILE_EQUIPMENT_ERROR() Select Case RESULT_CODE Case "OK"
MsgBox "LA CONFIGURACIÓN DE ERRORES SE HA ESTABLECIDO CORRECTAMENTE", vbOKOnly + vbInformation
Form21.Text_StateSending.Text = "" Case "ERROR"
MsgBox "ERROR EN LA TRAMA DE CONFIGURACIÓN DE ERRORES. REVISE EL MODEM", vbOKOnly + vbCritical
Form21.Text_StateSending.Text = "" End End Select strBUFFER = "" End Sub '************************************************************************ 'TRAMA DE TRATAMIENTO DE LA RESPUESTA AT+CPIN=PIN 'Se comprueba si el PIN es correcto Public Sub PIN_CODE() Select Case RESULT_CODE Case "OK"
MsgBox "EL CÓDIGO PIN INTRODUCIDO ES CORRECTO", vbOKOnly + vbInformation
Form04.Visible = True Case "+CME ERROR: Incorrect password"
MsgBox "EL CÓDIGO PIN INTRODUCIDO ES INCORRECTO", vbOKOnly + vbExclamation
Form02.TEXT_PIN = "" Form02.TEXT_PIN.SetFocus Case "+CME ERROR: SIM PUK required" MsgBox "EL CÓDIGO PIN INTRODUCIDO ES INCORRECTO." _
+ vbCrLf + " INTRODUZCA EL CÓDIGO PUK", vbOKOnly + vbExclamation
Form03.Visible = True End Select strBUFFER = "" End Sub '************************************************************************ 'TRAMA DE TRATAMIENTO DE LA RESPUESTA AT+CPIN=PUK,PIN 'Se comprueba si el PUK es correcto Public Sub PUK_PIN_CODES() Select Case RESULT_CODE
Comunicación Punto a Punto Vía Módem GSM Código Fuente
154
Case "OK" MsgBox "EL CÓDIGO PUK INTRODUCIDO ES CORRECTO", vbOKOnly + vbInformation
Form04.Visible = True Case "+CME ERROR: Incorrect password"
MsgBox "EL CÓDIGO PUK INTRODUCIDO ES INCORRECTO", vbOKOnly + vbExclamation
Form03.TEXT_PUK = "" Form03.TEXT_PIN = "" Case "BLOCKED" MsgBox "EL CÓDIGO PUK INTRODUCIDO ES INCORRECTO." + vbCrLf + _
"HA BLOQUEADO LA TARJETA.CONSULTE A SU DISTRIBUIDOR", vbOKOnly + vbCritical
End End Select strBUFFER = "" End Sub '************************************************************************ 'TRAMA DE TRATAMIENTO DE LA RESPUESTA AT+CSCA 'se comprueba que la trama llego correctamente y el nuevo parámetro ha quedado configurado Public Sub SERVICE_CENTRE_ADRESS() Select Case RESULT_CODE Case "OK"
MsgBox "EL CENTRO DE SERVICIO SE HA CONFIGURADO CORRECTAMENTE", vbOKOnly + vbInformation
Case "ERROR"
MsgBox "ERROR AL CONFIGURAR EL CENTRO DE SERVICIO", vbOKOnly + vbCritical
End Select strBUFFER = "" End Sub '************************************************************************ 'TRAMA DE TRATAMIENTO DE LA RESPUESTA AT+CMGF 'se comprueba que la trama llego correctamente y el nuevo parámetro ha quedado configurado Public Sub MESSAGE_FORMAT() Select Case RESULT_CODE Case "OK"
MsgBox "FORMATO DE MENSAJE CONFIGURADO CORRECTAMENTE", vbOKOnly + vbInformation
Case "ERROR"
MsgBox "ERROR AL CONFIGURAR EL FORMATO DEL MENSAJE", vbOKOnly + vbCritical
End Select strBUFFER = "" End Sub '************************************************************************ 'TRAMA DE TRATAMIENTO DE LA RESPUESTA AT+CPBS 'se comprueba que la trama llego correctamente y el nuevo parámetro ha quedado configurado
Comunicación Punto a Punto Vía Módem GSM Código Fuente
155
Public Sub PHONEBOOK_STORAGE() Select Case RESULT_CODE Case "OK"
MsgBox "SELECCIÓN DE MEMORIA CONFIGURADA CORRECTAMENTE", vbOKOnly + vbInformation
Case "ERROR" MsgBox "ERROR EN LA SELECCIÓN DE MEMORIA", vbOKOnly + vbCritical End Select strBUFFER = "" End Sub '************************************************************************ 'TRAMA DE TRATAMIENTO DE LA RESPUESTA AT+CPBW 'se comprueba que la trama llego correctamente y 'que el nuevo registro ha quedado grabado Public Sub PHONEBOOK_WRITE() Select Case RESULT_CODE Case "OK"
MsgBox "SE HA INSERTADO EL NUEVO REGISTRO EN LA AGENDA", vbOKOnly + vbInformation
Form08.Visible = True Case "ERROR"
MsgBox "ERROR AL INSERTAR EL NUEVO REGISTRO EN LA AGENDA." + vbCrLf + _" INTÉNTELO DE NUEVO", vbOKOnly + vbCritical
End Select strBUFFER = "" End Sub '************************************************************************ 'TRAMA DE TRATAMIENTO DE LA RESPUESTA AT+CSMP 'se comprueba que la trama llego correctamente y el nuevo parámetro ha quedado configurado Public Sub MSGTXT_TIME_MAX() Select Case RESULT_CODE Case "OK"
MsgBox "TIEMPO MÁXIMO DE PERMANENCIA CONFIGURADO CORRECTAMENTE", vbOKOnly + vbInformation
Case "ERROR"
MsgBox "ERROR AL CONFIGURAR EL TIEMPO MÁXIMO DE PERMANENCIA", vbOKOnly + vbCritical
End Select strBUFFER = "" End Sub '************************************************************************ 'TRAMA DE TRATAMIENTO DE LA RESPUESTA AT+CMGD 'se comprueba que la trama llego correctamente y 'el mensaje se ha borrado Public Sub DELETE_MESSAGE() Select Case RESULT_CODE Case "OK" MsgBox "SMS BORRADO CORRECTAMENTE", vbOKOnly + vbInformation Form15.Text_ReadSMS.Text = ""
Comunicación Punto a Punto Vía Módem GSM Código Fuente
156
Case "ERROR" MsgBox "ERROR AL INTENTAR BORRAR EL SMS. INTÉNTELO DE NUEVO", vbOKOnly + vbCritical
End Select strBUFFER = "" End Sub '************************************************************************ 'TRAMA DE TRATAMIENTO DE LA RESPUESTA AT+CMSS 'se comprueba que la trama llego correctamente y 'el mensje se ha enviado correctamente Public Sub SEND_FROM_STORAGE() Select Case RESULT_CODE Case "OK"
MsgBox "EL MENSAJE SE HA ENVIADO CORRECTAMENTE AL CENTRO SERVIDOR", vbOKOnly + vbInformation
Form04.Visible = True Case "ERROR"
MsgBox "ERROR AL ENVIAR EL MENSAJE. INTÉNTELO DE NUEVO", vbOKOnly + vbCritical
End Select strBUFFER = "" End Sub '************************************************************************ 'TRAMA DE TRATAMIENTO DE LA RESPUESTA ATT/ATP 'se comprueba que la trama llego correctamente y el nuevo parámetro ha quedado configurado Public Sub SELECT_DIALLING() Select Case Left(strBUFFER, 3) Case "ATP"
MsgBox "LLAMADA POR PULSOS SELECCIONADA", vbOKOnly + vbInformation Case "ATT" MsgBox "LLAMADA POR TONOS SELECCIONADA", vbOKOnly + vbInformation End Select strBUFFER = "" End Sub '************************************************************************ 'TRAMA DE TRATAMIENTO DE LA RESPUESTA ATS0 'se comprueba que la trama llego correctamente y el nuevo parámetro ha quedado configurado Public Sub AUTOMATIC_ANSWER_CONTROL() Select Case RESULT_CODE Case "OK"
MsgBox "MODO DE RESPUESTA CONFIGURADO CORRECTAMENTE", vbOKOnly + vbInformation
Case "ERROR"
MsgBox "ERROR AL CONFIGURAR EL MODO DE RESPUESTA", vbOKOnly + vbCritical
End Select strBUFFER = "" End Sub '************************************************************************
Comunicación Punto a Punto Vía Módem GSM Código Fuente
157
'TRAMA DE TRATAMIENTO DE LA RESPUESTA AT+CBST 'se comprueba que la trama llego correctamente y el nuevo parámetro ha quedado configurado Public Sub SELECT_BEARER_SERVICE() Select Case RESULT_CODE Case "OK"
MsgBox "VELOCIDAD DE CONEXIÓN CONFIGURADA CORRECTAMENTE", vbOKOnly + vbInformation
Case "ERROR"
MsgBox "ERROR AL CONFIGURAR LA VELOCIDAD DE CONEXIÓN", vbOKOnly + vbCritical
End Select strBUFFER = "" End Sub '************************************************************************ 'TRAMA DE TRATAMIENTO DE LA RESPUESTA ATS2 'se comprueba que la trama llego correctamente y el nuevo parámetro ha quedado configurado Public Sub ESCAPE_SEQUENCE_CHARACTER() Select Case RESULT_CODE Case "OK"
MsgBox "CARACTER DE ESCAPE CONFIGURADO CORRECTAMENTE", vbOKOnly + vbInformation
Case "ERROR"
MsgBox "ERROR AL CONFIGURAR EL CARACTER DE ESCAPE", vbOKOnly + vbCritical
End Select strBUFFER = "" End Sub '************************************************************************ 'TRAMA DE TRATAMIENTO DE LA RESPUESTA AT+CLCK 'se comprueba que la trama llego correctamente 'y el RELOJ ha quedado configurado Public Sub SET_CLOCK() Select Case RESULT_CODE Case "OK" MsgBox "EL RELOJ SE HA CONFIGURADO CORRECTAMENTE", vbOKOnly + vbInformation Case "ERROR" MsgBox "ERROR AL CONFIGURAR EL RELOJ", vbOKOnly + vbCritical End Select strBUFFER = "" End Sub '************************************************************************ 'TRAMA DE TRATAMIENTO DE LA RESPUESTA AT+CMGF 'se comprueba que la trama llego correctamente y el nuevo parámetro ha quedado configurado Public Sub NEWMSG_INDICATION() Select Case RESULT_CODE
Comunicación Punto a Punto Vía Módem GSM Código Fuente
158
Case "OK" MsgBox "NOTIFICACION DE MENSAJES CONFIGURADA CORRECTAMENTE", vbOKOnly + vbInformation
Case "ERROR"
MsgBox "ERROR AL CONFIGURAR LA NOTIFICACION DE MENSAJES", vbOKOnly + vbCritical
TRAMA ‘se vuelve a enviar End Select strBUFFER = "" End Sub '************************************************************************ 'TRAMA DE TRATAMIENTO DE LA RESPUESTA AT+CPBS 'se comprueba que la trama llego correctamente y el nuevo parámetro ha quedado configurado Public Sub PHONE_CALL_STORAGE() Form05.text_ShowCalls.Text = "" Select Case RESULT_CODE Case "OK"
MsgBox "MEMORIA DE DIALLED/RECEIVED/MISSED CALLS SELECCIONADA", vbOKOnly + vbInformation
Case "ERROR"
MsgBox "ERROR EN LA TRAMA DE SELECCIÓN DE MEMORIA DIALLED/RECEIVED/MISSED CALLS", vbOKOnly + vbCritical
End Select strBUFFER = "" End Sub '************************************************************************ 'TRAMA DE TRATAMIENTO DE LA RESPUESTA ATA 'se comprueba que la trama llego correctamente 'y establecido comunicacion o ha surgido algun problema Public Sub ANSWER() Select Case RESULT_CODE Case "OK" MsgBox "LLAMADA ACEPTADA", vbOKOnly + vbInformation online_data = True Case "CONNECT 9600"
MsgBox "CONEXIÓN ESTABLECIDA A 9600 baudios", vbOKOnly + vbInformation
online_data = True Case "NO CARRIER" MsgBox "NO CARRIER", vbOKOnly + vbExclamation Case "ERROR" MsgBox "ERROR AL ACEPTAR LA LLAMADA", vbOKOnly + vbCritical End Select strBUFFER = "" End Sub '************************************************************************
Comunicación Punto a Punto Vía Módem GSM Código Fuente
159
'TRAMA DE TRATAMIENTO DE LA RESPUESTA ATD 'se comprueba que la trama llego correctamente 'y establecido comunicacion o ha surgido algun problema Public Sub ATD() Select Case RESULT_CODE Case "CONNECT 9600"
MsgBox "CONEXIÓN ESTABLECIDA A 9600 baudios", vbOKOnly + vbInformation
online_data = True Case "NO DIALTONE" MsgBox "SIN TONO", vbOKOnly + vbCritical Case "BUSY" MsgBox "INTERLOCUTOR OCUPADO", vbOKOnly + vbExclamation Case "NO CARRIER" MsgBox "NO CARRIER", vbOKOnly + vbExclamation End Select strBUFFER = "" End Sub '************************************************************************ 'TRAMA DE TRATAMIENTO DE LA RESPUESTA AT+CHUP 'se comprueba que la trama llego correctamente 'y se ha rechazado la llamada o si ha surgido algun error Public Sub HANG_UP_CALL() Select Case RESULT_CODE Case "OK" 'nos llaman y rechazamos MsgBox "LLAMADA RECHAZADA", vbOKOnly + vbInformation Case "ERROR"
MsgBox "ERROR AL RECHAZAR LA LLAMADA. INTÉNTELO DE NUEVO", vbOKOnly + vbCritical
End Select strBUFFER = "" End Sub '************************************************************************ 'TRAMA DE TRATAMIENTO DE LA RESPUESTA ATS0 'se comprueba que la trama llego correctamente 'y estamos en modo online o si ha surgido algun error Public Sub RETURN_TO_ONLINE_DATA_MODE() Select Case RESULT_CODE Case "CONNECT 9600", vbOKOnly + vbInformation online_data = True MsgBox ("MODO ONLINE") Case "NO CARRIER"
MsgBox "NO PODEMOS ACCEDER AL MODO ONLINE", vbOKOnly + vbExclamation
Case "ERROR" MsgBox "ERROR AL ACCEDER AL MODO ONLINE", vbOKOnly + vbCritical End Select strBUFFER = "" End Sub '************************************************************************
Comunicación Punto a Punto Vía Módem GSM Código Fuente
160
'FUNCION QUE DEVUELVE EL TEXTO QUE NOS INTERESA DISCRIMINAR DE TODA LAS 'RESPUESTA OBTENIDA 'LEE A PARTIR DE LA TRAMA ENVIADA + CRLF HASTA QUE ENCUENTRA LOS 'CARACTERES FINALES CRLF 'DE ESTE MODO RETORNA EL MENSAJE OK, ERROR, CONNECT, BUSY,... Public Function RESULT_CODE() Dim Str2 As String 'declaración de variables Dim Str3 As String Dim straux1 As String Dim straux2 As String Str2 = vbCr + vbCrLf 'tramas de comparación Str3 = vbCrLf 'proceso de discriminación del mensaje straux1 = Mid(strBUFFER, InStr(strBUFFER, Str2) + 3) straux2 = Mid(strBUFFER, InStr(strBUFFER, Str2) + 3, InStr(straux1, Str3) - 1) RESULT_CODE = straux2 'devuelve el mensaje End Function '************************************************************************
Comunicación Punto a Punto Vía Módem GSM Código Fuente
161
10.2.26 MODULE DISABLEX.(dbx.bas) 'MÓDULO DE DESHABILITACIÓN DEL BOTÓN CERRAR
Public Declare Function GetSystemMenu Lib "user32" ( _ ByVal hWnd As Long, _ ByVal bRevert As Long) As Long Public Declare Function GetMenuItemCount Lib "user32" ( _ ByVal hMenu As Long) As Long Public Declare Function RemoveMenu Lib "user32" ( _ ByVal hMenu As Long, _ ByVal nPosition As Long, _ ByVal wFlags As Long) As Long Public Declare Function DrawMenuBar Lib "user32" ( _ ByVal hWnd As Long) As Long Public Const MF_BYPOSITION = &H400& Public Const MF_DISABLED = &H2& Public Sub DisableX(frm As Form) Dim hMenu As Long, nCount As Long hMenu = GetSystemMenu(frm.hWnd, 0) 'Get handle to system MENÚ nCount = GetMenuItemCount(hMenu) 'Numero De Elementos Del Menu Call RemoveMenu(hMenu, nCount - 1, MF_DISABLED Or MF_BYPOSITION) 'Borrar Ultimo Elemento Del Menu (Cerrar) DrawMenuBar frm.hWnd 'Redibujar Menu End Sub
Comunicación Punto a Punto Vía Módem GSM Código Fuente
162
10.2.27 MODULE ShellNotifyIcon.(sNi.bas) 'MÓDULO DE GESTION DEL ICONO DE NOTIFICACIÓN EN LA BARRA DE TAREAS
'Declaracion de tipos Public Type NOTIFYICONDATA cbSize As Long hWnd As Long uId As Long uFlags As Long uCallBackMessage As Long hIcon As Long szTip As String * 64 End Type 'Declaracion de constantes para las funciones de la API Public Const NIM_ADD = &H0 ' añadir un icono Public Const NIM_MODIFY = &H1 ' Editar/Cambiar un icono Public Const NIM_DELETE = &H2 ' borrar icono de la barra de tareas 'Declaracion de constantes para los eventos del raton Public Const WM_MOUSEMOVE = &H200 'Flags que indican los campos de NOTIFYICONDATA. Public Const NIF_MESSAGE = &H1 Public Const NIF_ICON = &H2 Public Const NIF_TIP = &H4 'Constantes para los click en el icono Public Const WM_LBUTTONDBLCLK = &H203 'doble click con el botón izquierdo 'Declararacion de la función de la API Public Declare Function Shell_NotifyIcon Lib "shell32" Alias "Shell_NotifyIconA" _ (ByVal dwMessage As Long, pnid As NOTIFYICONDATA) As Boolean
Comunicación Punto a Punto Vía Módem GSM Código Fuente
163
10.2.28 MODULE SOUNDS.(Sounds.bas) 'MÓDULO PARA LA REPRODUCCION DE UN SONIDO
Declare Function sndPlaySound Lib "winmm.dll" Alias _ "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal _ uFlags As Long) As Long
Comunicación Punto a Punto Vía Módem GSM Anexo
164
11. ANEXOS
Comunicación Punto a Punto Vía Módem GSM Anexo
165
ANEXOS 11.1 Manual GM29 El “GM29 Integrator’s Manual” se adjunta en el CD-ROM anexo. Este manual se divide en 3 sub-apartados en los que se trata:
• Descripción general del módem • Integración del módem • Comandos AT
11.2 SEMINARIO Matrix Electrónica
Se anexa la información relativa al Seminario. Incluye documentación técnica, presentación, sesión practica, entre otros datos de interés (disponible en el CD-ROM adjunto).
La asistencia a dicho Seminario en Abril de 2003 nos dotó de una visión general del producto GM29, así como de su procedimiento de actuación, posibilidades y futuras aplicaciones. 11.3 Proyecto en formato PDF Se incluye en el CD-ROM anexo este documento en formato PDF. 11.4 Archivos fuente
Se presentan los diferentes archivos fuente de la aplicación (lenguaje de programación Visual Basic). Disponibles también en el CD-ROM adjunto
Comunicación Punto a Punto Vía Módem GSM Bibliografía
166
12. BIBLIOGRAFÍA
Comunicación Punto a Punto Vía Módem GSM Bibliografía
167
BIBLIOGRAFÍA [1] Sony Ericsson.- GM29 Integrator’s Manual 200 [2] Seminario MATRIX: “Seminario 2003 GSM-GPRS M2M SonyEricsson-Telefonica Movistar“ ABRIL 2003 [3] C.Tavernier. - Módems. Técnica y Realización. Ed. Paraninfo 1991 [4] Enrique Maldonado Rollizo. - Comunicaciones con el PC. Módems Ed. Anaya Multimedia 1994 [5] Jorge Vasconcelos Santillan. - Manual de construcción de programas México 2000 [6] La Biblia de Visual Basic 6.0 Ed. Anaya Multimedia 199 [7] Juan Diego Gutierrez Gallardo.- Visual Basic 6 Ed. Anaya Multimedia 2000 [8] Fco. Javier Ceballos.- Enciclopedia de Microsoft Visual Basic 6.0. Ed. Ra-Ma 1999. [9] Francisco Charte Ojeda.- Programación con Visual Basic 6.0 Ed. Anaya Multimedia 1998 [10] SONY-ERICSSON GM29 http://www.sonyericsson.com/m2m/spg.jsp?page=start [11] Comunicaciones GSM http://www.auladatos.movistar.com/Aula-de-Datos/Tutoriales-y-Documentacion [12] Universo Digital Capítulo 12.9. - EL PUERTO SERIE: UART 8250. http://atc.ugr.es/docencia/udigital/1209.html [13] MSDN Library Visual Studio 6.0 y la ayuda online http://msdn.microsoft.com/library/ [14] Guillermo Llanderas.- Curso sobre Visual Basic http://www.elguille.info/indice.asp