Seite 2 von 2

Re: Pausenfunktion - Taste am Drucker & M3070 GCode

Verfasst: Di 17. Mär 2015, 21:16
von RF1000
Hallo mjh11,


dann werde ich mal versuchen alle Themen vollumfänglich zu beantworten.
Etwas von dieser Information gehört für alle dokumentiert. Wahrscheinlich direkt in die "RF1000.h"-Datei reingeschrieben. Oder steht es schon wo & ich habs einfach übersehen?
Ich denke dass man die Doku an dieser Stelle noch verbessern muss. Ich werfe das auf unsere Liste.
Dass die Firmware nur auf die Hardware.Pausetaste reagiert, wenn gerade gedruckt wird, ist kein optimales Vorgehen. Die Firmware sollte immer auf die Taste reagieren. Beispiel: ich starte einen Druck, der Drucker wartet bis die Temperaturen erreicht werden (druckt also nicht). Ich komme noch während dieser Wartezeit auf einen Fehler drauf und drücke die Pause Taste. Da (gerade) nichts gedruckt wird, ignoriert die Firmware die Taste? Ich hoffe ich habe deine Erklärung richtig verstanden.
In deinem Szenario würde die Firmware pausieren, falls in der FIFO Druckbefehle enthalten sind. Grundsätzlich ist dieses Szenario aber auch schon wieder ein Spezialfall - gerade beim Aufheizen gibt es ja die Möglichkeit zu warten, bis die Solltemperatur erreicht ist (d.h. in dem Fall wäre die FIFO leer, weil die Firmware auch keine weiteren G-Codes verarbeitet bis das Warten vorbei ist).
Die Firmware weiß nicht ob du gerade druckst oder einfach ein paar G-Codes hintereinander ausführst (z.B. ein manuelles Homing oder das manuelle Fahren irgendwohin) ... da das Pausieren für das Pausieren des Drucks gemacht worden ist prüft es aber eben, ob in der FIFO überhaupt Druckbefehle drin sind. So wirklich sinnvoll wäre die Pause-Funktionailtät ja auch nicht, wenn gerade kein Druck stattfindet ... weil dann könnte man die notwendigen Positionen jederzeit auch über manuelles Fahren erreichen.
Nach dem Weiterdrucken wird die Pause Taste aber ignoriert, da die Home-Position unbekannt ist (durch das Ausschalten der Extruder - "M84"). Drucken tut er aber fleissig -> ein bisschen ironisch, zum Pausieren braucht er die Home Position, aber zum Weiterdrucken nicht :lol:.
Wie gesagt, M84 ist während dem Druckvorgang nicht sinnvoll. Wenn es dir nur um den Extruder geht könnte man ein entsprechendes Kommando hinzufügen (als M-Code und/oder im Menü). Das Problem mit dem Ausschalten der Stepper ist dass die Firmware danach (bis zum nächsten Homing) nicht mehr sicher sein kann, wo die x/y/z/e-Achsen stehen. D.h. du könntest die x-Achse bei ausgeschaltetem Stepper ganz nach rechts schieben und danach per G-Code noch einmal um 200 mm nach rechts fahren - da es keinen x-Max Endschalter gibt würde die Firmware das ausführen und du bekommst im günstigsten Fall nur unschöne Geräusche zu hören. Pause + Continue muss auch fahren und wenn nicht sichergestellt werden kann dass man wirklich fahren (und exakt den selben Weg zurück fahren) kann dann macht das schlicht keinen Sinn.
Dass der Druck weiter geht kommt daher dass man den Anwender nicht zwingen will, nach dem Einschalten der Stepper immer zuerst ein Homing zu machen (obwohl alles andere streng genommen sehr wenig Sinn macht).
Aus was für welchen Grund auch immer, setzt mir die Slicer-Software ein M400 davor ein (darüber habe ich kaum Kontrolle)
Hmm. D.h. du gibst speziellen G-Code für jeden Layer-Wechsel ein? Wenn du nichts angibst dann kommt in den G-Code kein "M400" rein, aber wenn du nur ein "M3070 S2" angibst dann kommt in den G-Code "M400" und "M3070 S2" rein?
Ich hatte vor, länger zuzuwarten, damit das Hot End auf 100-120° abkühlt, und dann das Filament zu entfernen. Dadurch wird die Schmelzkammer besser 'entleert' und der Farbwechsel geht schneller/besser vor sich. Dummerweise weigert sich die (ungeänderte) Firmware, unter 150° mitzumachen. Also entweder an der Configuration.h basteln, oder, macht da der Menüeintrag "Unload Filament" bei den niedrigeren Temperaturen mit?
Wenn du den Extruder auch bei Temperaturen unter 160 bewegen willst, dann musst du UI_SET_MIN_EXTRUDER_TEMP entsprechend anpassen (und auf einen kleineren Wert setzen). Der Menüeintrag "Unload Filament" ist exakt das, was die Firmware im Moment aufhängt - der war bisher nicht dafür gedacht, dass er verwendet wird während der Druck pausiert ist ...
Du kannst aber einstweilen die Hardwaretaster verwenden um den Extruder raus/rein zu fahren.
Wenn du das entladen automatisiert machen willst dann sollte es auch möglich sein, dass du an der gewünschten Stelle die neue Extruder-Temperatur vorgibst, b) wartest bis diese erreicht ist, c) das Filament rausschiebst und d) dann pausierst. Also in etwa so:

