3 Stimmen

Erhöhung der Geschwindigkeit der seriellen Lese-/Schreibschnittstelle durch Timer

Ich habe meinen Code zum Lesen und Schreiben an einer seriellen Schnittstelle in MFC geschrieben. Das Programm funktioniert gut, ist aber etwas langsam, da es viele Operationen gibt (Lesen und Schreiben). Ich habe einen Timer, der die Operationen an der seriellen Schnittstelle ausführt. Der Timer ist unten angegeben:

Loop_Timer = SetTimer(1,50,0);

Die Übertragungsinformationen der seriellen Schnittstelle lauten wie folgt:

BaudRate = 57600;
ByteSize = 8;
Parity = NOPARITY;
StopBits = ONESTOPBIT;
fAbortOnError = false;

Der folgende Schreib- und Lesevorgang findet statt, wenn der Timer startet:

Write(command);
Read(returned_message);
returned_message.Trim();
...   
//finds a value from the returned string
...

Dieser Lese- und Schreibvorgang kann also 1, 2, 3 oder 4 Mal für eine bestimmte ausgewählte Option erfolgen.

Beispiel: Bei Option 1 muss die obige Funktion in der angegebenen Zeitschaltuhr 4 Mal ausgeführt werden. Option 2 erfordert, dass die obige Funktion 2 Mal auftritt. (da sie nur zwei Variablen mit Rückgabewerten hat). usw. ...

Ich habe versucht, die Geschwindigkeit des gesamten Vorgangs zu verbessern, damit er robust ist und schnell reagiert. Ich habe versucht, den Timer zu ändern, aber es ist immer noch ziemlich langsam. Irgendwelche Vorschläge zur Verbesserung?

5voto

ChrisBD Punkte 8454

Es wäre viel besser, die eigentliche Verarbeitung der seriellen Schnittstelle in einem separaten Thread auszuführen und das WaitCommEvent statt eines Timers für die Annahme eingehender Daten zu verwenden. Hängen Sie neu empfangene Daten in einem Speicherpuffer an, der für diesen Thread lokal ist.

Rufen Sie die Daten von Ihrem Thread an der seriellen Schnittstelle ab, indem Sie einen Timer verwenden, oder lassen Sie Ihren Thread an der seriellen Schnittstelle mit Ihrer Hauptanwendung kommunizieren, wenn eine vollständige Nachricht empfangen wurde.

Beim Senden von Daten an die serielle Schnittstelle wollen Sie einen Mechanismus, bei dem die Daten lokal im Code der seriellen Schnittstelle gespeichert und von dort übertragen werden.

Dabei ist zu bedenken, dass die Übertragung und der Empfang über die serielle Schnittstelle im Vergleich zu allen anderen Kommunikationsmitteln LANGSAM ist, und dass der Zugriff auf die serielle Schnittstelle über den Hauptanwendungsthread diese massiv verlangsamt, insbesondere bei der Datenübertragung.

Wenn Sie die direkte Kodierung mit der Win32-API und seriellen Schnittstellen als mühsam empfinden, dann diese Klasse hier Ich habe sie als sehr nützlich empfunden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X