fbpx

Expresate

Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:

Problema con window...
 
Avisos
Vaciar todo

Problema con windows y puerto serie:

6 Respuestas
2 Usuarios
0 Reactions
8,114 Visitas
fusion
Respuestas: 391
Topic starter
(@fusion)
Ardero
Registrado: hace 17 años

Para usar ReadFile() con windowsXP he de esperar una eternidad desde que se escribe el dato ¡nada menos que 250ms! si pongo menos no pillo nada.

#include <windows.h>
#include <stdio.h>

int main()
{
HANDLE
hCom1=CreateFile("COM3",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,0),
hCom2=CreateFile("COM4",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,0);
if (!SetCommTimeouts(hCom1, &timeouts)) { printf("nError timeout puerto-1 con error: %d", GetLastError());getchar();getchar(); return-1;}
if (!SetCommTimeouts(hCom2, &timeouts)) { printf("nError timeout puerto-2 con error: %d", GetLastError());getchar();getchar(); return-1;}

SetupComm(hCom1,4048,4048);
SetupComm(hCom2,4048,4048);

DCB dcb;
ZeroMemory(&dcb,sizeof(dcb));
dcb.DCBlength=sizeof(dcb);
dcb.BaudRate = CBR_57600; // baud rate
dcb.ByteSize = 8; // data size, xmit and rcv
dcb.Parity = NOPARITY; // parity bit
dcb.StopBits = ONESTOPBIT; // stop bit

if (SetCommState(hCom1,&dcb)) printf("nAbierto puerto-1");
else { printf ("nFalla SetCommState en puerto-1 con error: %d", GetLastError());getchar();getchar(); return-1;}
if (SetCommState(hCom2,&dcb)) printf("nAbierto puerto-2");
else { printf ("nFalla SetCommState en puerto-2 con error: %d", GetLastError());getchar();getchar(); return-1;}

DWORD res;
char dato2[4048];

WriteFile(hCom1,"Hey, RS232!",11,&res,NULL);
printf("nEnviados %li bytes y espero 0ms ",res); Sleep(0);
ReadFile( hCom2,dato2,11,&res,NULL);
printf("Recibidos %li bytes",res);

WriteFile(hCom1,"Hey, RS232!",11,&res,NULL);
printf("nEnviados %li bytes y espero 5ms ",res); Sleep(5);
ReadFile( hCom2,dato2,11,&res,NULL);
printf("Recibidos %li bytes",res);

WriteFile(hCom1,"Hey, RS232!",11,&res,NULL);
printf("nEnviados %li bytes y espero 50ms ",res); Sleep(50);
ReadFile( hCom2,dato2,11,&res,NULL);
printf("Recibidos %li bytes",res);

WriteFile(hCom1,"Hey, RS232!",11,&res,NULL);
printf("nEnviados %li bytes y espero 100ms ",res); Sleep(100);
ReadFile( hCom2,dato2,11,&res,NULL);
printf("Recibidos %li bytes",res);

WriteFile(hCom1,"Hey, RS232!",11,&res,NULL);
printf("nEnviados %li bytes y espero 200ms ",res); Sleep(200);
ReadFile( hCom2,dato2,11,&res,NULL);
printf("Recibidos %li bytes",res);

WriteFile(hCom1,"Hey, RS232!",11,&res,NULL);
printf("nEnviados %li bytes y espero 500ms ",res); Sleep(500);
ReadFile( hCom2,dato2,11,&res,NULL);
printf("Recibidos %li bytes",res);

CloseHandle(hCom1);
CloseHandle(hCom2);
printf("n===FIN===");
getchar();
getchar();

return 0;
}

Puedo también poner al principio, pero el efecto también es convertir el puerto en una cosa super lenta

COMMTIMEOUTS timeouts;
timeouts.ReadIntervalTimeout = 1;
timeouts.ReadTotalTimeoutMultiplier = 1;
timeouts.ReadTotalTimeoutConstant = 250; //250ms Windows!!!!!!!
timeouts.WriteTotalTimeoutMultiplier = 1;
timeouts.WriteTotalTimeoutConstant = 1;
if (!SetCommTimeouts(hCom1, &timeouts)) { printf("nError timeout puerto-1 con error: %d", GetLastError());getchar();getchar(); return-1;}
if (!SetCommTimeouts(hCom2, &timeouts)) { printf("nError timeout puerto-2 con error: %d", GetLastError());getchar();getchar(); return-1;}

¿como lo soluciono?

Responder
5 respuestas
fusion
Respuestas: 391
Topic starter
(@fusion)
Ardero
Registrado: hace 17 años

OK, era un tema de cables, con 10cms puedo trasmitir aun subedo a 1228800 baudios

Responder
Página 2 / 2
Compartir: