Forum: PC-Programmierung Delphi 7:Zu langsames Auslesen bei TComport ComPortRxChar


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Roberz (Gast)


Bewertung
0 lesenswert
nicht 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

von Jim M. (turboj)


Bewertung
0 lesenswert
nicht 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.

: Bearbeitet durch User
von Roberz (Gast)


Bewertung
0 lesenswert
nicht 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...

von Georg (Gast)


Bewertung
0 lesenswert
nicht 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

von Georg (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Roberz schrieb:
> Wer hat da eine Idee?

Der Empfang eines Zeichens gehört eigentlich in den event 
TComPort.OnRxChar.

Georg

von Roberz (Gast)


Bewertung
0 lesenswert
nicht lesenswert
und da ist es auch drin. erster Beitrag, erste Zeile  von mir....

von Huh (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Roberz schrieb:
> und da ist es auch drin. erster Beitrag, erste Zeile  von mir....

Na dann schau mal genauer hin:

Georg schrieb:
> TComPort.OnRxChar

Roberz schrieb:
> ComPortRxChar

Fällt dir was auf? ;-)

von Roberz (Gast)


Bewertung
0 lesenswert
nicht lesenswert
ja, ich habe von der weitverbreiteten und gern genutzten Komponente den 
mitgelieferten Beispielcode richtig und originalgetreu genutzt :)

von Jim M. (turboj)


Bewertung
0 lesenswert
nicht lesenswert
Roberz schrieb:
> ja, ich habe von der weitverbreiteten und gern genutzten Komponente den
> mitgelieferten Beispielcode richtig und originalgetreu genutzt

Und dieser Code funktioniert, ist aber arschlahm.

Hab grad nachgeschaut, wir benutzen InputCount und Read() zum schnellen 
Lesen.

von W.S. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Roberz schrieb:
> Wer hat da eine Idee? Danke

Ich verwende die da:
"http://www.mikrocontroller.net/attachment/313034/TComPort.zip";

und zwar mit D6, D10 und Lazarus (dort etwas angepasst). Wahrscheinlich 
machst du bei deiner Komponente irgendwas mit dem Auslesen falsch.

W.S.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.