Klipper: Übergabe Bett-Temperatur und Extruder Temperatur von Cura an Klipper

  • Hallo Zusammen!

    Ich bin gerade mal wieder ein wenig am verzweifeln. Ich arbeite mich gerade in die Konfiguration von Klipper ein und möchte gerne meinen Startcode nicht mehr über Cura definiert haben, sondern zentral in Klipper. Hintergrund ist, dass ich u.a. auch von mehreren Rechnern slice und dann auch nur an einem Ort Start- und End-Code-Einstellungen verwaltet und definiert haben möchte.

    Eigentlich muss ich nur die Ziel-Temperatur des Bettes und des Extruders an Klipper übergeben.

    In Cura habe ich folgendes als Startcode hinterlegt:

    START_PRINT T_BED=[material_bed_temperature_layer_0] T_EXTRUDER=[material_print_temperature_layer_0]

    Nun gehe ich davon aus, dass in der Variablen T_BED nun die Temperatur steht, die ich in Cura unter "Temperatur Druckplatte" eingestellt habe (also z.B. 60) und entsprechend in der Variablen T_EXTRUDER die Drucktemperatur hinterlegt ist (z.B. 210).

    Mein Startcode im Klipper lautet:


    [gcode_macro START_PRINT]

    description: All what needs to be done at print start

    gcode:

    #### set defaults ####

    {% set t_extruder = params.T_EXTRUDER|default(0) %}

    {% set t_bed = params.T_BED|default(0) %}

    #### end off definition ####

    G28; home all axes

    M83; extruder relative mode

    M190 S{t_bed}; Bed heat up

    LOAD_MESH_TEMP BED_TEMPERATURE={t_bed} ; Load mesh for bed temp

    G1 Z1.0 F3000; move z up little to prevent scratching of surface

    G1 X2 Y20 Z0.3 F5000.0; move to start-line position

    M109 S{t_extruder}; Extruder heat up to target temp

    G1 X2 Y200.0 Z0.3 F1500.0 E15; draw 1st line

    G1 X2 Y200.0 Z0.4 F5000.0; move to side a little

    G1 X2 Y20 Z0.4 F1500.0 E30; draw 2nd line

    G92 E0; reset extruder

    G90; Absolute positioning

    G1 Z1.0 F3000; move z up little to prevent scratching of surface


    -------
    In den Zeilen

    {% set t_extruder = params.T_EXTRUDER|default(0) %}

    {% set t_bed = params.T_BED|default(0) %}


    .... sollen die Werte, die aus Cura übergeben werden in die Variablen t_extruder und t_bed geschrieben werden.


    Allerdings scheint das nicht zu funktionieren, denn ich bekomme die Fehlermeldung:
    !! Error on 'M190 S[material_bed_temperature_layer_0] ; Bed heat up': unable to parse [

    Die Übergabe scheint ja zu klappen, nur schreibt er keinen Wert rein, sondern den Text.

    Das Script grundsätzlich geht, denn schreibe ich absolute Zahlen anstatt t_bed und t_extruder in die Zeilen

    LOAD_MESH_TEMP BED_TEMPERATURE={t_bed}

    M190 S{t_bed};

    M109 S{t_extruder}

    also

    LOAD_MESH_TEMP BED_TEMPERATURE=60

    M190 S60

    M109 S210

    gibt es keine Fehlermeldung.

    Habe ich irgendwo einen Denk- oder Schreibfehler?

    Im Anhang findet ihr die Scripte

    Danke und LG

  • Eventuell auch einfach nur ein parsing error? Mal die params eindeutig benennen:

    {% set t_extruder = params.EXTRUDER|default(0) %}
    {% set t_bed = params.BED|default(0) %}

    Take not of the following important aspects:


    • Parameters passed to gcode macros are stored in the params object. So if your macro is called with VALUE=50, params.VALUE will contain the value 50. After the deprecation, only the params object will contain these values.

    • Make sure to name your "set variable" something else as the name of the variable in the params object (see how I used EXTRUDER_TEMP for the "set variable" and EXTRUDER for the actual macro parameter above) to avoid confusion and possible parsing errors.

    • If you want to pass a default, add |default(<default value>) to the end of the params variable (see above, where my default value is 10).

    • To ensure that EXTRUDER_TEMP will have an integer value, add |int to the end of the command, to turn passed parameters (if they exist) and the default into an integer. Depending on what kind of parameter you're passing, there are |int |float |bool or |string converters available. Make sure that you convert to int if you want to compare the values in your gcode macro.

  • Hi jorkki

    Danke für den Hinweis. Das klingt plausibel mit dem "integer". Hab das gemacht und zumindest erscheint die Fehlermeldung nicht mehr.

    Dafür habe ich zwei andere Probleme :)


    1. Das Script aus der macros.cfg meldet, dass die Temperatur des Bettes "angeblich" unter 30 Grad liegt. Diese If-Abfrage gibt es da tatsächlich. Allerdings ist die Betttemperatur tatsächlich nicht unter 30 Grad, also scheint da doch wieder was nicht übergeben zu sein

    2. es knirscht und knackt beim Start des Drucks und klingt gefährlich. Dann bricht er selbsttändig ab und ginbt die folgende Fehlermekldung ab:
      // MCU 'mcu' shutdown: Stepper too far in past
      // This generally occurs when the micro-controller has been
      // requested to step at a rate higher than it is capable of
      // obtaining.
      // Once the underlying issue is corrected, use the
      // "FIRMWARE_RESTART" command to reset the firmware, reload the
      // config, and restart the host software.
      // Printer is shutdown


    .... aber wo in aller welt steht denn im startcode oder in der Macros.cfg was von Stepper-Änderung?

    Eigentlich müsste er logischerweise laut script das Bett einleveln und dürfte nicht anfangen zu drucken, denn ein Mesh-Level existiert nur für default und nicht für die spezielle Bett-Temperatur. Er müsste nun ja eins für 60 Grad machen!

    Ich bin kutz davor wieder alles Manuell zu machen, wobei ja Klipper wegen dieser Automatismen eigentlich so attraktiv ist ....



    LG

  • Schau dir mal deine Beschleunigung in deinem Macro an (F1500, F3000, usw.) und mit welcher rotation distance (ehemals step distance) du die klipper config fährst. Ist die korrekt eingestellt? Da könnte der Fehler liegen, mit deinem START_PRINT macro übergibst du an klipper eventuell zu viele steps/s.
    Am besten stellste die printer config auch mal hier rein. Ist es der X2 der mit Klipper laufen soll?


  • hi derpuma

    Danke für die Recherche und die Tipps- Habe ich gleich umgesetzt mit der Benennung der Variablen, aber adas war es auch nicht. Das mit dem integer hatte ich ja auch schon gemacht.

    LG

  • wasaaz
    Kurz mal deine Macros angeguggt ...
    ad 1) .... das ist doch logisch, dass da ein "Fehler" kommt bzgl. der 30°C
    ad 2) .... der Fehler kommt aus der printer.cfg

    Mein Start_Print für Prusa/Superslicer inkl. MESH über den verwendeten Druckbereich:


    Im Slicer übergebe ich eben auch die Variablen vom Druckbereich. Cura verwendet da aber andere!

    START_PRINT BED_TEMP=[first_layer_bed_temperature] EXTRUDER_TEMP=[first_layer_temperature] MIN_0=[first_layer_print_min_0] MIN_1=[first_layer_print_min_1] MAX_0=[first_layer_print_max_0] MAX_1=[first_layer_print_max_1]


    "Important! Macros are first evaluated in entirety and only then are the resulting commands executed. If a macro issues a command that alters the state of the printer, the results of that state change will not be visible during the evaluation of the macro. This can also result in subtle behavior when a macro generates commands that call other macros, as the called macro is evaluated when it is invoked (which is after the entire evaluation of the calling macro)." ===>> https://www.klipper3d.org/Command_Templates.html

  • Quote

    Zitat von derpuma am 18.01.2022, 00:15 Uhr


    Schau dir mal deine Beschleunigung in deinem Macro an (F1500, F3000, usw.) und mit welcher rotation distance (ehemals step distance) du die klipper config fährst. Ist die korrekt eingestellt? Da könnte der Fehler liegen, mit deinem START_PRINT macro übergibst du an klipper eventuell zu viele steps/s.
    Am besten stellste die printer config auch mal hier rein. Ist es der X2 der mit Klipper laufen soll?


    Ja ist der x2.



    Anbei meine Printer-config. Die läuft aber normalerweise einwandfrei.



    Darüberhinaus habe ich mal testweise SuperSlicer installiert und damit funktioniert das Skipt und die Configs einwandfrei, ausser, dass ich damit nicht so klar komme und lieber bei Curt bleibe.

    Es scheint, als wenn die Parameter bei der Übergae die Werte nicht herausrücken. Aber wo immer ich auch nachlese werden diese Parameter für Cura als Start-G-Code genannt:

    START_PRINT T_BED=[first_layer_bed_temperature] T_EXTRUDER=[first_layer_temperature]

    LG

  • Die printer.config scheint okay zu sein...

    Der Unterschied zwischen Cura und Super Slicer liegt in den Variablen, aber die setzt du ja in Cura richtig...
    Hast du es mal mit den beiden M104 und M140 G-Codes getestet, anstelle von M109 und M190?

    Cura:

    Code
    M104 S{material_print_temperature_layer_0}@@@WCF_PRE_LINEBREAK@@@M140 S{material_bed_temperature_layer_0}


    Super Slicer:

    Code
    M104 S[first_layer_temperature]@@@WCF_PRE_LINEBREAK@@@M140 S[first_layer_bed_temperature]


    Das haste ja schon im Macro von cobra427 sehen können.

    In Deinem Macro also:


    [gcode_macro START_PRINT]

    description: All what needs to be done at print start

    gcode:

    #### set defaults ####

    {% set t_extruder = params.T_EXTRUDER|default(0) %}

    {% set t_bed = params.T_BED|default(0) %}

    #### end off definition ####

    G28; home all axes

    M83; extruder relative mode

    M140 S{t_bed}; Bed heat up

    LOAD_MESH_TEMP BED_TEMPERATURE={t_bed} ; Load mesh for bed temp

    G1 Z1.0 F3000; move z up little to prevent scratching of surface

    G1 X2 Y20 Z0.3 F5000.0; move to start-line position

    M104 S{t_extruder}; Extruder heat up to target temp

    G1 X2 Y200.0 Z0.3 F1500.0 E15; draw 1st line

    G1 X2 Y200.0 Z0.4 F5000.0; move to side a little

    G1 X2 Y20 Z0.4 F1500.0 E30; draw 2nd line

    G92 E0; reset extruder

    G90; Absolute positioning

    G1 Z1.0 F3000; move z up little to prevent scratching of surface


    -------

    Mir gehts mit dem Slicer übrigens genau umgekehrt. Ich mag nicht mehr weg von Super Slicer, gerade weil man viel mehr Einfluß auf Parameter hat.

  • Hi.

    Danke für die Tipps. Jupp, habe ich auch probiert. Hier geht es ja auch nicht korrekt durch:


    LOAD_MESH_TEMP BED_TEMPERATURE={t_bed}

    Es kommen die Werte nicht an irgendwie. Lediglich der String

    "material_bed_temperature_layer_0" und "material_temperature_layer_0" stehen dann in den Variablen drin. Das zeugt ja davon, dass generell die Variable bestückt wird mit dem Übergabeparameter, allerdings nicht mit der Zahl.

    Entweder hat Cura was geändert, oder ich habe was vergessen....

    LG

  • Hab gerade nochmal nachgeschaut, was ich bei Cura im Startcode stehen hatte, bin aber inzwischen auch schon lange bei Superslicer.

    Die Variablen waren bei mir anders und ich hatte noch auskommentierte Zeilen drin, die aber wohl relavant sind.

    Ist aber schon eine Weile her und kann sein, daß sich das inzwischen geändert hat.

    START_PRINT BED_TEMP={material_bed_temperature_layer_0} EXTRUDER_TEMP=material_print_temperature_layer_0}



  • und noch was

    bei mir steht in der printer.cfg bei der Variablenübergabe noch ein "float", keine Ahnung, ob die Definition nötig ist

    [gcode_macro START_PRINT]
    gcode:
      {% set BED_TEMP = params.BED_TEMP|default(60)|float %}

    {% set EXTRUDER_TEMP = params.EXTRUDER_TEMP|default(190)|float %}
      M140 S{BED_TEMP} ; Start bed heating

    ....

  • So messieurs dames.

    Ich habe es geschafft und hoffentlich auch einen Beitrag für die Nachwelt geschaffen. Denke ich werde nicht der einzige sein, der dieses Problem hat, aber anscheinend gab es bis dato keine Lösung :)


    1. Bei der Parameter-Übergabe muss man in CURA die geschweiften Klammern nehmen und nicht die Eckigen; folglich lautet der Eintrag im Startcode: START_PRINT T_BED={übergabeparameter} T_EXTRUDER={übergabeparameter} und nicht START_PRINT T_BED=[übergabeparameter] T_EXTRUDER=[übergabeparameter]

    2. Dann lautet der Parameter für die Übergabe der Drucktemperatur nicht "material_temperature_layer_0" sondern "material_print_temperature_layer_0"

    3. Also muss der Befehl im Startcode bei Cura so aussehen:
      START_PRINT T_BED={material_bed_temperature_layer_0} T_EXTRUDER={material_print_temperature_layer_0}

    4. Als Probe habe ich mir einen gcode auf die Festplatte ausspielen lassen und hier sieht der Ausschnitt nun so aus: "START_PRINT T_BED=60 T_EXTRUDER=200"


    Danke für Eure Inspirationen am Ball zu bleiben :) Wir haben es geschafft.



    LG


  • hey wie lustig :) Das gleiche habe ich vorhin auch rausgefunden :) Du hast nur eine "geschweifte Klammer" vergessen Hätte ich mir das Denken und recherchieren sparen können :)



    DANKE !!! und LG

  • tomma Das hab ich bei mir im Klipper Macro und Super Slicer auch so stehen, wobei das "float" dann die Zahl als Fließkommazahl betrachtet und "int" als Ganzzahl (Integer) :

    Im Super Slicer steht folgender Start G-Code:
    START_PRINT BED_TEMP=[first_layer_bed_temperature] EXTRUDER_TEMP=[first_layer_temperature]

    In Klipper dann das Macro:
    [gcode_macro START_PRINT]
    gcode:
    {% set BED_TEMP = params.BED_TEMP|default(60)|float %}
    {% set EXTRUDER_TEMP = params.EXTRUDER_TEMP|default(190)|float %}
    # Home the printer
    G28
    # Start bed heating
    M140 S{BED_TEMP}
    # Wait for bed to reach temperature
    M190 S{BED_TEMP}
    M140 S0
    # Mesh erstellen
    BED_MESH_CLEAR
    BED_MESH_CALIBRATE MESH
    # Wait for bed to reach temperature again
    M190 S{BED_TEMP}
    # Use absolute coordinates
    G90
    # Reset the G-Code Z offset (adjust Z offset if needed)
    SET_GCODE_OFFSET Z=0.0
    # Move the nozzle near the bed
    G1 Z5 F3000
    # Move the nozzle very close to the bed
    G1 Z0.15 F300
    # Wait for bed to reach temperature
    M190 S{BED_TEMP}
    # Set and wait for nozzle to reach temperature
    M109 S{EXTRUDER_TEMP}


  • Sehr schön! Wobei ich wirklich nicht verstehen kann, wieso man Cura dem Super Slicer vorzieht. :)

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!

Unread Threads

    1. Title
    2. Replies
    3. Last Reply
    1. Bambu AMS 1

      • R0manTV
    2. Replies
      1
      Views
      7
      1
    3. dac129

    1. Bambu Lab X1 Carbon...werden meine Drucker-Träume etwa wahr? 1.1k

      • Estep
    2. Replies
      1.1k
      Views
      63k
      1.1k
    3. Nightfly777

    1. Hat mir jemand ein paar Tipps für PLA + PVA? 10

      • R1100
    2. Replies
      10
      Views
      122
      10
    3. R1100

    1. sunlu Filament Trokner c. 20x klicken zum einschalten 4

      • R1100
    2. Replies
      4
      Views
      77
      4
    3. R1100

    1. I3 Mega soll leiser werden mit neuen Schrittmotortreibern, nur welche? 1

      • hot-rod
    2. Replies
      1
      Views
      17
      1
    3. jorkki