aboutsummaryrefslogtreecommitdiffstats
path: root/klippy
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2016-11-18 13:39:48 -0500
committerKevin O'Connor <kevin@koconnor.net>2016-11-18 14:17:53 -0500
commitab1972d1cfeb8581016a8322786df441876da368 (patch)
treef1c1a573df541c7d86d6bcf53494653f28d4f3b6 /klippy
parente0aa067cc9e85d3244045afce34fc2e6764fa66e (diff)
downloadkutter-ab1972d1cfeb8581016a8322786df441876da368.tar.gz
kutter-ab1972d1cfeb8581016a8322786df441876da368.tar.xz
kutter-ab1972d1cfeb8581016a8322786df441876da368.zip
homing: Verify the endstops are no longer triggered after retract move
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'klippy')
-rw-r--r--klippy/cartesian.py2
-rw-r--r--klippy/delta.py2
-rw-r--r--klippy/homing.py32
3 files changed, 28 insertions, 8 deletions
diff --git a/klippy/cartesian.py b/klippy/cartesian.py
index f6dc3685..4907f58a 100644
--- a/klippy/cartesian.py
+++ b/klippy/cartesian.py
@@ -58,7 +58,7 @@ class CartKinematics:
homing_state.plan_home(list(coord), homepos, [s], s.homing_speed)
# Retract
coord[axis] = rpos
- homing_state.plan_move(list(coord), s.homing_speed)
+ homing_state.plan_retract(list(coord), [s], s.homing_speed)
# Home again
coord[axis] = r2pos
homing_state.plan_home(list(coord), homepos, [s], s.homing_speed/2.0)
diff --git a/klippy/delta.py b/klippy/delta.py
index 40df8ab6..9b12cb8a 100644
--- a/klippy/delta.py
+++ b/klippy/delta.py
@@ -96,7 +96,7 @@ class DeltaKinematics:
, s.homing_speed)
# Retract
coord[2] = homepos[2] - s.homing_retract_dist
- homing_state.plan_move(list(coord), s.homing_speed)
+ homing_state.plan_retract(list(coord), self.steppers, s.homing_speed)
# Home again
coord[2] -= s.homing_retract_dist
homing_state.plan_home(list(coord), homepos, self.steppers
diff --git a/klippy/homing.py b/klippy/homing.py
index 1cdd2543..1beebd57 100644
--- a/klippy/homing.py
+++ b/klippy/homing.py
@@ -21,8 +21,9 @@ class Homing:
def plan_home(self, forcepos, movepos, steppers, speed):
self.states.append((self.do_home, (forcepos, movepos, steppers, speed)))
self.states.append((self.do_wait_endstop, ()))
- def plan_move(self, newpos, speed):
- self.states.append((self.do_move, (newpos, speed)))
+ def plan_retract(self, newpos, steppers, speed):
+ self.states.append((self.do_retract, (newpos, steppers, speed)))
+ self.states.append((self.do_verify_retract, ()))
def plan_calc_position(self, callback):
self.states.append((self.do_calc_position, (callback,)))
def plan_axes_update(self, callback):
@@ -48,9 +49,14 @@ class Homing:
if coord[i] is not None:
thcoord[i] = coord[i]
return thcoord
- def do_move(self, newpos, speed):
+ def do_retract(self, newpos, steppers, speed):
# Issue a move command
self.toolhead.move(self.fill_coord(newpos), speed)
+ # Query endstops
+ print_time = self.toolhead.get_last_move_time()
+ for s in steppers:
+ es = s.query_endstop(print_time)
+ self.endstops.append((s.name, es))
return False
def do_home(self, forcepos, movepos, steppers, speed):
# Alter kinematics class to think printer is at forcepos
@@ -68,15 +74,29 @@ class Homing:
return False
def do_wait_endstop(self):
# Check if endstops have triggered
- for name, es in self.endstops:
+ while self.endstops:
+ name, es = self.endstops[0]
try:
if es.check_busy(self.eventtime):
return True
except mcu.MCUError, e:
raise EndstopError("Failed to home stepper %s: %s" % (
name, str(e)))
- # Finished
- del self.endstops[:]
+ self.endstops.pop(0)
+ return False
+ def do_verify_retract(self):
+ while self.endstops:
+ name, es = self.endstops[0]
+ try:
+ if es.check_busy(self.eventtime):
+ return True
+ except mcu.MCUError, e:
+ raise EndstopError("Failed to retract stepper %s: %s" % (
+ name, str(e)))
+ if es.get_last_triggered():
+ raise EndstopError("Endstop %s still triggered after retract" % (
+ name,))
+ self.endstops.pop(0)
return False
def do_calc_position(self, callback):
self.toolhead.set_position(self.fill_coord(callback(self)))