From 70f1e677d808fe91491d87d5005082543b3b0d21 Mon Sep 17 00:00:00 2001 From: Reijii Date: Mon, 31 Mar 2025 03:44:08 +0300 Subject: [PATCH] refactor folders --- fan_monitor.cfg => Macros/fan_monitor.cfg | 112 +- idle.cfg => Macros/idle.cfg | 116 +- macros.cfg => Macros/macros.cfg | 1718 ++++++++--------- motor_sync.cfg => Macros/motor_sync.cfg | 0 ratrig_z-tilt.cfg => Macros/ratrig_z-tilt.cfg | 38 +- variables.cfg => macros_variables.cfg | 122 +- 6 files changed, 1053 insertions(+), 1053 deletions(-) rename fan_monitor.cfg => Macros/fan_monitor.cfg (98%) rename idle.cfg => Macros/idle.cfg (97%) rename macros.cfg => Macros/macros.cfg (97%) rename motor_sync.cfg => Macros/motor_sync.cfg (100%) rename ratrig_z-tilt.cfg => Macros/ratrig_z-tilt.cfg (96%) rename variables.cfg => macros_variables.cfg (97%) diff --git a/fan_monitor.cfg b/Macros/fan_monitor.cfg similarity index 98% rename from fan_monitor.cfg rename to Macros/fan_monitor.cfg index 0f3e234..8e988ef 100644 --- a/fan_monitor.cfg +++ b/Macros/fan_monitor.cfg @@ -1,57 +1,57 @@ -# Author: alch3my#9819 -# Requires a 3-wire fan with tachometer_pin defined. https://www.klipper3d.org/Config_Reference.html#heater_fan -# The tach wire can be connected to a spare endstop pin. -# Don't forget a pullup (^) on the tach pin (example: tachometer_pin: ^P1.29) -##test -# Monitoring loop. Begins at Klipper start. -[delayed_gcode CHECK_ALL_FANS] -initial_duration: 1 -gcode: - HOTEND_FAN_CHECK - UPDATE_DELAYED_GCODE ID=CHECK_ALL_FANS DURATION=3 - -# Change min_rpm and max_consecutive_stops to your desired values. -[gcode_macro HOTEND_FAN_CHECK] -variable_he_stop_count: 0 -gcode: - {% set min_rpm = 2500|float %} - {% set max_consecutive_stops = 3 %} - {% set rpm = printer['heater_fan toolhead_cooling_fan'].rpm|float %} - {% set he_target = printer[printer.toolhead.extruder].target|float %} - {% set he_temp = printer[printer.toolhead.extruder].temperature|float %} - {% set fan_on_temp = printer.configfile.settings['heater_fan toolhead_cooling_fan'].heater_temp|float %} - {% set he_stop_count = printer["gcode_macro HOTEND_FAN_CHECK"].he_stop_count|int %} - - {% if (he_target >= fan_on_temp) and (rpm < min_rpm) and (he_temp >= fan_on_temp) %} - SET_GCODE_VARIABLE MACRO=HOTEND_FAN_CHECK VARIABLE=he_stop_count VALUE={he_stop_count + 1} - M118 WARNING: Fan stoppage detected ({he_stop_count+1}/{max_consecutive_stops}). - {% if printer["gcode_macro RatOS"].tgbot_enabled|lower == 'true' %} - RESPOND PREFIX=tgnotify MSG="Чот вентилятор термобарьера медленный" - {% endif %} - M400 - {% if printer["gcode_macro HOTEND_FAN_CHECK"].he_stop_count|int >= max_consecutive_stops-1 %} - FAN_STOPPAGE_ROUTINE - {% endif %} - {% else %} - SET_GCODE_VARIABLE MACRO=HOTEND_FAN_CHECK VARIABLE=he_stop_count VALUE=0 - {% endif %} - -# Insert the gcode that you want to run when a fan stoppage is detected. -# This runs every ~3 seconds until the stop conditions are cleared. -[gcode_macro FAN_STOPPAGE_ROUTINE] -gcode: - # If not already paused - {% if printer['pause_resume'].is_paused|int == 0 %} - M117 !!FAN STOPPAGE!! - {% if printer["gcode_macro RatOS"].tgbot_enabled|lower == 'true' %} - RESPOND PREFIX=tgnotify MSG="Вентилятор термобарьера сдох. PAUSING..." - {% endif %} - - M118 FAN STOPPAGE DETECTED. PAUSING... - #PAUSE - # Turn off the hotend. - # !! Don't forget to turn your hotend back on before resume. !! - # -- If using this guide's pause/resume macros (in useful_macros.html), the hotend will automatically reheat on resume - # -- (as long as the hotend is not turned off BEFORE pause is called) - #SET_HEATER_TEMPERATURE HEATER=extruder TARGET=0 +# Author: alch3my#9819 +# Requires a 3-wire fan with tachometer_pin defined. https://www.klipper3d.org/Config_Reference.html#heater_fan +# The tach wire can be connected to a spare endstop pin. +# Don't forget a pullup (^) on the tach pin (example: tachometer_pin: ^P1.29) +##test +# Monitoring loop. Begins at Klipper start. +[delayed_gcode CHECK_ALL_FANS] +initial_duration: 1 +gcode: + HOTEND_FAN_CHECK + UPDATE_DELAYED_GCODE ID=CHECK_ALL_FANS DURATION=3 + +# Change min_rpm and max_consecutive_stops to your desired values. +[gcode_macro HOTEND_FAN_CHECK] +variable_he_stop_count: 0 +gcode: + {% set min_rpm = 2500|float %} + {% set max_consecutive_stops = 3 %} + {% set rpm = printer['heater_fan toolhead_cooling_fan'].rpm|float %} + {% set he_target = printer[printer.toolhead.extruder].target|float %} + {% set he_temp = printer[printer.toolhead.extruder].temperature|float %} + {% set fan_on_temp = printer.configfile.settings['heater_fan toolhead_cooling_fan'].heater_temp|float %} + {% set he_stop_count = printer["gcode_macro HOTEND_FAN_CHECK"].he_stop_count|int %} + + {% if (he_target >= fan_on_temp) and (rpm < min_rpm) and (he_temp >= fan_on_temp) %} + SET_GCODE_VARIABLE MACRO=HOTEND_FAN_CHECK VARIABLE=he_stop_count VALUE={he_stop_count + 1} + M118 WARNING: Fan stoppage detected ({he_stop_count+1}/{max_consecutive_stops}). + {% if printer["gcode_macro RatOS"].tgbot_enabled|lower == 'true' %} + RESPOND PREFIX=tgnotify MSG="Чот вентилятор термобарьера медленный" + {% endif %} + M400 + {% if printer["gcode_macro HOTEND_FAN_CHECK"].he_stop_count|int >= max_consecutive_stops-1 %} + FAN_STOPPAGE_ROUTINE + {% endif %} + {% else %} + SET_GCODE_VARIABLE MACRO=HOTEND_FAN_CHECK VARIABLE=he_stop_count VALUE=0 + {% endif %} + +# Insert the gcode that you want to run when a fan stoppage is detected. +# This runs every ~3 seconds until the stop conditions are cleared. +[gcode_macro FAN_STOPPAGE_ROUTINE] +gcode: + # If not already paused + {% if printer['pause_resume'].is_paused|int == 0 %} + M117 !!FAN STOPPAGE!! + {% if printer["gcode_macro RatOS"].tgbot_enabled|lower == 'true' %} + RESPOND PREFIX=tgnotify MSG="Вентилятор термобарьера сдох. PAUSING..." + {% endif %} + + M118 FAN STOPPAGE DETECTED. PAUSING... + #PAUSE + # Turn off the hotend. + # !! Don't forget to turn your hotend back on before resume. !! + # -- If using this guide's pause/resume macros (in useful_macros.html), the hotend will automatically reheat on resume + # -- (as long as the hotend is not turned off BEFORE pause is called) + #SET_HEATER_TEMPERATURE HEATER=extruder TARGET=0 {% endif %} \ No newline at end of file diff --git a/idle.cfg b/Macros/idle.cfg similarity index 97% rename from idle.cfg rename to Macros/idle.cfg index 9943b09..8ceac65 100644 --- a/idle.cfg +++ b/Macros/idle.cfg @@ -1,58 +1,58 @@ -[idle_timeout] -timeout: 120 -gcode: - UPDATE_DELAYED_GCODE ID=_FIRST_STAGE_IDLE DURATION=printer["gcode_macro RatOS"].idle_delay - -[delayed_gcode _FIRST_STAGE_IDLE] -gcode: - {% if printer.idle_timeout.state == "Idle" or printer.idle_timeout.state == "Ready" %} - {% if printer.extruder.temperature < 50.0 and printer.heater_bed.temperature < 50.0 %} - {% if printer.extruder.target == 0.0 and printer.heater_bed.target == 0.0 %} - UPDATE_DELAYED_GCODE ID=_FIRST_STAGE_IDLE DURATION=0 - UPDATE_DELAYED_GCODE ID=_POWER_OFF_PRINTER_CHECK DURATION=printer["gcode_macro RatOS"].poweroff_delay - - M84 - {% else %} - UPDATE_DELAYED_GCODE ID=_FIRST_STAGE_IDLE DURATION=2 - {% endif %} - {% else %} - {% if printer.idle_timeout.state == "Printing" %} - UPDATE_DELAYED_GCODE ID=_FIRST_STAGE_IDLE DURATION=0 - {% else %} - {% if printer.extruder.target == 0.0 and printer.heater_bed.target == 0.0 %} - UPDATE_DELAYED_GCODE ID=_FIRST_STAGE_IDLE DURATION=2 - {% else %} - UPDATE_DELAYED_GCODE ID=_FIRST_STAGE_IDLE DURATION=0 - {% endif %} - {% endif %} - {% endif %} - {% endif %} - -[delayed_gcode _POWER_OFF_PRINTER_CHECK] -gcode: - {% if printer.idle_timeout.state == "Idle" or printer.idle_timeout.state == "Ready" %} - {% if printer.extruder.temperature < 50.0 and printer.heater_bed.temperature < 50.0 %} - {% if printer.extruder.target == 0.0 and printer.heater_bed.target == 0.0 %} - UPDATE_DELAYED_GCODE ID=_POWER_OFF_PRINTER_CHECK DURATION=0 - M84 - {% else %} - UPDATE_DELAYED_GCODE ID=_POWER_OFF_PRINTER_CHECK DURATION=2 - {% endif %} - {% else %} - {% if printer.idle_timeout.state == "Printing" %} - UPDATE_DELAYED_GCODE ID=_POWER_OFF_PRINTER_CHECK DURATION=0 - {% else %} - {% if printer.extruder.target == 0.0 and printer.heater_bed.target == 0.0 %} - UPDATE_DELAYED_GCODE ID=_POWER_OFF_PRINTER_CHECK DURATION=2 - {% else %} - UPDATE_DELAYED_GCODE ID=_POWER_OFF_PRINTER_CHECK DURATION=0 - {% endif %} - {% endif %} - {% endif %} - {% endif %} - -[gcode_macro _POWER_OFF_PRINTER] -gcode: - {action_call_remote_method("set_device_power", - device=printer["gcode_macro RatOS"].power_device, - state="off")} +[idle_timeout] +timeout: 120 +gcode: + UPDATE_DELAYED_GCODE ID=_FIRST_STAGE_IDLE DURATION=printer["gcode_macro RatOS"].idle_delay + +[delayed_gcode _FIRST_STAGE_IDLE] +gcode: + {% if printer.idle_timeout.state == "Idle" or printer.idle_timeout.state == "Ready" %} + {% if printer.extruder.temperature < 50.0 and printer.heater_bed.temperature < 50.0 %} + {% if printer.extruder.target == 0.0 and printer.heater_bed.target == 0.0 %} + UPDATE_DELAYED_GCODE ID=_FIRST_STAGE_IDLE DURATION=0 + UPDATE_DELAYED_GCODE ID=_POWER_OFF_PRINTER_CHECK DURATION=printer["gcode_macro RatOS"].poweroff_delay + + M84 + {% else %} + UPDATE_DELAYED_GCODE ID=_FIRST_STAGE_IDLE DURATION=2 + {% endif %} + {% else %} + {% if printer.idle_timeout.state == "Printing" %} + UPDATE_DELAYED_GCODE ID=_FIRST_STAGE_IDLE DURATION=0 + {% else %} + {% if printer.extruder.target == 0.0 and printer.heater_bed.target == 0.0 %} + UPDATE_DELAYED_GCODE ID=_FIRST_STAGE_IDLE DURATION=2 + {% else %} + UPDATE_DELAYED_GCODE ID=_FIRST_STAGE_IDLE DURATION=0 + {% endif %} + {% endif %} + {% endif %} + {% endif %} + +[delayed_gcode _POWER_OFF_PRINTER_CHECK] +gcode: + {% if printer.idle_timeout.state == "Idle" or printer.idle_timeout.state == "Ready" %} + {% if printer.extruder.temperature < 50.0 and printer.heater_bed.temperature < 50.0 %} + {% if printer.extruder.target == 0.0 and printer.heater_bed.target == 0.0 %} + UPDATE_DELAYED_GCODE ID=_POWER_OFF_PRINTER_CHECK DURATION=0 + M84 + {% else %} + UPDATE_DELAYED_GCODE ID=_POWER_OFF_PRINTER_CHECK DURATION=2 + {% endif %} + {% else %} + {% if printer.idle_timeout.state == "Printing" %} + UPDATE_DELAYED_GCODE ID=_POWER_OFF_PRINTER_CHECK DURATION=0 + {% else %} + {% if printer.extruder.target == 0.0 and printer.heater_bed.target == 0.0 %} + UPDATE_DELAYED_GCODE ID=_POWER_OFF_PRINTER_CHECK DURATION=2 + {% else %} + UPDATE_DELAYED_GCODE ID=_POWER_OFF_PRINTER_CHECK DURATION=0 + {% endif %} + {% endif %} + {% endif %} + {% endif %} + +[gcode_macro _POWER_OFF_PRINTER] +gcode: + {action_call_remote_method("set_device_power", + device=printer["gcode_macro RatOS"].power_device, + state="off")} diff --git a/macros.cfg b/Macros/macros.cfg similarity index 97% rename from macros.cfg rename to Macros/macros.cfg index 0a33c4e..3fdcef0 100644 --- a/macros.cfg +++ b/Macros/macros.cfg @@ -1,860 +1,860 @@ - -[gcode_macro PAUSE] -description: Pauses the printer -rename_existing: PAUSE_BASE -variable_extrude: 1.5 -gcode: - SAVE_GCODE_STATE NAME=PAUSE_state - # Define park positions - {% set E = printer["gcode_macro PAUSE"].extrude|float %} - {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} - {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} - # Calculate safe Z position - {% set max_z = printer.toolhead.axis_maximum.z|float %} - {% set act_z = printer.toolhead.position.z|float %} - {% if act_z < (max_z - 20.0) %} - {% set z_safe = 20.0 %} - {% else %} - {% set z_safe = max_z - act_z %} - {% endif %} - PAUSE_BASE - G91 - # Retract - {% if printer.extruder.can_extrude|lower == 'true' %} - G1 E-{E} F2100 - {% else %} - {action_respond_info("Extruder not hot enough")} - {% endif %} - # Move to park position - {% if "xyz" in printer.toolhead.homed_axes %} - G1 Z{z_safe} F{z_speed} - _PARK LOCATION={printer["gcode_macro RatOS"].pause_print_park_in} X={printer["gcode_macro RatOS"].pause_print_park_x} - {% else %} - {action_respond_info("Printer not homed")} - {% endif %} - {% if printer["gcode_macro RatOS"].tgbot_enabled|lower == 'true' %} - RESPOND PREFIX=tgnotify MSG="Принтер встал на паузу" - {% endif %} - {% if printer["gcode_macro RatOS"].beep_enabled|lower == 'true' %} - beep - {% endif %} - - -[gcode_macro RESUME] -description: Resumes the print if the printer is paused. -rename_existing: RESUME_BASE -gcode: - {% set E = printer["gcode_macro PAUSE"].extrude|float %} - # Prime - {% if printer.extruder.can_extrude|lower == 'true' %} - G91 - G1 E{E} F2100 - G90 - {% else %} - {action_respond_info("Extruder not hot enough")} - {% endif %} - RESTORE_GCODE_STATE NAME=PAUSE_state MOVE=1 MOVE_SPEED={printer["gcode_macro RatOS"].macro_travel_speed|float} - RESUME_BASE - {% if printer["gcode_macro RatOS"].tgbot_enabled|lower == 'true' %} - RESPOND PREFIX=tgnotify MSG="Принтер продолжил после паузы" - {% endif %} - -[gcode_macro CANCEL_PRINT] -description: Cancels the printer -rename_existing: CANCEL_PRINT_BASE -gcode: - END_PRINT - TURN_OFF_HEATERS - CLEAR_PAUSE - #SDCARD_RESET_FILE - CANCEL_PRINT_BASE - {% if printer["gcode_macro RatOS"].tgbot_enabled|lower == 'true' %} - RESPOND PREFIX=tgnotify MSG="Отмена печати" - {% endif %} - - -[gcode_macro PRIME_LINE] -description: Prints a primeline, used internally, if configured, as part of the START_PRINT macro. -gcode: - SAVE_GCODE_STATE NAME=prime_line_state - {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} - {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} - {% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %} - {% set x_start = 5 %} - {% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %} - {% set x_start = printer.toolhead.axis_maximum.x - 5 %} - {% else %} - {% set x_start = printer["gcode_macro RatOS"].nozzle_prime_start_x|float %} - {% endif %} - {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %} - {% set y_start = 5 %} - {% set y_factor = 1 %} - {% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %} - {% set y_start = printer.toolhead.axis_maximum.y - 5 %} - {% set y_factor = -1 %} - {% else %} - {% set y_start = printer["gcode_macro RatOS"].nozzle_prime_start_y|float %} - {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float < printer.toolhead.axis_maximum.y / 2 %} - {% set y_factor = 1 %} - {% else %} - {% set y_factor = -1 %} - {% endif %} - {% endif %} - {% if printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'forwards' %} - {% set y_factor = 1 %} - {% elif printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'backwards' %} - {% set y_factor = -1 %} - {% endif %} - {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} - # Absolute positioning - G90 - # Absolute extrusion - M82 - M117 Priming nozzle with prime line.. - RESPOND MSG="Priming nozzle with prime line.." - # Lift to start print Z height - G0 Z{z} F{z_speed} - # move to blob position along the edge of the bed - G1 X{x_start} F{speed} - G1 Y{y_start} F{speed} - # Get ready to prime - G1 Z0.3 F{z_speed} - # Reset extrusion distance - G92 E0 - # Prime nozzle - G1 Y{y_start + (70 * y_factor)} E16 F1200 - # Wipe - G1 Y{y_start + (90 * y_factor)} F{speed} - RESTORE_GCODE_STATE NAME=prime_line_state - -[gcode_macro PRIME_BLOB] -description: Prints a primeblob, used internally, if configured, as part of the START_PRINT macro. Slower than PRIME_LINE but much more effective. -gcode: - SAVE_GCODE_STATE NAME=prime_blob_state - M117 Priming nozzle with prime blob.. - RESPOND MSG="Priming nozzle with prime blob.." - {% if printer["gcode_macro RatOS"].filament_encoder_enabled|lower == 'true' %} - SET_FILAMENT_SENSOR SENSOR=encoder_sensor ENABLE=0 - {% endif %} - {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} - {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} - {% set fan_speed = printer["gcode_macro RatOS"].nozzle_prime_bridge_fan|float %} - {% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %} - {% set x_start = 5 %} - {% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %} - {% set x_start = printer.toolhead.axis_maximum.x - 5 %} - {% else %} - {% set x_start = printer["gcode_macro RatOS"].nozzle_prime_start_x|float %} - {% endif %} - {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %} - {% set y_start = 5 %} - {% set y_factor = 1 %} - {% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %} - {% set y_start = printer.toolhead.axis_maximum.y - 5 %} - {% set y_factor = -1 %} - {% else %} - {% set y_start = printer["gcode_macro RatOS"].nozzle_prime_start_y|float %} - {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float < printer.toolhead.axis_maximum.y / 2 %} - {% set y_factor = 1 %} - {% else %} - {% set y_factor = -1 %} - {% endif %} - {% endif %} - {% if printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'forwards' %} - {% set y_factor = 1 %} - {% elif printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'backwards' %} - {% set y_factor = -1 %} - {% endif %} - {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} - # Absolute positioning - G90 - # Relative extrusion - M83 - # Lift to start print Z height - G0 Z{z} F{z_speed} - # move close to blob position along the edge of the bed - G1 X{x_start} F{speed} - G1 Y{y_start + (15 * y_factor)} F{speed} - # Lower to blob extrusion height - G1 Z0.5 F{z_speed} - # Move to final position horizontally - G1 Y{y_start} F{speed} - # Extrude a blob - G1 F60 E20 - # 40% fan - M106 S{fan_speed} - # Move the extruder up by 5mm while extruding, breaks away from blob - G1 Z5 F100 E5 - # Move to wipe position, but keep extruding so the wipe is attached to blob - G1 F200 Y{y_start + (25 * y_factor)} E1 - # Go down diagonally while extruding - # Broken down in z moves under 2mm as a workaround for a tuning tower test. - # The tuning tower command thinks a new print has been started when z moves over 2mm and aborts. - G1 F200 Y{y_start + (30 * y_factor)} Z3.8 E0.5 - G1 F200 Y{y_start + (35 * y_factor)} Z2.6 E0.5 - G1 F200 Y{y_start + (40 * y_factor)} Z1.4 E0.5 - G1 F200 Y{y_start + (45 * y_factor)} Z0.2 E0.5 - # 0% fan - M106 S0 - # small wipe line - G1 F200 Y{y_start + (50 * y_factor)} Z0.2 E0.6 - # Break away wipe - G1 F{speed} Y{y_start + (100 * y_factor)} - {% if printer["gcode_macro RatOS"].filament_encoder_enabled|lower == 'true' %} - SET_FILAMENT_SENSOR SENSOR=encoder_sensor ENABLE=1 - {% endif %} - RESTORE_GCODE_STATE NAME=prime_blob_state - - -[gcode_macro _PARK] -gcode: - {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} - # Get X position - {% if params.X != '' %} - {% if params.X|float >= printer.toolhead.axis_minimum.x + 5 and params.X|float <= printer.toolhead.axis_maximum.x - 5 %} - {% set safe_x = params.X|float %} - {% else %} - {action_respond_info('The requested X co-ordinate is outside the defined axis bounds - using defaults')} - {% set safe_x = printer.toolhead.axis_maximum.x / 2 %} - {% endif %} - {% else %} - {% set safe_x = printer.toolhead.axis_maximum.x / 2 %} - #{% set safe_x = printer.toolhead.axis_maximum.x / 2 %} - {% endif %} - # Get Y position - {% if params.LOCATION|default('back')|lower == 'back' %} - {% set y = printer.toolhead.axis_maximum.y - 5 %} - {% elif params.LOCATION|lower == 'front' %} - {% set y = printer.toolhead.axis_minimum.y + 5 %} - {% elif params.LOCATION|lower == 'center' %} - {% set y = printer.toolhead.axis_maximum.y / 2 %} - {% endif %} - # Absolute positioning - G90 - # Park - G0 X{safe_x} Y{y} F{speed} - -##### -# COLOR CHANGE -##### -[gcode_macro M600] -description: Executes a color change by pausing the printer an unloading the filament. -gcode: - PAUSE - UNLOAD_FILAMENT - M117 Please load new filament and resume - RESPOND MSG="Please load new filament and resume" - {% if printer["gcode_macro RatOS"].tgbot_enabled|lower == 'true' %} - RESPOND PREFIX=tgnotify MSG="Требуется замена филамента" - {% endif %} - {% if printer["gcode_macro RatOS"].beep_enabled|lower == 'true' %} - beep - {% endif %} - - -##### -# FILAMENT MANAGEMENT -##### - -[gcode_macro UNLOAD_FILAMENT] -description: Unloads the filament. Note: be careful with PETG, make sure you inspect the tip of your filament before reloading to avoid jams. -gcode: - SAVE_GCODE_STATE NAME=unload_state - G91 - {% if params.TEMP is defined or printer.extruder.can_extrude|lower == 'false' %} - M117 Heating... - # Heat up hotend to provided temp or 220 as default as that should work OK with most filaments. - M104 S{params.TEMP|default(220, true)} - TEMPERATURE_WAIT SENSOR=extruder MINIMUM={params.TEMP|default(220, true)} - {% endif %} - {% set unload_speed = printer["gcode_macro RatOS"].filament_unload_speed|float * 60 %} - {% set unload_length = printer["gcode_macro RatOS"].filament_unload_length|float %} - M117 Unloading filament... - # Extrude a bit - G0 E10 F300 - # Extract filament to cold end area - G0 E-5 F3600 - # Wait for three seconds - G4 P3000 - # Push back the filament to smash any stringing - G0 E5 F3600 - # Extract back fast in to the cold zone - G0 E-15 F3600 - # Continue extraction slowly, allow the filament time to cool solid before it reaches the gears - G0 E-{unload_length} F{unload_speed} - M117 Filament unloaded! - RESPOND MSG="Filament unloaded! Please inspect the tip of the filament before reloading." - RESTORE_GCODE_STATE NAME=unload_state - -[gcode_macro LOAD_FILAMENT] -description: Loads new filament. Note: be careful with PETG, make sure you inspect the tip of your filament before loading to avoid jams. -gcode: - SAVE_GCODE_STATE NAME=load_state - G91 - # Heat up hotend to provided temp or 220 as default as that should work OK with most filaments. - {% if params.TEMP is defined or printer.extruder.can_extrude|lower == 'false' %} - FORCE_MOVE STEPPER=extruder DISTANCE=15 VELOCITY=10 ACCEL=1000 - M117 Heating... - M104 S{params.TEMP|default(230, true)} - TEMPERATURE_WAIT SENSOR=extruder MINIMUM={params.TEMP|default(230, true)} - {% endif %} - {% set load_speed = printer["gcode_macro RatOS"].filament_load_speed|float * 60 %} - {% set load_length = printer["gcode_macro RatOS"].filament_load_length|float %} - {% set load_second_speed = printer["gcode_macro RatOS"].filament_load_second_speed|float * 60 %} - {% set load_second_length = printer["gcode_macro RatOS"].filament_load_second_length|float %} - - M117 Loading filament... - # Load the filament into the hotend area. - G0 E{load_length} F{load_speed} - # Wait a secod - G4 P1000 - # Purge - G0 E{load_second_length} F{load_second_speed} - #G0 E40 F100 - # Wait for purge to complete - M400 - M117 Filament loaded! - RESPOND MSG="Filament loaded!" - RESTORE_GCODE_STATE NAME=load_state - -[gcode_macro SET_CENTER_KINEMATIC_POSITION] -description: FOR DEBUGGING PURPOSES ONLY. Sets the internal printer kinematic state to the center of all axes regardless of actual physical position. -gcode: - RESPOND MSG="WARNING: ONLY USE SET_CENTER_KINEMATIC_POSITION FOR DEBUGGING PURPOSES. YOU'RE OVERRIDING THE INTERNAL POSITIONING STATE OF THE PRINTER. PROCEED WITH CAUTION AND DO A PROPER G28 WHEN DONE." - SET_GCODE_VARIABLE MACRO=MAYBE_HOME VARIABLE=is_kinematic_position_overriden VALUE=True - SET_KINEMATIC_POSITION X={printer.toolhead.axis_maximum.x / 2} Y={printer.toolhead.axis_maximum.y / 2} Z={printer.toolhead.axis_maximum.z / 2} - -[gcode_macro MAYBE_HOME] -description: Only home unhomed axis -variable_is_kinematic_position_overriden: False -gcode: - {% if printer["gcode_macro MAYBE_HOME"].is_kinematic_position_overriden|lower == 'true' %} - RESPOND MSG="SET_CENTER_KINEMATIC_POSITION has been abused. Homing all axes. Please refrain from using SET_CENTER_KINEMATIC_POSITION outside of debugging purposes." - G28 - SET_GCODE_VARIABLE MACRO=MAYBE_HOME VARIABLE=is_kinematic_position_overriden VALUE=False - {% else %} - {% set axes = '' %} - {% set isHomed = true %} - {% set axesToHome = '' %} - {% if params.X is defined %} - {% set axes = axes ~ 'X ' %} - {% if 'x' not in printer.toolhead.homed_axes %} - {% set isHomed = false %} - {% set axesToHome = axesToHome ~ 'X ' %} - {% endif %} - {% endif %} - {% if params.Y is defined %} - {% set axes = axes ~ 'Y ' %} - {% if 'y' not in printer.toolhead.homed_axes %} - {% set isHomed = false %} - {% set axesToHome = axesToHome ~ 'Y ' %} - {% endif %} - {% endif %} - {% if params.Z is defined %} - {% set axes = axes ~ 'Z ' %} - {% if 'z' not in printer.toolhead.homed_axes %} - {% set isHomed = false %} - {% set axesToHome = axesToHome ~ 'Z ' %} - {% endif %} - {% endif %} - {% if params.X is not defined and params.Y is not defined and params.Z is not defined %} - {% set axes = '' %} - {% if 'x' not in printer.toolhead.homed_axes %} - {% set isHomed = false %} - {% set axesToHome = axesToHome ~ 'X ' %} - {% endif %} - {% if 'y' not in printer.toolhead.homed_axes %} - {% set isHomed = false %} - {% set axesToHome = axesToHome ~ 'Y ' %} - {% endif %} - {% if 'z' not in printer.toolhead.homed_axes %} - {% set isHomed = false %} - {% set axesToHome = axesToHome ~ 'Z ' %} - {% endif %} - {% endif %} - {% if isHomed is false %} - M117 Homing {axesToHome} - RESPOND MSG="Homing {axesToHome}" - G28 {axesToHome} - {% else %} - RESPOND MSG="All requested axes already homed, skipping.." - {% endif %} - {% endif %} - - -##### -# START PRINT MACROS -# Call this from your slicer (custom g-code). -# Read more here: https://rat-rig.github.io/V-CoreOS/#/slicers -##### - -[gcode_macro START_PRINT] -description: Start print procedure, use this in your Slicer. -gcode: - CLEAR_PAUSE - {% if printer["gcode_macro RatOS"].force_absolute_position|lower == 'true' %} - G90 - {% endif %} - SAVE_GCODE_STATE NAME=start_print_state - # Metric values - G21 - # Absolute positioning - G90 - # Set extruder to absolute mode - M82 - _USER_START_PRINT_BEFORE_HOMING - # Home if needed - MAYBE_HOME - {% if params.CHAMBER_TEMP is defined %} - _START_PRINT_HEAT_CHAMBER CHAMBER_TEMP={params.CHAMBER_TEMP} BED_TEMP={printer["gcode_macro RatOS"].start_print_heat_chamber_bed_temp} - _USER_START_PRINT_HEAT_CHAMBER CHAMBER_TEMP={params.CHAMBER_TEMP} BED_TEMP={printer["gcode_macro RatOS"].start_print_heat_chamber_bed_temp} - {% endif %} - {% if printer["gcode_macro RatOS"].awd_sync_enabled|lower == 'true' %} - M117 Motor sync... - RESPOND MSG="Motor sync..." - {% if not printer.motors_sync.applied %} - SYNC_MOTORS - {% endif %} - { endif %} - - M117 Heating bed... - RESPOND MSG="Heating bed..." - # Wait for bed to heat up - M190 S{params.BED_TEMP|default(printer.heater_bed.target, true) } - # Run the user created "AFTER_HEATING_BED" macro - _USER_START_PRINT_AFTER_HEATING_BED - # Run the customizable "AFTER_HEATING_BED" macro. - _START_PRINT_AFTER_HEATING_BED - # Run the user created "START_PRINT_BED_MESH" macro - _USER_START_PRINT_BED_MESH - # Run the customizable "BED_MESH" macro - _START_PRINT_BED_MESH X0={params.X0} X1={params.X1} Y0={params.Y0} Y1={params.Y1} - # Start heating extruder - M104 S{params.EXTRUDER_TEMP|default(printer.extruder.target, true) } - # Run the users "PARK" macro - _USER_START_PRINT_PARK - # Run the customizable "PARK" macro - _START_PRINT_PARK - # Wait for extruder to heat up - M117 Heating Extruder... - RESPOND MSG="Heating Extruder..." - M109 S{params.EXTRUDER_TEMP|default(printer.extruder.target, true) } - # Run the user created "AFTER_HEATING_EXTRUDER" macro. - _USER_START_PRINT_AFTER_HEATING_EXTRUDER - # Run the customizable "AFTER_HEATING_EXTRUDER" macro. - _START_PRINT_AFTER_HEATING_EXTRUDER - M117 Printing... - RESPOND MSG="Printing..." - RESTORE_GCODE_STATE NAME=start_print_state - # Set extrusion mode based on user configuration - {% if printer["gcode_macro RatOS"].relative_extrusion|lower == 'true' %} - M83 - {% else %} - M82 - {% endif %} - G92 E0 - -##### -# START PRINT MACRO HOOKS -# You can copy these to printer.cfg and modify them to your liking, or just use them as is. -#### - -[gcode_macro _USER_START_PRINT_BEFORE_HOMING] -gcode: - -[gcode_macro _START_PRINT_AFTER_HEATING_BED] -gcode: - {% if printer["gcode_macro RatOS"].preheat_extruder|lower == 'true' %} - {% set min_temp = printer["gcode_macro RatOS"].preheat_extruder_temp|float %} - {% set max_temp = printer["gcode_macro RatOS"].preheat_extruder_temp|float + 5 %} - M117 Pre-heating extruder... - RESPOND MSG="Pre-heating extruder..." - # Wait for extruder to reach a predefined preheat temp so an inductive probe (if present) is at a predictable temp. - # Also allows the bed heat to spread a little, and softens any plastic that might be stuck to the nozzle. - M104 S{min_temp} - TEMPERATURE_WAIT SENSOR=extruder MINIMUM={min_temp} MAXIMUM={max_temp} - {% endif %} - {% if printer["gcode_macro RatOS"].variable_z_tilt_enabled|lower == 'true' %} - {% set TARGET_TEMP = printer.heater_bed.target %} - {% if printer["gcode_macro RatOS"].variable_high_power_bed|lower == 'true' %} - M140 S0 - {% endif %} - M117 Adjusting Z tilt... - RESPOND MSG="Adjusting Z tilt..." - # Adjust bed tilt - SAVE_GCODE_STATE NAME=STATE_Z_TILT - BED_MESH_CLEAR - {% if not printer.z_tilt.applied %} - Z_TILT_ADJUST horizontal_move_z=10 retry_tolerance=1 - {% endif %} - Z_TILT_ADJUST horizontal_move_z=2 - RESTORE_GCODE_STATE NAME=STATE_Z_TILT - - M190 S{TARGET_TEMP} - - M117 Rehoming Z after Z tilt adjustment... - RESPOND MSG="Rehoming Z after Z tilt adjustment..." - # Home again as Z will have changed after tilt adjustment and bed heating. - G28 Z - {% endif %} - - -[gcode_macro _USER_START_PRINT_AFTER_HEATING_BED] -gcode: - -[gcode_macro _START_PRINT_BED_MESH] -gcode: - {% set default_profile = printer["gcode_macro RatOS"].bed_mesh_profile|default('ratos') %} - {% if printer["gcode_macro RatOS"].calibrate_bed_mesh|lower == 'true' %} - BED_MESH_CLEAR - {% set TARGET_TEMP = printer.heater_bed.target %} - {% if printer["gcode_macro RatOS"].variable_high_power_bed|lower == 'true' %} - M140 S0 - {% endif %} - {% if printer["gcode_macro RatOS"].adaptive_mesh|lower == 'true' %} - ADAPTIVE_BED_MESH FORCE_MESH=1 - {% else %} - BED_MESH_CALIBRATE PROFILE={default_profile} - BED_MESH_PROFILE LOAD={default_profile} - {% endif %} - {% if printer["gcode_macro RatOS"].touch_cart_enabled|lower == 'true' %} - CARTOGRAPHER_TOUCH ; Perform touch probe - {% endif %} - M190 S{TARGET_TEMP} - {% elif printer["gcode_macro RatOS"].bed_mesh_profile is defined %} - BED_MESH_CLEAR - BED_MESH_PROFILE LOAD={printer["gcode_macro RatOS"].bed_mesh_profile} - {% endif %} - -[gcode_macro _USER_START_PRINT_BED_MESH] -gcode: - -[gcode_macro _START_PRINT_PARK] -gcode: - {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} - {% set zSpeed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} - _PARK LOCATION={printer["gcode_macro RatOS"].start_print_park_in} X={printer["gcode_macro RatOS"].start_print_park_x} - G0 Z{z} F{zSpeed} - -[gcode_macro _USER_START_PRINT_PARK] -gcode: - -[gcode_macro _START_PRINT_AFTER_HEATING_EXTRUDER] -gcode: - {% set has_offset = printer["gcode_macro RatOS"].probe_for_priming_result|float(9999.9) != 9999.9 %} - {% if has_offset %} - ADD_PRIME_PROBE_TO_OFFSET - {% endif %} - {% if printer["gcode_macro RatOS"].nozzle_priming|lower == 'primeline' %} - PRIME_LINE - {% endif %} - {% if printer["gcode_macro RatOS"].nozzle_priming|lower == 'primeblob' %} - PRIME_BLOB - {% endif %} - {% if has_offset %} - SUBTRACT_PRIME_PROBE_FROM_OFFSET - {% endif %} - {% if printer["gcode_macro RatOS"].skew_profile is defined %} - SKEW_PROFILE LOAD={printer["gcode_macro RatOS"].skew_profile} - {% endif %} - -[gcode_macro _USER_START_PRINT_AFTER_HEATING_EXTRUDER] -gcode: - -[gcode_macro _START_PRINT_HEAT_CHAMBER] -description: Uses the extruder sensor to wait for chamber temp. Override the _START_PRINT_HEAT_CHAMBER macro to implement heated chamber handling. -gcode: - {% if params.CHAMBER_TEMP is defined and params.BED_TEMP is defined and params.CHAMBER_TEMP|int > 0 %} - {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} - {% set zSpeed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} - G0 Z{z} F{zSpeed} - M84 - M117 Heating chamber... - RESPOND MSG="Heating chamber..." - M140 S{params.BED_TEMP} - TEMPERATURE_WAIT SENSOR=extruder MINIMUM={params.CHAMBER_TEMP} - MAYBE_HOME - {% endif %} - -[gcode_macro _USER_START_PRINT_HEAT_CHAMBER] -description: Uses the extruder sensor to wait for chamber temp. Override the _START_PRINT_HEAT_CHAMBER macro to implement heated chamber handling. -gcode: - -##### -# END PRINT MACROS -# Call this from your slicer (custom g-code). -# Read more here: https://rat-rig.github.io/V-CoreOS/#/slicers -##### - -# The end_print macro is also called from CANCEL_PRINT. -[gcode_macro END_PRINT] -description: End print procedure, use this in your Slicer. -gcode: - SAVE_GCODE_STATE NAME=end_print_state - _USER_END_PRINT_BEFORE_HEATERS_OFF - _END_PRINT_BEFORE_HEATERS_OFF - TURN_OFF_HEATERS - _USER_END_PRINT_AFTER_HEATERS_OFF - _END_PRINT_AFTER_HEATERS_OFF - _USER_END_PRINT_PARK - _END_PRINT_PARK - # Clear skew profile if any was loaded. - {% if printer["gcode_macro RatOS"].skew_profile is defined %} - SET_SKEW CLEAR=1 - {% endif %} - # Steppers off - M84 - # Part cooling fan off - M107 - # Clear bed mesh so that G28 doesn't fail. - BED_MESH_CLEAR - M117 Done :) - RESPOND MSG="Done :)" - RESTORE_GCODE_STATE NAME=end_print_state - {% if printer["gcode_macro RatOS"].tgbot_enabled|lower == 'true' %} - RESPOND PREFIX=tgnotify MSG="Допечатато! =)" - {% endif %} - {% if printer["gcode_macro RatOS"].beep_enabled|lower == 'true' %} - beep - {% endif %} - - -##### -# END PRINT MACRO HOOKS -# You can copy these to printer.cfg and modify them to your liking, or just use them as is. -#### - -[gcode_macro _END_PRINT_BEFORE_HEATERS_OFF] -gcode: - RESPOND MSG="Cleaning up..." - - -[gcode_macro _USER_END_PRINT_BEFORE_HEATERS_OFF] -gcode: - -[gcode_macro _END_PRINT_AFTER_HEATERS_OFF] -gcode: - # Calculate safe Z position - {% set max_z = printer.toolhead.axis_maximum.z|float %} - {% set act_z = printer.toolhead.position.z|float %} - {% set z_hop = printer["gcode_macro RatOS"].end_print_park_z_hop|float %} - {% if act_z < (max_z - z_hop) %} - {% set z_safe = z_hop %} - {% else %} - {% set z_safe = max_z - act_z %} - {% endif %} - # Relative positioning - G91 - # Retract the filament a bit before lifting the nozzle. - G1 E-2 F3600 - # Move to safe Z position - G0 Z{z_safe} F3600 - # Retract filament even more - G1 E-2 F3600 - # Back to absolute positioning - G90 - -[gcode_macro _USER_END_PRINT_AFTER_HEATERS_OFF] -gcode: - -[gcode_macro _END_PRINT_PARK] -gcode: - _PARK LOCATION={printer["gcode_macro RatOS"].end_print_park_in} X={printer["gcode_macro RatOS"].end_print_park_x} - -[gcode_macro _USER_END_PRINT_PARK] -gcode: - -##### -# MESH MACROS -#### - -[gcode_macro SAVE_PROBE_RESULT] -gcode: - {% set last_z = printer.probe.last_z_result %} - SET_GCODE_VARIABLE MACRO=RatOS VARIABLE={params.VARIABLE|default('last_z')} VALUE={last_z} - -[gcode_macro PROBE_FOR_PRIMING] -gcode: - {% if printer["gcode_macro RatOS"].nozzle_priming|lower != 'false' %} - SAVE_GCODE_STATE NAME=probe_for_priming_state - RESPOND MSG="Probing the prime location.." - {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} - {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} - {% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %} - {% set x_start = 5 %} - {% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %} - {% set x_start = printer.toolhead.axis_maximum.x - 5 %} - {% else %} - {% set x_start = printer["gcode_macro RatOS"].nozzle_prime_start_x|float %} - {% endif %} - {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %} - {% set y_start = 5 %} - {% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %} - {% set y_start = printer.toolhead.axis_maximum.y - 5 %} - {% else %} - {% set y_start = printer["gcode_macro RatOS"].nozzle_prime_start_y|float %} - {% endif %} - {% set z = printer.configfile.settings.bed_mesh.horizontal_move_z|float %} - # get bed mesh config object - {% set mesh_config = printer.configfile.config.bed_mesh %} - - # Get probe offsets - {% if printer.configfile.settings.bltouch is defined %} - {% set x_offset = printer.configfile.settings.bltouch.x_offset|float %} - {% set y_offset = printer.configfile.settings.bltouch.y_offset|float %} - {% elif printer.configfile.settings.probe is defined %} - {% set x_offset = printer.configfile.settings.probe.x_offset|float %} - {% set y_offset = printer.configfile.settings.probe.y_offset|float %} - {% elif printer.configfile.settings.beacon is defined %} - {% set x_offset = printer.configfile.settings.beacon.x_offset|float %} - {% set y_offset = printer.configfile.settings.beacon.y_offset|float %} - {% else %} - { action_raise_error("No probe or bltouch section found. Adaptive priming only works with [probe] or [bltouch].") } - {% endif %} - - # get configured bed mesh area - {% set min_x = mesh_config.mesh_min.split(",")[0]|float - x_offset %} - {% set min_y = mesh_config.mesh_min.split(",")[1]|float - y_offset %} - {% set max_x = mesh_config.mesh_max.split(",")[0]|float - x_offset %} - {% set max_y = mesh_config.mesh_max.split(",")[1]|float - y_offset %} - - # make sure probe coordinates lie within the configured mesh area - {% set x_start = [[x_start, max_x]|min, min_x]|max %} - {% set y_start = [[y_start, max_y]|min, min_y]|max %} - - RESPOND MSG="PROBE_FOR_PRIMING: Probing the prime location at X: {x_start} Y: {y_start}" - - # Absolute positioning - G90 - # Relative extrusion - M83 - # Lift to horizontal_move_z - G0 Z{z} F{z_speed} - # move close to blob position - G1 X{x_start} Y{y_start} F{speed} - PROBE_CURRENT_POSITION - SAVE_PROBE_RESULT VARIABLE=probe_for_priming_result - - RESTORE_GCODE_STATE NAME=probe_for_priming_state - {% endif %} - -[gcode_macro RESET_PRIME_PROBE_STATE] -gcode: - SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=probe_for_priming_result VALUE=None - -[gcode_macro PROBE_CURRENT_POSITION] -gcode: - SAVE_GCODE_STATE NAME=probe_current_position_state - PROBE - RESTORE_GCODE_STATE NAME=probe_current_position_state MOVE=1 MOVE_SPEED={printer["gcode_macro RatOS"].macro_z_speed|float} - -[gcode_macro ADD_PRIME_PROBE_TO_OFFSET] -gcode: - {% set last_z = printer["gcode_macro RatOS"].probe_for_priming_result|float(9999.9) %} - {% if printer.configfile.settings.bltouch is defined %} - {% set z_offset = printer.configfile.settings.bltouch.z_offset|float %} - {% elif printer.configfile.settings.probe is defined %} - {% set z_offset = printer.configfile.settings.probe.z_offset|float %} - {% else %} - { action_raise_error("No probe or bltouch section found. Adaptive priming only works with [probe] or [bltouch].") } - {% endif %} - {% if last_z == 9999.9 %} - { action_raise_error("No probe result found for prime area. This is likely a bug.") } - {% endif %} - {% set adjustment = last_z - z_offset %} - {% set adjustment_threshold = printer["gcode_macro RatOS"].adaptive_prime_offset_threshold|float %} - {% if adjustment < adjustment_threshold %} - { action_raise_error("Abnormal probe offset detected. Needed offset of {adjustment} is below the offset threshold of -1mm. Please verify the probe is over the bed when probing for priming. If it isn't, you should adjust you min/max bed_mesh settings so the probe is always over the print area.") } - {% endif %} - RESPOND MSG="ADD_PRIME_PROBE_TO_OFFSET: adjusting z offset by {adjustment}" - SET_GCODE_OFFSET Z_ADJUST={adjustment} MOVE=1 - -[gcode_macro SUBTRACT_PRIME_PROBE_FROM_OFFSET] -gcode: - {% set last_z = printer["gcode_macro RatOS"].probe_for_priming_result|float(9999.9) %} - {% if printer.configfile.settings.bltouch is defined %} - {% set z_offset = printer.configfile.settings.bltouch.z_offset|float %} - {% elif printer.configfile.settings.probe is defined %} - {% set z_offset = printer.configfile.settings.probe.z_offset|float %} - {% else %} - { action_raise_error("No probe or bltouch section found. Adaptive priming only works with [probe] or [bltouch].") } - {% endif %} - {% if last_z == 9999.9 %} - { action_raise_error("No probe result found for prime area. This is likely a bug.") } - {% endif %} - RESPOND MSG="SUBTRACT_PRIME_PROBE_FROM_OFFSET: adjusting z offset by {z_offset - last_z}" - SET_GCODE_OFFSET Z_ADJUST={z_offset - last_z} MOVE=1 - -[gcode_macro beep] -gcode: - SET_PIN PIN=_Beeper VALUE=1 # в завершающем коде слайсера напиши в конце beep - G4 P5000 # и тогда после окончания печати он тебе пикнет 4 раза. это 5 секунд работы, - SET_PIN PIN=_Beeper VALUE=0 # если хочется побольше то вместо 5000 поставь например 10000 будет пищать 10 секунд можно также вставить на замену филамента. на начало печати. - -[gcode_macro PID_E] -gcode: - {% set T = params.T|default(240) %} - PID_CALIBRATE HEATER=extruder TARGET={T} - -[gcode_macro PID_B] -gcode: - {% set T = params.T|default(80) %} - PID_CALIBRATE HEATER=heater_bed TARGET={T} - -[gcode_macro M106] -rename_existing: G106 -gcode: - {% if params.P is defined %} - {% if params.P|int == 2 %} - {% if params.S is defined %} - {% if params.S|int == 255 %} - {% set realspeed = 1 %} - {% else %} - {% if params.S|int == 0 %} - {% set realspeed = 0 %} - {% else %} - {% set realspeed = params.S|float/255 %} - {% endif %} - {% endif %} - {% else %} - {% set realspeed = 1 %} - {% endif %} - - SET_FAN_SPEED FAN=Aux_Fan SPEED={realspeed} - {% endif %} - {% if params.P|int == 1 %} - {% if params.S is defined %} - {% if params.S|int == 255 %} - {% set realspeed = 1 %} - {% else %} - {% if params.S|int == 0 %} - {% set realspeed = 0 %} - {% else %} - {% set realspeed = params.S|float/255 %} - {% endif %} - {% endif %} - {% else %} - {% set realspeed = 1 %} - {% endif %} - - SET_FAN_SPEED FAN=Exhaust_fan SPEED={realspeed} - {% endif %} - {% else %} - {% if params.S is defined %} - G106 S{params.S} - {% else %} - G106 S255 - {% endif %} - {% endif %} - -[gcode_macro M107] -rename_existing: G107 -gcode: - {% if params.P is defined %} - {% if params.P|int == 2 %} - SET_FAN_SPEED FAN=Aux_Fan SPEED=0 - {% endif %} - {% else %} - SET_FAN_SPEED FAN=Aux_Fan SPEED=0 - G107 + +[gcode_macro PAUSE] +description: Pauses the printer +rename_existing: PAUSE_BASE +variable_extrude: 1.5 +gcode: + SAVE_GCODE_STATE NAME=PAUSE_state + # Define park positions + {% set E = printer["gcode_macro PAUSE"].extrude|float %} + {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} + {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} + # Calculate safe Z position + {% set max_z = printer.toolhead.axis_maximum.z|float %} + {% set act_z = printer.toolhead.position.z|float %} + {% if act_z < (max_z - 20.0) %} + {% set z_safe = 20.0 %} + {% else %} + {% set z_safe = max_z - act_z %} + {% endif %} + PAUSE_BASE + G91 + # Retract + {% if printer.extruder.can_extrude|lower == 'true' %} + G1 E-{E} F2100 + {% else %} + {action_respond_info("Extruder not hot enough")} + {% endif %} + # Move to park position + {% if "xyz" in printer.toolhead.homed_axes %} + G1 Z{z_safe} F{z_speed} + _PARK LOCATION={printer["gcode_macro RatOS"].pause_print_park_in} X={printer["gcode_macro RatOS"].pause_print_park_x} + {% else %} + {action_respond_info("Printer not homed")} + {% endif %} + {% if printer["gcode_macro RatOS"].tgbot_enabled|lower == 'true' %} + RESPOND PREFIX=tgnotify MSG="Принтер встал на паузу" + {% endif %} + {% if printer["gcode_macro RatOS"].beep_enabled|lower == 'true' %} + beep + {% endif %} + + +[gcode_macro RESUME] +description: Resumes the print if the printer is paused. +rename_existing: RESUME_BASE +gcode: + {% set E = printer["gcode_macro PAUSE"].extrude|float %} + # Prime + {% if printer.extruder.can_extrude|lower == 'true' %} + G91 + G1 E{E} F2100 + G90 + {% else %} + {action_respond_info("Extruder not hot enough")} + {% endif %} + RESTORE_GCODE_STATE NAME=PAUSE_state MOVE=1 MOVE_SPEED={printer["gcode_macro RatOS"].macro_travel_speed|float} + RESUME_BASE + {% if printer["gcode_macro RatOS"].tgbot_enabled|lower == 'true' %} + RESPOND PREFIX=tgnotify MSG="Принтер продолжил после паузы" + {% endif %} + +[gcode_macro CANCEL_PRINT] +description: Cancels the printer +rename_existing: CANCEL_PRINT_BASE +gcode: + END_PRINT + TURN_OFF_HEATERS + CLEAR_PAUSE + #SDCARD_RESET_FILE + CANCEL_PRINT_BASE + {% if printer["gcode_macro RatOS"].tgbot_enabled|lower == 'true' %} + RESPOND PREFIX=tgnotify MSG="Отмена печати" + {% endif %} + + +[gcode_macro PRIME_LINE] +description: Prints a primeline, used internally, if configured, as part of the START_PRINT macro. +gcode: + SAVE_GCODE_STATE NAME=prime_line_state + {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} + {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} + {% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %} + {% set x_start = 5 %} + {% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %} + {% set x_start = printer.toolhead.axis_maximum.x - 5 %} + {% else %} + {% set x_start = printer["gcode_macro RatOS"].nozzle_prime_start_x|float %} + {% endif %} + {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %} + {% set y_start = 5 %} + {% set y_factor = 1 %} + {% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %} + {% set y_start = printer.toolhead.axis_maximum.y - 5 %} + {% set y_factor = -1 %} + {% else %} + {% set y_start = printer["gcode_macro RatOS"].nozzle_prime_start_y|float %} + {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float < printer.toolhead.axis_maximum.y / 2 %} + {% set y_factor = 1 %} + {% else %} + {% set y_factor = -1 %} + {% endif %} + {% endif %} + {% if printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'forwards' %} + {% set y_factor = 1 %} + {% elif printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'backwards' %} + {% set y_factor = -1 %} + {% endif %} + {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} + # Absolute positioning + G90 + # Absolute extrusion + M82 + M117 Priming nozzle with prime line.. + RESPOND MSG="Priming nozzle with prime line.." + # Lift to start print Z height + G0 Z{z} F{z_speed} + # move to blob position along the edge of the bed + G1 X{x_start} F{speed} + G1 Y{y_start} F{speed} + # Get ready to prime + G1 Z0.3 F{z_speed} + # Reset extrusion distance + G92 E0 + # Prime nozzle + G1 Y{y_start + (70 * y_factor)} E16 F1200 + # Wipe + G1 Y{y_start + (90 * y_factor)} F{speed} + RESTORE_GCODE_STATE NAME=prime_line_state + +[gcode_macro PRIME_BLOB] +description: Prints a primeblob, used internally, if configured, as part of the START_PRINT macro. Slower than PRIME_LINE but much more effective. +gcode: + SAVE_GCODE_STATE NAME=prime_blob_state + M117 Priming nozzle with prime blob.. + RESPOND MSG="Priming nozzle with prime blob.." + {% if printer["gcode_macro RatOS"].filament_encoder_enabled|lower == 'true' %} + SET_FILAMENT_SENSOR SENSOR=encoder_sensor ENABLE=0 + {% endif %} + {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} + {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} + {% set fan_speed = printer["gcode_macro RatOS"].nozzle_prime_bridge_fan|float %} + {% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %} + {% set x_start = 5 %} + {% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %} + {% set x_start = printer.toolhead.axis_maximum.x - 5 %} + {% else %} + {% set x_start = printer["gcode_macro RatOS"].nozzle_prime_start_x|float %} + {% endif %} + {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %} + {% set y_start = 5 %} + {% set y_factor = 1 %} + {% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %} + {% set y_start = printer.toolhead.axis_maximum.y - 5 %} + {% set y_factor = -1 %} + {% else %} + {% set y_start = printer["gcode_macro RatOS"].nozzle_prime_start_y|float %} + {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|float < printer.toolhead.axis_maximum.y / 2 %} + {% set y_factor = 1 %} + {% else %} + {% set y_factor = -1 %} + {% endif %} + {% endif %} + {% if printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'forwards' %} + {% set y_factor = 1 %} + {% elif printer["gcode_macro RatOS"].nozzle_prime_direction|lower == 'backwards' %} + {% set y_factor = -1 %} + {% endif %} + {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} + # Absolute positioning + G90 + # Relative extrusion + M83 + # Lift to start print Z height + G0 Z{z} F{z_speed} + # move close to blob position along the edge of the bed + G1 X{x_start} F{speed} + G1 Y{y_start + (15 * y_factor)} F{speed} + # Lower to blob extrusion height + G1 Z0.5 F{z_speed} + # Move to final position horizontally + G1 Y{y_start} F{speed} + # Extrude a blob + G1 F60 E20 + # 40% fan + M106 S{fan_speed} + # Move the extruder up by 5mm while extruding, breaks away from blob + G1 Z5 F100 E5 + # Move to wipe position, but keep extruding so the wipe is attached to blob + G1 F200 Y{y_start + (25 * y_factor)} E1 + # Go down diagonally while extruding + # Broken down in z moves under 2mm as a workaround for a tuning tower test. + # The tuning tower command thinks a new print has been started when z moves over 2mm and aborts. + G1 F200 Y{y_start + (30 * y_factor)} Z3.8 E0.5 + G1 F200 Y{y_start + (35 * y_factor)} Z2.6 E0.5 + G1 F200 Y{y_start + (40 * y_factor)} Z1.4 E0.5 + G1 F200 Y{y_start + (45 * y_factor)} Z0.2 E0.5 + # 0% fan + M106 S0 + # small wipe line + G1 F200 Y{y_start + (50 * y_factor)} Z0.2 E0.6 + # Break away wipe + G1 F{speed} Y{y_start + (100 * y_factor)} + {% if printer["gcode_macro RatOS"].filament_encoder_enabled|lower == 'true' %} + SET_FILAMENT_SENSOR SENSOR=encoder_sensor ENABLE=1 + {% endif %} + RESTORE_GCODE_STATE NAME=prime_blob_state + + +[gcode_macro _PARK] +gcode: + {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} + # Get X position + {% if params.X != '' %} + {% if params.X|float >= printer.toolhead.axis_minimum.x + 5 and params.X|float <= printer.toolhead.axis_maximum.x - 5 %} + {% set safe_x = params.X|float %} + {% else %} + {action_respond_info('The requested X co-ordinate is outside the defined axis bounds - using defaults')} + {% set safe_x = printer.toolhead.axis_maximum.x / 2 %} + {% endif %} + {% else %} + {% set safe_x = printer.toolhead.axis_maximum.x / 2 %} + #{% set safe_x = printer.toolhead.axis_maximum.x / 2 %} + {% endif %} + # Get Y position + {% if params.LOCATION|default('back')|lower == 'back' %} + {% set y = printer.toolhead.axis_maximum.y - 5 %} + {% elif params.LOCATION|lower == 'front' %} + {% set y = printer.toolhead.axis_minimum.y + 5 %} + {% elif params.LOCATION|lower == 'center' %} + {% set y = printer.toolhead.axis_maximum.y / 2 %} + {% endif %} + # Absolute positioning + G90 + # Park + G0 X{safe_x} Y{y} F{speed} + +##### +# COLOR CHANGE +##### +[gcode_macro M600] +description: Executes a color change by pausing the printer an unloading the filament. +gcode: + PAUSE + UNLOAD_FILAMENT + M117 Please load new filament and resume + RESPOND MSG="Please load new filament and resume" + {% if printer["gcode_macro RatOS"].tgbot_enabled|lower == 'true' %} + RESPOND PREFIX=tgnotify MSG="Требуется замена филамента" + {% endif %} + {% if printer["gcode_macro RatOS"].beep_enabled|lower == 'true' %} + beep + {% endif %} + + +##### +# FILAMENT MANAGEMENT +##### + +[gcode_macro UNLOAD_FILAMENT] +description: Unloads the filament. Note: be careful with PETG, make sure you inspect the tip of your filament before reloading to avoid jams. +gcode: + SAVE_GCODE_STATE NAME=unload_state + G91 + {% if params.TEMP is defined or printer.extruder.can_extrude|lower == 'false' %} + M117 Heating... + # Heat up hotend to provided temp or 220 as default as that should work OK with most filaments. + M104 S{params.TEMP|default(220, true)} + TEMPERATURE_WAIT SENSOR=extruder MINIMUM={params.TEMP|default(220, true)} + {% endif %} + {% set unload_speed = printer["gcode_macro RatOS"].filament_unload_speed|float * 60 %} + {% set unload_length = printer["gcode_macro RatOS"].filament_unload_length|float %} + M117 Unloading filament... + # Extrude a bit + G0 E10 F300 + # Extract filament to cold end area + G0 E-5 F3600 + # Wait for three seconds + G4 P3000 + # Push back the filament to smash any stringing + G0 E5 F3600 + # Extract back fast in to the cold zone + G0 E-15 F3600 + # Continue extraction slowly, allow the filament time to cool solid before it reaches the gears + G0 E-{unload_length} F{unload_speed} + M117 Filament unloaded! + RESPOND MSG="Filament unloaded! Please inspect the tip of the filament before reloading." + RESTORE_GCODE_STATE NAME=unload_state + +[gcode_macro LOAD_FILAMENT] +description: Loads new filament. Note: be careful with PETG, make sure you inspect the tip of your filament before loading to avoid jams. +gcode: + SAVE_GCODE_STATE NAME=load_state + G91 + # Heat up hotend to provided temp or 220 as default as that should work OK with most filaments. + {% if params.TEMP is defined or printer.extruder.can_extrude|lower == 'false' %} + FORCE_MOVE STEPPER=extruder DISTANCE=15 VELOCITY=10 ACCEL=1000 + M117 Heating... + M104 S{params.TEMP|default(230, true)} + TEMPERATURE_WAIT SENSOR=extruder MINIMUM={params.TEMP|default(230, true)} + {% endif %} + {% set load_speed = printer["gcode_macro RatOS"].filament_load_speed|float * 60 %} + {% set load_length = printer["gcode_macro RatOS"].filament_load_length|float %} + {% set load_second_speed = printer["gcode_macro RatOS"].filament_load_second_speed|float * 60 %} + {% set load_second_length = printer["gcode_macro RatOS"].filament_load_second_length|float %} + + M117 Loading filament... + # Load the filament into the hotend area. + G0 E{load_length} F{load_speed} + # Wait a secod + G4 P1000 + # Purge + G0 E{load_second_length} F{load_second_speed} + #G0 E40 F100 + # Wait for purge to complete + M400 + M117 Filament loaded! + RESPOND MSG="Filament loaded!" + RESTORE_GCODE_STATE NAME=load_state + +[gcode_macro SET_CENTER_KINEMATIC_POSITION] +description: FOR DEBUGGING PURPOSES ONLY. Sets the internal printer kinematic state to the center of all axes regardless of actual physical position. +gcode: + RESPOND MSG="WARNING: ONLY USE SET_CENTER_KINEMATIC_POSITION FOR DEBUGGING PURPOSES. YOU'RE OVERRIDING THE INTERNAL POSITIONING STATE OF THE PRINTER. PROCEED WITH CAUTION AND DO A PROPER G28 WHEN DONE." + SET_GCODE_VARIABLE MACRO=MAYBE_HOME VARIABLE=is_kinematic_position_overriden VALUE=True + SET_KINEMATIC_POSITION X={printer.toolhead.axis_maximum.x / 2} Y={printer.toolhead.axis_maximum.y / 2} Z={printer.toolhead.axis_maximum.z / 2} + +[gcode_macro MAYBE_HOME] +description: Only home unhomed axis +variable_is_kinematic_position_overriden: False +gcode: + {% if printer["gcode_macro MAYBE_HOME"].is_kinematic_position_overriden|lower == 'true' %} + RESPOND MSG="SET_CENTER_KINEMATIC_POSITION has been abused. Homing all axes. Please refrain from using SET_CENTER_KINEMATIC_POSITION outside of debugging purposes." + G28 + SET_GCODE_VARIABLE MACRO=MAYBE_HOME VARIABLE=is_kinematic_position_overriden VALUE=False + {% else %} + {% set axes = '' %} + {% set isHomed = true %} + {% set axesToHome = '' %} + {% if params.X is defined %} + {% set axes = axes ~ 'X ' %} + {% if 'x' not in printer.toolhead.homed_axes %} + {% set isHomed = false %} + {% set axesToHome = axesToHome ~ 'X ' %} + {% endif %} + {% endif %} + {% if params.Y is defined %} + {% set axes = axes ~ 'Y ' %} + {% if 'y' not in printer.toolhead.homed_axes %} + {% set isHomed = false %} + {% set axesToHome = axesToHome ~ 'Y ' %} + {% endif %} + {% endif %} + {% if params.Z is defined %} + {% set axes = axes ~ 'Z ' %} + {% if 'z' not in printer.toolhead.homed_axes %} + {% set isHomed = false %} + {% set axesToHome = axesToHome ~ 'Z ' %} + {% endif %} + {% endif %} + {% if params.X is not defined and params.Y is not defined and params.Z is not defined %} + {% set axes = '' %} + {% if 'x' not in printer.toolhead.homed_axes %} + {% set isHomed = false %} + {% set axesToHome = axesToHome ~ 'X ' %} + {% endif %} + {% if 'y' not in printer.toolhead.homed_axes %} + {% set isHomed = false %} + {% set axesToHome = axesToHome ~ 'Y ' %} + {% endif %} + {% if 'z' not in printer.toolhead.homed_axes %} + {% set isHomed = false %} + {% set axesToHome = axesToHome ~ 'Z ' %} + {% endif %} + {% endif %} + {% if isHomed is false %} + M117 Homing {axesToHome} + RESPOND MSG="Homing {axesToHome}" + G28 {axesToHome} + {% else %} + RESPOND MSG="All requested axes already homed, skipping.." + {% endif %} + {% endif %} + + +##### +# START PRINT MACROS +# Call this from your slicer (custom g-code). +# Read more here: https://rat-rig.github.io/V-CoreOS/#/slicers +##### + +[gcode_macro START_PRINT] +description: Start print procedure, use this in your Slicer. +gcode: + CLEAR_PAUSE + {% if printer["gcode_macro RatOS"].force_absolute_position|lower == 'true' %} + G90 + {% endif %} + SAVE_GCODE_STATE NAME=start_print_state + # Metric values + G21 + # Absolute positioning + G90 + # Set extruder to absolute mode + M82 + _USER_START_PRINT_BEFORE_HOMING + # Home if needed + MAYBE_HOME + {% if params.CHAMBER_TEMP is defined %} + _START_PRINT_HEAT_CHAMBER CHAMBER_TEMP={params.CHAMBER_TEMP} BED_TEMP={printer["gcode_macro RatOS"].start_print_heat_chamber_bed_temp} + _USER_START_PRINT_HEAT_CHAMBER CHAMBER_TEMP={params.CHAMBER_TEMP} BED_TEMP={printer["gcode_macro RatOS"].start_print_heat_chamber_bed_temp} + {% endif %} + {% if printer["gcode_macro RatOS"].awd_sync_enabled|lower == 'true' %} + M117 Motor sync... + RESPOND MSG="Motor sync..." + {% if not printer.motors_sync.applied %} + SYNC_MOTORS + {% endif %} + { endif %} + + M117 Heating bed... + RESPOND MSG="Heating bed..." + # Wait for bed to heat up + M190 S{params.BED_TEMP|default(printer.heater_bed.target, true) } + # Run the user created "AFTER_HEATING_BED" macro + _USER_START_PRINT_AFTER_HEATING_BED + # Run the customizable "AFTER_HEATING_BED" macro. + _START_PRINT_AFTER_HEATING_BED + # Run the user created "START_PRINT_BED_MESH" macro + _USER_START_PRINT_BED_MESH + # Run the customizable "BED_MESH" macro + _START_PRINT_BED_MESH X0={params.X0} X1={params.X1} Y0={params.Y0} Y1={params.Y1} + # Start heating extruder + M104 S{params.EXTRUDER_TEMP|default(printer.extruder.target, true) } + # Run the users "PARK" macro + _USER_START_PRINT_PARK + # Run the customizable "PARK" macro + _START_PRINT_PARK + # Wait for extruder to heat up + M117 Heating Extruder... + RESPOND MSG="Heating Extruder..." + M109 S{params.EXTRUDER_TEMP|default(printer.extruder.target, true) } + # Run the user created "AFTER_HEATING_EXTRUDER" macro. + _USER_START_PRINT_AFTER_HEATING_EXTRUDER + # Run the customizable "AFTER_HEATING_EXTRUDER" macro. + _START_PRINT_AFTER_HEATING_EXTRUDER + M117 Printing... + RESPOND MSG="Printing..." + RESTORE_GCODE_STATE NAME=start_print_state + # Set extrusion mode based on user configuration + {% if printer["gcode_macro RatOS"].relative_extrusion|lower == 'true' %} + M83 + {% else %} + M82 + {% endif %} + G92 E0 + +##### +# START PRINT MACRO HOOKS +# You can copy these to printer.cfg and modify them to your liking, or just use them as is. +#### + +[gcode_macro _USER_START_PRINT_BEFORE_HOMING] +gcode: + +[gcode_macro _START_PRINT_AFTER_HEATING_BED] +gcode: + {% if printer["gcode_macro RatOS"].preheat_extruder|lower == 'true' %} + {% set min_temp = printer["gcode_macro RatOS"].preheat_extruder_temp|float %} + {% set max_temp = printer["gcode_macro RatOS"].preheat_extruder_temp|float + 5 %} + M117 Pre-heating extruder... + RESPOND MSG="Pre-heating extruder..." + # Wait for extruder to reach a predefined preheat temp so an inductive probe (if present) is at a predictable temp. + # Also allows the bed heat to spread a little, and softens any plastic that might be stuck to the nozzle. + M104 S{min_temp} + TEMPERATURE_WAIT SENSOR=extruder MINIMUM={min_temp} MAXIMUM={max_temp} + {% endif %} + {% if printer["gcode_macro RatOS"].variable_z_tilt_enabled|lower == 'true' %} + {% set TARGET_TEMP = printer.heater_bed.target %} + {% if printer["gcode_macro RatOS"].variable_high_power_bed|lower == 'true' %} + M140 S0 + {% endif %} + M117 Adjusting Z tilt... + RESPOND MSG="Adjusting Z tilt..." + # Adjust bed tilt + SAVE_GCODE_STATE NAME=STATE_Z_TILT + BED_MESH_CLEAR + {% if not printer.z_tilt.applied %} + Z_TILT_ADJUST horizontal_move_z=10 retry_tolerance=1 + {% endif %} + Z_TILT_ADJUST horizontal_move_z=2 + RESTORE_GCODE_STATE NAME=STATE_Z_TILT + + M190 S{TARGET_TEMP} + + M117 Rehoming Z after Z tilt adjustment... + RESPOND MSG="Rehoming Z after Z tilt adjustment..." + # Home again as Z will have changed after tilt adjustment and bed heating. + G28 Z + {% endif %} + + +[gcode_macro _USER_START_PRINT_AFTER_HEATING_BED] +gcode: + +[gcode_macro _START_PRINT_BED_MESH] +gcode: + {% set default_profile = printer["gcode_macro RatOS"].bed_mesh_profile|default('ratos') %} + {% if printer["gcode_macro RatOS"].calibrate_bed_mesh|lower == 'true' %} + BED_MESH_CLEAR + {% set TARGET_TEMP = printer.heater_bed.target %} + {% if printer["gcode_macro RatOS"].variable_high_power_bed|lower == 'true' %} + M140 S0 + {% endif %} + {% if printer["gcode_macro RatOS"].adaptive_mesh|lower == 'true' %} + ADAPTIVE_BED_MESH FORCE_MESH=1 + {% else %} + BED_MESH_CALIBRATE PROFILE={default_profile} + BED_MESH_PROFILE LOAD={default_profile} + {% endif %} + {% if printer["gcode_macro RatOS"].touch_cart_enabled|lower == 'true' %} + CARTOGRAPHER_TOUCH ; Perform touch probe + {% endif %} + M190 S{TARGET_TEMP} + {% elif printer["gcode_macro RatOS"].bed_mesh_profile is defined %} + BED_MESH_CLEAR + BED_MESH_PROFILE LOAD={printer["gcode_macro RatOS"].bed_mesh_profile} + {% endif %} + +[gcode_macro _USER_START_PRINT_BED_MESH] +gcode: + +[gcode_macro _START_PRINT_PARK] +gcode: + {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} + {% set zSpeed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} + _PARK LOCATION={printer["gcode_macro RatOS"].start_print_park_in} X={printer["gcode_macro RatOS"].start_print_park_x} + G0 Z{z} F{zSpeed} + +[gcode_macro _USER_START_PRINT_PARK] +gcode: + +[gcode_macro _START_PRINT_AFTER_HEATING_EXTRUDER] +gcode: + {% set has_offset = printer["gcode_macro RatOS"].probe_for_priming_result|float(9999.9) != 9999.9 %} + {% if has_offset %} + ADD_PRIME_PROBE_TO_OFFSET + {% endif %} + {% if printer["gcode_macro RatOS"].nozzle_priming|lower == 'primeline' %} + PRIME_LINE + {% endif %} + {% if printer["gcode_macro RatOS"].nozzle_priming|lower == 'primeblob' %} + PRIME_BLOB + {% endif %} + {% if has_offset %} + SUBTRACT_PRIME_PROBE_FROM_OFFSET + {% endif %} + {% if printer["gcode_macro RatOS"].skew_profile is defined %} + SKEW_PROFILE LOAD={printer["gcode_macro RatOS"].skew_profile} + {% endif %} + +[gcode_macro _USER_START_PRINT_AFTER_HEATING_EXTRUDER] +gcode: + +[gcode_macro _START_PRINT_HEAT_CHAMBER] +description: Uses the extruder sensor to wait for chamber temp. Override the _START_PRINT_HEAT_CHAMBER macro to implement heated chamber handling. +gcode: + {% if params.CHAMBER_TEMP is defined and params.BED_TEMP is defined and params.CHAMBER_TEMP|int > 0 %} + {% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %} + {% set zSpeed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} + G0 Z{z} F{zSpeed} + M84 + M117 Heating chamber... + RESPOND MSG="Heating chamber..." + M140 S{params.BED_TEMP} + TEMPERATURE_WAIT SENSOR=extruder MINIMUM={params.CHAMBER_TEMP} + MAYBE_HOME + {% endif %} + +[gcode_macro _USER_START_PRINT_HEAT_CHAMBER] +description: Uses the extruder sensor to wait for chamber temp. Override the _START_PRINT_HEAT_CHAMBER macro to implement heated chamber handling. +gcode: + +##### +# END PRINT MACROS +# Call this from your slicer (custom g-code). +# Read more here: https://rat-rig.github.io/V-CoreOS/#/slicers +##### + +# The end_print macro is also called from CANCEL_PRINT. +[gcode_macro END_PRINT] +description: End print procedure, use this in your Slicer. +gcode: + SAVE_GCODE_STATE NAME=end_print_state + _USER_END_PRINT_BEFORE_HEATERS_OFF + _END_PRINT_BEFORE_HEATERS_OFF + TURN_OFF_HEATERS + _USER_END_PRINT_AFTER_HEATERS_OFF + _END_PRINT_AFTER_HEATERS_OFF + _USER_END_PRINT_PARK + _END_PRINT_PARK + # Clear skew profile if any was loaded. + {% if printer["gcode_macro RatOS"].skew_profile is defined %} + SET_SKEW CLEAR=1 + {% endif %} + # Steppers off + M84 + # Part cooling fan off + M107 + # Clear bed mesh so that G28 doesn't fail. + BED_MESH_CLEAR + M117 Done :) + RESPOND MSG="Done :)" + RESTORE_GCODE_STATE NAME=end_print_state + {% if printer["gcode_macro RatOS"].tgbot_enabled|lower == 'true' %} + RESPOND PREFIX=tgnotify MSG="Допечатато! =)" + {% endif %} + {% if printer["gcode_macro RatOS"].beep_enabled|lower == 'true' %} + beep + {% endif %} + + +##### +# END PRINT MACRO HOOKS +# You can copy these to printer.cfg and modify them to your liking, or just use them as is. +#### + +[gcode_macro _END_PRINT_BEFORE_HEATERS_OFF] +gcode: + RESPOND MSG="Cleaning up..." + + +[gcode_macro _USER_END_PRINT_BEFORE_HEATERS_OFF] +gcode: + +[gcode_macro _END_PRINT_AFTER_HEATERS_OFF] +gcode: + # Calculate safe Z position + {% set max_z = printer.toolhead.axis_maximum.z|float %} + {% set act_z = printer.toolhead.position.z|float %} + {% set z_hop = printer["gcode_macro RatOS"].end_print_park_z_hop|float %} + {% if act_z < (max_z - z_hop) %} + {% set z_safe = z_hop %} + {% else %} + {% set z_safe = max_z - act_z %} + {% endif %} + # Relative positioning + G91 + # Retract the filament a bit before lifting the nozzle. + G1 E-2 F3600 + # Move to safe Z position + G0 Z{z_safe} F3600 + # Retract filament even more + G1 E-2 F3600 + # Back to absolute positioning + G90 + +[gcode_macro _USER_END_PRINT_AFTER_HEATERS_OFF] +gcode: + +[gcode_macro _END_PRINT_PARK] +gcode: + _PARK LOCATION={printer["gcode_macro RatOS"].end_print_park_in} X={printer["gcode_macro RatOS"].end_print_park_x} + +[gcode_macro _USER_END_PRINT_PARK] +gcode: + +##### +# MESH MACROS +#### + +[gcode_macro SAVE_PROBE_RESULT] +gcode: + {% set last_z = printer.probe.last_z_result %} + SET_GCODE_VARIABLE MACRO=RatOS VARIABLE={params.VARIABLE|default('last_z')} VALUE={last_z} + +[gcode_macro PROBE_FOR_PRIMING] +gcode: + {% if printer["gcode_macro RatOS"].nozzle_priming|lower != 'false' %} + SAVE_GCODE_STATE NAME=probe_for_priming_state + RESPOND MSG="Probing the prime location.." + {% set speed = printer["gcode_macro RatOS"].macro_travel_speed|float * 60 %} + {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} + {% if printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'min' %} + {% set x_start = 5 %} + {% elif printer["gcode_macro RatOS"].nozzle_prime_start_x|lower == 'max' %} + {% set x_start = printer.toolhead.axis_maximum.x - 5 %} + {% else %} + {% set x_start = printer["gcode_macro RatOS"].nozzle_prime_start_x|float %} + {% endif %} + {% if printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'min' %} + {% set y_start = 5 %} + {% elif printer["gcode_macro RatOS"].nozzle_prime_start_y|lower == 'max' %} + {% set y_start = printer.toolhead.axis_maximum.y - 5 %} + {% else %} + {% set y_start = printer["gcode_macro RatOS"].nozzle_prime_start_y|float %} + {% endif %} + {% set z = printer.configfile.settings.bed_mesh.horizontal_move_z|float %} + # get bed mesh config object + {% set mesh_config = printer.configfile.config.bed_mesh %} + + # Get probe offsets + {% if printer.configfile.settings.bltouch is defined %} + {% set x_offset = printer.configfile.settings.bltouch.x_offset|float %} + {% set y_offset = printer.configfile.settings.bltouch.y_offset|float %} + {% elif printer.configfile.settings.probe is defined %} + {% set x_offset = printer.configfile.settings.probe.x_offset|float %} + {% set y_offset = printer.configfile.settings.probe.y_offset|float %} + {% elif printer.configfile.settings.beacon is defined %} + {% set x_offset = printer.configfile.settings.beacon.x_offset|float %} + {% set y_offset = printer.configfile.settings.beacon.y_offset|float %} + {% else %} + { action_raise_error("No probe or bltouch section found. Adaptive priming only works with [probe] or [bltouch].") } + {% endif %} + + # get configured bed mesh area + {% set min_x = mesh_config.mesh_min.split(",")[0]|float - x_offset %} + {% set min_y = mesh_config.mesh_min.split(",")[1]|float - y_offset %} + {% set max_x = mesh_config.mesh_max.split(",")[0]|float - x_offset %} + {% set max_y = mesh_config.mesh_max.split(",")[1]|float - y_offset %} + + # make sure probe coordinates lie within the configured mesh area + {% set x_start = [[x_start, max_x]|min, min_x]|max %} + {% set y_start = [[y_start, max_y]|min, min_y]|max %} + + RESPOND MSG="PROBE_FOR_PRIMING: Probing the prime location at X: {x_start} Y: {y_start}" + + # Absolute positioning + G90 + # Relative extrusion + M83 + # Lift to horizontal_move_z + G0 Z{z} F{z_speed} + # move close to blob position + G1 X{x_start} Y{y_start} F{speed} + PROBE_CURRENT_POSITION + SAVE_PROBE_RESULT VARIABLE=probe_for_priming_result + + RESTORE_GCODE_STATE NAME=probe_for_priming_state + {% endif %} + +[gcode_macro RESET_PRIME_PROBE_STATE] +gcode: + SET_GCODE_VARIABLE MACRO=RatOS VARIABLE=probe_for_priming_result VALUE=None + +[gcode_macro PROBE_CURRENT_POSITION] +gcode: + SAVE_GCODE_STATE NAME=probe_current_position_state + PROBE + RESTORE_GCODE_STATE NAME=probe_current_position_state MOVE=1 MOVE_SPEED={printer["gcode_macro RatOS"].macro_z_speed|float} + +[gcode_macro ADD_PRIME_PROBE_TO_OFFSET] +gcode: + {% set last_z = printer["gcode_macro RatOS"].probe_for_priming_result|float(9999.9) %} + {% if printer.configfile.settings.bltouch is defined %} + {% set z_offset = printer.configfile.settings.bltouch.z_offset|float %} + {% elif printer.configfile.settings.probe is defined %} + {% set z_offset = printer.configfile.settings.probe.z_offset|float %} + {% else %} + { action_raise_error("No probe or bltouch section found. Adaptive priming only works with [probe] or [bltouch].") } + {% endif %} + {% if last_z == 9999.9 %} + { action_raise_error("No probe result found for prime area. This is likely a bug.") } + {% endif %} + {% set adjustment = last_z - z_offset %} + {% set adjustment_threshold = printer["gcode_macro RatOS"].adaptive_prime_offset_threshold|float %} + {% if adjustment < adjustment_threshold %} + { action_raise_error("Abnormal probe offset detected. Needed offset of {adjustment} is below the offset threshold of -1mm. Please verify the probe is over the bed when probing for priming. If it isn't, you should adjust you min/max bed_mesh settings so the probe is always over the print area.") } + {% endif %} + RESPOND MSG="ADD_PRIME_PROBE_TO_OFFSET: adjusting z offset by {adjustment}" + SET_GCODE_OFFSET Z_ADJUST={adjustment} MOVE=1 + +[gcode_macro SUBTRACT_PRIME_PROBE_FROM_OFFSET] +gcode: + {% set last_z = printer["gcode_macro RatOS"].probe_for_priming_result|float(9999.9) %} + {% if printer.configfile.settings.bltouch is defined %} + {% set z_offset = printer.configfile.settings.bltouch.z_offset|float %} + {% elif printer.configfile.settings.probe is defined %} + {% set z_offset = printer.configfile.settings.probe.z_offset|float %} + {% else %} + { action_raise_error("No probe or bltouch section found. Adaptive priming only works with [probe] or [bltouch].") } + {% endif %} + {% if last_z == 9999.9 %} + { action_raise_error("No probe result found for prime area. This is likely a bug.") } + {% endif %} + RESPOND MSG="SUBTRACT_PRIME_PROBE_FROM_OFFSET: adjusting z offset by {z_offset - last_z}" + SET_GCODE_OFFSET Z_ADJUST={z_offset - last_z} MOVE=1 + +[gcode_macro beep] +gcode: + SET_PIN PIN=_Beeper VALUE=1 # в завершающем коде слайсера напиши в конце beep + G4 P5000 # и тогда после окончания печати он тебе пикнет 4 раза. это 5 секунд работы, + SET_PIN PIN=_Beeper VALUE=0 # если хочется побольше то вместо 5000 поставь например 10000 будет пищать 10 секунд можно также вставить на замену филамента. на начало печати. + +[gcode_macro PID_E] +gcode: + {% set T = params.T|default(240) %} + PID_CALIBRATE HEATER=extruder TARGET={T} + +[gcode_macro PID_B] +gcode: + {% set T = params.T|default(80) %} + PID_CALIBRATE HEATER=heater_bed TARGET={T} + +[gcode_macro M106] +rename_existing: G106 +gcode: + {% if params.P is defined %} + {% if params.P|int == 2 %} + {% if params.S is defined %} + {% if params.S|int == 255 %} + {% set realspeed = 1 %} + {% else %} + {% if params.S|int == 0 %} + {% set realspeed = 0 %} + {% else %} + {% set realspeed = params.S|float/255 %} + {% endif %} + {% endif %} + {% else %} + {% set realspeed = 1 %} + {% endif %} + + SET_FAN_SPEED FAN=Aux_Fan SPEED={realspeed} + {% endif %} + {% if params.P|int == 1 %} + {% if params.S is defined %} + {% if params.S|int == 255 %} + {% set realspeed = 1 %} + {% else %} + {% if params.S|int == 0 %} + {% set realspeed = 0 %} + {% else %} + {% set realspeed = params.S|float/255 %} + {% endif %} + {% endif %} + {% else %} + {% set realspeed = 1 %} + {% endif %} + + SET_FAN_SPEED FAN=Exhaust_fan SPEED={realspeed} + {% endif %} + {% else %} + {% if params.S is defined %} + G106 S{params.S} + {% else %} + G106 S255 + {% endif %} + {% endif %} + +[gcode_macro M107] +rename_existing: G107 +gcode: + {% if params.P is defined %} + {% if params.P|int == 2 %} + SET_FAN_SPEED FAN=Aux_Fan SPEED=0 + {% endif %} + {% else %} + SET_FAN_SPEED FAN=Aux_Fan SPEED=0 + G107 {% endif %} \ No newline at end of file diff --git a/motor_sync.cfg b/Macros/motor_sync.cfg similarity index 100% rename from motor_sync.cfg rename to Macros/motor_sync.cfg diff --git a/ratrig_z-tilt.cfg b/Macros/ratrig_z-tilt.cfg similarity index 96% rename from ratrig_z-tilt.cfg rename to Macros/ratrig_z-tilt.cfg index 60a23b9..2199cb4 100644 --- a/ratrig_z-tilt.cfg +++ b/Macros/ratrig_z-tilt.cfg @@ -1,19 +1,19 @@ -[gcode_macro Z_TILT_ADJUST] -rename_existing: Z_TILT_ADJUST_ORIG -gcode: - {% if printer["gcode_macro RatOS"].z_probe == 'stowable' %} - DEPLOY_PROBE - {% endif %} - SAVE_GCODE_STATE NAME=STATE_Z_TILT - BED_MESH_CLEAR - {% if not printer.z_tilt.applied %} - Z_TILT_ADJUST_ORIG horizontal_move_z=10 retry_tolerance=1 - {% endif %} - Z_TILT_ADJUST_ORIG horizontal_move_z=2 - RESTORE_GCODE_STATE NAME=STATE_Z_TILT - - - {% if printer["gcode_macro RatOS"].z_probe == 'stowable' %} - STOW_PROBE - {% endif %} - +[gcode_macro Z_TILT_ADJUST] +rename_existing: Z_TILT_ADJUST_ORIG +gcode: + {% if printer["gcode_macro RatOS"].z_probe == 'stowable' %} + DEPLOY_PROBE + {% endif %} + SAVE_GCODE_STATE NAME=STATE_Z_TILT + BED_MESH_CLEAR + {% if not printer.z_tilt.applied %} + Z_TILT_ADJUST_ORIG horizontal_move_z=10 retry_tolerance=1 + {% endif %} + Z_TILT_ADJUST_ORIG horizontal_move_z=2 + RESTORE_GCODE_STATE NAME=STATE_Z_TILT + + + {% if printer["gcode_macro RatOS"].z_probe == 'stowable' %} + STOW_PROBE + {% endif %} + diff --git a/variables.cfg b/macros_variables.cfg similarity index 97% rename from variables.cfg rename to macros_variables.cfg index e2ff6d9..ebb0b4b 100644 --- a/variables.cfg +++ b/macros_variables.cfg @@ -1,61 +1,61 @@ -[gcode_macro ECHO_RATOS_VARS] -description: Echo RatOS variables to the console. -gcode: - {% for var, value in printer["gcode_macro RatOS"].items() %} - {action_respond_info(var ~ ": " ~ value)} - {% endfor %} - -[gcode_macro RatOS] -description: RatOS variable storage macro, will echo variables to the console when run. -# Configuration Defaults -# This is only here to make the config backwards compatible. -# Configuration should exclusively happen in printer.cfg. -variable_relative_extrusion: False #? -variable_force_absolute_position: False # зачем оно ващпе -variable_preheat_extruder: True -variable_preheat_extruder_temp: 150 -variable_calibrate_bed_mesh: True -variable_adaptive_mesh: True -variable_nozzle_priming: "primeblob" -variable_nozzle_prime_start_x: "max" # min, max or number -variable_nozzle_prime_start_y: "min" # min, max or number -variable_nozzle_prime_direction: "auto" # auto, forwards, backwards -variable_nozzle_prime_bridge_fan: 102 # что это за попугаи -variable_filament_unload_length: 130 -variable_filament_unload_speed: 5 -variable_filament_load_length: 100 -variable_filament_load_speed: 10 -variable_filament_load_second_length: 100 -variable_filament_load_second_speed: 10 -variable_start_print_park_in: "back" -variable_start_print_park_z_height: 50 -variable_start_print_heat_chamber_bed_temp: 115 #надо бы попробовать -variable_end_print_park_in: "back" -variable_end_print_park_x: 380 -variable_pause_print_park_in: "front" -variable_pause_print_park_x: 20 -variable_macro_travel_speed: 150 -variable_macro_z_speed: 15 -variable_end_print_park_z_hop: 20 -# Possible values: 'sensorless' or 'endstops'. -variable_homing: "endstops" -variable_sensorless_x_current: 0.6 -variable_sensorless_y_current: 0.9 -# Possible Values: 'middle' or an absolute x coordinate -variable_safe_home_x: "middle" -# Possible Values: 'middle' or an absolute y coordinate -variable_safe_home_y: "middle" -variable_stowable_probe_stop_on_error: False #? -variable_driver_type_x: "tmc5160" -variable_driver_type_y: "tmc5160" -variable_high_power_bed: False -variable_z_tilt_enabled: False -variable_beep_enabled: False -variable_filament_encoder_enabled: False -variable_touch_cart_enabled: True -variable_awd_sync_enabled: True -variable_tgbot_enabled: True -variable_probe_for_priming_result: None -variable_adaptive_prime_offset_threshold: -1.0 -gcode: - ECHO_RATOS_VARS +[gcode_macro ECHO_RATOS_VARS] +description: Echo RatOS variables to the console. +gcode: + {% for var, value in printer["gcode_macro RatOS"].items() %} + {action_respond_info(var ~ ": " ~ value)} + {% endfor %} + +[gcode_macro RatOS] +description: RatOS variable storage macro, will echo variables to the console when run. +# Configuration Defaults +# This is only here to make the config backwards compatible. +# Configuration should exclusively happen in printer.cfg. +variable_relative_extrusion: False #? +variable_force_absolute_position: False # зачем оно ващпе +variable_preheat_extruder: True +variable_preheat_extruder_temp: 150 +variable_calibrate_bed_mesh: True +variable_adaptive_mesh: True +variable_nozzle_priming: "primeblob" +variable_nozzle_prime_start_x: "max" # min, max or number +variable_nozzle_prime_start_y: "min" # min, max or number +variable_nozzle_prime_direction: "auto" # auto, forwards, backwards +variable_nozzle_prime_bridge_fan: 102 # что это за попугаи +variable_filament_unload_length: 130 +variable_filament_unload_speed: 5 +variable_filament_load_length: 100 +variable_filament_load_speed: 10 +variable_filament_load_second_length: 100 +variable_filament_load_second_speed: 10 +variable_start_print_park_in: "back" +variable_start_print_park_z_height: 50 +variable_start_print_heat_chamber_bed_temp: 115 #надо бы попробовать +variable_end_print_park_in: "back" +variable_end_print_park_x: 380 +variable_pause_print_park_in: "front" +variable_pause_print_park_x: 20 +variable_macro_travel_speed: 150 +variable_macro_z_speed: 15 +variable_end_print_park_z_hop: 20 +# Possible values: 'sensorless' or 'endstops'. +variable_homing: "endstops" +variable_sensorless_x_current: 0.6 +variable_sensorless_y_current: 0.9 +# Possible Values: 'middle' or an absolute x coordinate +variable_safe_home_x: "middle" +# Possible Values: 'middle' or an absolute y coordinate +variable_safe_home_y: "middle" +variable_stowable_probe_stop_on_error: False #? +variable_driver_type_x: "tmc5160" +variable_driver_type_y: "tmc5160" +variable_high_power_bed: False +variable_z_tilt_enabled: False +variable_beep_enabled: False +variable_filament_encoder_enabled: False +variable_touch_cart_enabled: True +variable_awd_sync_enabled: True +variable_tgbot_enabled: True +variable_probe_for_priming_result: None +variable_adaptive_prime_offset_threshold: -1.0 +gcode: + ECHO_RATOS_VARS