Utilizando el control de comunicaciones MSComm


El Microsoft Comm sirve para establecer una comunicación utilizando el módem. Este es muy interesante ya que podemos hacer llamadas con él y, además, crear una especie de HyperTerminal para mandar y recibir archivos o chat de PC a PC.

Antes que nada hay que agregar el componente MSComm e ir a las propiedades del mismo y en COMMPORT colocar el puerto de nuestro módem (Com1, Com2...) luego en Settings (vas a ver que hay 4 datos separados por comas) en el primer dato pones la velocidad de tu módem, los demás déjalos como estén.

Comandos básicos del módem:

ATDT Sirve para hacer una llamada telefónica. Se utiliza de la siguiente forma: ATDT4567-8901 en este caso el módem tomará la línea, esperará al tono de marcado y llamará al teléfono 4567-8901. Cabe aclarar que se puede usar o no el guión (-) separador de característica y número de abonado, el mismo es omitido por el módem. 

ATH Corta la comunicación. 

ATS0=x Especifica la cantidad de veces que la campanilla (timbre) del teléfono debe llamar antes que el módem atienda la llamada. Si x esta en cero el módem no atenderá la llamada. 

Para desarrollar un sistema que utilice el módem hay que seguir los siguientes pasos: 

1ro. Abrir el puerto de comunicaciones. Para poder usar el módem habrá primero que abrir el puerto de comunicaciones en el cual está conectado. Para ello escribir el siguiente código: 

If Not MSComm1.PortOpen Then
MSCOmm1.PortOpen = True
If Err Then Exit Sub
End If

De encontrarse el puerto abierto con anterioridad o de producirse un error inesperado el programa cancelará el intento de uso del módem.

Una vez abierto el puerto de comunicaciones esta todo listo para indicarle a módem que tome la línea telefónica y llame al número deseado. Es lo que hace el siguiente código: 

MSComm1.Output = "ATDT" & numero & vbCrLf

Donde la variable numero es del tipo string (cadena) y contiene el número telefónico completo (incluyendo cualquier prefijo que se requiera para, por ejemplo, conseguir línea externa en una centralita). Como comentario vbCrLf equivale a enviar la tecla ENTER. 

En este momento el módem ya se encuentra trabajando para establecer la comunicación.

Ahora necesitamos cortar la llamada, para lo cual usamos el comando ATH:

MSComm1.Output = "ATH" & vbCrLf

De esta forma la línea telefónica se encuentra desocupada nuevamente y el puerto de comunicaciones donde se conecta el módem listo para ser cerrado, lo que se logra con el siguiente código:

If MSComm1.PortOpen Then
MSCOmm1.PortOpen = False
If Err Then Exit Sub
End If

Esto es todo para realizar una llamada y cortar. Si se desea establecer cuantos rings deben sonar hasta que el módem tome la llamada deberá usarse el siguiente ejemplo:

If Not MSComm1.PortOpen Then
MSCOmm1.PortOpen = True
If Err Then Exit Sub
End If

MSComm1.Output = "ATS0=x" & vbCrLf

MSCOmm1.PortOpen = False

Donde x representa al número de veces que el timbre sonará antes que se atienda la llamada y, de colocar cero, el módem jamás atenderá.

A modo de referencia la tabla de abajo explica algunos de los comandos mas importantes de la normativa AT:

Comando Descripción
A Contesta una llamada entrante
A/ Repite el último comando (No lleva AT al comienzo ni Enter al final)
D Marca un número que lo acompaña y realiza la conexión (handshake) según la configuración del equipo que originó la llamada
P Marca con pulsos
T Marca con tonos
W Espera un segundo tono de marcación
, Se detiene por el tiempo especificado en el registro S8
; Permanecer en el modo de comandos después de marcar
! Genera el toque de horquilla (tecla FLASH)
E No mostrar el eco de los comandos
E1 Mostrar el eco de los comandos
H Colgar (libera la línea telefónica)
H1 Descolgar (Toma la línea telefónica)
I Presenta información acerca del hardware del módem. Probar I1, I2, etc...
L Silencia el parlante del módem
L1 Volumen bajo del parlante del módem
L2 Volumen medio del parlante del módem
L3 Volumen alto del parlante del módem
M Desactiva el uso del parlante del módem
M1 Parlante encendido hasta que se conecte, luego se apaga.
M2 Parlante encendido en todo momento, incluso luego de conectar.
O Devuelve la línea
O1 Devuelve la línea después de una secuencia de pulsos ecualizadores
Q Muestra los códigos resultantes
Q1 No muestra los códigos resultantes
Sn? Devuelve el contenido del registro-S número n
Sn=r Almacena el valor de r en el registro-S número n
V Códigos resultantes en modo numérico
V1 Códigos resultantes en modo verbal (con textos)
Xn Opciones de códigos de resultados
Z Reinicia el módem, cargando los parámetros almacenados en profile 0
&CO Señal de detención de portadora (CD) siempre encendida
&C1 Indica la detención de una portadora remota
&DO Señal de terminal de datos lista (DTR) ignorada
&D1 Si la señal conmuta de encendido a apagado el módem vuelve a modo de comandos
&D2 Si la señal conmuta de encendido a apagado el módem vuelve al modo de comandos y cuelga
&F Carga la configuración de fábrica en el profile
&P Ciclo útil de la marcación por pulsos para EEUU y Canadá 39% cerrado / 61% encendido
&P1 Ciclo útil de la marcación por pulsos para el reino unido y Hong Kong 39% cerrado / 67% encendido
&T Especificación de auto pruebas en algunos modelos de módem
&W Escribir la configuración actual a la memoria no volátil del módem
&Zn=x Escribir número de teléfono x en la posición n de la memoria no volátil.
&Zn? Mostrar el número n almacenado en la memoria no volátil
SO Número de timbres antes de contestar. El módem no contesta si SO=0
S1 Sí SO=0, este registro cuenta los timbres recibidos
S2 Define el caracter escape que es + por defecto
S3 Define el caracter para el retorno de carro
S4 Define el caracter para la alimentación de la línea
S5 Define el caracter para el retroceso
S6 Tiempo en seg. que el módem espera para marcar
S7 Tiempo en seg. que el módem espera por una portadora
S8 Duración de una pausa en el marcado
S9 Tiempo de tensión de portadora
S10 Tiempo entre la pérdida de la portadora y la acción de colgar
S11 Duración y espacio entre tonos cuando se utiliza la marcación por tonos
S12 Tiempo de guarda cuando se oprime el comando ESCAPE

Estos comandos pueden o no estar implementados en función a cada módem en particular. Algunos datos no son estándar por lo que su uso puede resultar o no.