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")
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")