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
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
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...
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
Roberz schrieb: > Wer hat da eine Idee? Der Empfang eines Zeichens gehört eigentlich in den event TComPort.OnRxChar. Georg
und da ist es auch drin. erster Beitrag, erste Zeile von mir....
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? ;-)
ja, ich habe von der weitverbreiteten und gern genutzten Komponente den mitgelieferten Beispielcode richtig und originalgetreu genutzt :)
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.
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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.