From 1c890a9da0735c36a6ece7dc21f5bc3d6f9ec7ed Mon Sep 17 00:00:00 2001 From: InsanityAutomation Date: Thu, 17 Sep 2020 11:18:48 -0400 Subject: [PATCH] Apply home offsets to probing and Z Safe Homing --- Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp | 3 +++ Marlin/src/gcode/bedlevel/abl/G29.cpp | 16 ++++++++++------ Marlin/src/gcode/calibrate/G28.cpp | 2 +- Marlin/src/gcode/geometry/M206_M428.cpp | 6 ++++++ Marlin/src/module/motion.h | 4 ---- Marlin/src/module/probe.h | 12 ++++++++++++ 6 files changed, 32 insertions(+), 11 deletions(-) diff --git a/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp b/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp index dc91b7d6b1..80799e340f 100644 --- a/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp +++ b/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp @@ -1555,6 +1555,9 @@ * numbers for those locations should be 0. */ #ifdef VALIDATE_MESH_TILT + #if ENABLED(Z_SAFE_HOMING) + constexpr xy_float_t safe_homing_xy = { Z_SAFE_HOMING_X_POINT , Z_SAFE_HOMING_Y_POINT }; + #endif auto d_from = []{ DEBUG_ECHOPGM("D from "); }; auto normed = [&](const xy_pos_t &pos, const float &zadd) { return normal.x * pos.x + normal.y * pos.y + zadd; diff --git a/Marlin/src/gcode/bedlevel/abl/G29.cpp b/Marlin/src/gcode/bedlevel/abl/G29.cpp index e9b6e0e3a6..23fc755160 100644 --- a/Marlin/src/gcode/bedlevel/abl/G29.cpp +++ b/Marlin/src/gcode/bedlevel/abl/G29.cpp @@ -284,8 +284,8 @@ G29_TYPE GcodeSuite::G29() { G29_RETURN(false); } - const float rx = RAW_X_POSITION(parser.linearval('X', NAN)), - ry = RAW_Y_POSITION(parser.linearval('Y', NAN)); + const float rx = (parser.linearval('X', NAN)), + ry = (parser.linearval('Y', NAN)); int8_t i = parser.byteval('I', -1), j = parser.byteval('J', -1); if (!isnan(rx) && !isnan(ry)) { @@ -376,16 +376,20 @@ G29_TYPE GcodeSuite::G29() { } else { probe_position_lf.set( - parser.seenval('L') ? RAW_X_POSITION(parser.value_linear_units()) : x_min, - parser.seenval('F') ? RAW_Y_POSITION(parser.value_linear_units()) : y_min + parser.seenval('L') ? (parser.value_linear_units()) : x_min, + parser.seenval('F') ? (parser.value_linear_units()) : y_min ); probe_position_rb.set( - parser.seenval('R') ? RAW_X_POSITION(parser.value_linear_units()) : x_max, - parser.seenval('B') ? RAW_Y_POSITION(parser.value_linear_units()) : y_max + parser.seenval('R') ? (parser.value_linear_units()) : x_max, + parser.seenval('B') ? (parser.value_linear_units()) : y_max ); } if (!probe.good_bounds(probe_position_lf, probe_position_rb)) { + if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR("Left : ", probe_position_lf.x); + if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR("Right : ", probe_position_rb.x); + if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR("Front : ", probe_position_lf.y); + if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR("Back : ", probe_position_rb.y); SERIAL_ECHOLNPGM("? (L,R,F,B) out of bounds."); G29_RETURN(false); } diff --git a/Marlin/src/gcode/calibrate/G28.cpp b/Marlin/src/gcode/calibrate/G28.cpp index 7bc40b2127..2ffa2ee5b8 100644 --- a/Marlin/src/gcode/calibrate/G28.cpp +++ b/Marlin/src/gcode/calibrate/G28.cpp @@ -126,7 +126,7 @@ * Move the Z probe (or just the nozzle) to the safe homing point * (Z is already at the right height) */ - destination.set(safe_homing_xy, current_position.z); + destination.set((xy_float_t){ Z_SAFE_HOMING_X_POINT - home_offset[X_AXIS], Z_SAFE_HOMING_Y_POINT - home_offset[Y_AXIS] }, current_position.z); TERN_(HOMING_Z_WITH_PROBE, destination -= probe.offset_xy); diff --git a/Marlin/src/gcode/geometry/M206_M428.cpp b/Marlin/src/gcode/geometry/M206_M428.cpp index a477a1a526..a797f28685 100644 --- a/Marlin/src/gcode/geometry/M206_M428.cpp +++ b/Marlin/src/gcode/geometry/M206_M428.cpp @@ -41,6 +41,12 @@ void GcodeSuite::M206() { if (parser.seen(XYZ_CHAR(i))) set_home_offset((AxisEnum)i, parser.value_linear_units()); + if (!parser.seen_any()) { + SERIAL_ECHOLNPAIR("M206X : ", home_offset[X_AXIS]); + SERIAL_ECHOLNPAIR("M206Y : ", home_offset[Y_AXIS]); + SERIAL_ECHOLNPAIR("M206Z : ", home_offset[Z_AXIS]); + } + #if ENABLED(MORGAN_SCARA) if (parser.seen('T')) set_home_offset(A_AXIS, parser.value_float()); // Theta if (parser.seen('P')) set_home_offset(B_AXIS, parser.value_float()); // Psi diff --git a/Marlin/src/module/motion.h b/Marlin/src/module/motion.h index 2b108b0531..236f7aae28 100644 --- a/Marlin/src/module/motion.h +++ b/Marlin/src/module/motion.h @@ -78,10 +78,6 @@ extern xyz_pos_t cartes; #define XY_PROBE_FEEDRATE_MM_S PLANNER_XY_FEEDRATE() #endif -#if ENABLED(Z_SAFE_HOMING) - constexpr xy_float_t safe_homing_xy = { Z_SAFE_HOMING_X_POINT, Z_SAFE_HOMING_Y_POINT }; -#endif - /** * Feed rates are often configured with mm/m * but the planner and stepper like mm/s units. diff --git a/Marlin/src/module/probe.h b/Marlin/src/module/probe.h index f0f56ec191..47b4b48a68 100644 --- a/Marlin/src/module/probe.h +++ b/Marlin/src/module/probe.h @@ -152,6 +152,9 @@ public: #else _MAX((X_MIN_BED) + (PROBING_MARGIN_LEFT), (X_MIN_POS) + offset_xy.x) #endif + #if ENABLED(NOZZLE_AS_PROBE) + - home_offset[X_AXIS] + #endif ); } static inline float max_x() { @@ -161,6 +164,9 @@ public: #else _MIN((X_MAX_BED) - (PROBING_MARGIN_RIGHT), (X_MAX_POS) + offset_xy.x) #endif + #if ENABLED(NOZZLE_AS_PROBE) + - home_offset[X_AXIS] + #endif ); } static inline float min_y() { @@ -170,6 +176,9 @@ public: #else _MAX((Y_MIN_BED) + (PROBING_MARGIN_FRONT), (Y_MIN_POS) + offset_xy.y) #endif + #if ENABLED(NOZZLE_AS_PROBE) + - home_offset[Y_AXIS] + #endif ); } static inline float max_y() { @@ -179,6 +188,9 @@ public: #else _MIN((Y_MAX_BED) - (PROBING_MARGIN_BACK), (Y_MAX_POS) + offset_xy.y) #endif + #if ENABLED(NOZZLE_AS_PROBE) + - home_offset[Y_AXIS] + #endif ); }