diff --git a/printer_config/D1000/base.cfg b/printer_config/D1000/base.cfg index 3d86a211..d0ff4cea 100644 --- a/printer_config/D1000/base.cfg +++ b/printer_config/D1000/base.cfg @@ -40,7 +40,7 @@ canbus_interface: can0 kinematics: cartesian max_velocity: 300 max_accel: 5000 -max_z_velocity: 10 +max_z_velocity: 7 max_z_accel: 100 square_corner_velocity: 2.5 @@ -51,6 +51,7 @@ mesh_min: 40,60 mesh_max: 1000, 1000 probe_count: 6,6 mesh_pps: 2,2 +fade_end: 10 algorithm: bicubic bicubic_tension: 0.2 @@ -360,34 +361,57 @@ gcode: [gcode_macro T0] gcode: - SET_SERVO SERVO=switch_nozzle angle=135 - G4 P500 - SET_GCODE_OFFSET Z=0 - SET_GCODE_OFFSET Y=0 - SET_GCODE_OFFSET X=0 - SET_SERVO SERVO=switch_nozzle angle=45 - ACTIVATE_EXTRUDER EXTRUDER=extruder - _RUNOUT_HANDLE + {% set filament_insert = printer["filament_switch_sensor extruder"].filament_detected|default(False) %} + {% set printing = printer.print_stats.state == "printing" %} + {% if filament_insert or printing == False %} + SET_SERVO SERVO=switch_nozzle angle=135 + G4 P500 + {% if "z" in printer.toolhead.homed_axes | lower %} + SET_GCODE_OFFSET Z=0 MOVE=1 + {% else %} + SET_GCODE_OFFSET Z=0 + {% endif %} + SET_GCODE_OFFSET Y=0 + SET_GCODE_OFFSET X=0 + SET_SERVO SERVO=switch_nozzle angle=45 + ACTIVATE_EXTRUDER EXTRUDER=extruder + {% else %} + PAUSE + SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=change_runout VALUE='"T0"' + RESPOND TYPE=error MSG='{"Noting! Left extruder filament has been run out."}' + {% endif %} [gcode_macro T1] gcode: {% set sv = printer.save_variables.variables %} - {% set x_offset = sv.dual_x_offset|default(60)|float %} - {% set y_offset = sv.dual_y_offset|default(0)|float %} - {% set z_offset = sv.dual_z_offset|default(0)|float %} - SET_SERVO SERVO=switch_nozzle angle=135 - G4 P500 - SET_GCODE_OFFSET Z={z_offset} - SET_GCODE_OFFSET Y={y_offset} - SET_GCODE_OFFSET X={x_offset} - SET_SERVO SERVO=switch_nozzle angle=225 - ACTIVATE_EXTRUDER EXTRUDER=extruder1 - _RUNOUT_HANDLE + {% set x_offset = sv.nozzle_x_offset_val|default(0)|float %} + {% set y_offset = sv.nozzle_y_offset_val|default(0)|float %} + {% set z_offset = sv.nozzle_z_offset_val|default(0)|float %} + {% set x_offset = x_offset - 59 %} + {% set filament_insert = printer["filament_switch_sensor extruder1"].filament_detected|default(False) %} + {% set printing = (printer.print_stats.state == "printing") %} + {% if filament_insert or printing == False %} + SET_SERVO SERVO=switch_nozzle angle=135 + G4 P500 + {% if "z" in printer.toolhead.homed_axes | lower %} + SET_GCODE_OFFSET Z={z_offset} MOVE=1 + {% else %} + SET_GCODE_OFFSET Z={z_offset} + {% endif %} + SET_GCODE_OFFSET Y={y_offset} + SET_GCODE_OFFSET X={x_offset} + SET_SERVO SERVO=switch_nozzle angle=225 + ACTIVATE_EXTRUDER EXTRUDER=extruder1 + {% else %} + PAUSE + SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=change_runout VALUE='"T1"' + RESPOND TYPE=error MSG='{"Noting! Right extruder filament has been run out."}' + {% endif %} [gcode_macro PROBE_SERVO_OPEN] gcode: SET_SERVO SERVO=probe_servo angle=15 - G4 P1000 + G4 P2000 [gcode_macro PROBE_SERVO_CLOSE] gcode: @@ -399,6 +423,11 @@ gcode: _CLEAR_LAST_FILE _RUNOUT_HANDLE +[gcode_macro _CANCEL_PRINT_BASE] +description: Call when cancelled to print +gcode: + # Nothing + [gcode_macro START_PRINT] gcode: {% set BED_TEMP = params.BED|default(0)|float %} @@ -434,6 +463,10 @@ gcode: G92 E0 M117 Printing start... +[gcode_macro PRINT_START] +gcode: + START_PRINT + [gcode_macro END_PRINT] gcode: M400 @@ -448,6 +481,10 @@ gcode: G0 X590 Y590 F3600 # BED_MESH_CLEAR +[gcode_macro PRINT_END] +gcode: + END_PRINT + [gcode_macro LOAD_FILAMENT] variable_load_distance: 120 variable_purge_distance: 25 @@ -477,24 +514,6 @@ gcode: G1 E-{unload_distance} F{max_velocity} # fast-unload RESTORE_GCODE_STATE NAME=unload_state -[gcode_macro SET_X_OFFSET] -gcode: - {% set svv = printer.save_variables.variables %} - {% set dual_x_offset=params.S|default(-60)|float %} - SAVE_VARIABLE VARIABLE=dual_x_offset VALUE={dual_x_offset} - -[gcode_macro SET_Y_OFFSET] -gcode: - {% set svv = printer.save_variables.variables %} - {% set dual_y_offset=params.S|default(0)|float %} - SAVE_VARIABLE VARIABLE=dual_y_offset VALUE={dual_y_offset} - -[gcode_macro SET_Z_OFFSET] -gcode: - {% set svv = printer.save_variables.variables %} - {% set dual_z_offset=params.S|default(0)|float %} - SAVE_VARIABLE VARIABLE=dual_z_offset VALUE={dual_z_offset} - [gcode_macro _ACTIVATE_DEFAULT_EXTRUDER] gcode: {% if printer.toolhead.extruder == 'extruder' %} @@ -638,13 +657,59 @@ gcode: else True if params.RESTORE|default(1)|int == 1 else False %} SET_GCODE_VARIABLE MACRO=RESUME VARIABLE={name} VALUE="{{'restore': restore, 'temp': temp}}" {% endfor %} + SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=resume_extruder VALUE="'{printer.toolhead.extruder}'" + +[gcode_macro _RESUME_EXTRUDER] +gcode: + {% set client = printer['gcode_macro RESUME']|default({}) %} + {% set autoshift_on = params.AUTOSHIFT|default(False)|lower %} + {% set toolchange = client.change_runout|lower|default("") %} + {% set extruder_filament = client.filament_state.extruder %} + {% set extruder1_filament = client.filament_state.extruder1 %} + {% set resume_extruder = client.resume_extruder|default("extruder") %} + + {% if autoshift_on == 'true' %} + {% if extruder_filament and extruder1_filament %} + {% if toolchange == "t0" %} + {% set resume_extruder = "extruder" %} + {% elif toolchange == "t1" %} + {% set resume_extruder = "extruder1" %} + {% endif %} + {% else %} + {% if extruder_filament %} + {% set resume_extruder = "extruder" %} + {% elif extruder1_filament %} + {% set resume_extruder = "extruder1" %} + {% endif %} + {% endif %} + {% endif %} + {% if printer.toolhead.extruder != resume_extruder %} + T{0 if resume_extruder|default("extruder") == "extruder" else 1 } + {% endif %} + _FILAMENT_UPDATE + +[gcode_macro _EXTRUDER_TEMPERATURE_HANDLE] +gcode: + {% set client = printer['gcode_macro RESUME']|default({}) %} + {% set last_extruder_temp = client.last_extruder_temp %} + {% set last_extruder1_temp = client.last_extruder1_temp %} + {% set resume_extruder = client.resume_extruder|lower %} + {% if resume_extruder != printer.toolhead.extruder %} + SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=last_extruder_temp VALUE="{last_extruder1_temp}" + SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=last_extruder1_temp VALUE="{last_extruder_temp}" + {% endif %} [gcode_macro _USER_TEMP_RESUME] gcode: {% set extruder_info = [ {'index': 0, 'name': 'last_extruder_temp'}, {'index': 1, 'name': 'last_extruder1_temp'}] %} - + {% set temperature = "last_extruder_temp" if printer.toolhead.extruder == "extruder" else "last_extruder1_temp" %} + {% set value = printer["gcode_macro RESUME"][temperature].temp %} + {% if printer[printer.toolhead.extruder].temperature < value-3 %} + {% set msg = "Left" if printer.toolhead.extruder == "extruder" else "Right" %} + RESPOND TYPE=echo MSG='{"Restoring %s extruder temperature, this may take some time." % msg}' + {% endif %} {% for info in extruder_info %} {% set variable = printer["gcode_macro RESUME"][info.name] %} {% if variable.restore %} @@ -664,10 +729,40 @@ gcode: [gcode_macro _USER_CANCEL] gcode: - G91 - G1 Z30 F600 ; lift nozzle + {% if 'z' in printer.toolhead.homed_axes %} + G91 + G1 Z30 F600 ; lift nozzle + {% endif %} M84 +[gcode_macro _CLIENT_EXTRUDE] +description: Extrudes, if the extruder is hot enough +gcode: + ##### get user parameters or use default ##### + {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %} + {% set use_fw_retract = (client.use_fw_retract|default(false)|lower == 'true') and (printer.firmware_retraction is defined) %} + {% set length = params.LENGTH|default(client.unretract)|default(1.0)|float %} + {% set speed = params.SPEED|default(client.speed_unretract)|default(35) %} + {% set absolute_extrude = printer.gcode_move.absolute_extrude %} + ##### end of definitions ##### + {% if printer.toolhead.extruder != '' %} + {% if printer[printer.toolhead.extruder].can_extrude %} + {% if use_fw_retract %} + {% if length < 0 %} + G10 + {% else %} + G11 + {% endif %} + {% else %} + M83 + G1 E{length} F{(speed|float|abs) * 60} + {% if absolute_extrude %} + M82 + {% endif %} + {% endif %} + {% endif %} + {% endif %} + [gcode_macro RESUME] description: Resume the actual running print rename_existing: RESUME_BASE @@ -675,37 +770,35 @@ variable_last_extruder_temp: {'restore': False, 'temp': 0} variable_last_extruder1_temp: {'restore': False, 'temp': 0} variable_restore_idle_timeout: 0 variable_idle_state: False -variable_filament_state: False +variable_filament_state: "" +variable_change_runout: "" +variable_resume_extruder: "" gcode: ##### get user parameters or use default ##### + {% set autoshift = printer.save_variables.variables.auto_change_nozzle|default(False) %} {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %} - {% set can_extrude = True if printer.toolhead.extruder == '' # no extruder defined in config - else printer[printer.toolhead.extruder].can_extrude %} # status of active extruder {% set do_resume = False %} - {% set prompt_txt = [] %} {% set runout = True %} ##### end of definitions ##### _FILAMENT_UPDATE + _RESUME_EXTRUDER AUTOSHIFT={autoshift} + _EXTRUDER_TEMPERATURE_HANDLE + + {% set can_extrude = True if printer.toolhead.extruder == '' # no extruder defined in config + else printer[printer.toolhead.extruder].can_extrude %} # status of active extruder #### Printer comming from timeout idle state #### - {% if printer.idle_timeout.state|upper == "IDLE" or idle_state %} + {% if printer.idle_timeout.state|upper == "IDLE" or idle_state or autoshift %} SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False {% if last_extruder_temp.restore or last_extruder1_temp.restore %} # we need to use the unicode (\u00B0) for the ° as py2 env's would throw an error otherwise - RESPOND TYPE=echo MSG='{"Restoring \"%s\" temperature to %3.1f\u00B0C, this may take some time" % (printer.toolhead.extruder, last_extruder_temp.temp) }' {client.user_temp_macro|default("")} {% set do_resume = True %} {% elif can_extrude %} {% set do_resume = True %} - {% else %} - RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}' - {% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %} {% endif %} #### Printer comming out of regular PAUSE state #### {% elif can_extrude %} {% set do_resume = True %} - {% else %} - RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}' - {% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %} {% endif %} _ACT_RESUME DO_RESUME={do_resume} @@ -714,27 +807,30 @@ gcode: ##### get user parameters or use default ##### {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %} {% set velocity = printer.configfile.settings.pause_resume.recover_velocity %} + {% set auto_extruder = params.AUTO|default(False) %} {% set sp_move = client.speed_move|default(velocity) %} {% set do_resume = true if params.DO_RESUME|default(False)|lower == 'true' else false %} - {% set filament_state = printer['gcode_macro RESUME'].filament_state|default(False) %} + {% set filament_state = printer['gcode_macro RESUME'].filament_state.runout|default(False) %} {% set restore_idle_timeout = printer['gcode_macro RESUME'].restore_idle_timeout|default(0) %} {% set prompt_txt = [] %} {% if filament_state %} - {% if do_resume %} + {% if do_resume or auto_extruder %} {% if restore_idle_timeout > 0 %} SET_IDLE_TIMEOUT TIMEOUT={restore_idle_timeout} {% endif %} # restore idle_timeout time {client.user_resume_macro|default("")} _CLIENT_EXTRUDE RESUME_BASE VELOCITY={params.VELOCITY|default(sp_move)} + SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=change_runout VALUE="None" {% else %} - {% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %} + {% set msg = "Left" if printer.toolhead.extruder == "extruder" else "Right" %} + {% set _d = prompt_txt.append("%s extruder not hot enough, will reheat and continue." % msg) %} {% endif %} {% else %} - RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" detects no filament, please load filament and press RESUME" % printer.toolhead.extruder}' - {% set _d = prompt_txt.append("\"%s\" detects no filament, please load filament and press RESUME" % printer.toolhead.extruder) %} + {% set msg = "Left" if printer.toolhead.extruder == "extruder" else "Right" %} + {% set _d = prompt_txt.append("%s extruder detects no filament, please load filament and continue." % msg) %} {% endif %} ##### Generate User Information box in case of abort ##### {% if not (filament_state and do_resume) %} - RESPOND TYPE=command MSG="action:prompt_begin RESUME aborted !!!" + RESPOND TYPE=command MSG="action:prompt_begin RESUME ABORTED !" {% for element in prompt_txt %} RESPOND TYPE=command MSG='{"action:prompt_text %s" % element}' {% endfor %} @@ -766,7 +862,7 @@ gcode: {% set runout = runout_resume if printer.toolhead.extruder == "extruder" else runout_resume1 %} {% endif %} {% endif %} - SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=filament_state VALUE={ runout } + SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=filament_state VALUE="{{'runout': runout, 'extruder': runout_resume, 'extruder1': runout_resume1}}" [gcode_macro _RUNOUT_HANDLE] description: filament state update @@ -778,11 +874,22 @@ gcode: [gcode_macro _RUNOUT_PAUSE] gcode: - {% set filament_state = printer['gcode_macro RESUME'].filament_state|default(False) %} + {% set svv = printer.save_variables.variables %} + {% set autoshift_extruder = svv.auto_change_nozzle|default(False) %} + {% set filament_state = printer['gcode_macro RESUME'].filament_state.runout|default(False) %} + {% set target_extruder = "extruder1" if printer.toolhead.extruder == "extruder" else "extruder" %} {% if not filament_state %} - {% set msg_extruder = "extruder" if printer.toolhead.extruder == "extruder" else "extruder1" %} - RESPOND TYPE=echo MSG='{"Noting! \"%s\" filament has been pulled out." % msg_extruder}' PAUSE + {% if autoshift_extruder %} + {% if printer["gcode_macro RESUME"].filament_state[target_extruder] %} + RESUME + {% else %} + RESPOND TYPE=error MSG='{"Noting! All extruders filament has been run out."}' + {% endif %} + {% else %} + {% set msg = "Left" if printer.toolhead.extruder == "extruder" else "Right" %} + RESPOND TYPE=error MSG='{"Noting! %s extruder filament has been run out." % msg}' + {% endif %} {% endif %} ######################################## @@ -1001,3 +1108,27 @@ gcode: _BED_MESH_CALIBRATE PROFILE={default_profile} mesh_min={adapted_x_min},{adapted_y_min} mesh_max={adapted_x_max},{adapted_y_max} ALGORITHM={algorithm} PROBE_COUNT={points_x},{points_y} # End of verbose BED_MESH_PROFILE LOAD={default_profile} + +######################################## +# Nozzle Calibrate +######################################## + +[gcode_shell_command fetch_assets] +command: sh /home/klipper/klipper/scripts/fetch_assets.sh +timeout: 5. +verbose: False + +[gcode_macro _NOZZLE_Z_OFFSET_CALIBRATE] +gcode: + G28 X Y + G28 Z + G91 + G0 x-60 F6000 + SET_GCODE_OFFSET Z=0 MOVE=0 + SET_SERVO SERVO=switch_nozzle angle=225 + ACTIVATE_EXTRUDER EXTRUDER=extruder1 + +[gcode_macro _NOZZLE_XY_OFFSET_CALIBRATE] +gcode: + RUN_SHELL_COMMAND CMD=fetch_assets PARAMS="\"Gcode\" \"D1000HS\" \"NozzleAglin.zip\"" + SDCARD_PRINT_FILE FILENAME=".PresetModel/NozzleAglin.gcode" \ No newline at end of file diff --git a/printer_config/D600Pro2/base.cfg b/printer_config/D600Pro2/base.cfg index e7a43f32..10dbd1f7 100644 --- a/printer_config/D600Pro2/base.cfg +++ b/printer_config/D600Pro2/base.cfg @@ -51,6 +51,7 @@ mesh_min: 40,60 mesh_max: 600, 600 probe_count: 6,6 mesh_pps: 2,2 +fade_end: 10 algorithm: bicubic bicubic_tension: 0.2 @@ -360,29 +361,52 @@ gcode: [gcode_macro T0] gcode: - SET_SERVO SERVO=switch_nozzle angle=135 - G4 P500 - SET_GCODE_OFFSET Z=0 - SET_GCODE_OFFSET Y=0 - SET_GCODE_OFFSET X=0 - SET_SERVO SERVO=switch_nozzle angle=45 - ACTIVATE_EXTRUDER EXTRUDER=extruder - _RUNOUT_HANDLE + {% set filament_insert = printer["filament_switch_sensor extruder"].filament_detected|default(False) %} + {% set printing = printer.print_stats.state == "printing" %} + {% if filament_insert or printing == False %} + SET_SERVO SERVO=switch_nozzle angle=135 + G4 P500 + {% if "z" in printer.toolhead.homed_axes | lower %} + SET_GCODE_OFFSET Z=0 MOVE=1 + {% else %} + SET_GCODE_OFFSET Z=0 + {% endif %} + SET_GCODE_OFFSET Y=0 + SET_GCODE_OFFSET X=0 + SET_SERVO SERVO=switch_nozzle angle=45 + ACTIVATE_EXTRUDER EXTRUDER=extruder + {% else %} + PAUSE + SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=change_runout VALUE='"T0"' + RESPOND TYPE=error MSG='{"Noting! Left extruder filament has been run out."}' + {% endif %} [gcode_macro T1] gcode: {% set sv = printer.save_variables.variables %} - {% set x_offset = sv.dual_x_offset|default(60)|float %} - {% set y_offset = sv.dual_y_offset|default(0)|float %} - {% set z_offset = sv.dual_z_offset|default(0)|float %} - SET_SERVO SERVO=switch_nozzle angle=135 - G4 P500 - SET_GCODE_OFFSET Z={z_offset} - SET_GCODE_OFFSET Y={y_offset} - SET_GCODE_OFFSET X={x_offset} - SET_SERVO SERVO=switch_nozzle angle=225 - ACTIVATE_EXTRUDER EXTRUDER=extruder1 - _RUNOUT_HANDLE + {% set x_offset = sv.nozzle_x_offset_val|default(0)|float %} + {% set y_offset = sv.nozzle_y_offset_val|default(0)|float %} + {% set z_offset = sv.nozzle_z_offset_val|default(0)|float %} + {% set x_offset = x_offset - 59 %} + {% set filament_insert = printer["filament_switch_sensor extruder1"].filament_detected|default(False) %} + {% set printing = (printer.print_stats.state == "printing") %} + {% if filament_insert or printing == False %} + SET_SERVO SERVO=switch_nozzle angle=135 + G4 P500 + {% if "z" in printer.toolhead.homed_axes | lower %} + SET_GCODE_OFFSET Z={z_offset} MOVE=1 + {% else %} + SET_GCODE_OFFSET Z={z_offset} + {% endif %} + SET_GCODE_OFFSET Y={y_offset} + SET_GCODE_OFFSET X={x_offset} + SET_SERVO SERVO=switch_nozzle angle=225 + ACTIVATE_EXTRUDER EXTRUDER=extruder1 + {% else %} + PAUSE + SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=change_runout VALUE='"T1"' + RESPOND TYPE=error MSG='{"Noting! Right extruder filament has been run out."}' + {% endif %} [gcode_macro PROBE_SERVO_OPEN] gcode: @@ -399,6 +423,11 @@ gcode: _CLEAR_LAST_FILE _RUNOUT_HANDLE +[gcode_macro _CANCEL_PRINT_BASE] +description: Call when cancelled to print +gcode: + # Nothing + [gcode_macro START_PRINT] gcode: {% set BED_TEMP = params.BED|default(0)|float %} @@ -434,6 +463,10 @@ gcode: G92 E0 M117 Printing start... +[gcode_macro PRINT_START] +gcode: + START_PRINT + [gcode_macro END_PRINT] gcode: M400 @@ -448,6 +481,10 @@ gcode: G0 X590 Y590 F3600 # BED_MESH_CLEAR +[gcode_macro PRINT_END] +gcode: + END_PRINT + [gcode_macro LOAD_FILAMENT] variable_load_distance: 120 variable_purge_distance: 25 @@ -477,24 +514,6 @@ gcode: G1 E-{unload_distance} F{max_velocity} # fast-unload RESTORE_GCODE_STATE NAME=unload_state -[gcode_macro SET_X_OFFSET] -gcode: - {% set svv = printer.save_variables.variables %} - {% set dual_x_offset=params.S|default(-60)|float %} - SAVE_VARIABLE VARIABLE=dual_x_offset VALUE={dual_x_offset} - -[gcode_macro SET_Y_OFFSET] -gcode: - {% set svv = printer.save_variables.variables %} - {% set dual_y_offset=params.S|default(0)|float %} - SAVE_VARIABLE VARIABLE=dual_y_offset VALUE={dual_y_offset} - -[gcode_macro SET_Z_OFFSET] -gcode: - {% set svv = printer.save_variables.variables %} - {% set dual_z_offset=params.S|default(0)|float %} - SAVE_VARIABLE VARIABLE=dual_z_offset VALUE={dual_z_offset} - [gcode_macro _ACTIVATE_DEFAULT_EXTRUDER] gcode: {% if printer.toolhead.extruder == 'extruder' %} @@ -631,13 +650,59 @@ gcode: else True if params.RESTORE|default(1)|int == 1 else False %} SET_GCODE_VARIABLE MACRO=RESUME VARIABLE={name} VALUE="{{'restore': restore, 'temp': temp}}" {% endfor %} + SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=resume_extruder VALUE="'{printer.toolhead.extruder}'" + +[gcode_macro _RESUME_EXTRUDER] +gcode: + {% set client = printer['gcode_macro RESUME']|default({}) %} + {% set autoshift_on = params.AUTOSHIFT|default(False)|lower %} + {% set toolchange = client.change_runout|lower|default("") %} + {% set extruder_filament = client.filament_state.extruder %} + {% set extruder1_filament = client.filament_state.extruder1 %} + {% set resume_extruder = client.resume_extruder %} + + {% if autoshift_on == 'true' %} + {% if extruder_filament and extruder1_filament %} + {% if toolchange == "t0" %} + {% set resume_extruder = "extruder" %} + {% elif toolchange == "t1" %} + {% set resume_extruder = "extruder1" %} + {% endif %} + {% else %} + {% if extruder_filament %} + {% set resume_extruder = "extruder" %} + {% elif extruder1_filament %} + {% set resume_extruder = "extruder1" %} + {% endif %} + {% endif %} + {% endif %} + {% if printer.toolhead.extruder != resume_extruder %} + T{0 if resume_extruder|default("extruder") == "extruder" else 1 } + {% endif %} + _FILAMENT_UPDATE + +[gcode_macro _EXTRUDER_TEMPERATURE_HANDLE] +gcode: + {% set client = printer['gcode_macro RESUME']|default({}) %} + {% set last_extruder_temp = client.last_extruder_temp %} + {% set last_extruder1_temp = client.last_extruder1_temp %} + {% set resume_extruder = client.resume_extruder|lower %} + {% if resume_extruder != printer.toolhead.extruder %} + SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=last_extruder_temp VALUE="{last_extruder1_temp}" + SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=last_extruder1_temp VALUE="{last_extruder_temp}" + {% endif %} [gcode_macro _USER_TEMP_RESUME] gcode: {% set extruder_info = [ {'index': 0, 'name': 'last_extruder_temp'}, {'index': 1, 'name': 'last_extruder1_temp'}] %} - + {% set temperature = "last_extruder_temp" if printer.toolhead.extruder == "extruder" else "last_extruder1_temp" %} + {% set value = printer["gcode_macro RESUME"][temperature].temp %} + {% if printer[printer.toolhead.extruder].temperature < value-3 %} + {% set msg = "Left" if printer.toolhead.extruder == "extruder" else "Right" %} + RESPOND TYPE=echo MSG='{"Restoring %s extruder temperature, this may take some time." % msg}' + {% endif %} {% for info in extruder_info %} {% set variable = printer["gcode_macro RESUME"][info.name] %} {% if variable.restore %} @@ -657,10 +722,40 @@ gcode: [gcode_macro _USER_CANCEL] gcode: - G91 - G1 Z30 F600 ; lift nozzle + {% if 'z' in printer.toolhead.homed_axes %} + G91 + G1 Z30 F600 ; lift nozzle + {% endif %} M84 +[gcode_macro _CLIENT_EXTRUDE] +description: Extrudes, if the extruder is hot enough +gcode: + ##### get user parameters or use default ##### + {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %} + {% set use_fw_retract = (client.use_fw_retract|default(false)|lower == 'true') and (printer.firmware_retraction is defined) %} + {% set length = params.LENGTH|default(client.unretract)|default(1.0)|float %} + {% set speed = params.SPEED|default(client.speed_unretract)|default(35) %} + {% set absolute_extrude = printer.gcode_move.absolute_extrude %} + ##### end of definitions ##### + {% if printer.toolhead.extruder != '' %} + {% if printer[printer.toolhead.extruder].can_extrude %} + {% if use_fw_retract %} + {% if length < 0 %} + G10 + {% else %} + G11 + {% endif %} + {% else %} + M83 + G1 E{length} F{(speed|float|abs) * 60} + {% if absolute_extrude %} + M82 + {% endif %} + {% endif %} + {% endif %} + {% endif %} + [gcode_macro RESUME] description: Resume the actual running print rename_existing: RESUME_BASE @@ -668,37 +763,37 @@ variable_last_extruder_temp: {'restore': False, 'temp': 0} variable_last_extruder1_temp: {'restore': False, 'temp': 0} variable_restore_idle_timeout: 0 variable_idle_state: False -variable_filament_state: False +variable_filament_state: "" +variable_change_runout: "" +variable_resume_extruder: "" gcode: ##### get user parameters or use default ##### + {% set autoshift = printer.save_variables.variables.auto_change_nozzle|default(False) %} {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %} - {% set can_extrude = True if printer.toolhead.extruder == '' # no extruder defined in config - else printer[printer.toolhead.extruder].can_extrude %} # status of active extruder {% set do_resume = False %} {% set prompt_txt = [] %} {% set runout = True %} ##### end of definitions ##### _FILAMENT_UPDATE + _RESUME_EXTRUDER AUTOSHIFT={autoshift} + _EXTRUDER_TEMPERATURE_HANDLE + + {% set can_extrude = True if printer.toolhead.extruder == '' # no extruder defined in config + else printer[printer.toolhead.extruder].can_extrude %} # status of active extruder + #### Printer comming from timeout idle state #### - {% if printer.idle_timeout.state|upper == "IDLE" or idle_state %} + {% if printer.idle_timeout.state|upper == "IDLE" or idle_state or autoshift %} SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False {% if last_extruder_temp.restore or last_extruder1_temp.restore %} # we need to use the unicode (\u00B0) for the ° as py2 env's would throw an error otherwise - RESPOND TYPE=echo MSG='{"Restoring \"%s\" temperature to %3.1f\u00B0C, this may take some time" % (printer.toolhead.extruder, last_extruder_temp.temp) }' {client.user_temp_macro|default("")} {% set do_resume = True %} {% elif can_extrude %} {% set do_resume = True %} - {% else %} - RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}' - {% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %} {% endif %} #### Printer comming out of regular PAUSE state #### {% elif can_extrude %} {% set do_resume = True %} - {% else %} - RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}' - {% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %} {% endif %} _ACT_RESUME DO_RESUME={do_resume} @@ -707,27 +802,30 @@ gcode: ##### get user parameters or use default ##### {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %} {% set velocity = printer.configfile.settings.pause_resume.recover_velocity %} + {% set auto_extruder = params.AUTO|default(False) %} {% set sp_move = client.speed_move|default(velocity) %} {% set do_resume = true if params.DO_RESUME|default(False)|lower == 'true' else false %} - {% set filament_state = printer['gcode_macro RESUME'].filament_state|default(False) %} + {% set filament_state = printer['gcode_macro RESUME'].filament_state.runout|default(False) %} {% set restore_idle_timeout = printer['gcode_macro RESUME'].restore_idle_timeout|default(0) %} {% set prompt_txt = [] %} {% if filament_state %} - {% if do_resume %} + {% if do_resume or auto_extruder %} {% if restore_idle_timeout > 0 %} SET_IDLE_TIMEOUT TIMEOUT={restore_idle_timeout} {% endif %} # restore idle_timeout time {client.user_resume_macro|default("")} _CLIENT_EXTRUDE RESUME_BASE VELOCITY={params.VELOCITY|default(sp_move)} + SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=change_runout VALUE="None" {% else %} - {% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %} + {% set msg = "Left" if printer.toolhead.extruder == "extruder" else "Right" %} + {% set _d = prompt_txt.append("%s extruder not hot enough, will reheat and continue." % msg) %} {% endif %} {% else %} - RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" detects no filament, please load filament and press RESUME" % printer.toolhead.extruder}' - {% set _d = prompt_txt.append("\"%s\" detects no filament, please load filament and press RESUME" % printer.toolhead.extruder) %} + {% set msg = "Left" if printer.toolhead.extruder == "extruder" else "Right" %} + {% set _d = prompt_txt.append("%s extruder detects no filament, please load filament and continue." % msg) %} {% endif %} ##### Generate User Information box in case of abort ##### {% if not (filament_state and do_resume) %} - RESPOND TYPE=command MSG="action:prompt_begin RESUME aborted !!!" + RESPOND TYPE=command MSG="action:prompt_begin RESUME ABORTED !" {% for element in prompt_txt %} RESPOND TYPE=command MSG='{"action:prompt_text %s" % element}' {% endfor %} @@ -759,7 +857,7 @@ gcode: {% set runout = runout_resume if printer.toolhead.extruder == "extruder" else runout_resume1 %} {% endif %} {% endif %} - SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=filament_state VALUE={ runout } + SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=filament_state VALUE="{{'runout': runout, 'extruder': runout_resume, 'extruder1': runout_resume1}}" [gcode_macro _RUNOUT_HANDLE] description: filament state update @@ -771,11 +869,22 @@ gcode: [gcode_macro _RUNOUT_PAUSE] gcode: - {% set filament_state = printer['gcode_macro RESUME'].filament_state|default(False) %} + {% set svv = printer.save_variables.variables %} + {% set autoshift_extruder = svv.auto_change_nozzle|default(False) %} + {% set filament_state = printer['gcode_macro RESUME'].filament_state.runout|default(False) %} + {% set target_extruder = "extruder1" if printer.toolhead.extruder == "extruder" else "extruder" %} {% if not filament_state %} - {% set msg_extruder = "extruder" if printer.toolhead.extruder == "extruder" else "extruder1" %} - RESPOND TYPE=echo MSG='{"Noting! \"%s\" filament has been pulled out." % msg_extruder}' PAUSE + {% if autoshift_extruder %} + {% if printer["gcode_macro RESUME"].filament_state[target_extruder] %} + RESUME + {% else %} + RESPOND TYPE=error MSG='{"Noting! All extruders filament has been run out."}' + {% endif %} + {% else %} + {% set msg = "Left" if printer.toolhead.extruder == "extruder" else "Right" %} + RESPOND TYPE=error MSG='{"Noting! %s extruder filament has been run out." % msg}' + {% endif %} {% endif %} ######################################## @@ -994,3 +1103,27 @@ gcode: _BED_MESH_CALIBRATE PROFILE={default_profile} mesh_min={adapted_x_min},{adapted_y_min} mesh_max={adapted_x_max},{adapted_y_max} ALGORITHM={algorithm} PROBE_COUNT={points_x},{points_y} # End of verbose BED_MESH_PROFILE LOAD={default_profile} + +######################################## +# Nozzle Calibrate +######################################## + +[gcode_shell_command fetch_assets] +command: sh /home/klipper/klipper/scripts/fetch_assets.sh +timeout: 5. +verbose: False + +[gcode_macro _NOZZLE_Z_OFFSET_CALIBRATE] +gcode: + G28 X Y + G28 Z + G91 + G0 x-60 F6000 + SET_GCODE_OFFSET Z=0 MOVE=0 + SET_SERVO SERVO=switch_nozzle angle=225 + ACTIVATE_EXTRUDER EXTRUDER=extruder1 + +[gcode_macro _NOZZLE_XY_OFFSET_CALIBRATE] +gcode: + RUN_SHELL_COMMAND CMD=fetch_assets PARAMS="\"Gcode\" \"D600Pro2HS\" \"NozzleAglin.zip\"" + SDCARD_PRINT_FILE FILENAME=".PresetModel/NozzleAglin.gcode" \ No newline at end of file