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.







Zitieren

Lesezeichen