10-28-2011 10:00 AM
Buenos dias! esta semana he tenido un problema con la recepción de un buffer de 8400 bytes por puerto serial en labwindows.
He implementado las tres funciones posibles para recepcion del puerto serial:
opcion 1: con fin de cola el caracter 'x'.
bytes_read = ComRdTerm (puerto, read_data, 8500, 'x');
opcion 2: sin fin de cola solo recibir los caracteres.
bytes_read = ComRd (puerto, read_data, 8400);
opcion 3: Guardando lo que hay en el puerto a un archivo con fin de cola caracter 'x'.
bytes_read = ComToFile ( puerto , ARC , 8500, 'x');
En la opcion 1 y opcion 3 obtuve los mismos resultados recibo los caracteres, pero tengo una pérdida significativa y aleatoria de alrededor de 20 bytes al final de la cola.
Mi pregunta es ¿porque se pueden estar perdiendo esta cantidad de bytes en la cola de 8400 bytes enviados?
Realicé una comparación con hyperterminal de windows y no presento pérdidas de ningún byte de datos para descartar que sea errores de hardware externo al pc.... Pero en labwindows si presento esta pérdida.... Esto debe suceder por alguna razón la cual me interesa conocer. Las configuraciones de (paridad, numero de bits, baudios, bit de parada, etc) son las mismas que en hyperterminal por ello no encuentro motivo a la falta de datos....
10-28-2011 10:39 AM
Hola,
acuérdate que siempre la lectura en el puerto serial puede terminar por timeout: dependiendo de la velocidad de transmisión esto puede pasar con los 8400 caracteeìres por recibir.
Puedes averiguar esto mirando al valor de la variable 'rs232err' después de cada lectura: si ha pasado un timeout la variable tendrá el valor -99.
Si quieres puedes aumentar el valor de timpout con SetComTime ().
PS Si quieres, hay un foro específico para hispanohablantes donde poner preguntas en español: este es un foro internacional así que se prefiere usar al inglés
10-28-2011 01:38 PM
ok, disculpa la equivocacion con el foro pero es que en el de español nadie responde, hice lo que me dijiste con timeout, lo amplié a 10 sg. Al parecer se desincronizan los relojes porque a veces se levanta el timeout y en otras ocasiones no. (cuando llega la data completa no hay error de timeout).
¿como puedo evitar esto en labwindows?
porque en hyperterminal siempre llega la data completa....
Gracias!!!!!!
10-29-2011 12:24 AM
En el otro foro hicieron una pregunta razonable: ¿no habrá un 'x' en la cadena que hace terminar el ComRdTerm antes de lo previsto?
La comparación con el Hyperterminal puede darte unos elementos útiles: ¿cuánto dura la recepción en él? Secundariamente, creo recordar que el HT termina en el retorno de carro y no puedes indicar un carácter diferente como terminación: ¿podrías intentar leer en el CVI con terminación '\r'?