zur Vollständigkeit: Bei mir läuft das RN-Motorcontrol sauber an der RS232.
Allerdings kann man bei Windows die Com-Port Einstellungen optimieren - das hat vor allem beim Empfang der Daten großen Einfluss:
Wichtig ist Teil bei "SetCommTimeouts" - da wird eingestellt, wie lange auf das nächste Zeichen gewartet werden soll bevor die das Read auf dem Comport wieder zurückkommt. (Achtung: Bei zu kurzem Timeout, kann es sein, das die Gegenstelle einfach nicht schnell genug sendet...)
Die komplette OpenComPort Funktion:
Code:
int OpenComPort()
{
DCB dcb;
COMMTIMEOUTS timeout;
TCHAR *pcCommPort = TEXT("COM1");
m_hCom = CreateFile( pcCommPort, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
if (m_hCom == INVALID_HANDLE_VALUE)
{
return FAILED;
}
SecureZeroMemory(&dcb, sizeof(DCB));
dcb.DCBlength = sizeof(DCB);
if (!GetCommState(m_hCom, &dcb))
{
CloseComPort();
return FAILED;
}
// Fill in DCB: 9600 bps, 8 data bits, no parity, and 1 stop bit.
dcb.BaudRate = CBR_9600; // set the baud rate
dcb.ByteSize = 8; // data size, xmit, and rcv
dcb.Parity = NOPARITY; // no parity bit
dcb.StopBits = ONESTOPBIT; // one stop bit
if (!SetCommState(m_hCom, &dcb))
{
CloseComPort();
return FAILED;
}
timeout.ReadIntervalTimeout = 60;
timeout.ReadTotalTimeoutMultiplier = 0;
timeout.ReadTotalTimeoutConstant = 1000;
timeout.WriteTotalTimeoutConstant = 0;
timeout.WriteTotalTimeoutMultiplier = 1000;
if (!SetCommTimeouts(m_hCom, &timeout))
{
CloseComPort();
return FAILED;
}
return SUCCESS;
}
Außerdem ich habe aber beobachtet, dass die Übertragung von vielen kleinen, einzelnen Datenpaketen scheinbar insgesamt langsamer ist als die Übertragung großer zusammenhängender Datenblöcke.
Lesezeichen