412 lines
16 KiB
INI
412 lines
16 KiB
INI
|
||
[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 %}
|
||
{% if printer["gcode_macro RatOS"].orbiter_sensor_cheat|lower == 'true' %}
|
||
SET_FILAMENT_SENSOR SENSOR=Orbiter_Sensor ENABLE=1
|
||
{% 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 %}
|
||
{% if printer["gcode_macro RatOS"].orbiter_sensor_cheat|lower == 'true' %}
|
||
SET_FILAMENT_SENSOR SENSOR=Orbiter_Sensor ENABLE=0
|
||
{% 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_ROUTINE
|
||
TURN_OFF_HEATERS
|
||
CLEAR_PAUSE
|
||
#SDCARD_RESET_FILE
|
||
CANCEL_PRINT_BASE
|
||
RESPOND MSG="Canceled o_O"
|
||
{% 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 %}
|
||
|
||
#####
|
||
# 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 PSTATUS]
|
||
gcode:
|
||
{% if params.S3 %}
|
||
{% set info = printer[params.S1][params.S2][params.S3] %}
|
||
{% elif params.S2 %}
|
||
{% set info = printer[params.S1][params.S2] %}
|
||
{% elif params.S1 %}
|
||
{% set info = printer[params.S1] %}
|
||
{% else %}
|
||
{% set info = printer.idle_timeout.state %}
|
||
{% endif %}
|
||
{action_respond_info(info|string)}
|