Quick Commands - Logging Output

Ist es möglich die Antwort des Druckers nach dem ausführen eines Gcode Befehls in einer Variable zu speichern und auszugeben?
(Marlin)z.B.:
M29
--> in der Konsole folgenden Output:
Recv:21:08:20.551: Acceleration: P500.00 R500.00 T1000.00
Recv:21:15:35.573: ok (1)
--> lässt sich das auch in einer Dialogbox anzeigen um die Ausgabe bei einem Quick Command zu sehen :)?
Danke :)

Comments

  • Klar, ist nicht weiter schwierig. In der Druckerkonfiguration->G-Codes->Antwort auf ereignis kann man z.b. regeln erstellen die eine Ausgabe erkennen. Das sind reguläre Ausdrücke und Gruppen werden hier @1, @2 etc zugeordnet. Das könnte dann grob so aus sehen:
    Ausdruck:
    Acceleration: P(\d*\.\d*) R(\d*\.\d*) T(\d*\.\d*)
    Im GCode daten in globale variable speichern
    @set global.accP @1
    @set global.accR @2
    @set global.accT @3

    Man kann auch in einem wizard z.b. G29 senden und auf eine spezielle Antwort x sekunden warten und dann eine Funktion aufrufen zur Anzeige.
  • edited October 22
    Frage zwecks @monitorCall
    @monitorCall M204 'Acceleration: P(\d*\.\d*)*R(\d*\.\d*)*T(\d*\.\d*)*' 1000 'func1 @1 @2 @3' func2

    ...des geht schonmal nicht? :D Wie komme ich dann an die Daten?^^
    Und geht das Theoretisch auch über mehrere Zeilen, wenn die Ausgabe länger wäre?
    Danke :)
    ---
    ...Will mir später mal einen Kurzbefehl für Klipper zum Leveln vom Bed schreiben ;D
    Aber so kann ich schonmal testen und üben an meinem Drucker^^
  • Das oben geschreibene war für die "Antwort auf Ereignis" funktion. Bei @monitorCall geht das so nicht. Hier aus der Anleitung:

    @monitorCall Name "Expression" timeoutMS hitFunction missFunction

    Defines a regular expression with Expression that when matched with a firmware response will call the function hitFunction. If the expression contained groups these groups appear as parameter to the matchFunction in that order. Server will look for timeoutMS milliseconds for a match and if not matched by than will call missFunction. After a match or timeout the test gets automatically removed. Name is used to delete a monitor manually with @deleteMonitorCall. Multiple calls can share same name, but than one delete on the name will delete all of them.

    Richtig wäre eher
    @monitorCall M204 'Acceleration: P(\d*\.\d*)*R(\d*\.\d*)*T(\d*\.\d*)*' 1000 func1 func2

    Wobei dann func1 3 parameter übergeben werden.
    @func func1 p r d
    @set global.accP {{local.p}}
    ...

    Mehrzeilige ausgaben sind ein Problem, da wir immer nur Zeilenweise alles bekommen ist nicht bekannt ob eine Folgezeile zur vorherigen gehört oder nicht. Daher muss jede Zeile idealerweise sinn ergeben. Man kann aber sagenw ir hier un func1 einen @monitorCall einfügen, der die zweite Zeiler erkannt. Damit ist sie erst aktiv wenn die erste gesehen wurde. Wenn also bekannt ist das da noch eine Folgt ist das eine Gute Lösung den Rest nur dann zu interpretieren und nicht sofort auf beides zu warten.
Sign In or Register to comment.