Source code for skrf.vi.stages



'''

.. module:: skrf.vi.stages
++++++++++++++++++++++++++++++++++++++++++++++++++++
Stages  (:mod:`skrf.vi.stages`)
++++++++++++++++++++++++++++++++++++++++++++++++++++

.. autosummary::
    :toctree: generated/

    ESP300

'''
from time import sleep
import numpy as npy

from . ivihack import Driver


[docs]class ESP300(Driver): ''' Newport Universal Motion Controller/Driver Model ESP300 all axis control commands are sent to the number axis given by the local variable self.current_axis. An example usage :: from skrf.vi.stages import ESP300 esp = ESP300() esp.current_axis = 1 esp.position = 10 print(esp.position) ''' UNIT_DICT = {\ 'enoder count':0,\ 'motor step':1,\ 'millimeter':2,\ 'micrometer':3,\ 'inches':4,\ 'milli inches':5,\ 'micro inches':6,\ 'degree':7,\ 'gradient':8,\ 'radian':9,\ 'milliradian':10,\ 'microradian':11,\ }
[docs] def __init__(self, address=1, current_axis=1,\ always_wait_for_stop=True,delay=0,**kwargs): ''' Initializer Parameters ------------- address : int Gpib address current_axis : int number of current axis always_wait_for_stop : Boolean wait for stage to stop before returning control to calling program \*\*kwargs : passed to GpibInstrument initializer ''' if isinstance(address,int): resource = 'GPIB::%i::INSTR'%address else: resource = address Driver.__init__(self,resource = resource, **kwargs) self.current_axis = current_axis self.always_wait_for_stop = always_wait_for_stop
self.delay=delay @property def current_axis(self): ''' current axis used in all subsequent commands ''' return self._current_axis @current_axis.setter def current_axis(self, input): ''' takes: input: desired current axis number, int [] ''' self._current_axis = input @property def velocity(self): ''' the velocity of current axis ''' command_string = 'VA' return (float(self.ask('%i%s?'%(self.current_axis,command_string)))) @velocity.setter def velocity(self,input): command_string = 'VA' self.write('%i%s%f'%(self.current_axis,command_string,input)) @property def acceleration(self): command_string = 'AC' return (self.ask('%i%s?'%(self.current_axis,command_string))) @acceleration.setter def acceleration(self,input): command_string = 'AC' self.write('%i%s%f'%(self.current_axis,command_string,input)) @property def deceleration(self): command_string = 'AG' return (self.ask('%i%s?'%(self.current_axis,command_string))) @deceleration.setter def deceleration(self,input): command_string = 'AG' self.write('%i%s%f'%(self.current_axis,command_string,input)) @property def position_relative(self): raise NotImplementedError('See position property for reading position') @position_relative.setter def position_relative(self,input): command_string = 'PR' self.write('%i%s%f'%(self.current_axis,command_string,input)) if self.always_wait_for_stop: self.wait_for_stop() @property def position(self): command_string = 'TP' return float(self.ask('%i%s'%(self.current_axis,command_string))) @position.setter def position(self,input): ''' set the position of current axis to input ''' command_string = 'PA' self.write('%i%s%f'%(self.current_axis,command_string,input)) if self.always_wait_for_stop: self.wait_for_stop() @property def home(self): raise NotImplementedError @home.setter def home(self, input): command_string = 'DH' self.write('%i%s%f'%(self.current_axis,command_string,input)) @property def units(self): raise NotImplementedError('I dont know how to read units') @units.setter def units(self, input): ''' set axis units for all commands. takes: input: a string, describing the units here are a list of possibilities. 'encoder count' 'motor step' 'millimeter' 'micrometer' 'inches' 'milli inches' 'micro inches' 'degree' 'gradient' 'radian' 'milliradian' 'microradian' ''' command_string = 'SN' self.write('%i%s%i'%(self.current_axis,command_string, self.UNIT_DICT[input])) @property def error_message(self): return (self.ask('TB?')) @property def motor_on(self): command_string = 'MO' return (self.ask('%i%s?'%(self.current_axis,command_string))) @motor_on.setter def motor_on(self,input): if input: command_string = 'MO' self.write('%i%s'%(self.current_axis,command_string)) if not input: command_string = 'MF' self.write('%i%s'%(self.current_axis,command_string))
[docs] def send_stop(self): command_string = 'ST'
self.write('%i%s'%(self.current_axis,command_string))
[docs] def wait_for_stop(self): command_string = 'WS' self.write('%i%s%i'%(self.current_axis,command_string, 1e3*self.delay))
tmp = self.position