mirror of
https://github.com/grblHAL/core.git
synced 2026-08-18 00:47:25 +08:00
Added option bit for enabling realtime reporting while homing to $10, Status report options. Ref. issue #551.
This commit is contained in:
@@ -1,5 +1,20 @@
|
||||
## grblHAL changelog
|
||||
|
||||
<a name="20240801">Build 20240801
|
||||
|
||||
Core:
|
||||
|
||||
* Added option bit for enabling realtime reporting while homing to `$10`, _Status report options_. Ref. [issue #551](https://github.com/grblHAL/core/issues/551).
|
||||
__NOTE:__ Enabling this may affect some senders.
|
||||
|
||||
Drivers:
|
||||
|
||||
* iMXRT1062, LPC176x, SAM3X8E and STM32F1xx: moved board maps/board specific code to new _boards_ directory.
|
||||
|
||||
* STM32F4xx: fixed regression in SD card code affecting boards using SDIO interface.
|
||||
|
||||
---
|
||||
|
||||
<a name="20240719">Build 20240719
|
||||
|
||||
Core:
|
||||
|
||||
@@ -696,6 +696,16 @@ The following codes are defined:
|
||||
#define DEFAULT_REPORT_RUN_SUBSTATE Off // Default off. Set to \ref On or 1 to enable.
|
||||
#endif
|
||||
|
||||
/*! \def DEFAULT_REPORT_WHEN_HOMING
|
||||
\brief
|
||||
Enabling this setting enables status reporting while homing.
|
||||
<br>__NOTE:__ Enabling this option may break senders.
|
||||
\internal Bit 12 in settings.status_report.
|
||||
*/
|
||||
#if !defined DEFAULT_REPORT_WHEN_HOMING || defined __DOXYGEN__
|
||||
#define DEFAULT_REPORT_WHEN_HOMING Off // Default off. Set to \ref On or 1 to enable.
|
||||
#endif
|
||||
|
||||
///@}
|
||||
|
||||
/*! @name $11 - Setting_JunctionDeviation
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
#else
|
||||
#define GRBL_VERSION "1.1f"
|
||||
#endif
|
||||
#define GRBL_BUILD 20240719
|
||||
#define GRBL_BUILD 20240801
|
||||
|
||||
#define GRBL_URL "https://github.com/grblHAL"
|
||||
|
||||
|
||||
+36
-28
@@ -273,6 +273,7 @@ static bool homing_cycle (axes_signals_t cycle, axes_signals_t auto_square)
|
||||
squaring_mode_t squaring_mode = SquaringMode_Both;
|
||||
coord_data_t target;
|
||||
plan_line_data_t plan_data;
|
||||
rt_exec_t rt_exec, rt_exec_states = EXEC_SAFETY_DOOR|EXEC_RESET|EXEC_CYCLE_COMPLETE;
|
||||
|
||||
plan_data_init(&plan_data);
|
||||
plan_data.condition.system_motion = On;
|
||||
@@ -320,6 +321,9 @@ static bool homing_cycle (axes_signals_t cycle, axes_signals_t auto_square)
|
||||
autosquare_fail_distance = truncf(fail_distance * settings.axis[dual_motor_axis].steps_per_mm);
|
||||
}
|
||||
|
||||
if(settings.status_report.when_homing)
|
||||
rt_exec_states |= EXEC_STATUS_REPORT;
|
||||
|
||||
// Set search mode with approach at seek rate to quickly engage the specified cycle.mask limit switches.
|
||||
do {
|
||||
|
||||
@@ -420,36 +424,40 @@ static bool homing_cycle (axes_signals_t cycle, axes_signals_t auto_square)
|
||||
st_prep_buffer(); // Check and prep segment buffer.
|
||||
|
||||
// Exit routines: No time to run protocol_execute_realtime() in this loop.
|
||||
if (sys.rt_exec_state & (EXEC_SAFETY_DOOR | EXEC_RESET | EXEC_CYCLE_COMPLETE)) {
|
||||
if((rt_exec = (sys.rt_exec_state & rt_exec_states))) {
|
||||
|
||||
uint_fast16_t rt_exec = sys.rt_exec_state;
|
||||
|
||||
// Homing failure condition: Reset issued during cycle.
|
||||
if (rt_exec & EXEC_RESET)
|
||||
system_set_exec_alarm(Alarm_HomingFailReset);
|
||||
|
||||
// Homing failure condition: Safety door was opened.
|
||||
if (rt_exec & EXEC_SAFETY_DOOR)
|
||||
system_set_exec_alarm(Alarm_HomingFailDoor);
|
||||
|
||||
hal.delay_ms(2, NULL);
|
||||
|
||||
// Homing failure condition: Homing switch(es) still engaged after pull-off motion
|
||||
if (mode == HomingMode_Pulloff && (homing_signals_select(hal.homing.get_state(), (axes_signals_t){0}, SquaringMode_Both).mask & cycle.mask))
|
||||
system_set_exec_alarm(Alarm_FailPulloff);
|
||||
|
||||
// Homing failure condition: Limit switch not found during approach.
|
||||
if (mode != HomingMode_Pulloff && (rt_exec & EXEC_CYCLE_COMPLETE))
|
||||
system_set_exec_alarm(Alarm_HomingFailApproach);
|
||||
|
||||
if (sys.rt_exec_alarm) {
|
||||
mc_reset(); // Stop motors, if they are running.
|
||||
protocol_execute_realtime();
|
||||
return false;
|
||||
if(rt_exec == EXEC_STATUS_REPORT) {
|
||||
system_clear_exec_state_flag(EXEC_STATUS_REPORT);
|
||||
report_realtime_status();
|
||||
} else {
|
||||
// Pull-off motion complete. Disable CYCLE_STOP from executing.
|
||||
system_clear_exec_state_flag(EXEC_CYCLE_COMPLETE);
|
||||
break;
|
||||
|
||||
// Homing failure condition: Reset issued during cycle.
|
||||
if (rt_exec & EXEC_RESET)
|
||||
system_set_exec_alarm(Alarm_HomingFailReset);
|
||||
|
||||
// Homing failure condition: Safety door was opened.
|
||||
if (rt_exec & EXEC_SAFETY_DOOR)
|
||||
system_set_exec_alarm(Alarm_HomingFailDoor);
|
||||
|
||||
hal.delay_ms(2, NULL);
|
||||
|
||||
// Homing failure condition: Homing switch(es) still engaged after pull-off motion
|
||||
if (mode == HomingMode_Pulloff && (homing_signals_select(hal.homing.get_state(), (axes_signals_t){0}, SquaringMode_Both).mask & cycle.mask))
|
||||
system_set_exec_alarm(Alarm_FailPulloff);
|
||||
|
||||
// Homing failure condition: Limit switch not found during approach.
|
||||
if (mode != HomingMode_Pulloff && (rt_exec & EXEC_CYCLE_COMPLETE))
|
||||
system_set_exec_alarm(Alarm_HomingFailApproach);
|
||||
|
||||
if (sys.rt_exec_alarm) {
|
||||
mc_reset(); // Stop motors, if they are running.
|
||||
protocol_execute_realtime();
|
||||
return false;
|
||||
} else {
|
||||
// Pull-off motion complete. Disable CYCLE_STOP from executing.
|
||||
system_clear_exec_state_flag(EXEC_CYCLE_COMPLETE);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+4
-2
@@ -874,8 +874,10 @@ status_code_t mc_homing_cycle (axes_signals_t cycle)
|
||||
|
||||
state_set(STATE_HOMING); // Set homing system state.
|
||||
#if COMPATIBILITY_LEVEL == 0
|
||||
system_set_exec_state_flag(EXEC_STATUS_REPORT); // Force a status report and
|
||||
delay_sec(0.1f, DelayMode_Dwell); // delay a bit to get it sent (or perhaps wait a bit for a request?)
|
||||
if(!settings.status_report.when_homing) {
|
||||
system_set_exec_state_flag(EXEC_STATUS_REPORT); // Force a status report and
|
||||
delay_sec(0.1f, DelayMode_Dwell); // delay a bit to get it sent (or perhaps wait a bit for a request?)
|
||||
}
|
||||
#endif
|
||||
// Turn off spindle and coolant (and update parser state)
|
||||
if(spindle_is_on())
|
||||
|
||||
+3
-2
@@ -144,6 +144,7 @@ PROGMEM const settings_t defaults = {
|
||||
.status_report.parser_state = DEFAULT_REPORT_PARSER_STATE,
|
||||
.status_report.alarm_substate = DEFAULT_REPORT_ALARM_SUBSTATE,
|
||||
.status_report.run_substate = DEFAULT_REPORT_RUN_SUBSTATE,
|
||||
.status_report.when_homing = DEFAULT_REPORT_WHEN_HOMING,
|
||||
.limits.flags.hard_enabled = DEFAULT_HARD_LIMIT_ENABLE,
|
||||
.limits.flags.soft_enabled = DEFAULT_SOFT_LIMIT_ENABLE,
|
||||
.limits.flags.jog_soft_limited = DEFAULT_JOG_LIMIT_ENABLE,
|
||||
@@ -490,7 +491,7 @@ PROGMEM static const setting_detail_t setting_detail[] = {
|
||||
{ Setting_GangedDirInvertMask, Group_Stepper, "Ganged axes direction invert", NULL, Format_Bitfield, ganged_axes, NULL, NULL, Setting_IsExtendedFn, set_ganged_dir_invert, get_int, is_setting_available },
|
||||
{ Setting_SpindlePWMOptions, Group_Spindle, "PWM Spindle", NULL, Format_XBitfield, "Enable,RPM controls spindle enable signal,Disable laser mode capability", NULL, NULL, Setting_IsExtendedFn, set_pwm_options, get_int, is_setting_available },
|
||||
#if COMPATIBILITY_LEVEL <= 1
|
||||
{ Setting_StatusReportMask, Group_General, "Status report options", NULL, Format_Bitfield, "Position in machine coordinate,Buffer state,Line numbers,Feed & speed,Pin state,Work coordinate offset,Overrides,Probe coordinates,Buffer sync on WCO change,Parser state,Alarm substatus,Run substatus", NULL, NULL, Setting_IsExtendedFn, set_report_mask, get_int, NULL },
|
||||
{ Setting_StatusReportMask, Group_General, "Status report options", NULL, Format_Bitfield, "Position in machine coordinate,Buffer state,Line numbers,Feed & speed,Pin state,Work coordinate offset,Overrides,Probe coordinates,Buffer sync on WCO change,Parser state,Alarm substatus,Run substatus,Enable when homing", NULL, NULL, Setting_IsExtendedFn, set_report_mask, get_int, NULL },
|
||||
#else
|
||||
{ Setting_StatusReportMask, Group_General, "Status report options", NULL, Format_Bitfield, "Position in machine coordinate,Buffer state", NULL, NULL, Setting_IsLegacyFn, set_report_mask, get_int, NULL },
|
||||
#endif
|
||||
@@ -661,7 +662,7 @@ PROGMEM static const setting_descr_t setting_descr[] = {
|
||||
{ Setting_GangedDirInvertMask, "Inverts the direction signals for the second motor used for ganged axes.\\n\\n"
|
||||
"NOTE: This inversion will be applied in addition to the inversion from setting $3."
|
||||
},
|
||||
{ Setting_StatusReportMask, "Specifies optional data included in status reports.\\n"
|
||||
{ Setting_StatusReportMask, "Specifies optional data included in status reports and if report is sent when homing.\\n"
|
||||
"If Run substatus is enabled it may be used for simple probe protection.\\n\\n"
|
||||
"NOTE: Parser state will be sent separately after the status report and only on changes."
|
||||
},
|
||||
|
||||
+3
-2
@@ -3,7 +3,7 @@
|
||||
|
||||
Part of grblHAL
|
||||
|
||||
Copyright (c) 2017-2023 Terje Io
|
||||
Copyright (c) 2017-2024 Terje Io
|
||||
Copyright (c) 2011-2016 Sungeun K. Jeon for Gnea Research LLC
|
||||
Copyright (c) 2009-2011 Simen Svale Skogsrud
|
||||
|
||||
@@ -565,7 +565,8 @@ typedef union {
|
||||
parser_state :1,
|
||||
alarm_substate :1,
|
||||
run_substate :1,
|
||||
unassigned :4;
|
||||
when_homing :1,
|
||||
unassigned :3;
|
||||
};
|
||||
} reportmask_t;
|
||||
|
||||
|
||||
@@ -761,8 +761,10 @@ void debug_printf (const char *fmt, ...)
|
||||
|
||||
if(hal.stream.write) {
|
||||
report_message(debug_out, Message_Debug);
|
||||
while(hal.stream.get_tx_buffer_count()) // Wait until message is delivered
|
||||
grbl.on_execute_realtime(state_get());
|
||||
if(hal.stream.get_tx_buffer_count) {
|
||||
while(hal.stream.get_tx_buffer_count()) // Wait until message is delivered
|
||||
grbl.on_execute_realtime(state_get());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user