M104 S120 ; setze die Extruder-Solltemperatur auf 120 °C
M109 ; warte bis der Extruder 120 °C (+/- 2 °C) erreicht hat
G92 E0 ; setze die aktuelle Extruder-Position auf 0
G1 E-90 F500 ; ziehe das Filament aus dem Extruder
M3070 S2 ; pausiere den Druck und fahre den Druckkopf weg
M3071 ; warte bis der Continue-Knopf gedrückt worden ist
M104 Sxyz ; setze die Extruder-Solltemperatur zurück auf den korrekten Wert
M109 ; warte bis der Extruder die Drucktemperatur erreicht hat
G92 E0 ; setze die aktuelle Extruder-Position auf 0
G1 E90 F100 ; schiebe das neue Filament in den Extruder

Etwas unschön an dieser Lösung ist, dass das neue Filament erst in den Extruder geschoben wird nachdem der Drucker zurück auf die Continue-Position gefahren ist. D.h. das letzte G1 E90 müsste so gewählt werden, dass gerade noch kein Filament unten rauskommt. Besser wäre es wohl das Filament an der Pause-Position reinzuschieben, aber das geht im Moment nicht über G-Codes (d.h. dafür müsste man den Hardware-Taster verwenden).
Ist es OK wenn ich die Temperaturen ausschalte, damit nichts extrudiert wird?
Also nur die Temperaturen auszuschalten und den Extruder verzweifelt versuchen lassen das kalte Filament durch die Düse zu pressen finde ich etwas brutal. Im Repetier-Host kann man im "Manual Control" Tab aber den "Dry Run" aktivieren - das sollte exakt das tun was du willst, nämlich alle x/y/z Positionen anfahren ohne dass der Extruder verwendet wird :-)


mfG
RF1000

Re: Pausenfunktion - Taste am Drucker & M3070 GCode

Verfasst: Mi 18. Mär 2015, 12:48
von rf1k_mjh11
Hallo RF1000,

Ich hoffe, dass das mit dem Zitieren den Beitrag nicht zu verlängert. Sonst wirds 3 Seiten lang.

"]Aus was für welchen Grund auch immer, setzt mir die Slicer-Software ein M400 davor ein (darüber habe ich kaum Kontrolle)"

Hmm. D.h. du gibst speziellen G-Code für jeden Layer-Wechsel ein? Wenn du nichts angibst dann kommt in den G-Code kein "M400" rein, aber wenn du nur ein "M3070 S2" angibst dann kommt in den G-Code "M400" und "M3070 S2" rein?
Das mit dem "M400" war nur als Beispiel gemeint. Hat bei mir nicht stattgefunden (ich selbst war es), aber man kann es nicht ausschliessen, oder? Übrigens habe ich tatsächlich einen standardisierten Layer-Change Code - bloss mehrere Piepser, damit weder der Drucker, noch ich beim Drucken einschlafen :lazy:

