PDA

Ver la Versión Completa : Variar control de flujo Puerto Serie


bactering
03-02-2008, 12:11:49
Muchas veces no se sabe como prebuntar y por eso no se encuentra la contestación correcta.

Una vez abierto el puerto me funciona todo correctamente:

...
DCB.BaudRate:= CBR_115200; // 19200
DCB.Parity:= noPARITY;
DCB.StopBits:= ONESTOPBIT;
DCB.Flags:=$01 ;
DCB.ByteSize:=8;
SetCommState(hComm, DCB);
...

Al leer con ReadFile se queda colgado. Es debido a que el control de flujo se queda programado en Hadware. Lo he comprobado al arrancar el Hyperterminal y reconfigurar el puerto. Lo cargo con Hyperterminal y ya funciona todo correctamente.
Pregunta ¿Cómo se programa el Control de flujo para que se quede en "ninguno"?
He probado desde el controlador del COM1 y está en "Ninguno" siempre

Gracias

seoane
03-02-2008, 12:58:13
El control de flujo se configura en la estructure DCB (http://msdn2.microsoft.com/en-us/library/aa363214.aspx) al igual que el resto de parámetros. En delphi todo un grupo de miembros de esa estructura que midem solo uno o dos bits se juntan dentro de un solo parametro llamado "flags". En resumen si no quieres tener ningún tipo de control de flujo utiliza algo como esto:

DCB.Flags:= 01; // El "1" es para poner el flag "binary" a 1. El resto de flags los dejamos a cero


De todas formas no creo que el problema que comentas venga del control de flujo, ya que este solo actúa cuando el buffer se llena. Lo que parece que esta pasando es que no hay suficientes bytes almacenados en el buffer cuando llamas a la función readfile, por lo que la función no termina, esperando hasta recibir los bytes que le estas pidiendo.

Una forma de solucionarlo es utilizar la función ClearCommError (http://msdn2.microsoft.com/en-us/library/aa363180(VS.85).aspx), que entre otras cosas nos permite saber cuantos bytes hay en el buffer esperando para ser leídos. Así una vez que sabemos cuantos bytes hay en el buffer llamamos a la función ReadFile para que lea solo ese numero de bytes, asegurándonos de que la función terminara inmediatamente.

bactering
03-02-2008, 18:54:29
Gracias por el comentario. Voy a ver lo que comentas.

El tema es que arranco el Hyperterminal con la configuracion correcta y lo cierro y el programa que he realizado va estupendamente. Voy a ver si puedo arreglarlo con viendo el buffer.

Muchas gracias.

niikoo07
20-03-2011, 23:22:28
hola amigo.. soy nuevo en este blog y me parecio muy bueno
queria saber si me pueden ayudar o darme algun tuto de delphi7
para controlar un rele mediante usb o puerto..
muchas gracias...