Qu es esto??
===============
El programa "Ejemplo de uso de MSCOMM.EXE" es, justo eso.
Intenta ser una aplicacin lo ms simple posible para
mostrar cmo controlar comunicaciones usando los puertos
seriales (COM1 , COM2, etc.). La forma ms simple
de probarlo es con un puerto donde haya un modem.
El modem debe responder OK si se le enva el comando AT (ver
ms detalles al final de este texto).

Cmo se usa MSCOMM en este ejemplo
==================================
Se configur MSCOMM para comunicarse en modo texto. En
este modo, solo se pueden enviar o transmitir caracteres
imprimibles (letras, nmeros y algunos signos, como ! ,#, etc.)

Existe otro modo, el modo binario, pero es algo ms complejo
de usar. El modo binario permite enviar/recibir cualquier
caracter.

Hay que configurar varias propiedades para poder usar MSCOMM:
	Handshaking
	InputLen
	InputMode
	RThreshold
	SThreshold
	CommPort
	Settings
	PortOpen

Cada vez que ocurre algo relacionado con el puerto que se est usando,
se genera el evento OnComm y la propiedad CommEvent adquiere un valor
relacionado con el suceso ocurrido.

Significado de las propiedades
==============================
1) Handshaking: Establece cmo se va a controlar la comunicacin
a nivel de la UART del PC. O sea, cmo va a reaccionar MSCOMM
si cambia el estado de las lneas (cables) RTS, DTR, etc., o qu pasa
si se recibe el caracter XOFF, etc. En nuestro ejemplo esta propiedad
vale 0 (igual a la constante comNone). comNone significa que
elijo ignorar cualquier protocolo a nivel hardware.

2) InputLen: Cuando se leen los caracteres recibidos, se puede elegir
leerlos todos o bien leer slo un nmero determinado de caracteres.
Si InputLen vale 3, se leern slo 3 caracteres. En el caso
de que InputLen=0, se leen todos los caracteres que hayan sido
recibidos. Este es el caso de este ejemplo.

3) InputMode: Elige qu tipo de datos manejar MSCOMM. Si InputMode
vale 0 (la constante comInputModeText), se reciben slo caracteres
imprimibles. Si InputMode vale 1 (comInputModeBinary), habilito
recibir caracteres no imprimibles. Aqu usamos modo texto.

4) RThreshold: Determina cuantos caracteres deben recibirse antes de
generar un evento OnComm. Si RThreshold vale 5, entonces se generar
el evento OnComm cada 5 (o ms) caracteres recibidos. En nuestro caso,
elegimos RThreshold=1, para que se genere el evento con cada caracter
recibido.

5) SThreshold: Similar al anterior, pero para transmisin. Ej: Si 
SThreshold=3, cada 3 caracteres que transmite genera un evento OnComm.
En nuestro caso, SThreshold=1, y genera un evento con cada caracter
que enva el PC.

6) CommPort: Elige con cul puerto de comunicaciones vamos a trabajar.
En el PC estndar, hay un mximo de 4 puertos , desde COM1 hasta COM4.
En la mayora de los PCs, existen slo uno o dos. Es habitual encontrar
que COM1 est conectado a un mouse, COM2 no est instalado , COM3
tampoco y en COM4 hay un modem interno. 

7) Settings: Determina a qu velocidad se harn las comunicaciones y otros 
parmetros.  Settings es un string (una cadena de caracteres).
Ej. Settings="9600,N,8,1" especifica:
   velocidad=9600 bauds, paridad=Ninguna (no usada), cantidad de bits de parada=1.

8) PortOpen: Valor booleano. Si se pone a TRUE, abre el puerto.
 El puerto puede estar abierto por otro programa, (por ejemplo, por el
driver del mouse, o por DCCMAN, etc.) En ese caso, al intentar PortOpen=TRUE,
el Visual Basic genera un error.

Pasos para asociar MSCOMM con un puerto COM
============================================
  1) Establecer los parmetros Handshaking, InputLen, InputMode, RThreshold
