Browse Source

Some probe_pt error-handling

pull/1/head
Scott Lahteine 8 years ago
parent
commit
6c064bb7d6
  1. 29
      Marlin/Marlin_main.cpp
  2. 28
      Marlin/ubl_G29.cpp

29
Marlin/Marlin_main.cpp

@ -4743,12 +4743,12 @@ void home_all_axes() { gcode_G28(true); }
// Retain the last probe position // Retain the last probe position
xProbe = LOGICAL_X_POSITION(points[i].x); xProbe = LOGICAL_X_POSITION(points[i].x);
yProbe = LOGICAL_Y_POSITION(points[i].y); yProbe = LOGICAL_Y_POSITION(points[i].y);
measured_z = points[i].z = faux ? 0.001 * random(-100, 101) : probe_pt(xProbe, yProbe, stow_probe_after_each, verbose_level); measured_z = faux ? 0.001 * random(-100, 101) : probe_pt(xProbe, yProbe, stow_probe_after_each, verbose_level);
} if (isnan(measured_z)) {
planner.abl_enabled = abl_should_enable;
if (isnan(measured_z)) { return;
planner.abl_enabled = abl_should_enable; }
return; points[i].z = measured_z;
} }
if (!dryrun) { if (!dryrun) {
@ -5021,9 +5021,11 @@ void home_all_axes() { gcode_G28(true); }
const float measured_z = probe_pt(xpos, ypos, !code_seen('S') || code_value_bool(), 1); const float measured_z = probe_pt(xpos, ypos, !code_seen('S') || code_value_bool(), 1);
SERIAL_PROTOCOLPAIR("Bed X: ", FIXFLOAT(xpos)); if (!isnan(measured_z)) {
SERIAL_PROTOCOLPAIR(" Y: ", FIXFLOAT(ypos)); SERIAL_PROTOCOLPAIR("Bed X: ", FIXFLOAT(xpos));
SERIAL_PROTOCOLLNPAIR(" Z: ", FIXFLOAT(measured_z)); SERIAL_PROTOCOLPAIR(" Y: ", FIXFLOAT(ypos));
SERIAL_PROTOCOLLNPAIR(" Z: ", FIXFLOAT(measured_z));
}
clean_up_after_endstop_or_probe_move(); clean_up_after_endstop_or_probe_move();
@ -5170,13 +5172,13 @@ void home_all_axes() { gcode_G28(true); }
if (!do_all_positions && !do_circle_x3) { // probe the center if (!do_all_positions && !do_circle_x3) { // probe the center
setup_for_endstop_or_probe_move(); setup_for_endstop_or_probe_move();
z_at_pt[0] += probe_pt(0.0, 0.0 , true, 1); z_at_pt[0] += probe_pt(0.0, 0.0 , true, 1); // TODO: Needs error handling
clean_up_after_endstop_or_probe_move(); clean_up_after_endstop_or_probe_move();
} }
if (probe_center_plus_3) { // probe extra center points if (probe_center_plus_3) { // probe extra center points
for (int8_t axis = probe_center_plus_6 ? 11 : 9; axis > 0; axis -= probe_center_plus_6 ? 2 : 4) { for (int8_t axis = probe_center_plus_6 ? 11 : 9; axis > 0; axis -= probe_center_plus_6 ? 2 : 4) {
setup_for_endstop_or_probe_move(); setup_for_endstop_or_probe_move();
z_at_pt[0] += probe_pt( z_at_pt[0] += probe_pt( // TODO: Needs error handling
cos(RADIANS(180 + 30 * axis)) * (0.1 * delta_calibration_radius), cos(RADIANS(180 + 30 * axis)) * (0.1 * delta_calibration_radius),
sin(RADIANS(180 + 30 * axis)) * (0.1 * delta_calibration_radius), true, 1); sin(RADIANS(180 + 30 * axis)) * (0.1 * delta_calibration_radius), true, 1);
clean_up_after_endstop_or_probe_move(); clean_up_after_endstop_or_probe_move();
@ -5192,7 +5194,7 @@ void home_all_axes() { gcode_G28(true); }
do_circle_x2 ? (zig_zag ? 0.5 : 0.0) : 0); do_circle_x2 ? (zig_zag ? 0.5 : 0.0) : 0);
for (float circles = -offset_circles ; circles <= offset_circles; circles++) { for (float circles = -offset_circles ; circles <= offset_circles; circles++) {
setup_for_endstop_or_probe_move(); setup_for_endstop_or_probe_move();
z_at_pt[axis] += probe_pt( z_at_pt[axis] += probe_pt( // TODO: Needs error handling
cos(RADIANS(180 + 30 * axis)) * delta_calibration_radius * cos(RADIANS(180 + 30 * axis)) * delta_calibration_radius *
(1 + circles * 0.1 * (zig_zag ? 1 : -1)), (1 + circles * 0.1 * (zig_zag ? 1 : -1)),
sin(RADIANS(180 + 30 * axis)) * delta_calibration_radius * sin(RADIANS(180 + 30 * axis)) * delta_calibration_radius *
@ -6372,7 +6374,8 @@ inline void gcode_M42() {
setup_for_endstop_or_probe_move(); setup_for_endstop_or_probe_move();
// Move to the first point, deploy, and probe // Move to the first point, deploy, and probe
probe_pt(X_probe_location, Y_probe_location, stow_probe_after_each, verbose_level); const float t = probe_pt(X_probe_location, Y_probe_location, stow_probe_after_each, verbose_level);
if (isnan(t)) return;
randomSeed(millis()); randomSeed(millis());

28
Marlin/ubl_G29.cpp

@ -393,19 +393,24 @@
ubl.save_ubl_active_state_and_disable(); ubl.save_ubl_active_state_and_disable();
ubl.tilt_mesh_based_on_probed_grid(code_seen('T')); ubl.tilt_mesh_based_on_probed_grid(code_seen('T'));
ubl.restore_ubl_active_state_and_leave(); ubl.restore_ubl_active_state_and_leave();
} else { // grid_size==0 which means a 3-Point leveling has been requested }
float z1 = probe_pt(LOGICAL_X_POSITION(UBL_PROBE_PT_1_X), LOGICAL_Y_POSITION(UBL_PROBE_PT_1_Y), false, g29_verbose_level), else { // grid_size == 0 : A 3-Point leveling has been requested
z2 = probe_pt(LOGICAL_X_POSITION(UBL_PROBE_PT_2_X), LOGICAL_Y_POSITION(UBL_PROBE_PT_2_Y), false, g29_verbose_level), float z3, z2, z1 = probe_pt(LOGICAL_X_POSITION(UBL_PROBE_PT_1_X), LOGICAL_Y_POSITION(UBL_PROBE_PT_1_Y), false, g29_verbose_level);
z3 = probe_pt(LOGICAL_X_POSITION(UBL_PROBE_PT_3_X), LOGICAL_Y_POSITION(UBL_PROBE_PT_3_Y), true, g29_verbose_level); if (!isnan(z1)) {
z2 = probe_pt(LOGICAL_X_POSITION(UBL_PROBE_PT_2_X), LOGICAL_Y_POSITION(UBL_PROBE_PT_2_Y), false, g29_verbose_level);
if (!isnan(z2))
z3 = probe_pt(LOGICAL_X_POSITION(UBL_PROBE_PT_3_X), LOGICAL_Y_POSITION(UBL_PROBE_PT_3_Y), true, g29_verbose_level);
}
if ( isnan(z1) || isnan(z2) || isnan(z3)) { // probe_pt will return NAN if unreachable if (isnan(z1) || isnan(z2) || isnan(z3)) { // probe_pt will return NAN if unreachable
SERIAL_ERROR_START; SERIAL_ERROR_START;
SERIAL_ERRORLNPGM("Attempt to probe off the bed."); SERIAL_ERRORLNPGM("Attempt to probe off the bed.");
goto LEAVE; goto LEAVE;
} }
// We need to adjust z1, z2, z3 by the Mesh Height at these points. Just because they are non-zero doesn't mean // Adjust z1, z2, z3 by the Mesh Height at these points. Just because they're non-zero
// the Mesh is tilted! (We need to compensate each probe point by what the Mesh says that location's height is) // doesn't mean the Mesh is tilted! (Compensate each probe point by what the Mesh says
// its height is.)
ubl.save_ubl_active_state_and_disable(); ubl.save_ubl_active_state_and_disable();
z1 -= ubl.get_z_correction(LOGICAL_X_POSITION(UBL_PROBE_PT_1_X), LOGICAL_Y_POSITION(UBL_PROBE_PT_1_Y)) /* + zprobe_zoffset */ ; z1 -= ubl.get_z_correction(LOGICAL_X_POSITION(UBL_PROBE_PT_1_X), LOGICAL_Y_POSITION(UBL_PROBE_PT_1_Y)) /* + zprobe_zoffset */ ;
@ -706,7 +711,7 @@
const float mean = sum / n; const float mean = sum / n;
// //
// Now do the sumation of the squares of difference from mean // Sum the squares of difference from mean
// //
float sum_of_diff_squared = 0.0; float sum_of_diff_squared = 0.0;
for (uint8_t x = 0; x < GRID_MAX_POINTS_X; x++) for (uint8_t x = 0; x < GRID_MAX_POINTS_X; x++)
@ -769,12 +774,13 @@
const float rawx = pgm_read_float(&ubl.mesh_index_to_xpos[location.x_index]), const float rawx = pgm_read_float(&ubl.mesh_index_to_xpos[location.x_index]),
rawy = pgm_read_float(&ubl.mesh_index_to_ypos[location.y_index]); rawy = pgm_read_float(&ubl.mesh_index_to_ypos[location.y_index]);
const float measured_z = probe_pt(LOGICAL_X_POSITION(rawx), LOGICAL_Y_POSITION(rawy), stow_probe, g29_verbose_level); const float measured_z = probe_pt(LOGICAL_X_POSITION(rawx), LOGICAL_Y_POSITION(rawy), stow_probe, g29_verbose_level); // TODO: Needs error handling
ubl.z_values[location.x_index][location.y_index] = measured_z; ubl.z_values[location.x_index][location.y_index] = measured_z;
} }
if (do_ubl_mesh_map) ubl.display_map(map_type); if (do_ubl_mesh_map) ubl.display_map(map_type);
} while ((location.x_index >= 0) && (--max_iterations));
} while (location.x_index >= 0 && --max_iterations);
STOW_PROBE(); STOW_PROBE();
ubl.restore_ubl_active_state_and_leave(); ubl.restore_ubl_active_state_and_leave();
@ -1548,7 +1554,7 @@
const float x = float(x_min) + ix * dx; const float x = float(x_min) + ix * dx;
for (int8_t iy = 0; iy < grid_size; iy++) { for (int8_t iy = 0; iy < grid_size; iy++) {
const float y = float(y_min) + dy * (zig_zag ? grid_size - 1 - iy : iy); const float y = float(y_min) + dy * (zig_zag ? grid_size - 1 - iy : iy);
float measured_z = probe_pt(LOGICAL_X_POSITION(x), LOGICAL_Y_POSITION(y), code_seen('E'), g29_verbose_level); float measured_z = probe_pt(LOGICAL_X_POSITION(x), LOGICAL_Y_POSITION(y), code_seen('E'), g29_verbose_level); // TODO: Needs error handling
#if ENABLED(DEBUG_LEVELING_FEATURE) #if ENABLED(DEBUG_LEVELING_FEATURE)
if (DEBUGGING(LEVELING)) { if (DEBUGGING(LEVELING)) {
SERIAL_CHAR('('); SERIAL_CHAR('(');

Loading…
Cancel
Save