kopia lustrzana https://github.com/gnea/grbl
Improved fix for rare lowering feed/rapid override bug.
[fix] In the previous hot fix, there was still (rarer) potential for very small floating point errors incorrectly handle an override deceleration and crash Grbl. Re-factored the if-then statement in terms of speed changes, rather than distance, to completely eliminate the issue.pull/246/head v1.1f.20170801
rodzic
477a94cd49
commit
5967839ab3
|
@ -1,3 +1,11 @@
|
|||
----------------
|
||||
Date: 2017-07-31
|
||||
Author: Sonny Jeon
|
||||
Subject: Hot fix for rare lowering feed override bug.
|
||||
|
||||
[fix] Squashed a very rare bug when lowering the feedrate (or rapid) override. When in the very strict set of circumstances with acceleration settings, override step size, and current speed, an internal calculation would cause Grbl to crash. The fix was an overlooked equality statement that should have been a less than or equal, not a less than.
|
||||
|
||||
|
||||
----------------
|
||||
Date: 2017-07-17
|
||||
Author: Sonny Jeon
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
|
||||
// Grbl versioning system
|
||||
#define GRBL_VERSION "1.1f"
|
||||
#define GRBL_VERSION_BUILD "20170731"
|
||||
#define GRBL_VERSION_BUILD "20170801"
|
||||
|
||||
// Define standard libraries used by Grbl.
|
||||
#include <avr/io.h>
|
||||
|
|
|
@ -734,7 +734,7 @@ void st_prep_buffer()
|
|||
|
||||
} else {
|
||||
// Decelerate to cruise or cruise-decelerate types. Guaranteed to intersect updated plan.
|
||||
prep.decelerate_after = inv_2_accel*(nominal_speed_sqr-exit_speed_sqr);
|
||||
prep.decelerate_after = inv_2_accel*(nominal_speed_sqr-exit_speed_sqr); // Should always be >= 0.0 due to planner reinit.
|
||||
prep.maximum_speed = nominal_speed;
|
||||
prep.ramp_type = RAMP_DECEL_OVERRIDE;
|
||||
}
|
||||
|
@ -806,15 +806,14 @@ void st_prep_buffer()
|
|||
switch (prep.ramp_type) {
|
||||
case RAMP_DECEL_OVERRIDE:
|
||||
speed_var = pl_block->acceleration*time_var;
|
||||
mm_var = time_var*(prep.current_speed - 0.5*speed_var);
|
||||
mm_remaining -= mm_var;
|
||||
if ((mm_remaining <= prep.accelerate_until) || (mm_var <= 0.0)) {
|
||||
if (prep.current_speed-prep.maximum_speed <= speed_var) {
|
||||
// Cruise or cruise-deceleration types only for deceleration override.
|
||||
mm_remaining = prep.accelerate_until; // NOTE: 0.0 at EOB
|
||||
mm_remaining = prep.accelerate_until;
|
||||
time_var = 2.0*(pl_block->millimeters-mm_remaining)/(prep.current_speed+prep.maximum_speed);
|
||||
prep.ramp_type = RAMP_CRUISE;
|
||||
prep.current_speed = prep.maximum_speed;
|
||||
} else { // Mid-deceleration override ramp.
|
||||
mm_remaining -= time_var*(prep.current_speed - 0.5*speed_var);
|
||||
prep.current_speed -= speed_var;
|
||||
}
|
||||
break;
|
||||
|
|
Ładowanie…
Reference in New Issue