diff --git a/config/CreatBot_D1000/base.cfg b/config/CreatBot_D1000/base.cfg index 47b2c5a66..0c3b0c727 100644 --- a/config/CreatBot_D1000/base.cfg +++ b/config/CreatBot_D1000/base.cfg @@ -137,7 +137,7 @@ pwm_cycle_time: 0.3 [verify_heater chamber] max_error: 120 -hysteresis: 0 +hysteresis: 100 check_gain_time: 3600 heating_gain: 0.01 @@ -149,15 +149,15 @@ kick_start_time: 1.0 off_below: 0.10 [filament_switch_sensor extruder] -pause_on_runout: True -runout_gcode: +pause_on_runout: False +runout_gcode: _RUNOUT_HANDLE event_delay: 3.0 pause_delay: 0.5 switch_pin: ^PC14 [filament_switch_sensor extruder1] -pause_on_runout: True -runout_gcode: +pause_on_runout: False +runout_gcode: _RUNOUT_HANDLE event_delay: 3.0 pause_delay: 0.5 switch_pin: ^PC15 @@ -347,13 +347,15 @@ initial_angle: 135 # initial_pulse_width: [safe_z_home] -home_xy_position: 500,500 +home_xy_position: 400,400 speed:100 z_hop:5 z_hop_speed: 10 [gcode_macro ENABLE_FORCE_MOVE] gcode: + SET_STEPPER_ENABLE STEPPER=stepper_x ENABLE=1 + SET_STEPPER_ENABLE STEPPER=stepper_y ENABLE=1 SET_KINEMATIC_POSITION X=500 Y=500 Z=500 [gcode_macro T0] @@ -365,6 +367,7 @@ gcode: SET_GCODE_OFFSET X=0 SET_SERVO SERVO=switch_nozzle angle=45 ACTIVATE_EXTRUDER EXTRUDER=extruder + _RUNOUT_HANDLE [gcode_macro T1] gcode: @@ -379,6 +382,7 @@ gcode: SET_GCODE_OFFSET X={x_offset} SET_SERVO SERVO=switch_nozzle angle=225 ACTIVATE_EXTRUDER EXTRUDER=extruder1 + _RUNOUT_HANDLE [gcode_macro PROBE_SERVO_OPEN] gcode: @@ -388,6 +392,10 @@ gcode: [gcode_macro PROBE_SERVO_CLOSE] gcode: SET_SERVO SERVO=probe_servo angle=130 +[gcode_macro _START_PRINT_BASE] +description: Call when starting to print +gcode: + _RUNOUT_HANDLE [gcode_macro START_PRINT] gcode: @@ -452,7 +460,7 @@ gcode: RESTORE_GCODE_STATE NAME=load_state [gcode_macro UNLOAD_FILAMENT] -variable_unload_distance: 120 +variable_unload_distance: 140 variable_purge_distance: 25 gcode: {% set speed = params.SPEED|default(200) %} @@ -490,6 +498,9 @@ gcode: T1 {% endif %} +######################################## +# GCODE +######################################## [gcode_macro G28] rename_existing: C28 gcode: @@ -499,9 +510,13 @@ gcode: {% set do_z = 'Z' in params|string %} {% if do_x %} + SET_STEPPER_ENABLE STEPPER=stepper_x ENABLE=1 + G4 P300 {% set homing_cmd = 'X ' %} {% endif %} {% if do_y %} + SET_STEPPER_ENABLE STEPPER=stepper_y ENABLE=1 + G4 P300 {% set homing_cmd = homing_cmd + 'Y ' %} {% endif %} {% if do_z %} @@ -512,6 +527,9 @@ gcode: {% endif %} {% endif %} {% if not homing_cmd %} + SET_STEPPER_ENABLE STEPPER=stepper_x ENABLE=1 + SET_STEPPER_ENABLE STEPPER=stepper_y ENABLE=1 + G4 P300 C28 _ACTIVATE_DEFAULT_EXTRUDER {% else %} @@ -521,6 +539,22 @@ gcode: {% endif %} {% endif %} +[gcode_macro M109] +rename_existing: C109 +gcode: + {% set hotend = "extruder" %} + {% set s = params.S|default(0)|float %} + {% set t = params.T|default(0)|int %} + {% if params.S is defined %} + {% if t != 0 %} + {% set hotend = hotend ~ t %} + {% endif %} + SET_HEATER_TEMPERATURE HEATER={hotend} TARGET={s} + {% if s != 0 %} + TEMPERATURE_WAIT SENSOR={hotend} MINIMUM={s-3} MAXIMUM={s+3} + {% endif %} + {% endif %} + [gcode_macro M141] gcode: {% set s = params.S|default(0)|float %} @@ -528,13 +562,24 @@ gcode: SET_HEATER_TEMPERATURE HEATER=chamber target={s|int} {% endif %} +[gcode_macro M190] +rename_existing: C190 +gcode: + {% set s = params.S|default(0)|float %} + {% if params.S is defined %} + SET_HEATER_TEMPERATURE HEATER="heater_bed" TARGET={s} + {% if s != 0 %} + TEMPERATURE_WAIT SENSOR="heater_bed" MINIMUM={s-3} MAXIMUM={s+3} + {% endif %} + {% endif %} + [gcode_macro M191] gcode: {% set s = params.S|default(0)|float %} {% if params.S is defined %} M141 S{s} {% if s != 0 %} - TEMPERATURE_WAIT SENSOR="heater_generic chamber" MINIMUM={s-2} MAXIMUM={s+2} + TEMPERATURE_WAIT SENSOR="heater_generic chamber" MINIMUM={s-3} MAXIMUM={s+3} {% endif %} {% endif %} @@ -544,6 +589,9 @@ gcode: C84 SET_STEPPER_ENABLE STEPPER=stepper_z enable=1 +######################################## +# CANCEL_PRINT/PAUSE/RESUME/ +######################################## [gcode_macro _CLIENT_VARIABLE] variable_use_custom_pos : True variable_custom_park_x : 500.0 @@ -562,8 +610,11 @@ variable_park_at_cancel_y : None variable_use_fw_retract : False variable_idle_timeout : 600 variable_runout_sensor : "" +variable_filament_sensor : "filament_switch_sensor extruder" +variable_filament_sensor1 : "filament_switch_sensor extruder1" +variable_user_temp_resume : "_USER_TEMP_RESUME" variable_user_pause_macro : "_USER_PAUSE" -variable_user_resume_macro: "_USER_RESUME" +variable_user_resume_macro: "" variable_user_cancel_macro: "_USER_CANCEL" gcode: # Nothing @@ -579,11 +630,7 @@ gcode: SET_GCODE_VARIABLE MACRO=RESUME VARIABLE={name} VALUE="{{'restore': restore, 'temp': temp}}" {% endfor %} -[gcode_macro RESUME] -variable_last_extruder_temp: {'restore': False, 'temp': 0} -variable_last_extruder1_temp: {'restore': False, 'temp': 0} - -[gcode_macro _USER_RESUME] +[gcode_macro _USER_TEMP_RESUME] gcode: {% set extruder_info = [ {'index': 0, 'name': 'last_extruder_temp'}, @@ -608,4 +655,121 @@ gcode: [gcode_macro _USER_CANCEL] gcode: - M84 \ No newline at end of file + G91 + G1 Z30 F600 ; lift nozzle + M84 + +[gcode_macro RESUME] +description: Resume the actual running print +rename_existing: RESUME_BASE +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 +gcode: + ##### get user parameters or use default ##### + {% 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 + #### Printer comming from timeout idle state #### + {% if printer.idle_timeout.state|upper == "IDLE" or idle_state %} + 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_temputer_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} + +[gcode_macro _ACT_RESUME] +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 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 restore_idle_timeout = printer['gcode_macro RESUME'].restore_idle_timeout|default(0) %} + {% set prompt_txt = [] %} + {% if filament_state %} + {% if do_resume %} + {% 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)} + {% 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) %} + {% 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 !!!" + {% for element in prompt_txt %} + RESPOND TYPE=command MSG='{"action:prompt_text %s" % element}' + {% endfor %} + RESPOND TYPE=command MSG="action:prompt_footer_button Ok|RESPOND TYPE=command MSG=action:prompt_end|info" + RESPOND TYPE=command MSG="action:prompt_show" + {% endif %} + +######################################## +# filament_runout +######################################## + +[gcode_macro _FILAMENT_UPDATE] +gcode: + {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %} + {% set runout_resume = True if client.filament_sensor|default("") == "" # no runout + else True if not printer[client.filament_sensor].enabled # sensor is disabled + else printer[client.filament_sensor].filament_detected %} # sensor status + {% set runout_resume1 = True if client.filament_sensor1|default("") == "" # no runout + else True if not printer[client.filament_sensor1].enabled # sensor1 is disabled + else printer[client.filament_sensor1].filament_detected %} # sensor1 status + ##### filament check ##### + {% if printer["dual_carriage"] is not defined %} + {% set runout = runout_resume if printer.toolhead.extruder == "extruder" else runout_resume1 %} + {% else %} + {% set current_idex_mode = printer["dual_carriage"].carriage_1|lower %} + {% if current_idex_mode == 'copy' or current_idex_mode == 'mirror' %} + {% set runout = (runout_resume == false or runout_resume1 == false) %} + {% else %} + {% set runout = runout_resume if printer.toolhead.extruder == "extruder" else runout_resume1 %} + {% endif %} + {% endif %} + SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=filament_state VALUE={ runout } + +[gcode_macro _RUNOUT_HANDLE] +description: filament state update +gcode: + _FILAMENT_UPDATE + {% if printer.print_stats.state == "printing" %} + _RUNOUT_PAUSE + {% endif %} + +[gcode_macro _RUNOUT_PAUSE] +gcode: + {% set filament_state = printer['gcode_macro RESUME'].filament_state|default(False) %} + {% 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 + {% endif %} diff --git a/config/CreatBot_D600Pro2/base.cfg b/config/CreatBot_D600Pro2/base.cfg index 1933be45d..d42c4c249 100644 --- a/config/CreatBot_D600Pro2/base.cfg +++ b/config/CreatBot_D600Pro2/base.cfg @@ -94,7 +94,7 @@ step_pin: PD7 dir_pin: PD6 enable_pin: !PD5 rotation_distance: 5 -gear_ratio: 3:1 +gear_ratio: 2.5:1 microsteps: 16 full_steps_per_rotation: 200 endstop_pin: probe:z_virtual_endstop @@ -137,7 +137,7 @@ pwm_cycle_time: 0.3 [verify_heater chamber] max_error: 120 -# hysteresis: 0 +hysteresis: 100 check_gain_time: 3600 heating_gain: 0.01 @@ -149,15 +149,15 @@ kick_start_time: 1.0 off_below: 0.10 [filament_switch_sensor extruder] -pause_on_runout: True -runout_gcode: +pause_on_runout: False +runout_gcode: _RUNOUT_HANDLE event_delay: 3.0 pause_delay: 0.5 switch_pin: ^PC14 [filament_switch_sensor extruder1] -pause_on_runout: True -runout_gcode: +pause_on_runout: False +runout_gcode: _RUNOUT_HANDLE event_delay: 3.0 pause_delay: 0.5 switch_pin: ^PC15 @@ -252,9 +252,9 @@ min_extrude_temp: 180 pressure_advance: 0.03 pressure_advance_smooth_time:0.040 # control = pid -# pid_kp = 24.737 -# pid_ki = 1.137 -# pid_kd = 134.508 +# pid_kp = 21.950 +# pid_ki = 0.887 +# pid_kd = 135.815 [tmc5160 extruder] cs_pin:tool:PB7 @@ -301,9 +301,9 @@ min_extrude_temp: 180 pressure_advance: 0.032 pressure_advance_smooth_time:0.040 # control = pid -# pid_kp = 24.737 -# pid_ki = 1.137 -# pid_kd = 134.508 +# pid_kp = 21.950 +# pid_ki = 0.887 +# pid_kd = 135.815 [tmc5160 extruder1] cs_pin:tool:PC11 @@ -354,6 +354,8 @@ z_hop_speed: 10 [gcode_macro ENABLE_FORCE_MOVE] gcode: + SET_STEPPER_ENABLE STEPPER=stepper_x ENABLE=1 + SET_STEPPER_ENABLE STEPPER=stepper_y ENABLE=1 SET_KINEMATIC_POSITION X=300 Y=300 Z=300 [gcode_macro T0] @@ -365,6 +367,7 @@ gcode: SET_GCODE_OFFSET X=0 SET_SERVO SERVO=switch_nozzle angle=45 ACTIVATE_EXTRUDER EXTRUDER=extruder + _RUNOUT_HANDLE [gcode_macro T1] gcode: @@ -379,6 +382,7 @@ gcode: SET_GCODE_OFFSET X={x_offset} SET_SERVO SERVO=switch_nozzle angle=225 ACTIVATE_EXTRUDER EXTRUDER=extruder1 + _RUNOUT_HANDLE [gcode_macro PROBE_SERVO_OPEN] gcode: @@ -389,6 +393,11 @@ gcode: gcode: SET_SERVO SERVO=probe_servo angle=130 +[gcode_macro _START_PRINT_BASE] +description: Call when starting to print +gcode: + _RUNOUT_HANDLE + [gcode_macro START_PRINT] gcode: {% set BED_TEMP = params.BED|default(0)|float %} @@ -452,7 +461,7 @@ gcode: RESTORE_GCODE_STATE NAME=load_state [gcode_macro UNLOAD_FILAMENT] -variable_unload_distance: 120 +variable_unload_distance: 140 variable_purge_distance: 25 gcode: {% set speed = params.SPEED|default(200) %} @@ -490,6 +499,10 @@ gcode: T1 {% endif %} +######################################## +# GCODE +######################################## + [gcode_macro G28] rename_existing: C28 gcode: @@ -521,6 +534,22 @@ gcode: {% endif %} {% endif %} +[gcode_macro M109] +rename_existing: C109 +gcode: + {% set hotend = "extruder" %} + {% set s = params.S|default(0)|float %} + {% set t = params.T|default(0)|int %} + {% if params.S is defined %} + {% if t != 0 %} + {% set hotend = hotend ~ t %} + {% endif %} + SET_HEATER_TEMPERATURE HEATER={hotend} TARGET={s} + {% if s != 0 %} + TEMPERATURE_WAIT SENSOR={hotend} MINIMUM={s-3} MAXIMUM={s+3} + {% endif %} + {% endif %} + [gcode_macro M141] gcode: {% set s = params.S|default(0)|float %} @@ -528,13 +557,24 @@ gcode: SET_HEATER_TEMPERATURE HEATER=chamber target={s|int} {% endif %} +[gcode_macro M190] +rename_existing: C190 +gcode: + {% set s = params.S|default(0)|float %} + {% if params.S is defined %} + SET_HEATER_TEMPERATURE HEATER="heater_bed" TARGET={s} + {% if s != 0 %} + TEMPERATURE_WAIT SENSOR="heater_bed" MINIMUM={s-3} MAXIMUM={s+3} + {% endif %} + {% endif %} + [gcode_macro M191] gcode: {% set s = params.S|default(0)|float %} {% if params.S is defined %} M141 S{s} {% if s != 0 %} - TEMPERATURE_WAIT SENSOR="heater_generic chamber" MINIMUM={s-2} MAXIMUM={s+2} + TEMPERATURE_WAIT SENSOR="heater_generic chamber" MINIMUM={s-3} MAXIMUM={s+3} {% endif %} {% endif %} @@ -544,6 +584,10 @@ gcode: C84 SET_STEPPER_ENABLE STEPPER=stepper_z enable=1 +######################################## +# CANCEL_PRINT/PAUSE/RESUME/ +######################################## + [gcode_macro _CLIENT_VARIABLE] variable_use_custom_pos : True variable_custom_park_x : 300.0 @@ -562,8 +606,11 @@ variable_park_at_cancel_y : None variable_use_fw_retract : False variable_idle_timeout : 600 variable_runout_sensor : "" +variable_filament_sensor : "filament_switch_sensor extruder" +variable_filament_sensor1 : "filament_switch_sensor extruder1" +variable_user_temp_resume : "_USER_TEMP_RESUME" variable_user_pause_macro : "_USER_PAUSE" -variable_user_resume_macro: "_USER_RESUME" +variable_user_resume_macro: "" variable_user_cancel_macro: "_USER_CANCEL" gcode: # Nothing @@ -579,11 +626,7 @@ gcode: SET_GCODE_VARIABLE MACRO=RESUME VARIABLE={name} VALUE="{{'restore': restore, 'temp': temp}}" {% endfor %} -[gcode_macro RESUME] -variable_last_extruder_temp: {'restore': False, 'temp': 0} -variable_last_extruder1_temp: {'restore': False, 'temp': 0} - -[gcode_macro _USER_RESUME] +[gcode_macro _USER_TEMP_RESUME] gcode: {% set extruder_info = [ {'index': 0, 'name': 'last_extruder_temp'}, @@ -608,4 +651,121 @@ gcode: [gcode_macro _USER_CANCEL] gcode: - M84 \ No newline at end of file + G91 + G1 Z30 F600 ; lift nozzle + M84 + +[gcode_macro RESUME] +description: Resume the actual running print +rename_existing: RESUME_BASE +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 +gcode: + ##### get user parameters or use default ##### + {% 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 + #### Printer comming from timeout idle state #### + {% if printer.idle_timeout.state|upper == "IDLE" or idle_state %} + 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_temputer_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} + +[gcode_macro _ACT_RESUME] +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 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 restore_idle_timeout = printer['gcode_macro RESUME'].restore_idle_timeout|default(0) %} + {% set prompt_txt = [] %} + {% if filament_state %} + {% if do_resume %} + {% 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)} + {% 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) %} + {% 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 !!!" + {% for element in prompt_txt %} + RESPOND TYPE=command MSG='{"action:prompt_text %s" % element}' + {% endfor %} + RESPOND TYPE=command MSG="action:prompt_footer_button Ok|RESPOND TYPE=command MSG=action:prompt_end|info" + RESPOND TYPE=command MSG="action:prompt_show" + {% endif %} + +######################################## +# filament_runout +######################################## + +[gcode_macro _FILAMENT_UPDATE] +gcode: + {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %} + {% set runout_resume = True if client.filament_sensor|default("") == "" # no runout + else True if not printer[client.filament_sensor].enabled # sensor is disabled + else printer[client.filament_sensor].filament_detected %} # sensor status + {% set runout_resume1 = True if client.filament_sensor1|default("") == "" # no runout + else True if not printer[client.filament_sensor1].enabled # sensor1 is disabled + else printer[client.filament_sensor1].filament_detected %} # sensor1 status + ##### filament check ##### + {% if printer["dual_carriage"] is not defined %} + {% set runout = runout_resume if printer.toolhead.extruder == "extruder" else runout_resume1 %} + {% else %} + {% set current_idex_mode = printer["dual_carriage"].carriage_1|lower %} + {% if current_idex_mode == 'copy' or current_idex_mode == 'mirror' %} + {% set runout = (runout_resume == false or runout_resume1 == false) %} + {% else %} + {% set runout = runout_resume if printer.toolhead.extruder == "extruder" else runout_resume1 %} + {% endif %} + {% endif %} + SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=filament_state VALUE={ runout } + +[gcode_macro _RUNOUT_HANDLE] +description: filament state update +gcode: + _FILAMENT_UPDATE + {% if printer.print_stats.state == "printing" %} + _RUNOUT_PAUSE + {% endif %} + +[gcode_macro _RUNOUT_PAUSE] +gcode: + {% set filament_state = printer['gcode_macro RESUME'].filament_state|default(False) %} + {% 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 + {% endif %} diff --git a/config/CreatBot_D600Pro2/printer.cfg b/config/CreatBot_D600Pro2/printer.cfg index 03b88327f..b5500fb56 100644 --- a/config/CreatBot_D600Pro2/printer.cfg +++ b/config/CreatBot_D600Pro2/printer.cfg @@ -2,15 +2,15 @@ [extruder] control = pid -pid_kp = 39.960 -pid_ki = 2.537 -pid_kd = 157.344 +pid_kp = 21.950 +pid_ki = 0.887 +pid_kd = 135.815 [extruder1] control = pid -pid_kp = 39.960 -pid_ki = 2.537 -pid_kd = 157.344 +pid_kp = 21.950 +pid_ki = 0.887 +pid_kd = 135.815 [heater_bed] control = pid diff --git a/config/CreatBot_F430NX/base.cfg b/config/CreatBot_F430NX/base.cfg index 62f5cd1e1..732f6152a 100644 --- a/config/CreatBot_F430NX/base.cfg +++ b/config/CreatBot_F430NX/base.cfg @@ -228,15 +228,15 @@ initial_GREEN: 0.3 initial_BLUE: 0.3 [filament_switch_sensor extruder] -pause_on_runout: True -runout_gcode: +pause_on_runout: False +runout_gcode: _RUNOUT_HANDLE event_delay: 3.0 pause_delay: 0.5 switch_pin: ^PC14 [filament_switch_sensor extruder1] -pause_on_runout: True -runout_gcode: +pause_on_runout: False +runout_gcode: _RUNOUT_HANDLE event_delay: 3.0 pause_delay: 0.5 switch_pin: ^PC15 @@ -514,6 +514,10 @@ gcode: G4 P500 SET_SERVO SERVO=probe_servo angle=135 +[gcode_macro _START_PRINT_BASE] +description: Call when starting to print +gcode: + _RUNOUT_HANDLE [gcode_macro START_PRINT] gcode: @@ -670,6 +674,22 @@ gcode: C28 {homing_cmd} {% if 'X' in homing_cmd %} _RESTORE_DEFAULT_EXTRUDER + {% endif %} + {% endif %} + +[gcode_macro M109] +rename_existing: C109 +gcode: + {% set hotend = "extruder" %} + {% set s = params.S|default(0)|float %} + {% set t = params.T|default(0)|int %} + {% if params.S is defined %} + {% if t != 0 %} + {% set hotend = hotend ~ t %} + {% endif %} + SET_HEATER_TEMPERATURE HEATER={hotend} TARGET={s} + {% if s != 0 %} + TEMPERATURE_WAIT SENSOR={hotend} MINIMUM={s-3} MAXIMUM={s+3} {% endif %} {% endif %} @@ -680,13 +700,24 @@ gcode: SET_HEATER_TEMPERATURE HEATER=chamber target={s|int} {% endif %} +[gcode_macro M190] +rename_existing: C190 +gcode: + {% set s = params.S|default(0)|float %} + {% if params.S is defined %} + SET_HEATER_TEMPERATURE HEATER="heater_bed" TARGET={s} + {% if s != 0 %} + TEMPERATURE_WAIT SENSOR="heater_bed" MINIMUM={s-3} MAXIMUM={s+3} + {% endif %} + {% endif %} + [gcode_macro M191] gcode: {% set s = params.S|default(0)|float %} {% if params.S is defined %} M141 S{s} {% if s != 0 %} - TEMPERATURE_WAIT SENSOR="heater_generic chamber" MINIMUM={s-2} MAXIMUM={s+2} + TEMPERATURE_WAIT SENSOR="heater_generic chamber" MINIMUM={s-3} MAXIMUM={s+3} {% endif %} {% endif %} @@ -697,6 +728,10 @@ gcode: SET_STEPPER_ENABLE STEPPER=stepper_z enable=1 _RESTORE_DEFAULT_EXTRUDER +######################################## +# CANCEL_PRINT/PAUSE/RESUME/ +######################################## + [gcode_macro _CLIENT_VARIABLE] variable_use_custom_pos : True variable_custom_park_x : 200.0 @@ -715,8 +750,11 @@ variable_park_at_cancel_y : None variable_use_fw_retract : False variable_idle_timeout : 600 variable_runout_sensor : "" +variable_filament_sensor : "filament_switch_sensor extruder" +variable_filament_sensor1 : "filament_switch_sensor extruder1" +variable_user_temp_resume : "_USER_TEMP_RESUME" variable_user_pause_macro : "_USER_PAUSE" -variable_user_resume_macro: "_USER_RESUME" +variable_user_resume_macro: "" variable_user_cancel_macro: "_USER_CANCEL" gcode: # Nothing @@ -732,11 +770,7 @@ gcode: SET_GCODE_VARIABLE MACRO=RESUME VARIABLE={name} VALUE="{{'restore': restore, 'temp': temp}}" {% endfor %} -[gcode_macro RESUME] -variable_last_extruder_temp: {'restore': False, 'temp': 0} -variable_last_extruder1_temp: {'restore': False, 'temp': 0} - -[gcode_macro _USER_RESUME] +[gcode_macro _USER_TEMP_RESUME] gcode: {% set extruder_info = [ {'index': 0, 'name': 'last_extruder_temp'}, @@ -761,4 +795,118 @@ gcode: [gcode_macro _USER_CANCEL] gcode: - M84 \ No newline at end of file + G91 + G1 Z30 F600 ; lift nozzle + M84 + +[gcode_macro RESUME] +description: Resume the actual running print +rename_existing: RESUME_BASE +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 +gcode: + ##### get user parameters or use default ##### + {% 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 + #### Printer comming from timeout idle state #### + {% if printer.idle_timeout.state|upper == "IDLE" or idle_state %} + 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_temputer_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} +[gcode_macro _ACT_RESUME] +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 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 restore_idle_timeout = printer['gcode_macro RESUME'].restore_idle_timeout|default(0) %} + {% set prompt_txt = [] %} + {% if filament_state %} + {% if do_resume %} + {% 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)} + {% 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) %} + {% 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 !!!" + {% for element in prompt_txt %} + RESPOND TYPE=command MSG='{"action:prompt_text %s" % element}' + {% endfor %} + RESPOND TYPE=command MSG="action:prompt_footer_button Ok|RESPOND TYPE=command MSG=action:prompt_end|info" + RESPOND TYPE=command MSG="action:prompt_show" + {% endif %} +######################################## +# filament_runout +######################################## +[gcode_macro _FILAMENT_UPDATE] +gcode: + {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %} + {% set runout_resume = True if client.filament_sensor|default("") == "" # no runout + else True if not printer[client.filament_sensor].enabled # sensor is disabled + else printer[client.filament_sensor].filament_detected %} # sensor status + {% set runout_resume1 = True if client.filament_sensor1|default("") == "" # no runout + else True if not printer[client.filament_sensor1].enabled # sensor1 is disabled + else printer[client.filament_sensor1].filament_detected %} # sensor1 status + ##### filament check ##### + {% if printer["dual_carriage"] is not defined %} + {% set runout = runout_resume if printer.toolhead.extruder == "extruder" else runout_resume1 %} + {% else %} + {% set current_idex_mode = printer["dual_carriage"].carriage_1|lower %} + {% if current_idex_mode == 'copy' or current_idex_mode == 'mirror' %} + {% set runout = (runout_resume == false or runout_resume1 == false) %} + {% else %} + {% set runout = runout_resume if printer.toolhead.extruder == "extruder" else runout_resume1 %} + {% endif %} + {% endif %} + SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=filament_state VALUE={ runout } + +[gcode_macro _RUNOUT_HANDLE] +description: filament state update +gcode: + _FILAMENT_UPDATE + {% if printer.print_stats.state == "printing" %} + _RUNOUT_PAUSE + {% endif %} + +[gcode_macro _RUNOUT_PAUSE] +gcode: + {% set filament_state = printer['gcode_macro RESUME'].filament_state|default(False) %} + {% 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 + {% endif %}