46 lines
1.2 KiB
Python
46 lines
1.2 KiB
Python
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)
|