Created
May 26, 2026 17:05
-
-
Save Otann/e7b47e709a4b37d6cb4cc51d73ef7233 to your computer and use it in GitHub Desktop.
Purge on print start
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| [gcode_macro PRINT_START] | |
| description: A wrapper that initializes a toolchanger by homing and then passes to real one | |
| gcode: | |
| M117 Pre-homing to init toolchanger | |
| G28 | |
| {% set target_bed = params.BED|int %} | |
| {% set target_extruder = params.EXTRUDER|int %} | |
| {% set target_chamber = params.CHAMBER|default("40")|int %} | |
| {% set tool_n = params.TOOL|default("0") %} | |
| {% set t0_temp = params.T0_TEMP|default(0)|int %} | |
| {% set t1_temp = params.T1_TEMP|default(0)|int %} | |
| {% set t2_temp = params.T2_TEMP|default(0)|int %} | |
| M117 Passing over to _PRINT_START (_PRINT_START BED={target_bed} EXTRUDER={target_extruder} CHAMBER={target_chamber} TOOL={tool_n} T0_TEMP={t0_temp} T1_TEMP={t1_temp} T2_TEMP={t2_temp}) | |
| _PRINT_START BED={target_bed} EXTRUDER={target_extruder} CHAMBER={target_chamber} TOOL={tool_n} T0_TEMP={t0_temp} T1_TEMP={t1_temp} T2_TEMP={t2_temp} | |
| [gcode_macro _PREHEAT_HEAD_TO_TEMP] | |
| gcode: | |
| {% set tool_temp = params.TARGET|default(0)|int %} | |
| {% set tool_index = params.TOOL_INDEX|int %} | |
| {% set tool_name = printer.toolchanger.tool_names[tool_index] %} | |
| {% set tool = printer[tool_name] %} | |
| {% set tool_extruder = tool['extruder'] %} | |
| {% if tool_temp != 0 %} | |
| M117 Preheating {tool_name} to {tool_temp} | |
| SET_HEATER_TEMPERATURE HEATER={tool_extruder} TARGET={tool_temp} | |
| {% endif %} | |
| [gcode_macro _PURGE_DOCK_HEAD] | |
| variable_length: 25 | |
| gcode: | |
| {% set current_tool = printer.toolchanger.tool_number %} | |
| {% set tool_index = params.TOOL_INDEX|int %} | |
| # Avoid purging curent tool, as it is not in the dock | |
| {% if tool_index == current_tool %} | |
| M117 Not purging current tool T{tool_index} | |
| {% else %} | |
| {% set tool_temp = params.TARGET %} | |
| {% set purge_length = params.LENGTH|default(length)|int %} | |
| {% set tool_name = printer.toolchanger.tool_names[tool_index] %} | |
| {% set tool = printer[tool_name] %} | |
| {% set tool_extruder = tool['extruder'] %} | |
| M117 Purging {tool_name} before printing at {tool_temp} | |
| TEMPERATURE_WAIT SENSOR={tool_extruder} MINIMUM={tool_temp} ; for selected tool | |
| ACTIVATE_EXTRUDER EXTRUDER={tool_extruder} | |
| G91 | |
| G1 E{purge_length} F100 | |
| # cool down to prevent more oozing | |
| # {% set temp_wait = tool_temp - 20 %} | |
| # SET_HEATER_TEMPERATURE HEATER={tool_extruder} TARGET={t0_temp} | |
| {% endif %} | |
| [gcode_macro _PRINT_START] | |
| description: A real implementation with toolchanger initialized | |
| gcode: | |
| {% set target_bed = params.BED|int %} | |
| {% set target_extruder = params.EXTRUDER|int %} | |
| {% set target_chamber = params.CHAMBER|default("40")|int %} | |
| {% set tool_n = params.TOOL|default("0") %} | |
| {% set t0_temp = params.T0_TEMP|default(0)|int %} | |
| {% set t1_temp = params.T1_TEMP|default(0)|int %} | |
| {% set t2_temp = params.T2_TEMP|default(0)|int %} | |
| ### From ktc-easy | |
| STOP_CRASH_DETECTION | |
| # If there is a heatsoak going, cancel it so it won't cause anything unexpected later | |
| DISABLE_HEAT_SOAK | |
| # Even though there is a heatsoak routine, save some time and start heating the bed early | |
| M117 Preparing for the print, preheating bed to {target_bed} | |
| SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET={target_bed} | |
| # Preheat all tools too, if their temp was requested | |
| _PREHEAT_HEAD_TO_TEMP TOOL_INDEX=0 TARGET={t0_temp} | |
| _PREHEAT_HEAD_TO_TEMP TOOL_INDEX=1 TARGET={t1_temp} | |
| # Calibrating frame | |
| # M117 Calibrating frame (QGL -> re-home -> Bed Mesh) | |
| G90 ; Absolut position | |
| _LED_STATUS_PREPARING ; Add visuals | |
| M117 Quad Gantry Leveling | |
| QUAD_GANTRY_LEVEL ; Calibrage gantry with clean nozzle | |
| G28 ; Home again with clean nozzle for better z precision | |
| G90 ; Absolut position | |
| _LED_STATUS_PREPARING ; Set status again after re-homing | |
| M117 Bed Mesh Calibration | |
| BED_MESH_CLEAR ; Discard old bed mesh and clean nozzle | |
| BED_MESH_CALIBRATE ADAPTIVE=1 ; This is done after cleaning nozzle and gantry calibration | |
| M117 Switching to T{tool_n} | |
| SELECT_TOOL T={tool_n} | |
| # Set temperature for the requested tool | |
| {% set target_tool = printer['tool T' + tool_n] %} | |
| {% set target_heater = target_tool['extruder'] %} | |
| M117 Setting target temperature for {target_tool['name']} | |
| SET_HEATER_TEMPERATURE HEATER={target_heater} TARGET={target_extruder} | |
| # Purge tools other than main, if temp was requested | |
| _PURGE_DOCK_HEAD TOOL_INDEX=0 TARGET={t0_temp} | |
| _PURGE_DOCK_HEAD TOOL_INDEX=1 TARGET={t1_temp} | |
| # After purging activate back target extruder | |
| ACTIVATE_EXTRUDER EXTRUDER={target_heater} | |
| # Wait for target tool's target temperature at safe location | |
| _BUCKET | |
| M117 Waiting for printing temperatures (bed: {target_bed}c, extruder: {target_extruder}c) | |
| TEMPERATURE_WAIT SENSOR=heater_bed MINIMUM={target_bed} | |
| TEMPERATURE_WAIT SENSOR={target_heater} MINIMUM={target_extruder} ; for selected tool | |
| ### From ktc-easy | |
| START_CRASH_DETECTION | |
| # Main tool is purged to the bucket right before print starts | |
| {% set clean_macro = printer['gcode_macro _CLEAN_NOZZLE'] %} | |
| {% set clean_retract = clean_macro.retract_hot + clean_macro.retract_cool %} | |
| G92 E0 ; zero the extruder | |
| G1 E{clean_retract} F400 ; that was pulled dufing _CLEAN_NOZZLE | |
| G1 E100 F400 ; Instead of purge | |
| G90 ; switch to absolute coordinates before printing | |
| _SCRUB_NOZZLE | |
| _LED_STATUS_PRINTING | |
| M117 Starting the print | |
| # M118 Starting the print |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment