printer.cfg modified - 07.09.2026 - 00:46:46

This commit is contained in:
klipper committed 2026-09-07 00:46:57 +02:00
1 parent cd51fdb71c
commit c93b895e57
1 file changed
+64 -129
+64 -129
View File
@@ -550,17 +550,65 @@ gcode:
RESTORE_GCODE_STATE NAME=unload_state
[gcode_macro start_heating]
description: Home, lift the toolhead, then manually preheat; use STOP_HEATING to finish
gcode:
STATUS_HOMING
G28
STATUS_HEATING
nvmOn
SET_HEATER_TEMPERATURE HEATER=extruder TARGET=50
SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET=115
SET_TEMPERATURE_FAN_TARGET TEMPERATURE_FAN=chamber TARGET=55
SET_FAN_SPEED FAN=front SPEED=0.55
G1 Z50
M106 S79
{% set bed = params.BED|default(115)|float %}
{% set hotend = params.HOTEND|default(50)|float %}
{% set lift = params.LIFT|default(50)|float %}
{% set front = params.FRONT|default(0.55)|float %}
{% set filter = params.FILTER|default(1.0)|float %}
{% set part = params.PART|default(0.31)|float %}
{% set timeout = params.TIMEOUT|default(printer.configfile.settings.idle_timeout.timeout)|int %}
{% set bed_max = printer.configfile.settings.heater_bed.max_temp|float %}
{% set hotend_max = printer.configfile.settings.extruder.max_temp|float %}
{% set print_state = printer.print_stats.state|string|lower %}
{% if print_state in ["printing", "paused"] %}
{ action_raise_error("START_HEATING is only for manual preheat while no print is active") }
{% elif bed < 0 or bed >= bed_max %}
{ action_raise_error("BED must be at least 0 and below %.0f C" % (bed_max)) }
{% elif hotend < 0 or hotend >= hotend_max %}
{ action_raise_error("HOTEND must be at least 0 and below %.0f C" % (hotend_max)) }
{% elif lift < printer.toolhead.axis_minimum.z|float or lift > printer.toolhead.axis_maximum.z|float %}
{ action_raise_error("LIFT is outside the configured Z travel") }
{% elif front < 0 or front > 1 or filter < 0 or filter > 1 or part < 0 or part > 1 %}
{ action_raise_error("FRONT, FILTER and PART must be between 0.0 and 1.0") }
{% elif timeout < 300 or timeout > 7200 %}
{ action_raise_error("TIMEOUT must be between 300 and 7200 seconds") }
{% else %}
SAVE_GCODE_STATE NAME=START_HEATING_STATE
STATUS_HOMING
{% if "xyz" not in printer.toolhead.homed_axes %}
G28
{% endif %}
G90
G0 Z{lift} F900
STATUS_HEATING
SET_IDLE_TIMEOUT TIMEOUT={timeout}
SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET={bed}
SET_HEATER_TEMPERATURE HEATER=extruder TARGET={hotend}
SET_FAN_SPEED FAN=nevermore SPEED={filter}
SET_FAN_SPEED FAN=front SPEED={front}
M106 S{(part * 255)|int}
RESTORE_GCODE_STATE NAME=START_HEATING_STATE MOVE=0
{ action_respond_info("Manual preheat: Z %.1f mm, bed %.0f C, hotend %.0f C, timeout %d min. No chamber sensor is configured." % (lift, bed, hotend, timeout // 60)) }
{% endif %}
[gcode_macro STOP_HEATING]
description: Stop manual preheat and restore the configured idle timeout
gcode:
{% set print_state = printer.print_stats.state|string|lower %}
{% if print_state in ["printing", "paused"] %}
{ action_raise_error("STOP_HEATING is only for manual preheat; use print controls during a print") }
{% else %}
TURN_OFF_HEATERS
SET_FAN_SPEED FAN=nevermore SPEED=0
SET_FAN_SPEED FAN=front SPEED=0
M107
SET_IDLE_TIMEOUT TIMEOUT={printer.configfile.settings.idle_timeout.timeout|int}
STATUS_READY
{ action_respond_info("Manual preheat stopped; heaters and preheat fans are off") }
{% endif %}
[gcode_macro nvmOn]
gcode:
@@ -654,6 +702,7 @@ gcode:
# Example: TEST_SPEED SPEED=300 ACCEL=5000 ITERATIONS=10
[gcode_macro TEST_SPEED]
description: Motion test; blocked until homing and sensorless X are physically validated
gcode:
# Speed
{% set speed = params.SPEED|default(printer.configfile.settings.printer.max_velocity)|int %}
@@ -664,7 +713,7 @@ gcode:
# Bounding inset for large pattern (helps prevent slamming the toolhead into the sides after small skips, and helps to account for machines with imperfectly set dimensions)
{% set bound = params.BOUND|default(20)|int %}
# Size for small pattern box
{% set smallpatternsize = SMALLPATTERNSIZE|default(20)|int %}
{% set smallpatternsize = params.SMALLPATTERNSIZE|default(20)|int %}
# Large pattern
# Max positions, inset by BOUND
@@ -760,57 +809,8 @@ gcode:
# Restore previous gcode state (absolute/relative, etc)
RESTORE_GCODE_STATE NAME=TEST_SPEED
[gcode_macro CLEAN_NOZZLE_TEST]
gcode:
{% set brush_x_pos = 110 %} ; ### POZYCJA X SZCZOTKI - DO KONFIGURACJI ###
{% set brush_y_pos = 249 %} ; ### POZYCJA Y SZCZOTKI - DO KONFIGURACJI ###
{% set brush_z_offset = 0.2 %} ; ### OFFSET Z NAD SZCZOTKA (POCZATKOWY) - DO KONFIGURACJI ###
{% set clean_x_range = -45 %} ; ### ZAKRES RUCHU X (AMPLITUDA) - DO KONFIGURACJI ###
{% set clean_y_range = 2 %} ; ### ZAKRES RUCHU Y (AMPLITUDA) - DO KONFIGURACJI ### ; **NOWE: Zakres Y**
{% set clean_passes = 10 %} ; ### ILOSC PRZEJSC CZYSZCZACYCH (CYKLI Y) - DO KONFIGURACJI ### ; **Zmienione na CYKLE Y**
{% set clean_x_steps_per_pass = 20 %} ; ### ILOSC KROKOW X NA PRZEJSCIE - DO KONFIGURACJI ### ; **NOWE: Kroki X w przejściu**
{% set clean_speed = 400 %} ; ### PREDKOSC RUCHU CZYSZCZENIA - DO KONFIGURACJI ###
{% set shake_z_offset = 0.2 %} ; ### OFFSET Z DLA WSTRZASANIA - DO KONFIGURACJI ###
{% set shake_x_range = 2 %} ; ### ZAKRES RUCHU X WSTRZASANIA - DO KONFIGURACJI ###
{% set shake_y_range = 2 %} ; ### ZAKRES RUCHU Y WSTRZASANIA - DO KONFIGURACJI ###
{% set shake_speed = 700 %} ; ### PREDKOSC WSTRZASANIA - DO KONFIGURACJI ###
{% set shake_acceleration = 15000 %} ; ### PRZYSPIESZENIE WSTRZASANIA - DO KONFIGURACJI ###
{% set nozzle_temp_clean = params.TEMP|default(printer.configfile.config.extruder.nozzle_temp|int + 10) %} ; ### TEMPERATURA DYSZY DO CZYSZCZENIA - MOZNA PODAC PARAMETR TEMP=... ###
SAVE_GCODE_STATE NAME=clean_nozzle_state
M109 S{nozzle_temp_clean} ; Rozgrzej dyszę do temperatury czyszczenia
G28 X Y ; Wyhomuj X i Y
G0 Z{brush_z_offset} F{clean_speed} ; Przejdź na wysokość nad szczotką
G0 X{brush_x_pos - clean_x_range/2} Y{brush_y_pos} F{clean_speed} ; Start X, Y srodek zakresu Y
{% for y_pass in range(clean_passes) %} ; Pętla dla przejść Y (cykli sinusoidalnych Y)
{% for x_step in range(clean_x_steps_per_pass) %} ; Kroki w ruchu X (przybliżenie sinusoidy X)
{% set x_pos = brush_x_pos - clean_x_range/2 + (clean_x_range * x_step / (clean_x_steps_per_pass - 1)) %} ; Pozycja X w kroku
{% set y_offset = clean_y_range/2 * sin(2 * pi * x_step / clean_x_steps_per_pass + (y_pass * pi / clean_passes)) %} ; Sinusoidalny offset Y - **KLUCZOWA ZMIANA!**
{% set current_y = brush_y_pos + y_offset %} ; Aktualna pozycja Y
G1 X{x_pos} Y{current_y} F{clean_speed} ; Ruch z sinusoidalnym Y i liniowym X (kroki X)
{% endfor %}
{% endfor %}
G0 Z{shake_z_offset} F{shake_speed} ; Podnieś Z na wysokość wstrząsania
{% for i in range(5) %} ; Ruchy wstrząsające
G1 X{brush_x_pos + shake_x_range} Y{brush_y_pos + shake_y_range} F{shake_speed} ACCEL={shake_acceleration}
G1 X{brush_x_pos - shake_x_range} Y{brush_y_pos - shake_y_range} F{shake_speed} ACCEL={shake_acceleration}
G1 X{brush_x_pos - shake_x_range} Y{brush_y_pos + shake_y_range} F{shake_speed} ACCEL={shake_acceleration}
G1 X{brush_x_pos + shake_x_range} Y{brush_y_pos - shake_y_range} F{shake_speed} ACCEL={shake_acceleration}
{% endfor %}
M104 S0 ; Wyłącz grzanie dyszy
RESTORE_GCODE_STATE NAME=clean_nozzle_state
# Unsafe experimental CLEAN_NOZZLE_TEST was removed. The physical brush
# positions in CLEAN_NOZZLE still require operator validation before use.
[gcode_macro CLEAN_NOZZLE]
variable_start_x: 110
@@ -867,73 +867,8 @@ gcode:
SET_IDLE_TIMEOUT TIMEOUT=43200 ; set timeout to 12 hours
{% endif %}
[gcode_macro LINE_PURGE]
description: A purge macro that adapts to be near your actual printed objects
variable_adaptive_enable: False # Change to False if you'd like the purge to be in the same spot every print
variable_z_height: 10 # Height above the bed to purge
variable_purge_amount: 100 # Amount of filament in millimeters to purge
variable_line_length: 1 # Overall desired length of purge line in millimeters, around 1/5th of X axis length is a good starting value
variable_flow_rate: 35 # Desired flow rate in mm3/s (Around 12 for standard flow hotends, around 24 for high flow hotends)
variable_x_default: 115 # Default X location to purge. If adaptive_enable is True, this is overwritten
variable_y_default: 251 # Default Y location to purge. If adaptive_enable is True, this is overwritten
variable_distance_to_object_y: 10 # Y distance in millimeters away from the print area for purging. Must be less than or equal to y_default if adaptive_enable is False
### This section is for those who are using Moonraker's Update Manager for KAMP, or want a more verbose macro. ###
variable_display_parameters: True # Display macro paramters in the console, useful for debugging the SETUP_LINE_PURGE call, or more verbosity.
gcode:
{% if display_parameters == True %}
{ action_respond_info("adaptive_enable : %d" % (adaptive_enable)) }
{ action_respond_info("z_height : %f" % (z_height)) }
{ action_respond_info("purge_amount : %f" % (purge_amount)) }
{ action_respond_info("line_length : %f" % (line_length)) }
{ action_respond_info("flow_rate : %f" % (flow_rate)) }
{ action_respond_info("x_default : %f" % (x_default)) }
{ action_respond_info("y_default : %f" % (y_default)) }
{ action_respond_info("distance_to_object_y : %f" % (distance_to_object_y)) }
{% endif %}
{% if adaptive_enable == True %}
{% set all_points = printer.exclude_object.objects | map(attribute='polygon') | sum(start=[]) %}
{% set x_origin = (all_points | map(attribute=0) | min | default(x_default)) %}
{% set y_origin = (all_points | map(attribute=1) | min | default(y_default)) %}
{% set x_origin = ([x_origin, 0] | max) %}
{% set y_origin = ([y_origin, 0] | max) %}
{% else %}
{% set x_origin = x_default | float %}
{% set y_origin = y_default | float %}
{% endif %}
{% set nozzle_dia = printer.configfile.config.extruder.nozzle_diameter | float %}
{% set cross_section = nozzle_dia * z_height | float %}
{% set purge_move_speed = (cross_section * flow_rate) * 60 | float %}
{% set travel_speed = (printer.toolhead.max_velocity) * 60 | float %}
G92 E0 # Reset extruder
G0 F{travel_speed} # Set travel speed
G90 # Absolute positioning
G0 X{x_origin} Y{y_origin - distance_to_object_y} # Move to purge position
G0 Z{z_height} # Move to purge Z height
M83 # Relative extrusion mode
G1 X{x_origin + line_length} E{purge_amount} F{purge_move_speed} # Purge line
G1 E-.5 F2100 # Retract
G92 E0 # Reset extruder distance
M82 # Absolute extrusion mode
G0 Z{z_height * 2} F{travel_speed} # Z hop
[gcode_macro SETUP_LINE_PURGE]
gcode:
SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=display_parameters VALUE={params.DISPLAY_PARAMETERS|default(True)|int}
SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=adaptive_enable VALUE={params.ADAPTIVE_ENABLE|default(False)|int}
SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=z_height VALUE={params.Z_HEIGHT|default(0.4)|float}
SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=purge_amount VALUE={params.PURGE_AMOUNT|default(40)|float}
SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=line_length VALUE={params.LINE_LENGTH|default(50)|float}
SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=flow_rate VALUE={params.FLOW_RATE|default(12)|float}
SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=x_default VALUE={params.X_DEFAULT|default(10)|float}
SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=y_default VALUE={params.Y_DEFAULT|default(10)|float}
SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=distance_to_object_y VALUE={params.DISTANCE_TO_OBJECT_Y|default(10)|float}
# LINE_PURGE is provided by KAMP/Line_Purge.cfg via KAMP_Settings.cfg.
# Keep a single definition; its parameters live in _KAMP_Settings.
[gcode_macro RESUME]
rename_existing: BASE_RESUME