1
0
Эх сурвалжийг харах

Add automatic retry for failed axis homing

When X or Y axis doesn't home, nudge it 10 units and retry $H command

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
tuanchris 1 сар өмнө
parent
commit
a0a30a946a

+ 37 - 0
modules/connection/connection_manager.py

@@ -646,6 +646,43 @@ def home(timeout=90):
                 if not (state.homed_x and state.homed_y):
                     logger.warning(f"Did not receive all homing messages (X:{state.homed_x}, Y:{state.homed_y})")
 
+                    # Retry homing for the axis that didn't home
+                    retry_axis = None
+                    if state.homed_x and not state.homed_y:
+                        retry_axis = "Y"
+                    elif state.homed_y and not state.homed_x:
+                        retry_axis = "X"
+
+                    if retry_axis:
+                        logger.info(f"{retry_axis} axis didn't home, nudging and retrying...")
+                        # Wait for idle first
+                        check_idle()
+                        # Send small movement to move away from sensor
+                        state.conn.send(f"G1 {retry_axis}10 F{homing_speed}\n")
+                        time.sleep(2)
+                        check_idle()
+                        # Retry homing
+                        state.conn.send("$H\n")
+                        logger.info(f"Sent $H retry, waiting for {retry_axis} homing message...")
+                        retry_start = time.time()
+                        while (time.time() - retry_start) < 20:
+                            try:
+                                response = state.conn.readline()
+                                if response:
+                                    logger.debug(f"Retry homing response: {response}")
+                                    if f"[MSG:Homed:{retry_axis}]" in response:
+                                        if retry_axis == "X":
+                                            state.homed_x = True
+                                        else:
+                                            state.homed_y = True
+                                        logger.info(f"Retry successful: Received [MSG:Homed:{retry_axis}]")
+                                        break
+                            except Exception as e:
+                                logger.error(f"Error reading retry response: {e}")
+                            time.sleep(0.1)
+                        if (retry_axis == "X" and not state.homed_x) or (retry_axis == "Y" and not state.homed_y):
+                            logger.error(f"{retry_axis} axis homing retry failed")
+
                 # Wait for idle state after $H
                 logger.info("Waiting for device to reach idle state after $H...")
                 idle_reached = check_idle()