Delphi 7:Zu langsames Auslesen bei TComport ComPortRxChar

Gast #4863703
Lesenswert?

Hallo  Leute,

ich arbeite mit Win XP mit Delphi 7 und der Komponente Comport. Beim 
Auslesen via
ComPortRxChar erfolgt eine extrem verlangsamte  Anzeige der Daten. Wird 
der Sender  (AVR, RS232) gestoppt, stoppt auch die Anzeige. Wird der AVR 
wieder eingeschaltet ,werden keine neuen Daten,  sondern noch jede Menge 
alte Daten ( wohl noch aus dem Puffer vom PC) am PC angezeigt. Erst nach 
einiger Zeit werden dann neue Daten vom AVR angezeigt
Bin ratlos, da es kein übliches Problem ist.  Der AVR sendet brav alle 
100ms ein Datenpaket mit Zähler. Das wurde mit Terminal-Programm 
getestet. Aber der PC zeigt diese Daten nur alle 1000ms an. Da alles 
über die Zeichen-Empfangsroutine der Komponente läuft und es kein 286er 
mit DOS 3.1 ist, sollte es eigentlich kein Geschwindigkeitsproblem sein. 
Die Zeichenempfangsroutine ComPortRxChar wird nicht schneller 
aufgerufen. .

Wer hat da eine Idee? Danke
#4863716
Lesenswert?

Deine Auswertung der Daten ist zu langsam, vermutlich weil irgendwelche 
Anzeigen jedesmal erneuert werden.

Das kostet echt Zeit.. ;-)

Roberz schrieb:
> Aber der PC zeigt diese Daten nur alle 1000ms an.

Moderne USB2UART Interfaces haben FIFOs drin. Bei 100 ms könnten die 
noch versuchen die Daten zwecks besserer Auslastung des USB zusammen zu 
fassen.
Bei einigen Adaptern kann man in einen lower Latency Modus schalten, 
schau Dir das mal im Geräte Manager an.
Gast #4863748
Lesenswert?

Anzeigen gibt es da keine, nur ein Label für den Zählerstand ;) Das kann 
es also nicht sein.

Beim USB-Virtual-Comport-Treiber kann ich nichts ausser das Übliche wie 
Baudrate und Fifo-Puffer-Größe einstellen...außerdem liest ja das 
Terminal-Programm mit wesentlich mehr Anzeigen alles problemlos in 
richtiger Geschwindigkeit aus...
Gast #4863973
Lesenswert?

Roberz schrieb:
> außerdem liest ja das
> Terminal-Programm mit wesentlich mehr Anzeigen alles problemlos in
> richtiger Geschwindigkeit aus...

Es würde vielleicht helfen, wenn man nicht nur einen einzigen, sondern 
soviele Zeichen auslesen würde, wie gerade verfügbar sind, es kann ja 
sein dass seit der letzten Abfrage mehr als ein Zeichen neu angekommen 
ist, und das summiert sich dann auf.

Aber wenn man nur eine kopierte Komponente verwendet, hat man darauf 
natürlich keinen Einfluss und muss die Komponente so nehmmen wie sie 
ist. Es könnte auch performanter sein, nicht einzelnen Zeichen, sondern 
eine ganze Message einzulesen (die alle 100 ms kommt), aber da gilt das 
gleiche.

Georg

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren