toolhead: Extend flushing slightly past required time

There is no harm in enabling flushing for a little longer than
necessary.  In contrast, a slight rounding issue causing a message to
not get flushed properly could result in an error.  So, extend the
flushing time slightly to avoid potential issues.

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This commit is contained in:
Kevin O'Connor 2024-01-17 11:22:16 -05:00
parent 3d3b87f97f
commit 7a74888b43
2 changed files with 6 additions and 6 deletions

View File

@ -6,7 +6,6 @@
import chelper import chelper
MAX_SCHEDULE_TIME = 5.0 MAX_SCHEDULE_TIME = 5.0
CLOCK_SYNC_EXTRA_TIME = 0.050
class error(Exception): class error(Exception):
pass pass
@ -118,8 +117,7 @@ class MCU_queued_pwm:
# Continue flushing to resend time # Continue flushing to resend time
wakeclock += self._duration_ticks wakeclock += self._duration_ticks
wake_print_time = self._mcu.clock_to_print_time(wakeclock) wake_print_time = self._mcu.clock_to_print_time(wakeclock)
self._toolhead.note_kinematic_activity(wake_print_time self._toolhead.note_kinematic_activity(wake_print_time)
+ CLOCK_SYNC_EXTRA_TIME)
def set_pwm(self, print_time, value): def set_pwm(self, print_time, value):
clock = self._mcu.print_time_to_clock(print_time) clock = self._mcu.print_time_to_clock(print_time)
if self._invert: if self._invert:

View File

@ -1,6 +1,6 @@
# Code for coordinating events on the printer toolhead # Code for coordinating events on the printer toolhead
# #
# Copyright (C) 2016-2021 Kevin O'Connor <kevin@koconnor.net> # Copyright (C) 2016-2024 Kevin O'Connor <kevin@koconnor.net>
# #
# This file may be distributed under the terms of the GNU GPLv3 license. # This file may be distributed under the terms of the GNU GPLv3 license.
import math, logging, importlib import math, logging, importlib
@ -191,6 +191,7 @@ BUFFER_TIME_HIGH = 2.0
BUFFER_TIME_START = 0.250 BUFFER_TIME_START = 0.250
BGFLUSH_LOW_TIME = 0.200 BGFLUSH_LOW_TIME = 0.200
BGFLUSH_BATCH_TIME = 0.200 BGFLUSH_BATCH_TIME = 0.200
BGFLUSH_EXTRA_TIME = 0.250
MIN_KIN_TIME = 0.100 MIN_KIN_TIME = 0.100
MOVE_BATCH_TIME = 0.500 MOVE_BATCH_TIME = 0.500
STEPCOMPRESS_FLUSH_TIME = 0.050 STEPCOMPRESS_FLUSH_TIME = 0.050
@ -428,14 +429,15 @@ class ToolHead:
self.check_stall_time = self.print_time self.check_stall_time = self.print_time
# In "NeedPrime"/"Priming" state - flush queues if needed # In "NeedPrime"/"Priming" state - flush queues if needed
while 1: while 1:
if self.last_flush_time >= self.need_flush_time: end_flush = self.need_flush_time + BGFLUSH_EXTRA_TIME
if self.last_flush_time >= end_flush:
self.do_kick_flush_timer = True self.do_kick_flush_timer = True
return self.reactor.NEVER return self.reactor.NEVER
buffer_time = self.last_flush_time - est_print_time buffer_time = self.last_flush_time - est_print_time
if buffer_time > BGFLUSH_LOW_TIME: if buffer_time > BGFLUSH_LOW_TIME:
return eventtime + buffer_time - BGFLUSH_LOW_TIME return eventtime + buffer_time - BGFLUSH_LOW_TIME
ftime = est_print_time + BGFLUSH_LOW_TIME + BGFLUSH_BATCH_TIME ftime = est_print_time + BGFLUSH_LOW_TIME + BGFLUSH_BATCH_TIME
self._advance_flush_time(min(self.need_flush_time, ftime)) self._advance_flush_time(min(end_flush, ftime))
except: except:
logging.exception("Exception in flush_handler") logging.exception("Exception in flush_handler")
self.printer.invoke_shutdown("Exception in flush_handler") self.printer.invoke_shutdown("Exception in flush_handler")