Captura MSComm

24/07/2003 - 22:45 por Marcelo | Informe spam
Grupo
Hay alguna forma de saber cuando un MSComm recibe
informacion, para en ese momento poder capturar todo el
string completo y no de a partes.

Gracias
Marcelo
 

Leer las respuestas

#1 Leonardo Azpurua
25/07/2003 - 01:41 | Informe spam
"Marcelo" escribió en el mensaje
news:027401c35224$7afbf9e0$
Grupo
Hay alguna forma de saber cuando un MSComm recibe
informacion, para en ese momento poder capturar todo el
string completo y no de a partes.

Gracias
Marcelo



Marcelo:

Los controles MSComm generan el evento OnComm cada vez que reciben datos
(entre otras condiciones). Para saber el tipo de evento hay que comparar la
propiead CommEvent con la constante comEvReceive.

Pero no tienes más remedio que procesar los datos recibidos de manera
fragmentaria. comEvReceive se dispara cada vez que la cantidad de bytes en
el búfer de entrada es mayor o igual que el valor contenido en RThreshold.
Si los paquees que esperas recibir a través del puerto son de un tamaño
definido, podrías hacer que RThreshold fuera igual a este valor, de manera
que se produjera un commEvent con comEvreceive cada vez que terminara de
recibirse un paquete completo. En este caso, si el tamaño de los paquetes
fuera relativamente grande, te sugeriría que experimentaras no fuera a ser
que se produjera un commEvent cuando alcanzaras un tamaño máximo de búfer.

Para algunas aplicaciones utilizo una clase que llamo CComString. Esta clase
contiene una forma que contiene un control MsComm, con RThreshold = 1. Cada
vez que recibe un comEventReceive, lee el contenido del búfer (propiedad
input) y la lee, buscando el fin de string (vbCr). Si hay un CR en la
entrada, copia lo que aparece a la izquierda al final de un búfer de
entrada, lo copia al bufer de salida y genera un evento (comStringReceived),
pasando como argumento el búfer de salida. Al regresar del evento, borra el
contenido del búfer de entrada. Si había algo a la derecha del CR, lo anexa
al bufer de entrada. Si la linea no contenia un CR, la anexa completa al
búfer de entrada.

Pero no hay otra manera (que yo sepa) de usar el control MsComm, a menos que
quieras correr el riesgo de perder parte de los paquetes que entren.

Salud!

Leonardo
[MS MVP - VB]

Preguntas similares