Befehlslogger für Nextion-Displays

Da hier anscheinend doch Einige die Nextion-Displays nutzen ....

Mein Nextion-Display schickt aller paar Tage für ca. zwei Minuten einen Variablenfehler (1A) ??? Daher habe ich einen Datenlogger für das Display geschrieben.
Bindet man diesen in sein Programm ein kann man damit die Befehlssequenzen im intransparenten Mode (xyz 0xFF 0xFF 0xFF) auf dem Display selbst mitlesen und sieht so in Echtzeit, was dort wirklich ankommt.

  • Man kann einen Block von 254 Ausgaben (ist jederzeit erweiterbar) oder kontinuierlich tracen.
  • Man kann vier Ausschlüsse festlegen, die ignoriert und nicht angezeigt werden.

Falls also Interesse besteht ....

cu

Für so etwas besteht immer Interesse.

Gruß Tommy

Ja, Interesse besteht.
Habe noch nicht vollständig verstanden, wo und wie es funktioniert; insb. die Filter.

???
if(text1=text2) -> ignorieren

Ich habe den reinen debug-Code jetzt mal aus meinem Code raus, mit dem Simulator funktioniert es.

Zur Funktionsweise, der debug-Mode schaltet in den transparenten Mode und liest den Empfangspuffer selbst aus und sucht ein 0xFF.
Wird ein 0xFF gefunden sollten die Daten davor logischerweise ein gültiger Befehl sein. Die Daten werden mit den Ausschlüssen verglichen.
Ist die Sequenz komplett (3x 0xFF) werden die die Daten ausgegeben oder eben verworfen (Ausschluss).

Im obigen Bild:

  • der Dualstatebutton 1x/kont. legt fest, wie viele Ausgaben geloggt werden; 1x -124 Ausgaben auf zwei Seiten a 62 Ausgaben (debug, debug1) oder kontinuierlich (der "Überlauf" debug1 geht ins Nirwana)
  • x geht zurück zu start, -> startet und geht auf debug
  • durch antippen der oberen vier Textfelder wird deren Inhalt gelöscht, die Tastatur in der Farbe des Textfeldes eingefärbt und man kann einen Text eingeben, der mit dem von der MCU gesendetem verglichen wird und entsprechend nicht ausgegeben wird (bei mir kommt z.B. sekündlich der Regensensorwert, das würde das Log zumüllen und daher ignoriert)
    (zwei Zeichen sind nicht belegt, können also noch irgendwie belegt werden)
  • in das untersten Textfeld wird der von der MCU empfangene Text kopiert, falls z.B. zwei 0xFF fehlen ist hier der bis zum ersten 0xFF empfangene Text

Auf debug werden die Daten angezeigt.

Über dem gesamten Screen liegt ein Touch-Hotspot, wird er angetippt werden die drei Icons eingeblendet.
x beendet, schaltet in den intransparenten Mode und geht auf deb_einst, -> geht auf die zweite Anzeigeseite debug_1 (auf der liegt ebenfalls ein Touch-Hotspot, der zurück auf debug geht)
!!! Außerhalb von debug läuft der alles entscheidende Timer nicht (auch nicht auf global), im kontinuierlichen Mode kann hier der Empfangspuffer des Nextion überlaufen!!!
Der Haken blendet die Butons wieder aus.

Bei mir ist der Code eingebunden, erhält die MCU vom Display Daten die außerhalb der von mir definierten Befehle liegen (was in meinem Fall 1A FF FF FF ist) schickt sie eine entsprechende Fehlermeldung mit Datum/Uhrzeit/Fehlercode an das Display und anschließend

Serial2.print("page deb_einstell");

Serial2.print("click b2,1")

!!! Ein click von der MCU funktioniert nur, wenn das Display auf der entsprechenden Seite ist!!!

Fragen, Hinweise .....
debug.zip (2,4 MB)

Und bitte testen ....

cu

Mit Filter meinte ich "Ausschluss".

Danke, schaue ich mir heute Abend an.
Ist im zip die debug- page für das Display mit drin?

Ja, ist klar. im Moment wird "Ausschluss 1" ... bis 4 aus dem Datenstrom von der MCU ausgefiltert und von der Anzeige ausgeschlossen.

Von
"du" FF FF FF
"bist" FF FF FF
"Ausschluss 1" FF FF FF
", ok?" FF FF FF
von der MCU gesendet siehst Du nur
du
bist
, ok?

In die Textfelder muss das rein, was "übergangen", als von der Log-Ausgabe ausgeschlossen werden soll.
Die kann man natürlich leer lassen, mit voreingestellten Werten füllen oder bei Aufruf auch befüllen.

In der zip ist ein komplett einbindungsfähiger Teil, es müssen lediglich entsprechend des eigenen Aufbaues die über ID adressierten Komponenten angepasst werden.
Wie hier:

// Text weiter schieben debug1
for(sys0=62;sys0>0;sys0--)
{
sys2=sys0-1
p[3].b[sys0].txt=p[3].b[sys2].txt
}

cu

Super, anscheinend reicht es wenn man hat was man will.