From 2f17f2207a056bef5449869161fa56e50011da31 Mon Sep 17 00:00:00 2001 From: zeleps <39417467+zeleps@users.noreply.github.com> Date: Tue, 5 Jan 2021 07:48:42 +0200 Subject: [PATCH] Don't apply hotend_offset.z to Z soft endstops (#20675) Co-authored-by: Scott Lahteine --- Marlin/src/feature/solenoid.cpp | 5 +++++ Marlin/src/module/motion.cpp | 15 ++++++++------- Marlin/src/module/tool_change.cpp | 4 +--- Marlin/src/module/tool_change.h | 3 ++- 4 files changed, 16 insertions(+), 11 deletions(-) diff --git a/Marlin/src/feature/solenoid.cpp b/Marlin/src/feature/solenoid.cpp index 97a74c6d19..623f223caa 100644 --- a/Marlin/src/feature/solenoid.cpp +++ b/Marlin/src/feature/solenoid.cpp @@ -58,6 +58,11 @@ static void set_solenoid(const uint8_t num, const bool active) { #endif default: SERIAL_ECHO_MSG(STR_INVALID_SOLENOID); break; } + + #if ENABLED(PARKING_EXTRUDER) + if (!active && active_extruder == num) // If active extruder's solenoid is disabled, carriage is considered parked + parking_extruder_set_parked(true); + #endif } void enable_solenoid(const uint8_t num) { set_solenoid(num, true); } diff --git a/Marlin/src/module/motion.cpp b/Marlin/src/module/motion.cpp index 6a6d7bf9eb..99853f24df 100644 --- a/Marlin/src/module/motion.cpp +++ b/Marlin/src/module/motion.cpp @@ -595,16 +595,17 @@ void restore_feedrate_and_scaling() { // Software endstops are relative to the tool 0 workspace, so // the movement limits must be shifted by the tool offset to // retain the same physical limit when other tools are selected. - if (old_tool_index != new_tool_index) { - const float offs = hotend_offset[new_tool_index][axis] - hotend_offset[old_tool_index][axis]; - soft_endstop.min[axis] += offs; - soft_endstop.max[axis] += offs; - } - else { - const float offs = hotend_offset[active_extruder][axis]; + + if (new_tool_index == old_tool_index || axis == Z_AXIS) { // The Z axis is "special" and shouldn't be modified + const float offs = (axis == Z_AXIS) ? 0 : hotend_offset[active_extruder][axis]; soft_endstop.min[axis] = base_min_pos(axis) + offs; soft_endstop.max[axis] = base_max_pos(axis) + offs; } + else { + const float diff = hotend_offset[new_tool_index][axis] - hotend_offset[old_tool_index][axis]; + soft_endstop.min[axis] += diff; + soft_endstop.max[axis] += diff; + } #else diff --git a/Marlin/src/module/tool_change.cpp b/Marlin/src/module/tool_change.cpp index f3f3ee0595..7f581131d8 100644 --- a/Marlin/src/module/tool_change.cpp +++ b/Marlin/src/module/tool_change.cpp @@ -292,8 +292,6 @@ inline void fast_line_to_current(const AxisEnum fr_axis) { _line_to_current(fr_a return true; } - void parking_extruder_set_parked() { extruder_parked = true; } - inline void parking_extruder_tool_change(const uint8_t new_tool, bool no_move) { if (!no_move) { @@ -378,7 +376,7 @@ inline void fast_line_to_current(const AxisEnum fr_axis) { _line_to_current(fr_a planner.synchronize(); // Always sync the final move DEBUG_POS("PE Tool-Change done.", current_position); - extruder_parked = false; + parking_extruder_set_parked(false); } else if (do_solenoid_activation) { // && nomove == true // Deactivate current extruder solenoid diff --git a/Marlin/src/module/tool_change.h b/Marlin/src/module/tool_change.h index d908b496ae..6b739604f0 100644 --- a/Marlin/src/module/tool_change.h +++ b/Marlin/src/module/tool_change.h @@ -93,8 +93,9 @@ void pe_solenoid_init(); + extern bool extruder_parked; + inline void parking_extruder_set_parked(const bool parked) { extruder_parked = parked; } bool parking_extruder_unpark_after_homing(const uint8_t final_tool, bool homed_towards_final_tool); - void parking_extruder_set_parked(); #elif ENABLED(MAGNETIC_PARKING_EXTRUDER)