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.