aboutsummaryrefslogtreecommitdiffstats
path: root/klippy/extruder.py
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2017-05-02 08:57:38 -0400
committerKevin O'Connor <kevin@koconnor.net>2017-05-02 08:57:38 -0400
commit98f2adbcb5a19c58a196a316e8db0eb076b635b0 (patch)
tree789871524e48fd88d2c59c08532d3e796000f55c /klippy/extruder.py
parentc9d21574d85e180eac4371e09a8ab977312b0ea7 (diff)
downloadkutter-98f2adbcb5a19c58a196a316e8db0eb076b635b0.tar.gz
kutter-98f2adbcb5a19c58a196a316e8db0eb076b635b0.tar.xz
kutter-98f2adbcb5a19c58a196a316e8db0eb076b635b0.zip
extruder: Rework maximum retraction check
On a retract move (which are common during "wipe" operations), treat the move as if it were an extrude only move. It's valid for a retract move to reverse more filament then it would be practical to push. Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'klippy/extruder.py')
-rw-r--r--klippy/extruder.py15
1 files changed, 8 insertions, 7 deletions
diff --git a/klippy/extruder.py b/klippy/extruder.py
index 2feff175..0a77902b 100644
--- a/klippy/extruder.py
+++ b/klippy/extruder.py
@@ -49,15 +49,16 @@ class PrinterExtruder:
if not self.heater.can_extrude:
raise homing.EndstopMoveError(
move.end_pos, "Extrude below minimum temp")
- if not move.is_kinematic_move:
- # Extrude only move - limit accel and velocity
+ if not move.is_kinematic_move or move.extrude_r < 0.:
+ # Extrude only move (or retraction move) - limit accel and velocity
if abs(move.axes_d[3]) > self.max_e_dist:
raise homing.EndstopMoveError(
- move.end_pos, "Extrude only move too long")
- move.limit_speed(self.max_e_velocity, self.max_e_accel)
- elif (abs(move.extrude_r) > self.max_extrude_ratio
- and (abs(move.axes_d[3])
- > self.nozzle_diameter*self.max_extrude_ratio)):
+ move.end_pos, "Extrude move too long")
+ inv_extrude_r = 1. / abs(move.extrude_r)
+ move.limit_speed(self.max_e_velocity * inv_extrude_r
+ , self.max_e_accel * inv_extrude_r)
+ elif (move.extrude_r > self.max_extrude_ratio
+ and move.axes_d[3] > self.nozzle_diameter*self.max_extrude_ratio):
logging.debug("Overextrude: %s vs %s" % (
move.extrude_r, self.max_extrude_ratio))
raise homing.EndstopMoveError(