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

Preguntas similare

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]
Respuesta Responder a este mensaje
#2 Héctor Varela
27/07/2003 - 08:20 | Informe spam
Hola Marcelo, para complementar:

Según tengo entendido, cada vez que llega un dato se
genera un evento comEvReceive (dentro de OnComm()), pero
los datos llegan uno a uno, si puedes tener la posibilidad
de saber cuantos datos vas a recibir, entonces puedes
utilizar la propiedad InBufferCount (fíjate en la
propiedad InBufferSize que es la cantidad de datos que
puede guardar en el bufer) para saber cuantos datos se
encuentran en ese momento en el bufer de entrada.
Cada vez que utilizas Input para leer, lees la cantidad de
datos establecidad en la propiedad InputLen (cantidad de
datos a leer de una vez).

Espero te sirva.

Salu2
Héctor Varela
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida