Pausenfunktion - Taste am Drucker & M3070 GCode

Firmware Veröffentlichungen und Einstellungen können hier angekündigt und diskutiert werden.
Benutzeravatar
rf1k_mjh11
Developer
Developer
Beiträge: 2051
Registriert: Di 6. Jan 2015, 19:44
Wohnort: Autriche
Has thanked: 263 times
Been thanked: 542 times

Pausenfunktion - Taste am Drucker & M3070 GCode

Beitrag von rf1k_mjh11 »

an RF1000 (& 3DBauer),

Wollte heute auch eine schöne 2-färbige Tafel machen und versuchte diese Pause einzufügen, um das Filament zu wechseln.

Ich hatte zuerst kein "S0" Parameter an dem "M3070" Befehl angehängt, es steht ja nicht in der Doku (oder inzwischen doch?).
Ich machte einen Trockenlauf wie in meinem letzten Beitrag in diesem Thread.
Der Drucker ignorierte den Befehl (wegen dem fehlenden "S0"?) und druckte munter weiter. "Na Ja", dachte ich, "mach ichs halt mit der Pausetaste am Drucker" ---> siehe da, der Drucker ignorierte die Pausentaste völlig. Auch mehrfaches drücken, über mehrere Sekunden hinweg (wegen dem Befehl-Cache), brachte dem Drucker die ersehnte Pause nicht, und er musste 'als weiterschaffa'.

Ok, ich habe gerade eben noch einen Trockenlauf gemacht, aber mit "M3070 S0". Jetzt hat der Drucker pausiert. Allerdings, nach dem nochmaligen Drücken fuhr der Extruder nicht, wie erwartet, um den mittels "M3105" gespeichrten Offset, sondern blieb an der Stelle.
Auch hier habe ich zusätzlich, nach dem Fortfahren des Drucks, wieder die Pausetaste am Drucker (mehrfach) betätigt, und auch hier ignorierte der Drucker die Pausentaste wieder völlig.

Das mit der Pausetaste dürfte ziemlich sicher ein Problem sein. Das mit dem Offset prüfe ich mit einen weiteren Trockenlauf. (gerade geschehen - das selbe Ergebnis - kein Fahren um den Offsetbetrag)

Auf jeden Fall sollte man die Notwendigkeit des "S0" Parameters für den "M3070" Befehl mitdokumentieren. Aber besser wäre es natürlich, den Parameter bloß als optional zu führen, da ich keinen Grund sehe, ihn überhaupt anführen zu müssen.

Firmware in Verwendung: 0.91.51a (OUTPUT_OBJECT_SCRIPT modifiziert, laut meinem Beitrag hier).

Bei Bedarf kann ich mehrere GCode Dateien beisteuern. Einstweilen nur das vom letzten Versuch. Die Pausen-Spielerei fängt bei Zeile 1952 an.



mjh11
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
RF1000 (seit 2014) mit:
  Pico Hot End (mit eigenem Bauteil- und Hot End Lüfter)
  Ceran Bett
  FW RF.01.47 (von Conrad, modif.)

Die Natur kontert immer sofort mit einem besseren Idioten.
Benutzeravatar
rf1k_mjh11
Developer
Developer
Beiträge: 2051
Registriert: Di 6. Jan 2015, 19:44
Wohnort: Autriche
Has thanked: 263 times
Been thanked: 542 times

Re: Pausenfunktion - Taste am Drucker & M3070 GCode

Beitrag von rf1k_mjh11 »

@ RF1000,

Jetzt habe ich es geschafft, den Drucker ganz aufzuhängen.
Hergang:
In der Früh habe ich mittels manuellem Pausieren einen Versuch für eine zweifärbige Plakette gemacht. Manuelles Pausieren, eben wegen dem Verhalten in vorhergehenden Beitrag. Das Druckergebnis war nicht ganz Perfekt (1 GCode, aber 2 verschiedene Filamente => unterschiedliche Flowraten & Temperaturen...).

Jetzt habe ich am Nachmittag den Versuch noch einmal gewagt.
Erstens hat der Drucker nicht dort pausiert wo er sollte (massenhaft Piepser & "G4" Pausen eingebaut, um mich aufmerksam zu machen & mir Zeit zu geben, die Pause Taste zu drücken). GCode liegt bei, die Pauserei beginnt bei Zeile 1955. Er druckte trotz mehrfachen Tastendrucks weiter. Kurz danach hat er dann doch pausiert.
Da die Temperaturänderung (runter, für Filamentwechsel, dann wieder hoch) durch das Weiterdrucken (keine Pause) zunichte gemacht wurde, musste ich nochmals mit der Temperatur, mittels Druckermenü, runter. Das ging OK.
Kurz davor, oder kurz danach, habe ich mittels manueller Extrudersteuerungstaste am Drucker, das Filament leicht zurückgefahren. Das ging auch noch.
Dann wollte ich, übers Menü "Unload Filament" verwenden um den Filamentwechsel durchzuführen. Da gab es keine Reaktion mehr.
Danach waren keine Eingaben über die Tastatur möglich. Video gäbe es auch, ist aber fürs Forum zu groß (33MB).
Das Senden von GCodes mittels Repetier-Host schien auch nicht zu klappen (M117 You're Screwed) ergab nichts - wahrscheinlich da der Drucker noch immer "paused..." im Display sagte.
Erst der "Emergency Stop" Knopf setzte den Drucker zurück.

Im Anhang der GCOde
Ein Stück der Log-Datei (nur das letzte Stück). Interessant hier ist, dass der Drucker scheinbar die pausierung verweigerte, mit der Begründung (Zeilen 33 & 34):

Code: Alles auswählen

16:32:07.434 : pausePrint()
16:32:07.450 : pausePrint(): pause is not available at the moment because nothing is printed
Was keinen Sinn ergibt, da schon einiges zu dem Zeitpunkt gedruckt wurde (2 ganze Layer). Dasselbe wiederholt sich in Zeilen 63 & 64.
Der Pausenbefehl (mittels Taste am Drucker), wurde erst beim dritten Mal, in Zeile 92 & 93 akzeptiert.
Kurz danach, in Zeile 99, war der Drucker 'aufgehängt.
In Zeile 100 ging es mit der "Emergency Stop" von Repetier-Host weiter.




Spätestens Montag mache ich sonst einen Eintrag auf GitHub.

mjh11
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
RF1000 (seit 2014) mit:
  Pico Hot End (mit eigenem Bauteil- und Hot End Lüfter)
  Ceran Bett
  FW RF.01.47 (von Conrad, modif.)

Die Natur kontert immer sofort mit einem besseren Idioten.
RF1000
Developer
Developer
Beiträge: 340
Registriert: Fr 10. Okt 2014, 16:31
Has thanked: 40 times
Been thanked: 80 times

Re: Pausenfunktion - Taste am Drucker & M3070 GCode

Beitrag von RF1000 »

Hallo mjh11,


wir haben es mit deinen Schritten geschafft, das Hängen der Firmware zu reproduzieren. Wir sehen uns das an.
Das Verhalten, dass der RF1000 beim Drücken der Hardware-Pause-Taste nicht pausieren will, bekommen wir aber nicht hin. Diese Taste führt quasi sofort zum Pausieren und ignoriert die G-Code FIFO.

Bei M3070 gibt es zwei mögliche Parameter:
- "M3070 S1" pausiert den Druck
- Dieses Verhalten entspricht 1x drücken des Hardware-Pause-Tasters
- "M3070 S2" pausiert den Druck und fährt weg
- Dieses Verhalten entspricht 2x drücken des Hardware-Pause-Tasters

Aus deinem "M3070 S0" macht die Firmware automatisch ein "M3070 S1", weil die 0 kleiner als das minimal erlaubte 1 ist.

Hast du eine Logdatei von dem Moment, wo das Drücken des Hardware-Pause-Tasters nicht zum Pausieren führt?


pausePrint(): pause is not available at the moment because nothing is printed


Laut deiner "Plaque1_1725_ManualPause.txt" sieht die Firmware das exakt so - vor dem M3070 ist da ein M400 und danach keine weiteren Druckbefehle, d.h. wenn M3070 aufgerufen wird ist die komplette FIFO leer (und das ist für die Firmware dann so, als ob gerade nichts gedruckt wird). Bekommst du diesen Logeintrag auch mit "Plaque1_Pause_2037_no_extrude.txt"?

Im G-Code habe ich gesehen dass du die Stepper ausschaltest - während einem Druckvorgang halte ich das grundsätzlich für nicht ratsam, warum willst du das machen?

Ich habe dir im Anhang eine G-Code Datei aus unserem Standardtest mitgesendet - diese verwendet ein M3070 S1 und pausiert auch korrekt. Du kannst dieses auch durch ein M3070 S2 ersetzen, dann fährt der Extruder beim Pausieren auch weg. Bitte gib' mir Bescheid, ob das Pausieren damit bei dir klappt. Falls ja dann sollte es doch möglich sein, dass wir das auch für deinen G-Code hinbekommen.

Und sorry dass ich diesen Beitrag nicht früher gesehen/beantwortet habe :-)


mfG
RF1000
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Benutzeravatar
rf1k_mjh11
Developer
Developer
Beiträge: 2051
Registriert: Di 6. Jan 2015, 19:44
Wohnort: Autriche
Has thanked: 263 times
Been thanked: 542 times

Re: Pausenfunktion - Taste am Drucker & M3070 GCode

Beitrag von rf1k_mjh11 »

RF1000,

Danke für die Antworten. Leider ist es schon wieder einige Tage her. Ich werde mich wieder hineindenken müssen. Auch einige 'Testdrucke' machen. Aber nun zu den Antworten:

RF1000 hat geschrieben: Bei M3070 gibt es zwei mögliche Parameter:
- "M3070 S1" pausiert den Druck
- Dieses Verhalten entspricht 1x drücken des Hardware-Pause-Tasters
- "M3070 S2" pausiert den Druck und fährt weg
- Dieses Verhalten entspricht 2x drücken des Hardware-Pause-Tasters
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?

RF1000 hat geschrieben: Hast du eine Logdatei von dem Moment, wo das Drücken des Hardware-Pause-Tasters nicht zum Pausieren führt?


pausePrint(): pause is not available at the moment because nothing is printed
Die "Rf1k_HangupLog.txt" war zwar die Datei wo sich der Drucker aufgehängt hat. aber die zitierte Meldung "pause not available...." welche man in der Log-Datei sieht, stammt eben vom manuellen Drücken der Pause-Taste.
Deiner Erklärung nach, wo die Firmware nicht pausiert, da gerade nicht gedruckt wird, könnte evtl. noch für die Zeile mit "16:32:07.450" stimmen, da der Befehl unmittelbar davor G4 P50 ist (50 Millisekunden Warten), auch die Befehle davor sind G4-Pausen oder M300-Piepser - da wird tatsächlich nicht gedruckt, und da es sich beim G4 Befehl um einen ungepufferten Befehl handelt, wäre die Warteschlange (vielleicht?) auch leer.
Aber die Zeile mit "16:32:21.771" fand (beinahe) mitten im Drucken statt. Dummerweise schickt Repetier-Host immer wieder den M117-Befehl, um die Restdruckzeit anzuzeigen. Dieser Befehl befindet sich auch (zufällig?) unmittelbar davor.

Zusammenfassend:
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.

RF1000 hat geschrieben: Laut deiner "Plaque1_1725_ManualPause.txt" sieht die Firmware das exakt so - vor dem M3070 ist da ein M400 und danach keine weiteren Druckbefehle, d.h. wenn M3070 aufgerufen wird ist die komplette FIFO leer (und das ist für die Firmware dann so, als ob gerade nichts gedruckt wird). Bekommst du diesen Logeintrag auch mit "Plaque1_Pause_2037_no_extrude.txt"?
Der M3070 Befehl sollte in der Datei bereits auskommentiert gewesen sein. Also hätte es keine Wirkung.
Ich prüfe gerade die "...no_extrude.txt" Datei. Ergebnis --> Die Pause mittels "M3070 S0" hat funktioniert. 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:.

Code: Alles auswählen

17:14:03.018 : pausePrint()
17:14:03.018 : pausePrint(): pause is not available at the moment because the home position is unknown
17:14:03.113 : N5396 G1 X75.545 Y87.673 E5.27161 *118
17:14:03.113 : N5397 G1 X76.201 Y86.973 E5.28203 *117
17:14:03.129 : N5398 G1 X76.888 Y86.37 E5.29197 *71
17:14:03.129 : N5399 G1 E3.49197 F5700 *16
17:14:03.129 : N5400 G92 E0 *86

Ich probiere gerade dieselbe Datei nochmals probieren, mit auskommentierten "M84". Ergebnis in kürze.

Aber bzgl. dem Verhalten des M3070-Befehls gilt ähnliches wie vorhin auch gesagt. Als Beispiel:
  • Im Layer-Wechsel-GCode sehe ich eine Pause mittels M3070 vor.
  • Aus was für welchen Grund auch immer, setzt mir die Slicer-Software ein M400 davor ein (darüber habe ich kaum Kontrolle)
  • Toll - keine Pause
Nicht optimal.

RF1000 hat geschrieben: Im G-Code habe ich gesehen dass du die Stepper ausschaltest - während einem Druckvorgang halte ich das grundsätzlich für nicht ratsam, warum willst du das machen?
Deine Bedenken sind berechtigt. Ich wollte es auch nicht, mir fiel damals aber nichts besseres ein. Um das Filament leichter rausziehen zu können, wollte ich nur den Extruder abschalten, es ging aber nur alle oder keines. Inzwischen weiß ich einen besseren Weg. 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?

Ich werde auch gleich dein GCode testen & melde mich. Ist es OK wenn ich die Temperaturen ausschalte, damit nichts extrudiert wird?

mjh11
RF1000 (seit 2014) mit:
  Pico Hot End (mit eigenem Bauteil- und Hot End Lüfter)
  Ceran Bett
  FW RF.01.47 (von Conrad, modif.)

Die Natur kontert immer sofort mit einem besseren Idioten.
Benutzeravatar
rf1k_mjh11
Developer
Developer
Beiträge: 2051
Registriert: Di 6. Jan 2015, 19:44
Wohnort: Autriche
Has thanked: 263 times
Been thanked: 542 times

Re: Pausenfunktion - Taste am Drucker & M3070 GCode

Beitrag von rf1k_mjh11 »

RF1000,

Hier sind die signifikanten Teile der Log-Dateien beim Drucken der Datei: "Plaque(1)_&_Pause_no_extrude.txt".

- Die eine ist der Zustand noch mit M84-Befehl. Da wird die Pause-Taste nach der Wiederaufnahme des Drucks ignoriert (keine Home Pos bekannt)
- Die zweite hatte den M84-Befehl auskommentiert. Da pausierte der Drucker wie geplant, nahm die Arbeit wieder auf, und konnte nochmals wieder pausiert werden [color=red:27x2e8io]--->[/color:27x2e8io] alles OK.

Scheinbar lag zumindest ein Teil des Problems (wenn nicht alles) an dem M84-Befehl, zumindest was die Verweigerung/das Ignorieren der Pause-Taste betrifft.

Trotzdem ist es nicht ganz cool, wenn der Drucker das Pausieren verweigert, aber munter weiterdruckt. Da sollte sinnvollerweise was geschehen - entweder das Drucken verweigern, oder die Pause-Taste akzeptieren. Das verweigern des Weiterdruckens wird wahrscheinlich schlecht gehen, da sich die Motore auch selbstständig (via Firmware) nach einer vorbestimmten Zeit ausschalten - z.B. bei einem Filament-Überwachungssystem, bei Filamentende. Kommt der User erst nach 10 Minuten oder so, um das Filament zu wechseln, könnte er den Druck abschreiben, da die Motoren inzwischen abgeschaltet wurden.

Das Hängen des Druckers steht vielleicht auch damit im Zusammenhang, das kann ich nicht sagen.




mjh11
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
RF1000 (seit 2014) mit:
  Pico Hot End (mit eigenem Bauteil- und Hot End Lüfter)
  Ceran Bett
  FW RF.01.47 (von Conrad, modif.)

Die Natur kontert immer sofort mit einem besseren Idioten.
Benutzeravatar
wolfkarst
Erfahrener 3D-Drucker
Erfahrener 3D-Drucker
Beiträge: 284
Registriert: Fr 23. Jan 2015, 23:05
Wohnort: Bad Nauheim
Has thanked: 6 times
Been thanked: 50 times

Re: Pausenfunktion - Taste am Drucker & M3070 GCode

Beitrag von wolfkarst »

Zum M3070-Befehl:
in der Firmware 48 (rf1000.cpp Zeile 3509 ff.) sind zwei Abfragevergleiche drin ...
Fall 1 : S kleiner 1 und Fall 2 : S größer 2
Ich weiss nicht, ob das Absicht ist oder nicht, aber M3070 funktioniert nur mit S-Werte 0 oder größer 2

Zitat:
case 3070: // M3070 - pause the print as if the "Pause" button would have been pressed
{
if( pCommand->hasS() )
{
// test and take over the specified value
nTemp = pCommand->S;
if( nTemp 2 ) nTemp = 2;

if( nTemp == 1 )
{
// we shall pause the printing
PrintLine::queueTask( TASK_PAUSE_PRINT_1 );
}
if( nTemp == 2 )
{
// we shall pause the printing and we shall move away
PrintLine::queueTask( TASK_PAUSE_PRINT_2 );
}
}
else
{
if( Printer::debugErrors() )
{
Com::printFLN( PSTR( "M3070: invalid syntax" ) );
}
}

break;
}
Stark Modifizierte RF1000 ... u.a. Getriebe für Servos, neue Elektrik, E6V-Extruder, ...
Benutzeravatar
rf1k_mjh11
Developer
Developer
Beiträge: 2051
Registriert: Di 6. Jan 2015, 19:44
Wohnort: Autriche
Has thanked: 263 times
Been thanked: 542 times

