Skip to content

Commit 7213ad7

Browse files
authored
[fix] Updates to help with false clog/feed detections (#610)
* Addresses false clog/feed detections during the purge/poop operations by implementing two key fixes: resetting filament position when starting a new print, and temporarily disabling fault detection during the poop macro. * Adding M400 at the beginning of poop and kick and at the end of brush macros
1 parent af2aa09 commit 7213ad7

7 files changed

Lines changed: 49 additions & 6 deletions

File tree

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
99
### Added:
1010
- The afc-debug.sh script will now upload the AFC statistics from moonraker for easier troubleshooting.
1111

12+
## Fixed
13+
- Updates to help with false clog/feed detections
14+
- Resetting filament position for clog detection when starting a new print
15+
1216
## [2026-01-14]
1317
### Fix:
1418
- Implemented some fixes to prevent klipper crashing when calibrating HTLF units

config/macros/Brush.cfg

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,7 @@ gcode:
144144
SET_VELOCITY_LIMIT ACCEL={saved_accel}
145145

146146
AFC_ENABLE_SKEW
147+
M400
147148

148149
#--=================================================================================-
149150
#------- Helper macro for brush servo -----------------------------------------------

config/macros/Kick.cfg

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ gcode:
1313
{% set z_after_kick = vars['z_after_kick'] | default(10) | float %}
1414
{% set kick_speed = vars['kick_speed'] | default(150)*60 | float %}
1515
{% set kick_accel = vars['kick_accel'] | default(0) | float %}
16-
16+
17+
M400
1718
# Get printer bounds to make sure none of our kick moves fall outside of them
1819
# Check for IDEX
1920
{% if printer.dual_carriage is defined %}

config/macros/Poop.cfg

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ gcode:
2424
{% set iteration_z_change = vars['iteration_z_change']| default(0.6) | float %}
2525
{% set max_iterations_per_blob= vars['max_iterations_per_blob'] | default(3) | int %}
2626
{% set purge_z = vars['purge_z'] | default(0) | float %}
27-
27+
28+
M400
2829
{% if verbose > 0 %}
2930
RESPOND TYPE=command MSG='AFC_Poop: Starting poop'
3031
{% endif %}

extras/AFC.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
try: from extras.AFC_stats import AFCStats
3636
except: raise error(ERROR_STR.format(import_lib="AFC_stats", trace=traceback.format_exc()))
3737

38-
AFC_VERSION="1.0.34"
38+
AFC_VERSION="1.0.35"
3939

4040
# Class for holding different states so its clear what all valid states are
4141
class State:
@@ -469,6 +469,13 @@ def in_print_reactor_timer(self, eventtime):
469469
self.current_toolchange = -1 # Reset
470470
self.logger.info("Total number of toolchanges set to {}".format(self.number_of_toolchanges))
471471

472+
# Get current lane and update position to reset fault detection as sometimes
473+
# purging in PRINT_START can lead to false positive detections
474+
current_lane = self.function.get_current_lane_obj()
475+
if current_lane:
476+
if current_lane.buffer_obj is not None:
477+
current_lane.buffer_obj.update_filament_error_pos()
478+
472479
return self.reactor.NEVER
473480

474481
def _get_default_material_temps(self, cur_lane):
@@ -1251,7 +1258,9 @@ def TOOL_LOAD(self, cur_lane, purge_length=None):
12511258
cur_lane.sync_to_extruder()
12521259
# Update tool and lane status.
12531260
cur_lane.set_loaded()
1254-
cur_lane.enable_buffer()
1261+
# Setting disable_fault so that fault detection is turned off for users
1262+
# that utilize poop
1263+
cur_lane.enable_buffer(disable_fault=True)
12551264
self.save_vars()
12561265

12571266
# Activate the tool-loaded LED and handle filament operations if enabled.
@@ -1281,6 +1290,8 @@ def TOOL_LOAD(self, cur_lane, purge_length=None):
12811290
self.afcDeltaTime.log_with_time("TOOL_LOAD: After second wipe")
12821291
self.function.log_toolhead_pos()
12831292

1293+
cur_lane.enable_fault_detection()
1294+
12841295
# Update lane and extruder state for tracking.
12851296
cur_extruder.lane_loaded = cur_lane.name
12861297
self.spool.set_active_spool(cur_lane.spool_id)

extras/AFC_buffer.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,19 @@ def get_fault_sensitivity(self, sensitivity):
132132
else:
133133
return 0
134134

135+
def disable_fault_sensitivity(self):
136+
"""
137+
Helper function to easily disable fault detection
138+
"""
139+
self.fault_sensitivity = 0
140+
141+
def restore_fault_sensitivity(self):
142+
"""
143+
Helper function to easily set fault sensitivity back based on passed in
144+
filament_error_sensitivity variable
145+
"""
146+
self.fault_sensitivity = self.get_fault_sensitivity(self.error_sensitivity)
147+
135148
def setup_fault_timer(self):
136149
"""
137150
Set up the fault detection timer and initialize error position tracking.
@@ -165,7 +178,7 @@ def fault_detection_enabled(self):
165178
166179
:return boolean: True if printer is printing with movement and sensitivity > 0
167180
"""
168-
if self.error_sensitivity > 0:
181+
if self.fault_sensitivity > 0:
169182
return True
170183
else:
171184
return False

extras/AFC_lane.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -942,16 +942,28 @@ def set_unloaded(self):
942942
self.afc.spool.set_active_spool(None)
943943
self.unit_obj.lane_tool_unloaded(self)
944944

945-
def enable_buffer(self):
945+
def enable_buffer(self, disable_fault: bool=False):
946946
"""
947947
Enable the buffer if `buffer_name` is set.
948948
Retrieves the buffer object and calls its `enable_buffer()` method to activate it.
949+
950+
:param disable_fault: Set to True to disable fault detection when enabling buffer
949951
"""
950952
if self.buffer_obj is not None:
953+
if disable_fault: self.buffer_obj.disable_fault_sensitivity()
951954
self.buffer_obj.enable_buffer()
952955
self.espooler.enable_timer()
953956
self.enable_weight_timer()
954957

958+
def enable_fault_detection(self):
959+
"""
960+
Helper function to restore fault sensitivity and enables buffer to reactivate
961+
fault timer and multiplier.
962+
"""
963+
if self.buffer_obj is not None:
964+
self.buffer_obj.restore_fault_sensitivity()
965+
self.buffer_obj.enable_buffer()
966+
955967
def disable_buffer(self):
956968
"""
957969
Disable the buffer if `buffer_name` is set.

0 commit comments

Comments
 (0)