Ich habe deine Einstellungen übernommen:
Code:
memset(&dcbSerialParams,0,sizeof(dcbSerialParams));
dcbSerialParams.DCBlength = sizeof(dcbSerialParams);
dcbSerialParams.BaudRate = CBR_128000; // 9600 oder eine andere Baudrate
dcbSerialParams.fParity = FALSE;
dcbSerialParams.fBinary = TRUE;
dcbSerialParams.Parity = NOPARITY;
dcbSerialParams.StopBits = ONESTOPBIT;
dcbSerialParams.fOutxCtsFlow = FALSE;
dcbSerialParams.fOutxDsrFlow = FALSE;
dcbSerialParams.fDtrControl = DTR_CONTROL_ENABLE;
dcbSerialParams.fRtsControl = RTS_CONTROL_ENABLE;
dcbSerialParams.fDsrSensitivity = FALSE;
dcbSerialParams.fAbortOnError = FALSE;
dcbSerialParams.ByteSize = 8;
timeouts.ReadIntervalTimeout = MAXDWORD; // 0 ms Read-Timeout
timeouts.ReadTotalTimeoutMultiplier = 0;
timeouts.ReadTotalTimeoutConstant = 0;
timeouts.WriteTotalTimeoutMultiplier = 1; // 1*2 ms Write Timeout
timeouts.WriteTotalTimeoutConstant = 2;
Hat leider keine Veränderungen gebracht
Meine Einstellungen mit dem Timeout waren vorher:
Code:
tbResult InitSerialPort(HWND hwnd)
{
LPCTSTR SeriellerPort = TEXT("COM4");
hSerial = CreateFile(SeriellerPort,
GENERIC_READ | GENERIC_WRITE,
0,
0,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0);
if(hSerial==INVALID_HANDLE_VALUE)
{
if(GetLastError()==ERROR_FILE_NOT_FOUND)
{
// Generate an error
// Fehlercode ausgeben
if(!GetProcessId(NULL))
{
MessageBox(hwnd, (LPCWSTR)"Fehler bei LGetProcessId",
(LPCWSTR)L"Fehler", MB_OK | MB_ICONEXCLAMATION);
return TB_ERROR;
}
//serial port does not exist. Inform user.
MessageBox(hwnd, (LPCWSTR)L"Fehler bei CreateFile. Serial Port existiert nicht!",
(LPCWSTR)L"Fehler", MB_OK | MB_ICONEXCLAMATION);
return TB_ERROR;
}
//some other error occurred. Inform user
MessageBox(hwnd, (LPCWSTR)L"Fehler bei CreateFile. Sonstiger Fehler!",
(LPCWSTR)L"Fehler", MB_OK | MB_ICONEXCLAMATION);
return TB_ERROR;
}
if (!GetCommState(hSerial, &dcbSerialParams))
{
//error getting state
MessageBox(hwnd, (LPCWSTR)L"Fehler bei GetCommState!",
(LPCWSTR)L"Fehler", MB_OK | MB_ICONEXCLAMATION);
return TB_ERROR;
}
/*
memset(&dcbSerialParams,0,sizeof(dcbSerialParams));
dcbSerialParams.DCBlength = sizeof(dcbSerialParams);
dcbSerialParams.BaudRate = CBR_128000; // 9600 oder eine andere Baudrate
dcbSerialParams.fParity = FALSE;
dcbSerialParams.fBinary = TRUE;
dcbSerialParams.Parity = NOPARITY;
dcbSerialParams.StopBits = ONESTOPBIT;
dcbSerialParams.fOutxCtsFlow = FALSE;
dcbSerialParams.fOutxDsrFlow = FALSE;
dcbSerialParams.fDtrControl = DTR_CONTROL_ENABLE;
dcbSerialParams.fRtsControl = RTS_CONTROL_ENABLE;
dcbSerialParams.fDsrSensitivity = FALSE;
dcbSerialParams.fAbortOnError = FALSE;
dcbSerialParams.ByteSize = 8;
timeouts.ReadIntervalTimeout = MAXDWORD; // 0 ms Read-Timeout
timeouts.ReadTotalTimeoutMultiplier = 0;
timeouts.ReadTotalTimeoutConstant = 0;
timeouts.WriteTotalTimeoutMultiplier = 1; // 1*2 ms Write Timeout
timeouts.WriteTotalTimeoutConstant = 2;
*/
dcbSerialParams.BaudRate= CBR_128000; //CBR_57600;
dcbSerialParams.ByteSize=8;
dcbSerialParams.StopBits=ONESTOPBIT;
dcbSerialParams.Parity=NOPARITY;
dcbSerialParams.fOutxCtsFlow=0;
dcbSerialParams.fOutxDsrFlow=0;
if(!SetCommState(hSerial, &dcbSerialParams))
{
//error setting serial port state
MessageBox(hwnd, (LPCWSTR)L"Fehler bei GetCommState beim Parameter belegen!",
(LPCWSTR)L"Fehler", MB_OK | MB_ICONEXCLAMATION);
return TB_ERROR;
}
timeouts.ReadIntervalTimeout=50;
timeouts.ReadTotalTimeoutConstant=50;
timeouts.ReadTotalTimeoutMultiplier=10;
timeouts.WriteTotalTimeoutConstant=50;
timeouts.WriteTotalTimeoutMultiplier=10;
if(!SetCommTimeouts(hSerial, &timeouts))
{
//error occureed. Inform user
MessageBox(hwnd, (LPCWSTR)L"Fehler bei Timeout!",
(LPCWSTR)L"Fehler", MB_OK | MB_ICONEXCLAMATION);
return TB_ERROR;
}
return TB_OK;
}
Schwieriges Thema
Lesezeichen