Loading noctua/devices/mercury.py +58 −13 Original line number Diff line number Diff line Loading @@ -86,13 +86,15 @@ class Mercury(BaseDevice): try: self._gateway = PISocket(host=self.host, port=self.port) self._gateway.__enter__() except OSError as e: self.error.append(str(e)) return None messages = GCSMessages(self._gateway) self.pidevice = GCSCommands(messages) self.pidevice.__enter__() self.error = [] except OSError as e: self._gateway = None self.pidevice = None self.error.append(str(e)) return None return self.pidevice Loading Loading @@ -124,9 +126,11 @@ class Mercury(BaseDevice): return None try: return pidevice.qIDN() except GCSError as e: except (GCSError, OSError) as e: log.error(f"qIDN error: {e}") self.error.append(str(e)) self.pidevice = None self._gateway = None return None @property Loading Loading @@ -156,6 +160,12 @@ class Mercury(BaseDevice): except GCSError as e: log.error(f"Error: {e}") return None except OSError as e: log.error(f"Socket error in get: {e}") self.error.append(str(e)) self.pidevice = None self._gateway = None return None except AttributeError as e: log.error(f"Command not found: {e}") return None Loading @@ -180,6 +190,12 @@ class Mercury(BaseDevice): except GCSError as e: log.error(f"Error: {e}") return None except OSError as e: log.error(f"Socket error in put: {e}") self.error.append(str(e)) self.pidevice = None self._gateway = None return None except AttributeError as e: log.error(f"Command not found: {e}") return None Loading @@ -202,10 +218,20 @@ class Mercury(BaseDevice): moving = status_dict[self.axis] except GCSError as e: log.warning(e) except OSError as e: log.error(f"Socket error in wait: {e}") self.error.append(str(e)) self.pidevice = None self._gateway = None return try: err = pidevice.qERR() if err != 0: log.warning(err) except (GCSError, OSError) as e: log.warning(f"qERR error in wait: {e}") break time.sleep(0.2) Loading @@ -218,8 +244,14 @@ class Mercury(BaseDevice): if pidevice is None: return # Clear any previous errors try: pidevice.qERR() except (GCSError, OSError) as e: log.error(f"init qERR error: {e}") self.error.append(str(e)) self.pidevice = None self._gateway = None return # Servo on self.put("SVO", True) Loading @@ -240,8 +272,14 @@ class Mercury(BaseDevice): if pidevice is None: return # Clear any previous errors try: pidevice.qERR() except (GCSError, OSError) as e: log.error(f"abort qERR error: {e}") self.error.append(str(e)) self.pidevice = None self._gateway = None return # STOP! self.put("STP", True) Loading Loading @@ -281,7 +319,14 @@ class Stage(Mercury): pidevice = self._check_connection() if pidevice is None: return None try: return pidevice.IsMoving(self.axis)[self.axis] except (GCSError, OSError) as e: log.error(f"IsMoving error: {e}") self.error.append(str(e)) self.pidevice = None self._gateway = None return None @property Loading noctua/templates/observation.py +7 −1 Original line number Diff line number Diff line Loading @@ -174,7 +174,13 @@ class Template(BaseTemplate): if imagetype == "Light": if self.domeslewing: log.info(f"Check Dome position") while (abs(tel.coordinates["altaz"][1] - dom.azimuth) > 3): while True: dome_az = dom.azimuth if dome_az is None: log.warning("Dome azimuth unavailable, skipping dome alignment") break if abs(tel.coordinates["altaz"][1] - dome_az) <= 3: break if not self.domeslewing: log.debug("Stop slewing anyway") return Loading Loading
noctua/devices/mercury.py +58 −13 Original line number Diff line number Diff line Loading @@ -86,13 +86,15 @@ class Mercury(BaseDevice): try: self._gateway = PISocket(host=self.host, port=self.port) self._gateway.__enter__() except OSError as e: self.error.append(str(e)) return None messages = GCSMessages(self._gateway) self.pidevice = GCSCommands(messages) self.pidevice.__enter__() self.error = [] except OSError as e: self._gateway = None self.pidevice = None self.error.append(str(e)) return None return self.pidevice Loading Loading @@ -124,9 +126,11 @@ class Mercury(BaseDevice): return None try: return pidevice.qIDN() except GCSError as e: except (GCSError, OSError) as e: log.error(f"qIDN error: {e}") self.error.append(str(e)) self.pidevice = None self._gateway = None return None @property Loading Loading @@ -156,6 +160,12 @@ class Mercury(BaseDevice): except GCSError as e: log.error(f"Error: {e}") return None except OSError as e: log.error(f"Socket error in get: {e}") self.error.append(str(e)) self.pidevice = None self._gateway = None return None except AttributeError as e: log.error(f"Command not found: {e}") return None Loading @@ -180,6 +190,12 @@ class Mercury(BaseDevice): except GCSError as e: log.error(f"Error: {e}") return None except OSError as e: log.error(f"Socket error in put: {e}") self.error.append(str(e)) self.pidevice = None self._gateway = None return None except AttributeError as e: log.error(f"Command not found: {e}") return None Loading @@ -202,10 +218,20 @@ class Mercury(BaseDevice): moving = status_dict[self.axis] except GCSError as e: log.warning(e) except OSError as e: log.error(f"Socket error in wait: {e}") self.error.append(str(e)) self.pidevice = None self._gateway = None return try: err = pidevice.qERR() if err != 0: log.warning(err) except (GCSError, OSError) as e: log.warning(f"qERR error in wait: {e}") break time.sleep(0.2) Loading @@ -218,8 +244,14 @@ class Mercury(BaseDevice): if pidevice is None: return # Clear any previous errors try: pidevice.qERR() except (GCSError, OSError) as e: log.error(f"init qERR error: {e}") self.error.append(str(e)) self.pidevice = None self._gateway = None return # Servo on self.put("SVO", True) Loading @@ -240,8 +272,14 @@ class Mercury(BaseDevice): if pidevice is None: return # Clear any previous errors try: pidevice.qERR() except (GCSError, OSError) as e: log.error(f"abort qERR error: {e}") self.error.append(str(e)) self.pidevice = None self._gateway = None return # STOP! self.put("STP", True) Loading Loading @@ -281,7 +319,14 @@ class Stage(Mercury): pidevice = self._check_connection() if pidevice is None: return None try: return pidevice.IsMoving(self.axis)[self.axis] except (GCSError, OSError) as e: log.error(f"IsMoving error: {e}") self.error.append(str(e)) self.pidevice = None self._gateway = None return None @property Loading
noctua/templates/observation.py +7 −1 Original line number Diff line number Diff line Loading @@ -174,7 +174,13 @@ class Template(BaseTemplate): if imagetype == "Light": if self.domeslewing: log.info(f"Check Dome position") while (abs(tel.coordinates["altaz"][1] - dom.azimuth) > 3): while True: dome_az = dom.azimuth if dome_az is None: log.warning("Dome azimuth unavailable, skipping dome alignment") break if abs(tel.coordinates["altaz"][1] - dome_az) <= 3: break if not self.domeslewing: log.debug("Stop slewing anyway") return Loading