aboutsummaryrefslogtreecommitdiffstats
path: root/klippy/extras/homing.py
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2021-03-29 13:34:25 -0400
committerKevin O'Connor <kevin@koconnor.net>2021-03-29 21:20:57 -0400
commit37a263c0b94fd77197a8c053ce08e4f6e8c17407 (patch)
treefea96858757fc1c43e88d23234b32ea0fa1f0413 /klippy/extras/homing.py
parent38719c13597b9fabbb444a313d66bfc697d7cac8 (diff)
downloadkutter-37a263c0b94fd77197a8c053ce08e4f6e8c17407.tar.gz
kutter-37a263c0b94fd77197a8c053ce08e4f6e8c17407.tar.xz
kutter-37a263c0b94fd77197a8c053ce08e4f6e8c17407.zip
homing: Move homing logic from manual_stepper.py to homing.py
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'klippy/extras/homing.py')
-rw-r--r--klippy/extras/homing.py43
1 files changed, 27 insertions, 16 deletions
diff --git a/klippy/extras/homing.py b/klippy/extras/homing.py
index 75607141..ffcd5a20 100644
--- a/klippy/extras/homing.py
+++ b/klippy/extras/homing.py
@@ -18,9 +18,12 @@ def multi_complete(printer, completions):
# Implementation of homing/probing moves
class HomingMove:
- def __init__(self, printer):
+ def __init__(self, printer, endstops, toolhead=None):
self.printer = printer
- self.toolhead = printer.lookup_object('toolhead')
+ self.endstops = endstops
+ if toolhead is None:
+ toolhead = printer.lookup_object('toolhead')
+ self.toolhead = toolhead
self.end_mcu_pos = []
def _calc_endstop_rate(self, mcu_endstop, movepos, speed):
startpos = self.toolhead.get_position()
@@ -34,24 +37,27 @@ class HomingMove:
if max_steps <= 0.:
return .001
return move_t / max_steps
- def homing_move(self, movepos, endstops, speed, probe_pos=False):
+ def homing_move(self, movepos, speed, probe_pos=False,
+ triggered=True, check_triggered=True):
# Notify start of homing/probing move
self.printer.send_event("homing:homing_move_begin",
- [es for es, name in endstops])
+ [es for es, name in self.endstops])
# Note start location
self.toolhead.flush_step_generation()
kin = self.toolhead.get_kinematics()
for s in kin.get_steppers():
s.set_tag_position(s.get_commanded_position())
start_mcu_pos = [(s, name, s.get_mcu_position())
- for es, name in endstops for s in es.get_steppers()]
+ for es, name in self.endstops
+ for s in es.get_steppers()]
# Start endstop checking
print_time = self.toolhead.get_last_move_time()
endstop_triggers = []
- for mcu_endstop, name in endstops:
+ for mcu_endstop, name in self.endstops:
rest_time = self._calc_endstop_rate(mcu_endstop, movepos, speed)
wait = mcu_endstop.home_start(print_time, ENDSTOP_SAMPLE_TIME,
- ENDSTOP_SAMPLE_COUNT, rest_time)
+ ENDSTOP_SAMPLE_COUNT, rest_time,
+ triggered=triggered)
endstop_triggers.append(wait)
all_endstop_trigger = multi_complete(self.printer, endstop_triggers)
self.toolhead.dwell(HOMING_START_DELAY)
@@ -63,9 +69,9 @@ class HomingMove:
error = "Error during homing move: %s" % (str(e),)
# Wait for endstops to trigger
move_end_print_time = self.toolhead.get_last_move_time()
- for mcu_endstop, name in endstops:
+ for mcu_endstop, name in self.endstops:
did_trigger = mcu_endstop.home_wait(move_end_print_time)
- if not did_trigger and error is None:
+ if not did_trigger and check_triggered and error is None:
error = "Failed to home %s: Timeout during homing" % (name,)
# Determine stepper halt positions
self.toolhead.flush_step_generation()
@@ -80,7 +86,7 @@ class HomingMove:
# Signal homing/probing move complete
try:
self.printer.send_event("homing:homing_move_end",
- [es for es, name in endstops])
+ [es for es, name in self.endstops])
except self.printer.command_error as e:
if error is None:
error = str(e)
@@ -125,8 +131,8 @@ class Homing:
# Perform first home
endstops = [es for rail in rails for es in rail.get_endstops()]
hi = rails[0].get_homing_info()
- hmove = HomingMove(self.printer)
- hmove.homing_move(movepos, endstops, hi.speed)
+ hmove = HomingMove(self.printer, endstops)
+ hmove.homing_move(movepos, hi.speed)
# Perform second home
if hi.retract_dist:
# Retract
@@ -140,8 +146,8 @@ class Homing:
forcepos = [rp - ad * retract_r
for rp, ad in zip(retractpos, axes_d)]
self.toolhead.set_position(forcepos)
- hmove = HomingMove(self.printer)
- hmove.homing_move(movepos, endstops, hi.second_homing_speed)
+ hmove = HomingMove(self.printer, endstops)
+ hmove.homing_move(movepos, hi.second_homing_speed)
if hmove.check_no_movement() is not None:
raise self.printer.command_error(
"Endstop %s still triggered after retract"
@@ -165,10 +171,15 @@ class PrinterHoming:
# Register g-code commands
gcode = self.printer.lookup_object('gcode')
gcode.register_command('G28', self.cmd_G28)
+ def manual_home(self, toolhead, endstops, pos, speed,
+ triggered, check_triggered):
+ hmove = HomingMove(self.printer, endstops, toolhead)
+ hmove.homing_move(pos, speed, triggered=triggered,
+ check_triggered=check_triggered)
def probing_move(self, mcu_probe, pos, speed):
- hmove = HomingMove(self.printer)
endstops = [(mcu_probe, "probe")]
- epos = hmove.homing_move(pos, endstops, speed, probe_pos=True)
+ hmove = HomingMove(self.printer, endstops)
+ epos = hmove.homing_move(pos, speed, probe_pos=True)
if hmove.check_no_movement() is not None:
raise self.printer.command_error(
"Probe triggered prior to movement")