Die Erklärung mit der Pause-Taste und der "gerade nicht am Drucken"-Situation habe ich jetzt verstanden, bin aber trotzdem nicht mit der Umsetzung zufrieden. Mehrere Befehle können da zu einer, für den User, scheinbaren Fehlfunktion führen.
[indent]M109 ... warten auf Extruder Temp.
M190 ... warten auf Bett Temp.
M116 ... warten auf alle Temp.
G4 Sxxx (oder Pxxx) ... Warte (=Pause mit vorbestimmtem Zeitlimit)
M400 ... Warte bis alle Befehle abgearbeitet wurden
M300 Sxxx Pxxx .... Piepse[/indent]
Bin nicht sicher ob alle tatsächlich den befürchteten Effekt hätten.
Könnte man nicht einfach bei Betätigung der Pausen-Taste ein Bit (Flag) setzen und alle weiteren Eingaben ausser "Weiter" ignorieren? Und damit der User weiß, was los ist, wird gleichzeitig am Display "Pause" oder "paused" eingeblendet. Damit würde der Drucker immer pausieren, egal ob gerade gedruckt wird oder nicht.
Falls das nicht geht, na gut, jetzt weiß ichs und kann mich anders helfen - nur ein Vorschlag von mir.
Dass der Druck weiter geht kommt daher dass man den Anwender nicht zwingen will, nach dem Einschalten der Stepper immer zuerst ein Homing zu machen (obwohl alles andere streng genommen sehr wenig Sinn macht).
Sehr richtig - macht sehr wenig Sinn. Der User wird nicht gezwungen zu Homen vorm weiterdrucken, bloß zum Pausieren. Aber gut - wie gesagt, jetzt weiß ichs und arbeite daran herum.

Bezüglich dem Beispiel-Code habe ich auch ein paar Bemerkungen.
[indent]Zuerst mit M104 S185 Temperatur setzen, dann mit M109 warten. Ich kenne das von Marlin gleich so, in einem Aufwaschen:
M109 S185 Wird das von Repetier nicht so unterstützt?

Im GCode setzt du die Temperatur herunter und wartest - dummerweise sabbert dann die Düse sehr lange auf das Werkstück. Besser - wegfahren, dann Temperatur runter und warten. Ist aber egal - ich kann mir vorstellen was damit gemeint war.
M3070 S2 ; pausiere den Druck und fahre den Druckkopf weg
M3071 ; warte bis der Continue-Knopf gedrückt worden ist
Meine Pausen-Tests sagen mir dass der M3071-Befehl redundant ist, da ja nach dem M3070-Befehl der Drucker sowieso wartet, bis der "Weiter-Knopf" gedrückt wird, oder?[/indent]

So, nun zum Letzten: meine Frage bzgl. "Temperaturen ausschalten".
Ich mache oft solche "Trockenläufe". Ist die Temperatur niedrig genug eingestellt (z.B. Zimmertemperatur), fördert der Extruder gar nichts und ich mache das gleiche wie unter Repetier-Host als "Dry Run" bezeichnet.
Das wollte ich eigentlich damit fragen, ob es notwendig wäre, für den Test Filament zu verschwenden. Muss ich das? Oder kann ich einen "Trockenlauf" damit durchführen?

Danke für die Geduld,

mjh11

Re: Pausenfunktion - Taste am Drucker & M3070 GCode

Verfasst: Mi 18. Mär 2015, 17:20
von rf1k_mjh11
An RF1000,

Jetzt bin ich endlich dazugekommen deine Datei auszuprobieren. Allerdings mit auf Zimmertemperatur reduzierten Temperaturangaben.
Wie erwartet, ignoriert die Firmware alle Extrudierversuche - damit war es ein "Dry Run".

Der Drucker pausierte das erste Mal an der augenblicklichen Position, das zweite Mal fuhr es an die "Standard-Pause-Position" und wartete.

Ich glaube die zusätzliche Angabe von M3071 ist nicht notwendig. Ich druckte das Ganze ein zweites Mal, mit dem entsprechenden Befehl auskommentiert. Der Drucker blieb erwartungsgemäß auch jedesmal stehen.

Also alles OK.

Eine andere Kleinigkeit fiel mir jedoch auf. In Repetier-Host, nach dem Einschalten und dem manuellen Homing gehen alle 3 Koordinatenangaben schön auf schwarz. Aber kurz nachdem der Druckjob beginnt (deine Datei) und es mittels GCode-Datei nochmals geHOMEt wird, geht der X-Wert auf rot und bleibt während des gesamten Drucks rot. Der Y-Wert springt kurz auf 25, obwohl es noch bei 0 ist.
Das Alles ist aber kein Problem. Der Druck scheint trotzdem problemlos zu klappen.

mjh11

Re: Pausenfunktion - Taste am Drucker & M3070 GCode

Verfasst: Do 19. Mär 2015, 17:15
von RF1000
Hallo mjh11,

M109 S185 Wird das von Repetier nicht so unterstützt?
Doch, das klappt natürlich auch.
Meine Pausen-Tests sagen mir dass der M3071-Befehl redundant ist, da ja nach dem M3070-Befehl der Drucker sowieso wartet, bis der "Weiter-Knopf" gedrückt wird, oder?
Nunja, theoretisch könnte man zwischen M3070 und M3071 weitere Kommandos rein packen. Allerdings haben die meisten G-Codes natürlich keinen Effekt, bis der Druck fortgesetzt wird.
Ich mache oft solche "Trockenläufe". Ist die Temperatur niedrig genug eingestellt (z.B. Zimmertemperatur), fördert der Extruder gar nichts und ich mache das gleiche wie unter Repetier-Host als "Dry Run" bezeichnet.
Das wollte ich eigentlich damit fragen, ob es notwendig wäre, für den Test Filament zu verschwenden. Muss ich das? Oder kann ich einen "Trockenlauf" damit durchführen?
Wenn keine Solltemperatur eingestellt ist (= Solltemperatur 0) dann sollte sich der Extruder auch nicht bewegen. D.h. das kannst du für den Test verwenden. Wie du im letzten Post ja auch noch einmal beschrieben hast :-)
Eine andere Kleinigkeit fiel mir jedoch auf. In Repetier-Host, nach dem Einschalten und dem manuellen Homing gehen alle 3 Koordinatenangaben schön auf schwarz. Aber kurz nachdem der Druckjob beginnt (deine Datei) und es mittels GCode-Datei nochmals geHOMEt wird, geht der X-Wert auf rot und bleibt während des gesamten Drucks rot. Der Y-Wert springt kurz auf 25, obwohl es noch bei 0 ist.
Der Repetier-Host zeigt nicht wirklich die aktuelle Position des RF1000 an sondern dass, was er dem RF1000 als anzufahrende Position gesendet hat. Daher können die Anzeigen auf dem Display des RF1000 und im Repetier-Host manchmal außeinanderlaufen, vor allem wenn man den RF1000 manuell bewegt und/oder wenn die Z-Kompensation aktiv ist. Rot sollte der Repetier-Host normalerweise aber nicht sehen, wir schauen uns das an.


mfG
RF1000

Re: Pausenfunktion - Taste am Drucker & M3070 GCode

Verfasst: Do 19. Mär 2015, 20:27
von rf1k_mjh11
RF1000,

Wie du vielleicht schon gesehen hast, habe ich die Issue wegen dem Ignorieren der Pause-Taste auf der GitHub Seite geschlossen. Das scheinbare Ignorieren der Pausetaste wurde durch den davor stehenden "M84"-Befehl hervorgerufen.

Damit ist das Verhalten erklärbar.

Dass es sehr ironisch ist, ist eine andere Sache. Vielleicht überlegen sich die Firmware Programmierer das doch noch....

mjh11