From c9efccec156b031c7483477efdea2a012e51051a Mon Sep 17 00:00:00 2001 From: David Carley Date: Mon, 11 Oct 2021 00:28:22 -0700 Subject: [PATCH] Got a working solution for detecting failed probes --- src/avr/src/seek.c | 2 +- src/js/app.js | 14 +++++++++----- src/js/control-view.js | 16 ++++++++++++++++ src/pug/templates/control-view.pug | 12 ++++++++++++ src/py/bbctrl/Comm.py | 12 +++++++----- src/py/bbctrl/Mach.py | 12 ++++++++++-- 6 files changed, 55 insertions(+), 13 deletions(-) diff --git a/src/avr/src/seek.c b/src/avr/src/seek.c index e3faf45..56f010d 100644 --- a/src/avr/src/seek.c +++ b/src/avr/src/seek.c @@ -82,7 +82,7 @@ void seek_end() { if (!seek.active) return; if (!(SEEK_FOUND & seek.flags) && (SEEK_ERROR & seek.flags)) - estop_trigger(STAT_SEEK_NOT_FOUND); + STATUS_WARNING(STAT_SEEK_NOT_FOUND, "", 0); if((seekMode == SW_STALL_0) || (seekMode == SW_STALL_1) || (seekMode ==SW_STALL_2) || (seekMode == SW_STALL_3)) disable_stall_microstep(); diff --git a/src/js/app.js b/src/js/app.js index 8177d48..c51228c 100644 --- a/src/js/app.js +++ b/src/js/app.js @@ -117,8 +117,10 @@ module.exports = new Vue({ }, state: { messages: [], + probing_active: false, wait_for_probing_complete: false, - show_probe_complete_modal: false + show_probe_complete_modal: false, + show_probe_failed_modal: false }, video_size: cookie.get('video-size', 'small'), crosshair: cookie.get('crosshair', 'false') != 'false', @@ -322,9 +324,6 @@ module.exports = new Vue({ this.check_ip_address(); this.check_ssid(); - //.check_disk_space(); - - }.bind(this)) }, @@ -386,7 +385,12 @@ module.exports = new Vue({ } if ('log' in e.data) { - this.$broadcast('log', e.data.log); + if (this.state.probing_active && e.data.log.msg === "Switch not found") { + this.$broadcast('probing_failed'); + } else { + this.$broadcast('log', JSON.stringify(e.data.log, null, 4)); + } + delete e.data.log; } diff --git a/src/js/control-view.js b/src/js/control-view.js index 5379396..802f3d5 100644 --- a/src/js/control-view.js +++ b/src/js/control-view.js @@ -240,7 +240,18 @@ module.exports = { this.send('M70\nG91\nG0' + axis + value + '\nM72'); }, + probing_failed: function() { + Vue.set(this.state, "probing_active", false); + Vue.set(this.state, "wait_for_probing_complete", false); + Vue.set(this.state, "show_probe_complete_modal", false); + Vue.set(this.state, "goto_xy_zero_after_probe", false); + + Vue.set(this.state, "show_probe_failed_modal", true); + }, + probing_complete: function() { + Vue.set(this.state, "probing_active", false); + if (this.config.settings['probing-prompts']) { Vue.set(this.state, "show_probe_complete_modal", true); } else { @@ -303,6 +314,10 @@ module.exports = { on_finish(); }, + hide_probe_failed_modal: function() { + Vue.set(this.state, "show_probe_failed_modal", false); + }, + prep_and_show_tool_diameter_modal() { this.tool_diameter_for_prompt = (this.mach_units == 'METRIC') ? this.tool_diameter @@ -351,6 +366,7 @@ module.exports = { // Also, add zlift to compensate for the fact that we lift after probing Z const plunge = Math.min(12.7, zoffset * 0.75) + zlift; + Vue.set(this.state, "probing_active", true); Vue.set(this.state, "goto_xy_zero_after_probe", !zOnly); if (zOnly) { diff --git a/src/pug/templates/control-view.pug b/src/pug/templates/control-view.pug index 80c6ac6..7fae77a 100644 --- a/src/pug/templates/control-view.pug +++ b/src/pug/templates/control-view.pug @@ -128,6 +128,18 @@ script#control-view-template(type="text/x-template") button.pure-button.button-success(@click=`$emit("finalize_probe")`) | Done + message(:show.sync=`state.show_probe_failed_modal`) + h3(slot="header") Probing failed! + + div(slot="body") + .pure-form + p Could not find the probe block during probing! + p Make sure the bit is within 1" / 25.4mm of the probe block, and try again. + + div(slot="footer") + button.pure-button.button-success(@click=`hide_probe_failed_modal()`) + | OK + table(style="table-layout: fixed; width: 100%;") tr(style="height: fit-content;") td(style="white-space: nowrap; width: 410px;", rowspan="2") diff --git a/src/py/bbctrl/Comm.py b/src/py/bbctrl/Comm.py index 46c087a..b7dc27e 100644 --- a/src/py/bbctrl/Comm.py +++ b/src/py/bbctrl/Comm.py @@ -216,14 +216,16 @@ class Comm(object): self.log.warning('%s, data: %s', e, line) continue - if 'variables' in msg: self._update_vars(msg) - elif 'msg' in msg: self._log_msg(msg) - + if 'variables' in msg: + self._update_vars(msg) + elif 'msg' in msg: + self._log_msg(msg) + self.ctrl.mach.process_log(msg) elif 'firmware' in msg: self.log.info('AVR firmware rebooted') self.connect() - - else: self._update_state(msg) + else: + self._update_state(msg) def estop(self): diff --git a/src/py/bbctrl/Mach.py b/src/py/bbctrl/Mach.py index 263988e..cff8657 100644 --- a/src/py/bbctrl/Mach.py +++ b/src/py/bbctrl/Mach.py @@ -132,6 +132,12 @@ class Mach(Comm): # if current == 'idle' or (cycle == 'jogging' and self._is_paused()): self._set_cycle(cycle) + + def process_log(self, log): + # Detect when a probe has failed, and reset the planner + if log['msg'] == 'Switch not found': + self.planner.reset(False) + def _update(self, update): # Detect motor faults @@ -145,7 +151,8 @@ class Mach(Comm): state = self._get_state() # Handle EStop - if state_changed and state == 'ESTOPPED': self.planner.reset(False) + if state_changed and state == 'ESTOPPED': + self.planner.reset(False) # Exit cycle if state changed to READY if (state_changed and self._get_cycle() != 'idle' and @@ -161,7 +168,8 @@ class Mach(Comm): self.stopping = False # Unpause sync - if state_changed and state != 'HOLDING': self.unpausing = False + if state_changed and state != 'HOLDING': + self.unpausing = False # Entering HOLDING state if state_changed and state == 'HOLDING':