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