Filament wechsel

Hi,

vorab moin an alle im Forum und ein fettes danke an die Erfinder und Nutzer von Repetier. Ich möchte es nicht mehr missen.

Ich habe ein Frage, da ich derzeit nicht weiss wie ich mein Problem am besten löse. Vielleicht gibt es das schon al Thema, jedoch habe ich es über die suche nicht finden können und entschuldigen bitte diesen langen post. Ich hoffe jemand findet trotzdem die Lust und Zeit ihn zu lesen und zu kommentieren :-)



Zu meinem Wunsch:

Wenn der Filamentsensor ausgelöst hat würde ich gerne den Druckkopf anheben, Filament entladen und die Druckkopf nach Zeit XY abkühlen lassen. Zu dem ganz würde ich dann ein @dialog öffnen mit der Frage ob das Filament eingelegt ist oder nicht und ein Button dafür das Material ein bisschen mehr zu extrudieren


Zum Einlegen hätte ich folgenden Gedanken:

Filament bis an den Extruder schieben -> per Dialog bestätigen -> schnelles einziehen bis kurz vor Düse -> langsam extrudieren, bis entweder Zeit XY oder per @dialog Button "Material vorhanden" -> Überschüssiges Material von der Düse per Hand entfernen -> Original Z-Position wieder anfahren -> Fluss auf ca. 120% anheben -> Geschwindgkeit auf 30% minimieren -> 2 Layer so drucken -> Fluss und Geschwindigkeit wieder auf 100%


Zu meinem Aufbau:

Ich habe verschiedenen Drucker entweder erfrage ich den Filamentstatus anhand der GPIOS am Pi ab oder per Firmware (am/im Drucker verbautem Sensor) und der Antworten-auf-Ereignis-Funktion.

Alle drucker arbeiten mit einem angepasstem Marlin Firmware (von den Herstellern aus). Bei einem funktioniert es auch, wenn ich ein M600 sende, jedoch Druckt dieser dann mit kaltem Hotend, wenn ich auf Fortsetzen beim Server drücke.


Meine Gedanken zum Lösungsansatz:

Gibt es im Repetier-Server ein Befehl um den Code in den Feldern "Filament entfernen" und "Filament einlegen" unter der registerkarte G-Code - Ereignissabhänig zu tätigen?

Wenn Ja wäre der gedanke den @Dialog bei Antworten auf Ereigniss oder bei GPIO G-Code einzutragen


Code für Filament entfernen:
G91            ;relativ
G0 Z5        ;move up head
G0 E-200    ;unload Filament
G90            ;absolut

Code für Filament einlegen:
G91                ;relativ
G0 E190            ;loading fast
G1 E12 F300        ;loading slow
G0 Z-4.5        ;head goes down
G1 Z-0.5 F300    ;head goes down slow
M220 S30        ;Print speed at 30%
M221 S120        ;set Flowrate at 120%
G90                ;absolut

->> und hier eins meiner Probleme wie kann ich repetier-Server sagen, dass er nach z.B.: 2 Layern oder Zeit XY wieder bei M220 und M221 100% einstellt.

Code für @dialog wo auch immer dieser dan Eingtragen würde

@dialogStart "Filament Wechsel" "Filament"
@dialogButton Load Filament "@FilamentEinlegen"
@dialogButton Extrude more Material "G91 G1 E5 F100"

Mein erster Gedanke war den unteren Part von dem Filament-Einlegen-Code in die Spalte bei Ereignissabhängig - Fortsetzen zu schreiben und nicht zum Filament-einlegen-Code

M220 S30        ;Print speed at 30%
M221 S120        ;set Flowrate at 120%

jedoch habe ich dass dann ja bei jedem Fortsetzen..und ich habe weiterhin das Problem mit dem wechsel auf die 100%. Am sinnigsten wäre wahrscheinlich ein Feld für einen Startcode nach einem Filamentwechsel oder kann ich in den @dialogButton auch einen Mehrzeiligen G-Code schreiben? Wenn ja wie wäre die Formatierung/Zeilenumbrüche?


Weitere Probleme

Wie euch aufgefallen ist habe ich nirgendwo stehen, dass das Hotend abkühlen soll. Das habe ich aus diesem Grund weg gelassen, da ich einfach nicht weis wie ich die eigentliche Temperatur zwischenspeichern könnte um diese dann wieder zu aktivieren.


Ich bin echt kein Profi in sowas. Ist mein Wunschdenken so machbar oder bleibt es ein Wunschdenken?

Danke schonmal an alle die sich mit dem Post und der Lösung beschäftigen wollen :-)



