Explorar el Código

refactor home function

implement retry if not getting a good response
Fabio De Simone hace 11 meses
padre
commit
4b2606527f
Se han modificado 1 ficheros con 16 adiciones y 4 borrados
  1. 16 4
      dune_weaver_flask/modules/serial/serial_manager.py

+ 16 - 4
dune_weaver_flask/modules/serial/serial_manager.py

@@ -188,7 +188,7 @@ def send_grbl_coordinates(x, y, speed=600, timeout=2, home=False):
         time.sleep(1)
         time.sleep(1)
 
 
 
 
-def home():
+def home(retry = 0):
     logger.info(f"Homing with speed {state.speed}")
     logger.info(f"Homing with speed {state.speed}")
     
     
     # Check config for sensorless homing
     # Check config for sensorless homing
@@ -204,11 +204,23 @@ def home():
             ser.write("$H\n".encode())
             ser.write("$H\n".encode())
             ser.write("G1 Y0 F100\n".encode())
             ser.write("G1 Y0 F100\n".encode())
             ser.flush()
             ser.flush()
-            
-    else:
-        logger.info("Using sensor-based homing")
+    # we check that we actually got a valid response, if not, we try again a couple of times
+    elif "filename" in response.lower():
+        logger.info("Using brute-force homing")
         send_grbl_coordinates(0, -110/5, state.speed, home=True)
         send_grbl_coordinates(0, -110/5, state.speed, home=True)
     
     
+    else:
+        # we wait a bit and cal again increasing retry times
+        # if we are over the third retry, we give up
+        if retry < 3:
+            time.sleep(1)
+            home(retry+1)
+            return
+        else:
+            # after 3 retries we're still not getting a good response
+            # raise an exception
+            raise Exception("Couldn't get a valid response for homing after 3 retries")
+    
     
     
     state.current_theta = state.current_rho = 0
     state.current_theta = state.current_rho = 0
     update_machine_position()
     update_machine_position()