Comunicacion Puerto Serial

10/05/2006 - 01:12 por Daniel | Informe spam
Buenas, resulta que tengo una palicacion en C++ que se comunica por medio del
puerto serial, en el cual envio valores enteros, pero resulta que si por
algun motivo el otro equipono me contesta el programa se queda esperando la
respuesta, aqui les mando el codigo con el que creo el manejador

HANDLE open_port(char puerto[]){
DCB dcb;
// Open serial port as a file
HANDLE handle;
handle = CreateFile("COM1:",
GENERIC_READ | GENERIC_WRITE,
0, 0, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0);

// FILE_FLAG_OVERLAPPED
if (handle == INVALID_HANDLE_VALUE) {
// printf("Couldn't open serial device!");
return NULL;
}

// Get current communication state
GetCommState(handle, &dcb);
// Turn off hardware handshake
dcb.BaudRate = 9600;
// dcb.fParity = FALSE;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;
dcb.ByteSize = 8;
// dcb.fBinary = true;
// dcb.fOutxCtsFlow = TRUE;
// dcb.fOutxDsrFlow = TRUE;
dcb.fDtrControl = DTR_CONTROL_ENABLE;
dcb.fRtsControl = RTS_CONTROL_ENABLE;
// dcb.XonLim = 0;
// dcb.XoffLim = 0;
// Set communication state
SetCommState(handle, &dcb);
// printf("Puot %d enable",handle);
return handle;
}

Gracias por su ayuda
 

Leer las respuestas

#1 solved by design
10/05/2006 - 23:55 | Informe spam
"Daniel" wrote in message
news:
Buenas, resulta que tengo una palicacion en C++ que se comunica por medio
del
puerto serial, en el cual envio valores enteros, pero resulta que si por
algun motivo el otro equipono me contesta el programa se queda esperando
la
respuesta, aqui les mando el codigo con el que creo el manejador

HANDLE open_port(char puerto[]){
DCB dcb;
// Open serial port as a file
HANDLE handle;
handle = CreateFile("COM1:",
GENERIC_READ | GENERIC_WRITE,
0, 0, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0);

// FILE_FLAG_OVERLAPPED
if (handle == INVALID_HANDLE_VALUE) {
// printf("Couldn't open serial device!");
return NULL;
}

// Get current communication state
GetCommState(handle, &dcb);
// Turn off hardware handshake
dcb.BaudRate = 9600;
// dcb.fParity = FALSE;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;
dcb.ByteSize = 8;
// dcb.fBinary = true;
// dcb.fOutxCtsFlow = TRUE;
// dcb.fOutxDsrFlow = TRUE;
dcb.fDtrControl = DTR_CONTROL_ENABLE;
dcb.fRtsControl = RTS_CONTROL_ENABLE;
// dcb.XonLim = 0;
// dcb.XoffLim = 0;
// Set communication state
SetCommState(handle, &dcb);
// printf("Puot %d enable",handle);
return handle;
}

Gracias por su ayuda



Te falta asignar/controlar los timeouts y las formas de acceso:

COMMTIMEOUTS commTimeouts;

GetCommTimeouts(m_hComm,&commTimeouts);

commTimeouts.ReadTotalTimeoutConstant=dwDefaultReadTimeout;

SetCommTimeouts(m_hComm,&commTimeouts);



Mira esas dos funciones en la doc.


Visita mi blog: http://rfog.blogsome.com
Libros, ciencia ficción y programación
La mujer es lo más corruptor y lo más corruptible que hay en el mundo.

Preguntas similares