INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Verarbeiten von ESC-Sequenzen (VT100)



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

08.01.2023, 16:30
Beitrag #13

Nominas Offline
LVF-Grünschnabel
*


Beiträge: 16
Registriert seit: Jan 2010

2018; 2021
2001
DE_EN

78713
Deutschland
RE: Verarbeiten von ESC-Sequenzen (VT100)
Hallo Gerd,

1. Lesen vom Port
Die drei Aussagen
- Weil ich mir nicht sicher bin, ob bei einer kompletten, neuen Seite nicht schneller ein neues Paket kommt.
- Weil ich denke, dass es sich so leichter auf andere Anwendungen anpassen lässt
- Weil das Problem nicht beim Lesen von der Schnittstelle liegt, sondern bei der Aktualisierung der Tabelle (und dort bei der Grafik)
gehören zusammen und beziehen sich nur auf Deinen Vorschlag eine feste Anzahl Bytes mit einem festen Timeout zu lesen.

Welche Möglichkeiten gibt es, den Lese-Rythmus zu bestimmen?
1. Termination-Charakter, bei diesen ESC-Sequenzen kann man "\1B" nehmen. Dann wird aber jede Sequenz einzeln an die Datenauswertung und an die Anzeige übergeben. Das habe ich probiert und verworfen...
2a. "BytesAtPort" abfragen und die anstehenden Daten lesen.
2b. Eine feste Anzahl Bytes und einen passenden Timeout vorgeben.
3. Flow-Control. Hab' ich hier nicht und ist wohl eher selten...

Habe ich da noch etwas übersehen?

Ich habe mich für 2a entschieden, weil
a) es vielleicht Fälle gibt (z.B. bei einer statischen Seite) bei denen ein kleineres Paket gesendet wird.
b) das Lesen (hoffentlich) so auch mit anderen seriellen Schnittstellen funktioniert.
c) ich keinen Grund sehe an dieser Stelle noch irgendwelche Millisekunden zu gewinnen.


2. Software-Struktur
Deinen Vorschlag ein Producer-Consumer-Schema zu verwenden, hatte ich aufgegriffen und ausprobiert.
Dadurch kann schon das nächste Paket von der Schnittstelle gelesen werden, während das vorherige verarbeitet wird.
Das funktioniert aber nur, wenn alle Consumer schnell genug sind! Anderenfalls sammeln sich die Daten halt nicht am Port, sondern im Queue.

Zitat:Code sollte immer nur eine möglichst klar umrissene Aufgabe erfüllen! Und das sollte nicht sowas sein wie "seriellen Port schnell bedienen & gesamten Datenblob verarbeiten & komplizierte Anzeige aktualisieren" - das sind 3 ganz klar getrennte Aufgaben!
Hier denke ich genau entgegengesetzt! (auch ein Zitat Wink)
Es bringt doch nichts, wenn ich den seriellen Port schnell bediene und die Daten auch noch schnell genug verarbeite, aber die Anzeige nicht in der gleichen Zeit aktualisiert bekomme.
Weil das eben keine getrennten Aufgaben sind, bestimmt die langsamste Schleife die Ausführungsgeschwindigkeit.

Auch sehe ich hier keine Möglichkeit, Aufgaben noch weiter zu parallelisieren, da die Abarbeitung des Streams in der Reihenfolge passieren muss.

In meinem vorletzten Versuch hatte ich das Aktualisieren noch in einer parallelen Schleife
Weil ich den Ablauf bei so einem kleinen Programm aber möglichst in einer Linie halte mag UND der letzte Versuch gezeigt hat, das die Anzeige gleich schnell aktualisiert wurde, habe ich es geändert.


3. String-Element und Schriftart
Ja, auch ein String lässt sich formatieren. Aber kann ich z.B. den Hintergrund eines einzelnen Zeichens ändern?
   

Zitat:Wenn ein User auf einem Standard-Windows keine Consolas-Schrift hat, dann hat der Admin geschlampt…
Da hast Du wohl recht, aber zunächst mal passt dann meine Software nicht.
Ach bei einem non-proportional font sind "i" schmaler als "W", sie beanspruchen nur den gleichen Platz. Außerdem wird es durch Serife etwas ausgeglichen.
Aber wenn ein UI gut aussehen MUSS, verwendet man keine Serife...
Ich habe mit der Tabelle ein bisschen rumprobiert und finde, mit einer mittigen Ausrichtung passt das auch mit anderen Schriftarten.


4. Fazit
Wesentliche Punkte bei der aktuellen Lösung sind
1. Die Datenauswertung in ein Array mit Changed-Flag.
- Dadurch werden in der Anzeige nur geänderte Felder aktualisiert.
- Sollte in einem Daten-Paket ein Wert zweimal vorkommen, werden die Felder im Array überschrieben und die Anzeige nur einmal aktualisiert.
2. Die Umsetzung des Array in die Tabelle innerhalb des xControls.
- Das geht schneller.
- Dadurch wird offenbar der Error 1604 vermieden.

Ich habe die Parallelisierung (siehe 2.) verworfen, weil es so für mich schnell genug funktioniert.
Vielleicht gibt es Fälle, wo man das nochmal aufgreifen muss.
Aber dann sollte man evtl. mehrmals das Daten-Array und nicht so oft die Anzeige aktualisieren.
Du hattest ja schon geschrieben, dass das nur 5-10x pro Sekunde sein muss.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30
Antwort schreiben 


Nachrichten in diesem Thema
RE: Verarbeiten von ESC-Sequenzen (VT100) - Nominas - 08.01.2023 16:30

Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Daten verarbeiten von RS232 über USB vitjee 1 5.249 18.01.2012 07:56
Letzter Beitrag: GerdW
  Messdaten seriell einlesen, verarbeiten und speichern Ma--Mut 2 9.592 24.07.2009 12:21
Letzter Beitrag: Ma--Mut
  Serielle Komunikation mit µC (VT100) zirni13 5 14.654 24.05.2007 13:55
Letzter Beitrag: IchSelbst
  Einlesen RS232 und Daten verarbeiten Christian18 6 7.419 02.03.2007 11:00
Letzter Beitrag: Christian18
  mehrere Daten von serieller Schnittstelle verarbeiten theodrin 2 4.002 22.05.2006 17:31
Letzter Beitrag: theodrin

Gehe zu: