diff options
author | Tircown <74233386+Tircown@users.noreply.github.com> | 2021-06-28 00:37:05 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-06-27 18:37:05 -0400 |
commit | 4d559633e3a3f9e4aba585c30422c8f5772f2b46 (patch) | |
tree | 0b15dfaa99198277ff53fe7c0a1fbacc70882510 /klippy/kinematics/hybrid_corexz.py | |
parent | 274d52729ae9ba377a958b85b546e306e83b8a1b (diff) | |
download | kutter-4d559633e3a3f9e4aba585c30422c8f5772f2b46.tar.gz kutter-4d559633e3a3f9e4aba585c30422c8f5772f2b46.tar.xz kutter-4d559633e3a3f9e4aba585c30422c8f5772f2b46.zip |
kinematics: Add dual_carriage to hybrid-corexyz (#4296)
- Add dual_carriage abilities for hybrid-corexy and hybrid-corexz
- Introduce the module idex_mode
- Fix add_stepper to the correct rail in hybrid-corexy
Signed-off-by: Fabrice GALLET <tircown@gmail.com>
Diffstat (limited to 'klippy/kinematics/hybrid_corexz.py')
-rw-r--r-- | klippy/kinematics/hybrid_corexz.py | 43 |
1 files changed, 39 insertions, 4 deletions
diff --git a/klippy/kinematics/hybrid_corexz.py b/klippy/kinematics/hybrid_corexz.py index 47aa430e..e6e471ab 100644 --- a/klippy/kinematics/hybrid_corexz.py +++ b/klippy/kinematics/hybrid_corexz.py @@ -4,7 +4,7 @@ # # This file may be distributed under the terms of the GNU GPLv3 license. import logging -import stepper +import stepper, idex_modes # The hybrid-corexz kinematic is also known as Markforged kinematics class HybridCoreXZKinematics: @@ -23,6 +23,26 @@ class HybridCoreXZKinematics: ranges = [r.get_range() for r in self.rails] self.axes_min = toolhead.Coord(*[r[0] for r in ranges], e=0.) self.axes_max = toolhead.Coord(*[r[1] for r in ranges], e=0.) + self.dc_module = None + if config.has_section('dual_carriage'): + dc_config = config.getsection('dual_carriage') + # dummy for cartesian config users + dc_config.getchoice('axis', {'x': 'x'}, default='x') + # setup second dual carriage rail + self.rails.append(stepper.PrinterRail(dc_config)) + self.rails[2].get_endstops()[0][0].add_stepper( + self.rails[3].get_steppers()[0]) + self.rails[3].setup_itersolve('cartesian_stepper_alloc', 'z') + dc_rail_0 = idex_modes.DualCarriagesRail( + self.printer, self.rails[0], axis=0, active=True, + stepper_alloc_active=('corexz_stepper_alloc','-'), + stepper_alloc_inactive=('cartesian_reverse_stepper_alloc','z')) + dc_rail_1 = idex_modes.DualCarriagesRail( + self.printer, self.rails[3], axis=0, active=False, + stepper_alloc_active=('corexz_stepper_alloc','+'), + stepper_alloc_inactive=('cartesian_stepper_alloc','z')) + self.dc_module = idex_modes.DualCarriages(self.printer, + dc_rail_0, dc_rail_1, axis=0) for s in self.get_steppers(): s.set_trapq(toolhead.get_trapq()) toolhead.register_step_generator(s.generate_steps) @@ -39,7 +59,15 @@ class HybridCoreXZKinematics: return [s for rail in self.rails for s in rail.get_steppers()] def calc_position(self, stepper_positions): pos = [stepper_positions[rail.get_name()] for rail in self.rails] - return [pos[0] + pos[2], pos[1], pos[2]] + if (self.dc_module is not None and 'CARRIAGE_1' == \ + self.dc_module.get_status()['active_carriage']): + return [pos[0] - pos[2], pos[1], pos[2]] + else: + return [pos[0] + pos[2], pos[1], pos[2]] + def update_limits(self, i, range): + self.limits[i] = range + def override_rail(self, i, rail): + self.rails[i] = rail def set_position(self, newpos, homing_axes): for i, rail in enumerate(self.rails): rail.set_position(newpos) @@ -62,7 +90,14 @@ class HybridCoreXZKinematics: homing_state.home_rails([rail], forcepos, homepos) def home(self, homing_state): for axis in homing_state.get_axes(): - self._home_axis(homing_state, axis, self.rails[axis]) + if (self.dc_module is not None and axis == 0): + self.dc_module.save_idex_state() + for i in [0,1]: + self.dc_module.toggle_active_dc_rail(i) + self._home_axis(homing_state, axis, self.rails[0]) + self.dc_module.restore_idex_state() + else: + self._home_axis(homing_state, axis, self.rails[axis]) def _motor_off(self, print_time): self.limits = [(1.0, -1.0)] * 3 def _check_endstops(self, move): @@ -93,7 +128,7 @@ class HybridCoreXZKinematics: return { 'homed_axes': "".join(axes), 'axis_minimum': self.axes_min, - 'axis_maximum': self.axes_max, + 'axis_maximum': self.axes_max } def load_kinematics(toolhead, config): |