From 1fd45791a52cda924683d88311c108908c51b598 Mon Sep 17 00:00:00 2001 From: Sonny Jeon Date: Wed, 19 Feb 2014 07:48:09 -0700 Subject: [PATCH] Minor updates to line number feature. - Changed line number integer types from unsigned to signed int32. G-code mandates values cannot exceed 99999. Negative values can be used to indicate certain modes. - Homing cycle line number changed to -1, as an indicator. - Fixed a reporting define for the spindle states that was broken by the last merge. --- config.h | 8 ++--- gcode.c | 2 +- limits.c | 92 ++++++++++++++++++++++++------------------------ motion_control.c | 4 +-- motion_control.h | 7 ++-- planner.c | 9 ++--- planner.h | 9 ++--- report.c | 11 +++--- 8 files changed, 72 insertions(+), 70 deletions(-) diff --git a/config.h b/config.h index 88109d3..5b25e29 100644 --- a/config.h +++ b/config.h @@ -28,10 +28,6 @@ #ifndef config_h #define config_h -// Allows GRBL to tranck and report gcode line numbers. Enabling this means that the planning buffer -// goes from 18 or 16 to make room for the additional line number data in the plan_block_t struct -#define USE_LINE_NUMBERS - // Default settings. Used when resetting EEPROM. Change to desired name in defaults.h #define DEFAULTS_SHERLINE_5400 @@ -88,6 +84,10 @@ // parser state depending on user preferences. #define N_STARTUP_LINE 2 // Integer (1-3) +// Allows GRBL to tranck and report gcode line numbers. Enabling this means that the planning buffer +// goes from 18 or 16 to make room for the additional line number data in the plan_block_t struct +// #define USE_LINE_NUMBERS + // Enables a second coolant control pin via the mist coolant g-code command M7 on the Arduino Uno // analog pin 5. Only use this option if you require a second coolant control pin. // NOTE: The M8 flood coolant control pin on analog pin 4 will still be functional regardless. diff --git a/gcode.c b/gcode.c index 450f9af..fc6ad6e 100644 --- a/gcode.c +++ b/gcode.c @@ -101,7 +101,7 @@ uint8_t gc_execute_line(char *line) float target[N_AXIS]; clear_vector(target); // XYZ(ABC) axes parameters. - uint32_t line_number = 0; + int32_t line_number = 0; gc.arc_radius = 0; clear_vector(gc.arc_offset); // IJK Arc offsets are incremental. Value of zero indicates no change. diff --git a/limits.c b/limits.c index 10f0311..fbbfb14 100644 --- a/limits.c +++ b/limits.c @@ -85,11 +85,11 @@ void limits_disable() // limit setting if their limits are constantly triggering after a reset and move their axes. if (sys.state != STATE_ALARM) { if (bit_isfalse(sys.execute,EXEC_ALARM)) { - mc_reset(); // Initiate system kill. - sys.execute |= EXEC_CRIT_EVENT; // Indicate hard limit critical event - } + mc_reset(); // Initiate system kill. + sys.execute |= EXEC_CRIT_EVENT; // Indicate hard limit critical event } - } + } + } #else // OPTIONAL: Software debounce limit pin routine. // Upon limit pin change, enable watchdog timer to create a short delay. ISR(LIMIT_INT_vect) { if (!(WDTCSR & (1<millimeters = 0; block->direction_bits = 0; block->acceleration = SOME_LARGE_VALUE; // Scaled down to maximum acceleration later -#ifdef USE_LINE_NUMBERS - block->line_number = line_number; -#endif + #ifdef USE_LINE_NUMBERS + block->line_number = line_number; + #endif + // Compute and store initial move distance data. // TODO: After this for-loop, we don't touch the stepper algorithm data. Might be a good idea // to try to keep these types of things completely separate from the planner for portability. diff --git a/planner.h b/planner.h index 29b571b..c4bebea 100644 --- a/planner.h +++ b/planner.h @@ -51,9 +51,10 @@ typedef struct { float acceleration; // Axis-limit adjusted line acceleration in (mm/min^2) float millimeters; // The remaining distance for this block to be executed in (mm) // uint8_t max_override; // Maximum override value based on axis speed limits -#ifdef USE_LINE_NUMBERS - uint32_t line_number; -#endif + + #ifdef USE_LINE_NUMBERS + int32_t line_number; + #endif } plan_block_t; @@ -63,7 +64,7 @@ void plan_reset(); // Add a new linear movement to the buffer. target[N_AXIS] is the signed, absolute target position // in millimeters. Feed rate specifies the speed of the motion. If feed rate is inverted, the feed // rate is taken to mean "frequency" and would complete the operation in 1/feed_rate minutes. -void plan_buffer_line(float *target, float feed_rate, uint8_t invert_feed_rate, uint32_t line_number); +void plan_buffer_line(float *target, float feed_rate, uint8_t invert_feed_rate, int32_t line_number); // Called when the current block is no longer needed. Discards the block and makes the memory // availible for new blocks. diff --git a/report.c b/report.c index e17b6a9..13c27a9 100644 --- a/report.c +++ b/report.c @@ -262,9 +262,9 @@ void report_gcode_modes() } switch (gc.spindle_direction) { - case 1 : printPgmString(PSTR(" M3")); break; - case -1 : printPgmString(PSTR(" M4")); break; - case 0 : printPgmString(PSTR(" M5")); break; + case SPINDLE_ENABLE_CW : printPgmString(PSTR(" M3")); break; + case SPINDLE_ENABLE_CCW : printPgmString(PSTR(" M4")); break; + case SPINDLE_DISABLE : printPgmString(PSTR(" M5")); break; } switch (gc.coolant_mode) { @@ -353,9 +353,8 @@ void report_realtime_status() #ifdef USE_LINE_NUMBERS // Report current line number - printPgmString(PSTR(",")); - printPgmString(PSTR("Ln:")); - uint32_t ln=0; + printPgmString(PSTR(",Ln:")); + int32_t ln=0; plan_block_t * pb = plan_get_current_block(); if(pb != NULL) { ln = pb->line_number;