From ac0e0dfd2173aedcb5f1953fb2a4b80e3d1149c9 Mon Sep 17 00:00:00 2001 From: zkk <1007518571@qq.com> Date: Wed, 30 Apr 2025 11:10:00 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96tmc=E9=A9=B1=E5=8A=A8?= =?UTF-8?q?=E6=A3=80=E6=9F=A5=E6=97=B6=E9=97=B4=E4=B8=BA10s=E4=B8=80?= =?UTF-8?q?=E6=AC=A1=20=E5=A6=82=E6=9E=9C=E6=8A=A5=E9=94=99=E5=8F=AA?= =?UTF-8?q?=E6=B6=88=E6=81=AF=E6=8F=90=E7=A4=BA=E4=B8=8D=E7=BB=88=E6=AD=A2?= =?UTF-8?q?=E6=89=93=E5=8D=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- klippy/extras/tmc.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/klippy/extras/tmc.py b/klippy/extras/tmc.py index 1d8599e2e..fa6dcdbe3 100644 --- a/klippy/extras/tmc.py +++ b/klippy/extras/tmc.py @@ -130,16 +130,19 @@ class TMCErrorCheck: pheaters.register_monitor(config) def _query_register(self, reg_info, try_clear=False): last_value, reg_name, mask, err_mask, cs_actual_mask = reg_info + reactor = self.printer.get_reactor() cleared_flags = 0 count = 0 while 1: try: val = self.mcu_tmc.get_register(reg_name) + if val in (None, 0): + reactor.pause(reactor.monotonic() + 0.150) + continue except self.printer.command_error as e: count += 1 if count < 3 and str(e).startswith("Unable to read tmc uart"): # Allow more retries on a TMC UART read error - reactor = self.printer.get_reactor() reactor.pause(reactor.monotonic() + 0.050) continue raise @@ -147,7 +150,7 @@ class TMCErrorCheck: fmt = self.fields.pretty_format(reg_name, val) logging.info("TMC '%s' reports %s", self.stepper_name, fmt) reg_info[0] = last_value = val - if not val & err_mask: + if val != -1 and not val & err_mask: if not cs_actual_mask or val & cs_actual_mask: break irun = self.fields.get_field(self.irun_field) @@ -160,8 +163,10 @@ class TMCErrorCheck: count += 1 if count >= 3: fmt = self.fields.pretty_format(reg_name, val) - raise self.printer.command_error("TMC '%s' reports error: %s" - % (self.stepper_name, fmt)) + msg = "TMC '%s' reports error: %s" % (self.stepper_name, fmt) + gcode = self.printer.lookup_object('gcode') + self.printer.handle_internal_error(msg, gcode, False, False, None) + break if try_clear and val & err_mask: try_clear = False cleared_flags |= val & err_mask @@ -184,7 +189,7 @@ class TMCErrorCheck: except self.printer.command_error as e: self.printer.invoke_shutdown(str(e)) return self.printer.get_reactor().NEVER - return eventtime + 1. + return eventtime + 10. def stop_checks(self): if self.check_timer is None: return