SThreshold y Settings para MSCOMM.
  2) Elegir el puerto con CommPort.
  3) Intentar abrirlo haciendo PortOpen=TRUE.
Pueden producirse errores, atento al manejo de los mismos (para que el programa
no "explote" :)

Manejo de los errores
======================
Es muy, muy habitual que se generen errores en la comunicacin RS232.
Por eso, antes de cambiar algn parmetro de MSCOMM, hay que proteger
al programa ante posibles errores.
Se consigue con sentencias del tipo " On Error GOTO Linea_de_Programa "
donde Linea_de_Programa es una etiqueta a donde saltar.
En "  Linea_de_Programa:  " se debe mostrar algn mensaje de error
al usuario y luego, para que el programa continue funcionando,
se usa  " Resume   Otra_Linea_de_Programa  "  ; o sea, 
continuar la ejecucin a partir de la etiqueta  " Otra_Linea_de_Programa:  " 
Cuando se produce un error, el Visual Basic crea un objeto llamado
"objeto Err" . Este objeto tiene una propiedad,  .Description  , que
es un string (cadena) con una frase que describe el error.  

Pruebas con un modem
====================
Casi todos los modems de hoy responden a los viejos "comandos Hayes".
Estos comandos comienzan con los dos caracteres AT y finalizan
con un retorno de carro (<CR>) y un avance de lnea (<LF>)
(estos son los caracteres 0x0D y 0x0A).
Este programa de ejemplo permite elegir enviar o no los caracteres <CR><LF>
cada vez que se enve un texto.

Tenemos esta tabla:

Comando enviado al modem	|	Respuesta del modem
(terminados en <CR><LF> a menos	|
que se indique otra cosa)	|
--------------------------------|-------------------------------------
	AT			|	OK
	ATDT11133		|	Disca por tonos el nro. 11133
				|	(responde NO DIALTONE si est
				|	desconectada la lnea)
	ATH1			|	Hace que el modem tome lnea
	ATH0			|	Hace que el modem cuelgue
	+++  (sin <CR> ni <LF>)	|	Si el modem est conectado a
				|	otro modem, le permite recibir
				|	comandos. Por ejemplo, +++ puede
				|	ser seguido por ATH0<CR><LF> para
				|	colgar la lnea de telfono.
	AT&V			|	El modem devuelve un texto extenso 
				|	con la configuracin actual del modem.
	ATE1			|	Habilita eco de los caracteres enviados.
	ATQ1			|	Suprime todos los mensajes del
				|	modem. Si est activo, no enva respuesta
				|	a los comandos AT.
	ATQ0			|	Activa respuesta a los comandos.

Si el modem parece no responder, conviene dar primero:
   ATE1<CR><LF>
   ATQ0<CR><LF>

Problemas al usar MSCOMM en Visual Basic 5 y 6
===============================================
Existe un bug en VB5/VB6 que provoca que los controles Active X y
objetos OLE a veces no puedan usarse. Este problema aparece a veces
luego de instalar Office, o alguna aplicacin que instale componentes ya 
registrados por VB. Se manifiesta cuando queremos pegar un control
en un formulario, sale algo as como "No tiene licencia para usar
este control - ERROR 429 - etc." Microsoft puso un parche en
su sitio web; el parche se llama VB5Cli.EXE para VB5, y VB6Cli.EXE
para VB6.
Dentro de www.microsoft.com buscar el documento    Q181854

http://support.microsoft.com/default.aspx?scid=KB;EN-US;Q181854&


Contacto con el autor
=====================
 Me llamo Alejandro Lavarello, soy de Uruguay y no soy programador,
apenas uso algo elemental de Visual Basic. Por eso agradezco cualquier
correcin a este cdigo.

 Mi sitio web es:  http://webs.montevideo.com.uy/alejol_2/proyectos.html
 Correo electrnico: alejol@montevideo.com.uy
 Buena suerte!!
           Alejandro.

   ==========================================
