Files
Macros/Scripts/macros.cfg

452 lines
17 KiB
INI
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
[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)}
[gcode_macro _SEARCH_VARS]
gcode:
{% set search = params.S|lower %}
{% set ns = namespace() %}
{% for item in printer %}
{% if ' ' in item %}
{% set ns.path = ['printer', "['%s']" % (item), ''] %}
{% else %}
{% set ns.path = ['printer.', item, ''] %}
{% endif %}
{% if search in ns.path|lower %}
{ action_respond_info(ns.path|join) }
{% endif %}
{% if printer[item].items() %}
{% for childkey, child in printer[item].items() recursive %}
{% set ns.path = ns.path[:loop.depth|int + 1] %}
{% if ' ' in childkey %}
{% set null = ns.path.append("['%s']" % (childkey)) %}
{% else %}
{% set null = ns.path.append(".%s" % (childkey)) %}
{% endif %}
{% if child is mapping %}
{ loop(child.items()) }
{% else %}
{% if search in ns.path|lower %}
{ action_respond_info("%s : %s" % (ns.path|join, child)) }
{% else %}
{% if search in child|lower %}
{ action_respond_info("%s : %s" % (ns.path|join, child)) }
{% endif %}
{% endif %}
{% endif %}
{% endfor %}
{% endif %}
{% endfor %}