Advertisement
tripstar76

Klipper heating cancel

Feb 5th, 2024 (edited)
779
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.10 KB | Source Code | 0 0
  1. # HEAT_SOAK _HEATER="heater_bed" TARGET_TEMP=[bed_temperature_initial_layer_single] DURATION=5
  2. # HEAT_SOAK _HEATER="heater_bed" TARGET_TEMP=30 DURATION=5
  3. # HEAT_SOAK _HEATER="extruder" TARGET_TEMP=[nozzle_temperature_initial_layer] DURATION=0
  4.  
  5. # ToDo
  6. # disable a print starting if heat soak running, also disable heat soak if print running
  7.  
  8. [gcode_macro HEAT_SOAK]
  9. description: heats and soaks
  10.  
  11. variable_heaty: None
  12. variable_target_temp: 0
  13. variable_current_temp: 0
  14. variable_stage: None ## heating -> soaking -> done -> None
  15.  
  16. ## in seconds
  17. variable_check_interval: 10
  18. variable_soak_time_remaining: 0
  19. variable_total_time_elapsed: 0
  20.  
  21. # {% set pa = (printer.save_variables.variables.is_printing) %}
  22.  
  23. gcode:
  24.     {% set isP = (printer.save_variables.variables.is_printing) %}
  25.     {% if isP %}
  26.         M117 possible print ongoing {params._HEATER}
  27.     {% else %}
  28.         SAVE_VARIABLE VARIABLE=is_printing VALUE=True
  29.         {% if params._HEATER == "extruder" %}
  30.             {% set _HEATER = "extruder" %}
  31.             {% set TARGET_TEMP = params.TARGET_TEMP | default(printer.save_variables.variables.my_nozzle_temp) | float %}
  32.             {% set DURATION = params.DURATION | default(0) %}  ## no soak for nozzle
  33.             {% set CURRENT_TEMP = printer.extruder.temperature %}
  34.         {% else %}
  35.             {% set _HEATER = ("heater_bed" | string) %}
  36.             {% set TARGET_TEMP = params.TARGET_TEMP | default(printer.save_variables.variables.my_bed_temp) | float %}
  37.             {% set DURATION = (params.DURATION | default(printer.save_variables.variables.my_bed_soak) | int) * 60 %} ## minutes to seconds
  38.             {% set CURRENT_TEMP = printer.heater_bed.temperature %}
  39.         {% endif %}
  40.  
  41.         {% if CURRENT_TEMP < TARGET_TEMP - (TARGET_TEMP * 0.50) %}
  42.             {% set DURATION = DURATION|int %}
  43.         {% elif CURRENT_TEMP < (TARGET_TEMP * 0.75) %}
  44.             {% set DURATION = DURATION / 2|int %}
  45.         {% else %}
  46.             {% set DURATION = DURATION * 0.75|int %}
  47.         {% endif %}
  48.  
  49.         SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=heaty VALUE="'{ _HEATER }'"
  50.         SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=target_temp VALUE={ TARGET_TEMP }
  51.         SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=stage VALUE="'heating'"
  52.         SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=soak_time_remaining VALUE={ DURATION }
  53.         SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=total_time_elapsed  VALUE=0
  54.  
  55.         ;; fire up the heater
  56.         SET_HEATER_TEMPERATURE HEATER={ _HEATER } TARGET={ TARGET_TEMP }
  57.         M117 Heating {_HEATER} {TARGET_TEMP} then {DURATION/60}m soak time, currrent temp {CURRENT_TEMP}
  58.        
  59.         ;; run the fan at 50% to circulate air
  60.         M106 S{ 50 * 255 / 100 }
  61.        
  62.         ;; put the bed and nozzle where they're a safe distance apart
  63.        {% if params._HEATER == "heater_bed" %}
  64.            G32
  65.            ADAPTIVE_BED_MESH
  66.            CENTER
  67.            SET_IDLE_TIMEOUT TIMEOUT=3600
  68.             {% if not printer.save_variables.variables.is_voron_new %}
  69.                 M84 ;; turn off steppers
  70.             {% endif %}
  71.        {% else %}
  72.            G32
  73.            G1 X160 Y0 Z0
  74.        {% endif %}
  75.        
  76.        UPDATE_DELAYED_GCODE ID=heat_soaker DURATION={ check_interval }
  77.  
  78.        ;; pause the print during heat soak
  79.        BASE_PAUSE
  80.    {% endif %}
  81.  
  82. [gcode_macro CANCEL_HEAT_SOAK]
  83. description: cancels an in-progress HEAT_SOAK cycle
  84. gcode:
  85.     SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=stage VALUE="'cancel'"
  86.     UPDATE_DELAYED_GCODE ID=heat_soaker DURATION=1
  87.  
  88. [delayed_gcode heat_soaker]
  89. ; ## debug
  90. ; { action_respond_info( printer['gcode_macro HEAT_SOAK'] | tojson )}
  91. gcode:
  92.     {% set heat_soak = printer['gcode_macro HEAT_SOAK'] %}
  93.  
  94.     ## update total time elapsed
  95.     {% set total_time_elapsed = heat_soak.total_time_elapsed + heat_soak.check_interval %}
  96.     SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=total_time_elapsed VALUE={ total_time_elapsed }
  97.  
  98.     {% set stage = heat_soak.stage %}
  99.     {% if heat_soak.heaty == "heater_bed" %}
  100.         {% if stage == "heating" and printer.heater_bed.temperature >= (heat_soak.target_temp - 1) %}
  101.             {% set stage = "soaking" %}
  102.         {% endif %}
  103.     {% else %}
  104.         {% if stage == "heating" and printer.extruder.temperature >= (heat_soak.target_temp - 1) %}
  105.             {% set stage = "soaking" %}
  106.         {% endif %}
  107.     {% endif %}
  108.  
  109.     {% if stage == "soaking" %}
  110.         ## update soak countdown
  111.         {% set soak_time_remaining = [heat_soak.soak_time_remaining - heat_soak.check_interval, 0] | max %}
  112.         SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=soak_time_remaining VALUE={ soak_time_remaining }
  113.  
  114.         {% if soak_time_remaining == 0 %}
  115.             {% set stage = "done" %}
  116.         {% endif %}
  117.     {% endif %}
  118.  
  119.     SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=stage VALUE="'{ stage }'"
  120.  
  121.     {% if stage in ("done", "cancel") %}
  122.  
  123.         {% if stage == "cancel" %}
  124.             {% set stage = "done" %}
  125.             TURN_OFF_HEATERS
  126.             M107 ; turn off fan
  127.  
  128.             ;; heat soak was cancelled -- also cancel the print
  129.             CANCEL_PRINT
  130.         {% else %}
  131.             M117 { "soak complete after %.1fm" | format(total_time_elapsed / 60.0) }
  132.  
  133.             ;; heat soak is complete. resume / start the print
  134.             BASE_RESUME
  135.         {% endif %}
  136.  
  137.         ## reset all state vars, except stage, which may be queried via the api
  138.         SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=heaty VALUE=None
  139.         SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=target_temp VALUE=0
  140.         SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=soak_time_remaining VALUE=0
  141.         SET_GCODE_VARIABLE MACRO=HEAT_SOAK VARIABLE=total_time_elapsed VALUE=0
  142.  
  143.         SET_IDLE_TIMEOUT TIMEOUT={ printer.configfile.config.idle_timeout.timeout }
  144.        SAVE_VARIABLE VARIABLE=is_printing VALUE=False
  145.        
  146.     {% else %}
  147.  
  148.         {% if total_time_elapsed % 30 == 0 %}
  149.             ## output status periodically
  150.             {% if stage == "heating" %}
  151.                 M117 { "heating -- %.1fm elapsed" | format(total_time_elapsed / 60.0) }
  152.             {% elif stage == "soaking" %}
  153.                 M117 { "soaking -- %.1fm remaining" | format(soak_time_remaining / 60.0) }
  154.             {% endif %}
  155.         {% endif %}
  156.  
  157.         ## trigger ourselves again
  158.         UPDATE_DELAYED_GCODE ID=heat_soaker DURATION={ heat_soak.check_interval }
  159.  
  160.         ## dwell for 1ms to prevent from going idle
  161.         G4 P1
  162.  
  163.     {% endif %}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement