import ch.psi.pshell.device.Speedable as Speedable class PseudoMotor(RegisterBase, Speedable): def __init__(self, name): RegisterBase.__init__(self, name) self.readback = 0.0 self.setpoint = 0.0 self.settime = time.time() def doRead(self): offset = self.setpoint - self.readback d = (self.speed * (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 3.0 positioner = PseudoMotor("PseudoMotor") add_device(positioner, True); cscan(positioner, MachineCurrent, 0, 10, 1.0)