Skip to content

Commit 3fec098

Browse files
vlsithinkyhead
authored andcommitted
✨ Probe XY Offset value limits (MarlinFirmware#26267)
Co-authored-by: Scott Lahteine <[email protected]>
1 parent 0288f21 commit 3fec098

File tree

17 files changed

+85
-44
lines changed

17 files changed

+85
-44
lines changed

Marlin/Configuration.h

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1641,9 +1641,13 @@
16411641

16421642
#define Z_PROBE_LOW_POINT -2 // (mm) Farthest distance below the trigger-point to go before stopping
16431643

1644-
// For M851 give a range for adjusting the Z probe offset
1645-
#define Z_PROBE_OFFSET_RANGE_MIN -20 // (mm)
1646-
#define Z_PROBE_OFFSET_RANGE_MAX 20 // (mm)
1644+
// For M851 provide ranges for adjusting the X, Y, and Z probe offsets
1645+
//#define PROBE_OFFSET_XMIN -50 // (mm)
1646+
//#define PROBE_OFFSET_XMAX 50 // (mm)
1647+
//#define PROBE_OFFSET_YMIN -50 // (mm)
1648+
//#define PROBE_OFFSET_YMAX 50 // (mm)
1649+
//#define PROBE_OFFSET_ZMIN -20 // (mm)
1650+
//#define PROBE_OFFSET_ZMAX 20 // (mm)
16471651

16481652
// Enable the M48 repeatability test to test probe accuracy
16491653
//#define Z_MIN_PROBE_REPEATABILITY_TEST

Marlin/src/gcode/probe/M851.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,10 @@ void GcodeSuite::M851() {
4444
if (parser.seenval('X')) {
4545
const float x = parser.value_float();
4646
#if HAS_PROBE_XY_OFFSET
47-
if (WITHIN(x, -(X_BED_SIZE), X_BED_SIZE))
47+
if (WITHIN(x, PROBE_OFFSET_XMIN, PROBE_OFFSET_XMAX))
4848
offs.x = x;
4949
else {
50-
SERIAL_ECHOLNPGM("?X out of range (-", X_BED_SIZE, " to ", X_BED_SIZE, ")");
50+
SERIAL_ECHOLNPGM("?X out of range (", PROBE_OFFSET_XMIN, " to ", PROBE_OFFSET_XMAX, ")");
5151
ok = false;
5252
}
5353
#else
@@ -58,10 +58,10 @@ void GcodeSuite::M851() {
5858
if (parser.seenval('Y')) {
5959
const float y = parser.value_float();
6060
#if HAS_PROBE_XY_OFFSET
61-
if (WITHIN(y, -(Y_BED_SIZE), Y_BED_SIZE))
61+
if (WITHIN(y, PROBE_OFFSET_YMIN, PROBE_OFFSET_YMAX))
6262
offs.y = y;
6363
else {
64-
SERIAL_ECHOLNPGM("?Y out of range (-", Y_BED_SIZE, " to ", Y_BED_SIZE, ")");
64+
SERIAL_ECHOLNPGM("?Y out of range (", PROBE_OFFSET_YMIN, " to ", PROBE_OFFSET_YMAX, ")");
6565
ok = false;
6666
}
6767
#else
@@ -71,10 +71,10 @@ void GcodeSuite::M851() {
7171

7272
if (parser.seenval('Z')) {
7373
const float z = parser.value_float();
74-
if (WITHIN(z, Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX))
74+
if (WITHIN(z, PROBE_OFFSET_ZMIN, PROBE_OFFSET_ZMAX))
7575
offs.z = z;
7676
else {
77-
SERIAL_ECHOLNPGM("?Z out of range (", Z_PROBE_OFFSET_RANGE_MIN, " to ", Z_PROBE_OFFSET_RANGE_MAX, ")");
77+
SERIAL_ECHOLNPGM("?Z out of range (", PROBE_OFFSET_ZMIN, " to ", PROBE_OFFSET_ZMAX, ")");
7878
ok = false;
7979
}
8080
}

Marlin/src/inc/Changes.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -665,6 +665,8 @@
665665
#error "FOLDER_SORTING is now SDSORT_FOLDERS."
666666
#elif defined(BTT_MINI_12864_V1)
667667
#error "BTT_MINI_12864_V1 is now BTT_MINI_12864."
668+
#elif defined(Z_PROBE_OFFSET_RANGE_MIN) || defined(Z_PROBE_OFFSET_RANGE_MAX)
669+
#error "Z_PROBE_OFFSET_RANGE_(MIN|MAX) is now PROBE_OFFSET_Z(MIN|MAX)."
668670
#endif
669671

670672
// L64xx stepper drivers have been removed

Marlin/src/inc/Conditionals_post.h

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2943,14 +2943,26 @@
29432943
* Bed Probe dependencies
29442944
*/
29452945
#if ANY(MESH_BED_LEVELING, HAS_BED_PROBE)
2946-
#ifndef Z_PROBE_OFFSET_RANGE_MIN
2947-
#define Z_PROBE_OFFSET_RANGE_MIN -20
2946+
#ifndef PROBE_OFFSET_ZMIN
2947+
#define PROBE_OFFSET_ZMIN -20
29482948
#endif
2949-
#ifndef Z_PROBE_OFFSET_RANGE_MAX
2950-
#define Z_PROBE_OFFSET_RANGE_MAX 20
2949+
#ifndef PROBE_OFFSET_ZMAX
2950+
#define PROBE_OFFSET_ZMAX 20
29512951
#endif
29522952
#endif
29532953
#if HAS_BED_PROBE
2954+
#ifndef PROBE_OFFSET_XMIN
2955+
#define PROBE_OFFSET_XMIN -50
2956+
#endif
2957+
#ifndef PROBE_OFFSET_XMAX
2958+
#define PROBE_OFFSET_XMAX 50
2959+
#endif
2960+
#ifndef PROBE_OFFSET_YMIN
2961+
#define PROBE_OFFSET_YMIN -50
2962+
#endif
2963+
#ifndef PROBE_OFFSET_YMAX
2964+
#define PROBE_OFFSET_YMAX 50
2965+
#endif
29542966
#if ALL(ENDSTOPPULLUPS, USE_Z_MIN_PROBE)
29552967
#define ENDSTOPPULLUP_ZMIN_PROBE
29562968
#endif

Marlin/src/inc/SanityCheck.h

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1418,20 +1418,15 @@ static_assert(COUNT(arm) == LOGICAL_AXES, "AXIS_RELATIVE_MODES must contain " _L
14181418
#endif
14191419

14201420
/**
1421-
* Check for improper NOZZLE_TO_PROBE_OFFSET
1421+
* Check for improper PROBING_MARGIN
14221422
*/
1423-
constexpr xyz_pos_t sanity_nozzle_to_probe_offset = NOZZLE_TO_PROBE_OFFSET;
1424-
#if ENABLED(NOZZLE_AS_PROBE)
1425-
static_assert(sanity_nozzle_to_probe_offset.x == 0 && sanity_nozzle_to_probe_offset.y == 0,
1426-
"NOZZLE_AS_PROBE requires the XY offsets in NOZZLE_TO_PROBE_OFFSET to both be 0.");
1427-
#elif !IS_KINEMATIC
1423+
#if NONE(NOZZLE_AS_PROBE, IS_KINEMATIC)
14281424
static_assert(PROBING_MARGIN >= 0, "PROBING_MARGIN must be >= 0.");
14291425
static_assert(PROBING_MARGIN_BACK >= 0, "PROBING_MARGIN_BACK must be >= 0.");
14301426
static_assert(PROBING_MARGIN_FRONT >= 0, "PROBING_MARGIN_FRONT must be >= 0.");
14311427
static_assert(PROBING_MARGIN_LEFT >= 0, "PROBING_MARGIN_LEFT must be >= 0.");
14321428
static_assert(PROBING_MARGIN_RIGHT >= 0, "PROBING_MARGIN_RIGHT must be >= 0.");
14331429
#endif
1434-
14351430
#define _MARGIN(A) TERN(IS_KINEMATIC, PRINTABLE_RADIUS, ((A##_BED_SIZE) / 2))
14361431
static_assert(PROBING_MARGIN < _MARGIN(X), "PROBING_MARGIN is too large.");
14371432
static_assert(PROBING_MARGIN_BACK < _MARGIN(Y), "PROBING_MARGIN_BACK is too large.");
@@ -1440,6 +1435,34 @@ static_assert(COUNT(arm) == LOGICAL_AXES, "AXIS_RELATIVE_MODES must contain " _L
14401435
static_assert(PROBING_MARGIN_RIGHT < _MARGIN(X), "PROBING_MARGIN_RIGHT is too large.");
14411436
#undef _MARGIN
14421437

1438+
/**
1439+
* Check for improper PROBE_OFFSET_[XYZ](MIN|MAX)
1440+
*/
1441+
#define PROBE_OFFSET_ASSERT(varname, x, min, max) static_assert(WITHIN(x, min, max), varname " must be within " STRINGIFY(min) " and " STRINGIFY(max))
1442+
#if HAS_PROBE_XY_OFFSET
1443+
PROBE_OFFSET_ASSERT("PROBE_OFFSET_XMIN", PROBE_OFFSET_XMIN, -(X_BED_SIZE), X_BED_SIZE);
1444+
PROBE_OFFSET_ASSERT("PROBE_OFFSET_XMAX", PROBE_OFFSET_XMAX, -(X_BED_SIZE), X_BED_SIZE);
1445+
PROBE_OFFSET_ASSERT("PROBE_OFFSET_YMIN", PROBE_OFFSET_YMIN, -(Y_BED_SIZE), Y_BED_SIZE);
1446+
PROBE_OFFSET_ASSERT("PROBE_OFFSET_YMAX", PROBE_OFFSET_YMAX, -(Y_BED_SIZE), Y_BED_SIZE);
1447+
#endif
1448+
PROBE_OFFSET_ASSERT("PROBE_OFFSET_ZMIN", PROBE_OFFSET_ZMIN, -20, 20);
1449+
PROBE_OFFSET_ASSERT("PROBE_OFFSET_ZMAX", PROBE_OFFSET_ZMAX, -20, 20);
1450+
1451+
/**
1452+
* Check for improper NOZZLE_AS_PROBE or NOZZLE_TO_PROBE_OFFSET
1453+
*/
1454+
constexpr xyz_pos_t sanity_nozzle_to_probe_offset = NOZZLE_TO_PROBE_OFFSET;
1455+
#if ENABLED(NOZZLE_AS_PROBE)
1456+
static_assert(sanity_nozzle_to_probe_offset.x == 0 && sanity_nozzle_to_probe_offset.y == 0,
1457+
"NOZZLE_AS_PROBE requires the XY offsets in NOZZLE_TO_PROBE_OFFSET to both be 0.");
1458+
#endif
1459+
#if HAS_PROBE_XY_OFFSET
1460+
PROBE_OFFSET_ASSERT("NOZZLE_TO_PROBE_OFFSET.x", sanity_nozzle_to_probe_offset.x, PROBE_OFFSET_XMIN, PROBE_OFFSET_XMAX);
1461+
PROBE_OFFSET_ASSERT("NOZZLE_TO_PROBE_OFFSET.y", sanity_nozzle_to_probe_offset.y, PROBE_OFFSET_YMIN, PROBE_OFFSET_YMAX);
1462+
#endif
1463+
PROBE_OFFSET_ASSERT("NOZZLE_TO_PROBE_OFFSET.z", sanity_nozzle_to_probe_offset.z, PROBE_OFFSET_ZMIN, PROBE_OFFSET_ZMAX);
1464+
#undef PROBE_OFFSET_ASSERT
1465+
14431466
/**
14441467
* Make sure Z raise values are set
14451468
*/

Marlin/src/lcd/e3v2/creality/dwin.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1384,7 +1384,7 @@ void hmiMoveDone(const AxisEnum axis) {
13841384
dwinUpdateLCD();
13851385
return;
13861386
}
1387-
LIMIT(hmiValues.offset_value, (Z_PROBE_OFFSET_RANGE_MIN) * 100, (Z_PROBE_OFFSET_RANGE_MAX) * 100);
1387+
LIMIT(hmiValues.offset_value, (PROBE_OFFSET_ZMIN) * 100, (PROBE_OFFSET_ZMAX) * 100);
13881388
last_zoffset = dwin_zoffset;
13891389
dwin_zoffset = hmiValues.offset_value / 100.0f;
13901390
#if ANY(BABYSTEP_ZPROBE_OFFSET, JUST_BABYSTEP)

Marlin/src/lcd/e3v2/proui/dwin.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2057,7 +2057,7 @@ void autoHome() { queue.inject_P(G28_STR); }
20572057
#if ANY(BABYSTEP_ZPROBE_OFFSET, JUST_BABYSTEP)
20582058
babystep.accum = round(planner.settings.axis_steps_per_mm[Z_AXIS] * BABY_Z_VAR);
20592059
#endif
2060-
setPFloatOnClick(Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX, 2, applyZOffset, liveZOffset);
2060+
setPFloatOnClick(PROBE_OFFSET_ZMIN, PROBE_OFFSET_ZMAX, 2, applyZOffset, liveZOffset);
20612061
}
20622062

20632063
void setMoveZto0() {

Marlin/src/lcd/extui/ia_creality/ia_creality_rts.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -795,7 +795,7 @@ void RTS::handleData() {
795795
tmp_zprobe_offset = (float(recdat.data[0]) - 65536) / 100;
796796
else
797797
tmp_zprobe_offset = float(recdat.data[0]) / 100;
798-
if (WITHIN((tmp_zprobe_offset), Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX)) {
798+
if (WITHIN((tmp_zprobe_offset), PROBE_OFFSET_ZMIN, PROBE_OFFSET_ZMAX)) {
799799
int16_t tmpSteps = mmToWholeSteps(getZOffset_mm() - tmp_zprobe_offset, axis_t(Z));
800800
if (tmpSteps == 0) tmpSteps = getZOffset_mm() < tmp_zprobe_offset ? 1 : -1;
801801
smartAdjustAxis_steps(-tmpSteps, axis_t(Z), false);
@@ -1116,7 +1116,7 @@ void RTS::handleData() {
11161116
#if HAS_BED_PROBE
11171117

11181118
case 2: { // Z-axis to Up
1119-
if (WITHIN((getZOffset_mm() + 0.1), Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX)) {
1119+
if (WITHIN((getZOffset_mm() + 0.1), PROBE_OFFSET_ZMIN, PROBE_OFFSET_ZMAX)) {
11201120
smartAdjustAxis_steps(getAxisSteps_per_mm(Z) / 10, axis_t(Z), false);
11211121
//setZOffset_mm(getZOffset_mm() + 0.1);
11221122
sendData(getZOffset_mm() * 100, ProbeOffset_Z);
@@ -1125,7 +1125,7 @@ void RTS::handleData() {
11251125
break;
11261126
}
11271127
case 3: { // Z-axis to Down
1128-
if (WITHIN((getZOffset_mm() - 0.1), Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX)) {
1128+
if (WITHIN((getZOffset_mm() - 0.1), PROBE_OFFSET_ZMIN, PROBE_OFFSET_ZMAX)) {
11291129
smartAdjustAxis_steps(-getAxisSteps_per_mm(Z) / 10, axis_t(Z), false);
11301130
//babystepAxis_steps(int16_t(-getAxisSteps_per_mm(Z)) / 10, axis_t(Z));
11311131
//setZOffset_mm(getZOffset_mm() - 0.1);

Marlin/src/lcd/extui/mks_ui/draw_number_key.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -358,20 +358,20 @@ static void set_value_confirm() {
358358
case x_offset: {
359359
#if HAS_PROBE_XY_OFFSET
360360
const float x = atof(key_value);
361-
if (WITHIN(x, -(X_BED_SIZE), X_BED_SIZE))
361+
if (WITHIN(x, PROBE_OFFSET_XMIN, PROBE_OFFSET_XMAX))
362362
probe.offset.x = x;
363363
#endif
364364
} break;
365365
case y_offset: {
366366
#if HAS_PROBE_XY_OFFSET
367367
const float y = atof(key_value);
368-
if (WITHIN(y, -(Y_BED_SIZE), Y_BED_SIZE))
368+
if (WITHIN(y, PROBE_OFFSET_YMIN, PROBE_OFFSET_YMAX))
369369
probe.offset.y = y;
370370
#endif
371371
} break;
372372
case z_offset: {
373373
const float z = atof(key_value);
374-
if (WITHIN(z, Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX))
374+
if (WITHIN(z, PROBE_OFFSET_ZMIN, PROBE_OFFSET_ZMAX))
375375
probe.offset.z = z;
376376
} break;
377377
#endif

Marlin/src/lcd/extui/ui_api.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -895,7 +895,7 @@ namespace ExtUI {
895895

896896
void setZOffset_mm(const_float_t value) {
897897
#if HAS_BED_PROBE
898-
if (WITHIN(value, Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX))
898+
if (WITHIN(value, PROBE_OFFSET_ZMIN, PROBE_OFFSET_ZMAX))
899899
probe.offset.z = value;
900900
#elif ENABLED(BABYSTEP_DISPLAY_TOTAL)
901901
babystep.add_mm(Z_AXIS, value - getZOffset_mm());

0 commit comments

Comments
 (0)