From 1f2d9f124316a10bcff8ea4287948b2cb2aca88c Mon Sep 17 00:00:00 2001 From: make-ing Date: Fri, 13 Nov 2015 17:02:04 +0100 Subject: [PATCH 1/4] fixed pause bug when grbl was sending Queue state without an hardware button pressed --- src/octoprint/util/comm_acc2.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/octoprint/util/comm_acc2.py b/src/octoprint/util/comm_acc2.py index fde3a54d..270aba51 100644 --- a/src/octoprint/util/comm_acc2.py +++ b/src/octoprint/util/comm_acc2.py @@ -332,11 +332,11 @@ class MachineCom(object): if self._grbl_state == 'Queue': if time.time() - self._pause_delay_time > 0.3: if not self.isPaused(): - self.setPause(True) + self.setPause(True, False) elif self._grbl_state == 'Run' or self._grbl_state == 'Idle': if time.time() - self._pause_delay_time > 0.3: if self.isPaused(): - self.setPause(False) + self.setPause(False, False) self._update_grbl_pos(line) #if self._metricf is not None: # self._metricf.write(line) @@ -846,7 +846,7 @@ class MachineCom(object): eventManager().fire(Events.PRINT_CANCELLED, payload) - def setPause(self, pause): + def setPause(self, pause, send_cmd=True): if not self._currentFile: return @@ -861,14 +861,16 @@ class MachineCom(object): self._pauseWaitTimeLost = self._pauseWaitTimeLost + (time.time() - self._pauseWaitStartTime) self._pauseWaitStartTime = None self._pause_delay_time = time.time() - self._real_time_commands['cycle_start']=True + if send_cmd is True: + self._real_time_commands['cycle_start']=True self._send_event.set() eventManager().fire(Events.PRINT_RESUMED, payload) elif pause and self.isPrinting(): if not self._pauseWaitStartTime: self._pauseWaitStartTime = time.time() self._pause_delay_time = time.time() - self._real_time_commands['feed_hold']=True + if send_cmd is True: + self._real_time_commands['feed_hold']=True self._send_event.set() eventManager().fire(Events.PRINT_PAUSED, payload) From ced96886475d900f8e955e470aa44df6155dadc4 Mon Sep 17 00:00:00 2001 From: make-ing Date: Fri, 13 Nov 2015 17:11:56 +0100 Subject: [PATCH 2/4] added dictionary algorithm to speed up feedrate and intensity override --- src/octoprint/util/comm_acc2.py | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/octoprint/util/comm_acc2.py b/src/octoprint/util/comm_acc2.py index 270aba51..acbc7437 100644 --- a/src/octoprint/util/comm_acc2.py +++ b/src/octoprint/util/comm_acc2.py @@ -82,6 +82,8 @@ class MachineCom(object): self._actual_feedrate = None self._intensity_factor = 1 self._actual_intensity = None + self._feedrate_dict = {} + self._intensity_dict = {} # regular expressions self._regex_command = re.compile("^\s*\$?([GM]\d+|[TH])") @@ -643,6 +645,7 @@ class MachineCom(object): temp = value / 100.0 if temp > 0: self._feedrate_factor = temp + self._feedrate_dict = {} if self._actual_feedrate is not None: temp = round(self._actual_feedrate * self._feedrate_factor) # TODO replace with value from printer profile @@ -654,6 +657,7 @@ class MachineCom(object): temp = value / 100.0 if temp >= 0: self._intensity_factor = temp + self._intensity_dict = {} if self._actual_intensity is not None: temp = round(self._actual_intensity * self._intensity_factor) if temp > 1000: @@ -665,8 +669,12 @@ class MachineCom(object): obj = self._regex_feedrate.search(cmd) if obj is not None: feedrate_cmd = cmd[obj.start():obj.end()] - self._actual_feedrate = int(feedrate_cmd[1:]) - new_feedrate = round(self._actual_feedrate * self._feedrate_factor) + if feedrate_cmd in self._feedrate_dict: + new_feedrate = self._feedrate_dict[feedrate_cmd] + else: + self._actual_feedrate = int(feedrate_cmd[1:]) + new_feedrate = round(self._actual_feedrate * self._feedrate_factor) + self._feedrate_dict[feedrate_cmd] = new_feedrate # TODO replace with value from printer profile if new_feedrate > 5000: new_feedrate = 5000 @@ -682,8 +690,12 @@ class MachineCom(object): obj = self._regex_intensity.search(cmd) if obj is not None: intensity_cmd = cmd[obj.start():obj.end()] - self._actual_intensity = int(intensity_cmd[1:]) - new_intensity = round(self._actual_intensity * self._intensity_factor) + if intensity_cmd in self._intensity_dict: + new_intensity = self._intensity_dict[intensity_cmd] + else: + self._actual_intensity = int(intensity_cmd[1:]) + new_intensity = round(self._actual_intensity * self._intensity_factor) + self._intensity_dict[intensity_cmd] = new_intensity if new_intensity > 1000: new_intensity = 1000 else: From 19f2ec9824766da76728118a8f440f5f8b010e54 Mon Sep 17 00:00:00 2001 From: make-ing Date: Fri, 13 Nov 2015 19:11:13 +0100 Subject: [PATCH 3/4] fixed wrong dictionary entry bug if limits are exceeded --- src/octoprint/util/comm_acc2.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/octoprint/util/comm_acc2.py b/src/octoprint/util/comm_acc2.py index acbc7437..f5d03e93 100644 --- a/src/octoprint/util/comm_acc2.py +++ b/src/octoprint/util/comm_acc2.py @@ -674,12 +674,12 @@ class MachineCom(object): else: self._actual_feedrate = int(feedrate_cmd[1:]) new_feedrate = round(self._actual_feedrate * self._feedrate_factor) + # TODO replace with value from printer profile + if new_feedrate > 5000: + new_feedrate = 5000 + elif new_feedrate < 30: + new_feedrate = 30 self._feedrate_dict[feedrate_cmd] = new_feedrate - # TODO replace with value from printer profile - if new_feedrate > 5000: - new_feedrate = 5000 - elif new_feedrate < 30: - new_feedrate = 30 else: return cmd return cmd.replace(feedrate_cmd, 'F%d' % round(new_feedrate)) @@ -695,9 +695,9 @@ class MachineCom(object): else: self._actual_intensity = int(intensity_cmd[1:]) new_intensity = round(self._actual_intensity * self._intensity_factor) + if new_intensity > 1000: + new_intensity = 1000 self._intensity_dict[intensity_cmd] = new_intensity - if new_intensity > 1000: - new_intensity = 1000 else: return cmd return cmd.replace(intensity_cmd, 'S%d' % round(new_intensity)) From 2ab7a6ceb7c93a22acc1a28f499b2f4e9fb6410f Mon Sep 17 00:00:00 2001 From: make-ing Date: Sat, 14 Nov 2015 13:30:35 +0100 Subject: [PATCH 4/4] added /feedrate and /intensity to help message --- src/octoprint/util/comm_acc2.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/octoprint/util/comm_acc2.py b/src/octoprint/util/comm_acc2.py index f5d03e93..6a9f7bfd 100644 --- a/src/octoprint/util/comm_acc2.py +++ b/src/octoprint/util/comm_acc2.py @@ -780,6 +780,8 @@ class MachineCom(object): self._log("available commands are:") self._log(" /togglestatusreport") self._log(" /setstatusfrequency ") + self._log(" /feedrate <%>") + self._log(" /intensity <%>") self._log(" /disconnect") return