Comments

  • M220 S30        ;Print speed at 30%
    M221 S120        ;set Flowrate at 120%
    G90                ;absolut
    ->> und hier eins meiner Probleme wie kann ich repetier-Server sagen, dass er nach z.B.: 2 Layern oder Zeit XY wieder bei M220 und M221 100% einstellt.
    Das macht für mich keinen sinn. Warum willst du nach einem Filamentwechsel langsam 20% zu viel extrudieren?
    Du extrudierst beim wechsel ja bis es nachkommt und dann kann man gleich mit 100% weiter machen. Dann gibt es auch nicht das Problem 2 layer später von falscher auf richtiger Extrusion umzustellen.

    In dialog boxen kann man bei aktionen die Befehle mit \n trennen und so auch mehr als einen ausführen.

    Wenn du aktiv die pause am server startest merkt er sich die Temperaturen. Jetzt wird es aber schwierig. In der Firmware kann man einstellen dass nach einer zeit die Extruder oder bed ausgeschaltet werden, was Filamentwechsel schwierig macht. Im server kann man das auch noch eingeben. Wenn der server das mach (beste Lösung da er das dann weiß) ist das erste continue nur aufheizen und erst das 2. @continue druckt weiter. Aber du weist nicht ob er schon abgekühlt hast und kannst es auch nicht erzwingen. Für 1.0.5 hab ich daher

    @continueReheat

    hinzugefügt. Damit stellst du sicher das er die Heizung einschaltet falls er abgekühlt ist, ansonsten passiert nichts.

    Danach brauchst du noch

    M105
    @syncMotion
    @waitForAllTemperatures

    damit der Server wartet bis die Temperaturen erreicht wurden. Danach kannst du deinen Wechsel ausführen mit der Logik die du gerne hättest.

    Hab aber auch für 1.0.5 noch den server Befehl @outOfFilament eingebaut der das regulare Filament handling aktivieren würde. Auch da gibt es ja Skripte zum anpassen die bei insert oder remove aufgerufen werden. Du kannst dann das mit einem externen sensor triggern oder mit einer Meldung der Firmware wenn die das meldet die wir aktuell nicht abfragen.


    Hoffe das hilft erst mal etwas weiter.


  • Hi,

    vielen dank für die ausführliche Antwort und das hinzufügen der weitern @Befehle, es hilft aufjedenfall weiter :-)

    Du hast recht die Überextrusion ist überspitzt und ein Fehlerpotenzial. Jedoch fände ich es praktisch ca. 2 Layer langsam zu fahren um zu garantieren, dass die Layer auch wirklich aneinander haften (ich hatte das mal bei einer modifizierten Firmware gesehen und fande es in der anwendung echt praktisch).

    Wäre es möglich den "Layercounter" vom Server zu nutzen?


    Mein Gedanke wäre:

    @modifyLayer {Layer Anzahl} {PrintSpeed} {FlowRate} {FanSpeed}

    die Paramter {PrintSpeed} {FlowRate} {FanSpeed} würde vom eigentlichen gesetzten Wert subtrahiert werden. Nachdem die {LayerAnzahl} gedruckt wurden soll er die vorher subtrahierten Werte wieder addieren eventuell auch nicht schlagartig sondern step by step.

    Oder wäre es sinnvoller das anhand eines Timeres zu realiseren

    PS: Was bewirkt @syncMotion?


  • @syncMotion sendet so viele dummy Befehle das server und firmware synchron sind. Also alle Bewegungen abgearbeitet sind bevor der nächste Befehl ausgeführt wird auch wenn es ein server Befehl ist. Problem ist das server Befehle ja nicht wissen wann die Firmware noch blockiert ist und ausgeführt werden wenn sie erreicht werden. Wenn man aber unbedingt diese Synchronisierung braucht nutzt man diesen Befehl.

    Deinen @modifyLayer finde ich zu speziell und auch schwer umzusetzen. Problem ist das die Sprache begrenzt ist weil wir keine thread und schleifen einbauen können. FlowRate ist insbesondere nicht sinnvoll. Wenn der wechsel korrekt ist ist das Druckergebnis definitiv falsch. Langsamer drucken ok, auch wenn ich nicht denke das es nötig ist. Du sollst ja erst weiter Drucken wenn der Kopf heiß ist. Aber egal, du kannst ja immer noch manuell die Werte zurück setzten wenn du das nutzen willst. Kannst es dir ja als Befehl ins Menü legen. Oder beim slicer in den layer wechsel code, dann passiert es allerdings beim nächsten Layerwechsel und nicht nach 2.
Sign In or Register to comment.