Re: Pausenfunktion - Taste am Drucker & M3070 GCode

Beitrag von rf1k_mjh11 »

wolfkarst,

Ich nehme an das ist an RF1000 gerichtet. Ich verstehe großteils "Train Station".

Aber ich werde es mit derselben Datei schnell probieren. Mache einfach aus dem "S0" ein "S2" und schau, was passiert. 'Druckt' schon - mal sehen.

mjh11
RF1000 (seit 2014) mit:
  Pico Hot End (mit eigenem Bauteil- und Hot End Lüfter)
  Ceran Bett
  FW RF.01.47 (von Conrad, modif.)

Die Natur kontert immer sofort mit einem besseren Idioten.
Benutzeravatar
rf1k_mjh11
Developer
Developer
Beiträge: 2051
Registriert: Di 6. Jan 2015, 19:44
Wohnort: Autriche
Has thanked: 263 times
Been thanked: 542 times

Re: Pausenfunktion - Taste am Drucker & M3070 GCode

Beitrag von rf1k_mjh11 »

Also, mit dem Parameter "S2" klappt es auch. Der Drucker fährt in die Standard- oder vroprogrammierte Position und pausiert.

Könnte auch sein, dass er dasselbe tut für alle Parameterwerte >= 2. Zum Probieren bin ich schlau genug, um den Firmwarecode zu verstehen, nicht.

Ich schreibe mal "S3" hin & druck mal los....

Und er 'druckt' schon wieder ....

mjh11
RF1000 (seit 2014) mit:
  Pico Hot End (mit eigenem Bauteil- und Hot End Lüfter)
  Ceran Bett
  FW RF.01.47 (von Conrad, modif.)

Die Natur kontert immer sofort mit einem besseren Idioten.
Benutzeravatar
rf1k_mjh11
Developer
Developer
Beiträge: 2051
Registriert: Di 6. Jan 2015, 19:44
Wohnort: Autriche
Has thanked: 263 times
Been thanked: 542 times

Re: Pausenfunktion - Taste am Drucker & M3070 GCode

Beitrag von rf1k_mjh11 »

Auch bei "M3070 S3" das selbe Verhalten wie bei "2". Fährt die Standard- oder vorbestimmte Position an und pausiert.

Damit ist es wahrscheinlich egal welche Ganzzahl man verwendet.

"0" oder "1" damit er an der Stelle pausiert
"2", "3" oder mehr, und er fährt die Pausenposition an und pausiert

Dummerweise finde ich nirgends in der Doku, dass ein Parameter notwendig ist - ist er aber offensichtlich.

mjh11
RF1000 (seit 2014) mit:
  Pico Hot End (mit eigenem Bauteil- und Hot End Lüfter)
  Ceran Bett
  FW RF.01.47 (von Conrad, modif.)

Die Natur kontert immer sofort mit einem besseren Idioten.
RF1000
Developer
Developer
Beiträge: 340
Registriert: Fr 10. Okt 2014, 16:31
Has thanked: 40 times
Been thanked: 80 times

Re: Pausenfunktion - Taste am Drucker & M3070 GCode

Beitrag von RF1000 »

Hallo wolfkarst,

wolfkarst hat geschrieben:Zum M3070-Befehl:
in der Firmware 48 (rf1000.cpp Zeile 3509 ff.) sind zwei Abfragevergleiche drin ...
Fall 1 : S kleiner 1 und Fall 2 : S größer 2
Ich weiss nicht, ob das Absicht ist oder nicht, aber M3070 funktioniert nur mit S-Werte 0 oder größer 2
diese Schlussfolgerung stimmt nicht. M3070 funktioniert intern nur mit den Werten 1 oder 2. Wenn man einen Wert kleiner 1 angibt dann verwendet die Firmware 1 (= Pause ohne Bewegung). Würde man einen Wert größer 2 angeben, dann verwendet die Firmware 2 (= Pause mit Bewegung).
Es ist also so wie von mjh11 bereits überprüft :-)


mfG
RF1000
Antworten

Zurück zu „Firmware / Tweaks“