import ch.psi.pshell.device.ControlledSpeedable as ControlledSpeedable class PseudoMotor(RegisterBase, ControlledSpeedable): def __init__(self, name): RegisterBase.__init__(self, name) self.velocity = self.getDefaultSpeed() self.readback = 0.0 self.setpoint = 0.0 self.settime = time.time() def doRead(self): offset = self.setpoint - self.readback d = (self.getSpeed() * (time.time() - self.settime)) d = min(d, abs(offset)) self.readback = self.readback + d if offset>0 else self.readback -d self.settime = time.time() return self.readback def doWrite(self, val): self.settime = time.time() self.setpoint = val def getSpeed(self): return self.velocity def setSpeed(self, speed): self.velocity=speed def getDefaultSpeed(self): return 1.0 def getMinSpeed(self): return 0.1 def getMaxSpeed(self): return 10.0 positioner = PseudoMotor("PseudoMotor") #If the device is not added to device liost it must be initialized #positioner.initialize() add_device(positioner, True); cscan(positioner, MachineCurrent, 0, 10, 1.0, time=5.0)