#!/usr/bin/env python # # Exports # Commands: # StopMove # Calibrate # # Attributes: # Position # SlewRate # UnitLimitMax # UnitLimitMin # CwLimit # CcwLimit # # Property: # DynamicAttributes: SlewRate,int,rw # import PyTango, HasyUtils, inspect class VM: # # init_device # def __init__( self): self.parent = inspect.currentframe().f_back.f_locals['self'] self.parentProxy = PyTango.DeviceProxy( self.parent.get_name()) AdaptedMotor = HasyUtils.getDeviceProperty( self.parent.get_name(), "AdaptedMotor")[0] if AdaptedMotor is None: PyTango.Except.throw_exception( "adaptor %s" % self.parent.get_name(), "failed to find AdaptedMotor property", "VmExecutor") try: self.adaptedMotorProxy = PyTango.DeviceProxy( AdaptedMotor) except: PyTango.Except.throw_exception( "adaptor %s" % self.parent.get_name(), "failed to create proxy to %s" % AdaptedMotor, "VmExecutor") # # translate position # if hasattr( self.adaptedMotorProxy, "Position"): self.position = "Position" else: PyTango.Except.throw_exception( "adaptor %s" % self.adaptedMotorProxy.name(), "failed to find Position", "VmExecutor") # # translate slewrate # if hasattr( self.adaptedMotorProxy, "SlewRate"): self.slewRate = "SlewRate" elif hasattr( self.adaptedMotorProxy, "Velocity"): self.slewRate = "Velocity" else: self.slewRate = None # # translate UnitLimitMin, ~Max # if hasattr( self.adaptedMotorProxy, "UnitLimitMax"): self.unitLimitMax = "UnitLimitMax" elif hasattr( self.adaptedMotorProxy, "SoftCwLimit"): self.unitLimitMax = "SoftCwLimit" else: PyTango.Except.throw_exception( "adaptor %s" % self.adaptedMotorProxy.name(), "failed to find UnitLimitMax", "VmExecutor") if hasattr( self.adaptedMotorProxy, "UnitLimitMin"): self.unitLimitMin = "UnitLimitMin" elif hasattr( self.adaptedMotorProxy, "SoftCcwLimit"): self.unitLimitMin = "SoftCcwLimit" else: PyTango.Except.throw_exception( "adaptor %s" % self.adaptedMotorProxy.name(), "failed to find UnitLimitMin", "VmExecutor") # # translate CwLimit, CcwLimit # not condsidered to be critical # if hasattr( self.adaptedMotorProxy, "CwLimit"): self.cwLimit = "CwLimit" else: self.cwLimit = None if hasattr( self.adaptedMotorProxy, "CcwLimit"): self.ccwLimit = "CcwLimit" else: self.ccwLimit = None # # translate StopMove # if hasattr( self.adaptedMotorProxy, "StopMove"): self.stopMove = "StopMove" elif hasattr( self.adaptedMotorProxy, "Stop"): self.stopMove = "Stop" else: PyTango.Except.throw_exception( "adaptor %s" % self.adaptedMotorProxy.name(), "failed to find StopMove", "VmExecutor") # # translate Calibrate # if hasattr( self.adaptedMotorProxy, "Calibrate"): self.calibrate = "Calibrate" else: PyTango.Except.throw_exception( "adaptor %s" % self.adaptedMotorProxy.name(), "failed to find Calibrate", "VmExecutor") return # # dev_state # def dev_state( self): argout = self.adaptedMotorProxy.state() return argout # # Position # def read_Position( self): return self.adaptedMotorProxy.read_attribute( self.position).value def write_Position( self, argin): if( argin < self.read_UnitLimitMin() or argin > self.read_UnitLimitMax()): PyTango.Except.throw_exception( "adaptor %s" % self.adaptedMotorProxy.name(), "requested position %g outside limits %g %g " % (self.read_UnitLimitMin(), self.read_UnitLimitMax()), "VmExecutor") return self.adaptedMotorProxy.write_attribute( "Position", argin) # # UnitLimitMax # def read_UnitLimitMax( self): return self.adaptedMotorProxy.read_attribute( self.unitLimitMax).value def write_UnitLimitMax( self, argin): return self.adaptedMotorProxy.write_attribute( self.unitLimitMax, argin) # # UnitLimitMin # def read_UnitLimitMin( self): return self.adaptedMotorProxy.read_attribute( self.unitLimitMin).value def write_UnitLimitMin( self, argin): return self.adaptedMotorProxy.write_attribute( self.unitLimitMin, argin) # # CwLimit, CcwLimit # def read_CwLimit( self): if self.cwLimit is None: return 0 return self.adaptedMotorProxy.read_attribute( self.cwLimit).value def read_CcwLimit( self): if self.ccwLimit is None: return 0 return self.adaptedMotorProxy.read_attribute( self.ccwLimit).value def read_DynamicAttr( self, name): if name.lower() == "slewrate": if self.slewRate == None: PyTango.Except.throw_exception( "adaptor %s" % self.adaptedMotorProxy.name(), "no interface to SlewRate ", "VmExecutor") return self.adaptedMotorProxy.read_attribute( self.slewRate).value def write_DynamicAttr( self, name, value): if name.lower() == "slewrate": if self.slewRate == None: PyTango.Except.throw_exception( "adaptor %s" % self.adaptedMotorProxy.name(), "no interface to SlewRate ", "VmExecutor") return self.adaptedMotorProxy.write_attribute( self.slewRate, value) def StopMove( self): return self.adaptedMotorProxy.command_inout( self.stopMove) def Calibrate(self, argin): return self.adaptedMotorProxy.command_inout( self.calibrate, argin)