Beispiel #1
0
    def _Loop(self):
        while self.loopActive:
            self.lock.acquire()
            try:
                # check position
                time.sleep(self._update_rate)

                self.position[0] = float(gcs.qPOS(self.id,
                                                  b'A')[0]) + self.osen

                self.errCode = int(gcs.qERR(self.id))

                if not self.errCode == 0:
                    logging.info(('Stage Error: %d' % self.errCode))

                # print self.targetPosition, self.stopMove
                if not np.all(self.targetPosition == self.lastTargetPosition):
                    # update our target position
                    pos = np.clip(self.targetPosition, 0, self.max_travel)

                    gcs.MOV(self.id, b'A', pos[:1])
                    self.lastTargetPosition = pos.copy()
                    # print('p')
                    # logging.debug('Moving piezo to target: %f' % (pos[0],))

                if np.allclose(self.position,
                               self.targetPosition,
                               atol=self._target_tol):
                    self.onTarget = True

                # check to see if we're on target
                #self.ser_port.write('ONT? A\n')
                #self.ser_port.flushOutput()
                #time.sleep(0.005)
                #res1 = self.ser_port.readline()

                #if res1 == '':
                #    time.sleep(.5)
                #    res1 = self.ser_port.readline()

                #try:
                #    self.onTarget = int(res1) == 1
                #except ValueError:
                #    self.onTarget = False
                #    logging.exception('Value error on response from ONT')

                # time.sleep(.1)

            except IndexError:
                print('IndexException')
            finally:
                self.stopMove = False
                self.lock.release()

        # close port on loop exit
        gcs.CloseConnection(self.id)
        logging.info("Piezo USB connection closed")
Beispiel #2
0
 def GetPos(self, iChannel=0):
     with self.lock:
         #self.ser_port.flushOutput()
         time.sleep(0.05)
         #self.ser_port.write('POS? A\n')
         #self.ser_port.flushOutput()
         #time.sleep(0.05)
         #res = self.ser_port.readline()
         return float(gcs.qPOS(self.id, b'A')[iChannel]) + self.osen
    def _Loop(self):
        while self.loopActive:
            self.lock.acquire()
            try:
                # check position
                time.sleep(self._update_rate)

                self.position[0] = float(gcs.qPOS(self.id, b'A')[0])+ self.osen

                self.errCode = int(gcs.qERR(self.id))

                if not self.errCode == 0:  # I have yet to see this work
                    logging.info(('Stage Error: %d' % self.errCode))

                # print self.targetPosition, self.stopMove
                if not np.all(self.targetPosition == self.lastTargetPosition):
                    # update our target position
                    pos = np.clip(self.targetPosition, 0, self.max_travel)

                    gcs.MOV(self.id, b'A', pos[:1])
                    self.lastTargetPosition = pos.copy()
                    # print('p')
                    # logging.debug('Moving piezo to target: %f' % (pos[0],))

                if np.allclose(self.position, self.targetPosition, atol=self._target_tol):
                    if not self.onTarget:
                        logEvent('PiezoOnTarget', '%.3f' % self.position[0], time.time())
                        self.onTarget = True

                # check to see if we're on target
                #self.ser_port.write('ONT? A\n')
                #self.ser_port.flushOutput()
                #time.sleep(0.005)
                #res1 = self.ser_port.readline()

                #if res1 == '':
                #    time.sleep(.5)
                #    res1 = self.ser_port.readline()

                #try:
                #    self.onTarget = int(res1) == 1
                #except ValueError:
                #    self.onTarget = False
                #    logging.exception('Value error on response from ONT')

                # time.sleep(.1)
            except RuntimeError as e:
                # gcs.fcnWrap.HandleError throws Runtimes for everything
                logger.error(str(e))
                try:
                    self.errCode = int(gcs.qERR(self.id))
                    logger.error('error code: %s' % str(self.errCode))
                except:
                    logger.error('no error code retrieved')
                if '-1' in str(e):
                    logger.debug('reinitializing GCS connection, 10 s pause')
                    gcs.CloseConnection(self.id)
                    time.sleep(10.0)  # this takes at least more than 1 s
                    try:
                        self.id = gcs.ConnectUSB(self._identifier)
                        logger.debug('restablished connection to piezo')
                    except RuntimeError as e:
                        logger.error('trying to get new device ID')
                        devices = get_connected_devices()
                        self._identifier = devices[0]
                        logger.debug('new device ID acquired')
                        self.id = gcs.ConnectUSB(self._identifier)
                    time.sleep(1.0)
                    logger.debug('turning on servo')
                    gcs.SVO(self.id, b'A', [1])
                    time.sleep(1.0)
            finally:
                self.lock.release()

        # close port on loop exit
        gcs.CloseConnection(self.id)
        logging.info("Piezo USB connection closed")