stepper_enable: Move enable tracking from stepper.py to stepper_enable.py

Move the enable line tracking out of the main stepper.py code.  This
simplifies the main kinematic code.

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This commit is contained in:
Kevin O'Connor
2019-11-12 12:49:21 -05:00
parent bfb34e0701
commit 0e30b862c7
5 changed files with 111 additions and 92 deletions

View File

@@ -13,11 +13,13 @@ class ManualStepper:
self.printer = config.get_printer()
if config.get('endstop_pin', None) is not None:
self.can_home = True
self.stepper = stepper.PrinterRail(
self.rail = stepper.PrinterRail(
config, need_position_minmax=False, default_position_endstop=0.)
self.steppers = self.rail.get_steppers()
else:
self.can_home = False
self.stepper = stepper.PrinterStepper(config)
self.rail = stepper.PrinterStepper(config)
self.steppers = [self.rail]
self.velocity = config.getfloat('velocity', 5., above=0.)
self.accel = config.getfloat('accel', 0., minval=0.)
self.next_cmd_time = 0.
@@ -26,9 +28,9 @@ class ManualStepper:
self.trapq = ffi_main.gc(ffi_lib.trapq_alloc(), ffi_lib.trapq_free)
self.trapq_append = ffi_lib.trapq_append
self.trapq_free_moves = ffi_lib.trapq_free_moves
self.stepper.setup_itersolve('cartesian_stepper_alloc', 'x')
self.stepper.set_trapq(self.trapq)
self.stepper.set_max_jerk(9999999.9, 9999999.9)
self.rail.setup_itersolve('cartesian_stepper_alloc', 'x')
self.rail.set_trapq(self.trapq)
self.rail.set_max_jerk(9999999.9, 9999999.9)
# Register commands
stepper_name = config.get_name().split()[1]
self.gcode = self.printer.lookup_object('gcode')
@@ -44,13 +46,19 @@ class ManualStepper:
self.next_cmd_time = print_time
def do_enable(self, enable):
self.sync_print_time()
self.stepper.motor_enable(self.next_cmd_time, enable)
stepper_enable = self.printer.lookup_object('stepper_enable')
if enable:
for s in self.steppers:
stepper_enable.motor_enable(s.get_name(), self.next_cmd_time)
else:
for s in self.steppers:
stepper_enable.motor_disable(s.get_name(), self.next_cmd_time)
self.sync_print_time()
def do_set_position(self, setpos):
self.stepper.set_position([setpos, 0., 0.])
self.rail.set_position([setpos, 0., 0.])
def do_move(self, movepos, speed, accel):
self.sync_print_time()
cp = self.stepper.get_commanded_position()
cp = self.rail.get_commanded_position()
dist = movepos - cp
axis_r, accel_t, cruise_t, cruise_v = force_move.calc_move_time(
dist, speed, accel)
@@ -59,14 +67,14 @@ class ManualStepper:
cp, 0., 0., axis_r, 0., 0.,
0., cruise_v, accel)
self.next_cmd_time += accel_t + cruise_t + accel_t
self.stepper.generate_steps(self.next_cmd_time)
self.rail.generate_steps(self.next_cmd_time)
self.trapq_free_moves(self.trapq, self.next_cmd_time)
self.sync_print_time()
def do_homing_move(self, movepos, speed, accel, triggered):
if not self.can_home:
raise self.gcode.error("No endstop for this manual stepper")
# Notify endstops of upcoming home
endstops = self.stepper.get_endstops()
endstops = self.rail.get_endstops()
for mcu_endstop, name in endstops:
mcu_endstop.home_prepare()
# Start endstop checking