diff --git a/test_tube_scanner/modules/grbl.py b/test_tube_scanner/modules/grbl.py index acad912..18a8d2e 100644 --- a/test_tube_scanner/modules/grbl.py +++ b/test_tube_scanner/modules/grbl.py @@ -29,7 +29,9 @@ class GRBLController: Y_MIN = 0 def __init__(self, port='/dev/ttyUSB0', baudrate=115200, timeout=1, send_callback=None, x_max=None, y_max=None): - self.lock = threading.Lock() + logger.info(f"GRBLController::init begin {port} device port") + + #self.lock = threading.Lock() self.port = port self.baudrate = baudrate self.timeout = timeout @@ -44,9 +46,8 @@ class GRBLController: self._state = self._send_msg self.x, self.y = 0, 0 - self.start_connection() - self._wake_up() - self._init_machine() + + #self.start_connection() def wait_for(self, delay=1.0): threading.Event().wait(delay*1.0) @@ -57,7 +58,7 @@ class GRBLController: def clear_buffer(self): while self.ser.in_waiting >0: msg = self.ser.readline().decode().strip() - print(f"Buffer: {msg}") + logger.info(f"Buffer: {msg}") self._state(state='serial', msg=msg) def start_connection(self): @@ -69,9 +70,14 @@ class GRBLController: self.ser.setDTR(False) self.ser.setRTS(False) self.clear_buffer() + + self._wake_up() + self._init_machine() + logger.info(f"GRBLController::start_connexion started {self.port}") break except Exception as e: - print(f"Erreur de connexion (essai {n}): {e}") + logger.error(f"GRBLController::start_connexion (essai {n}): {e}") + self._state(state='error', msg=f"{e}") n += 1 self.wait_for(1.0) @@ -100,12 +106,6 @@ class GRBLController: self._state(state='error', msg=f"Error send {cmd} command: {e}") self.close() self.start_connection() - self._wake_up() - self._init_machine() - ''' - self.recover() - self.reset_grbl() - raise''' def recover(self): #print("Récupération de GRBL...") diff --git a/test_tube_scanner/scanner/process.py b/test_tube_scanner/scanner/process.py index e1adb41..1155f02 100644 --- a/test_tube_scanner/scanner/process.py +++ b/test_tube_scanner/scanner/process.py @@ -228,6 +228,12 @@ class ScannerProcess(Task): self.cam._active_median = False self.cam.set_circular_crop(None) + self.grbl = grbl.GRBLController( + send_callback=self._display, + x_max=self.conf.grbl_xmax, + y_max=self.conf.grbl_ymax + ) + self.stop_event.clear() self.start_services() except Exception as e: @@ -248,6 +254,7 @@ class ScannerProcess(Task): def start_services(self): Thread(target=self._listen_to_redis, daemon=True).start() Thread(target=self._recording, daemon=True).start() + Thread(target=self._init_grbl, daemon=True).start() self.cam.start() def _send(self, **payload): @@ -288,21 +295,22 @@ class ScannerProcess(Task): except Exception as e: logger.error(f'recorder: {e}') + def _init_grbl(self, feed=1000): - self.grbl = grbl.GRBLController( - send_callback=self._display, - x_max=self.conf.grbl_xmax, - y_max=self.conf.grbl_ymax - ) + logger.info(f"==== GRBLController try to start connection!") + self.grbl.start_connection() + self._send(state='serial', msg=f"Connected {self.grbl.port}") + self.grbl.go_origin(feed=feed) self.grbl.wait_for(2.0) + def _listen_to_redis(self): try: logger.info(f"==== Scanner {self.group}: listen via redisDB") pubsub = redisDB.pubsub() pubsub.subscribe(self.group) - self._init_grbl() + #self._init_grbl() self.manager = MultiWellManager(process=self) for message in pubsub.listen():