added unstuck logic
This commit is contained in:
@ -1,4 +1,5 @@
|
|||||||
from time import sleep
|
from time import sleep
|
||||||
|
from datetime import datetime
|
||||||
import numpy as np
|
import numpy as np
|
||||||
from epics import PV
|
from epics import PV
|
||||||
|
|
||||||
@ -159,6 +160,11 @@ class Undulators(Adjustable):
|
|||||||
return any(a.is_moving() for a in self.adjs)
|
return any(a.is_moving() for a in self.adjs)
|
||||||
|
|
||||||
|
|
||||||
|
def unstuck(self):
|
||||||
|
for a in self.adjs.values():
|
||||||
|
a.unstuck()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Undulator(PVAdjustable):
|
class Undulator(PVAdjustable):
|
||||||
|
|
||||||
@ -172,6 +178,51 @@ class Undulator(PVAdjustable):
|
|||||||
# self.adj_radial_on_proc = PVAdjustable(name + ":RADIAL-ON.PROC", internal=True)
|
# self.adj_radial_on_proc = PVAdjustable(name + ":RADIAL-ON.PROC", internal=True)
|
||||||
# self.adj_radial_go_proc = PVAdjustable(name + ":RADIAL-GO.PROC", internal=True)
|
# self.adj_radial_go_proc = PVAdjustable(name + ":RADIAL-GO.PROC", internal=True)
|
||||||
|
|
||||||
|
|
||||||
|
def set_target_value(self, value):
|
||||||
|
self.wait_for_no_alarm()
|
||||||
|
if self.pvs.readback.status != 0:
|
||||||
|
self.unstuck()
|
||||||
|
return super().set_target_value(value)
|
||||||
|
|
||||||
|
|
||||||
|
def wait_for_no_alarm(self):
|
||||||
|
for i in range(10):
|
||||||
|
if self.pvs.readback.status == 0:
|
||||||
|
break
|
||||||
|
if i == 0:
|
||||||
|
print(self.name, datetime.now())
|
||||||
|
print(self.name, f"seems stuck ({i}) 💩")
|
||||||
|
sleep(0.5)
|
||||||
|
|
||||||
|
|
||||||
|
def unstuck(self, delta=0.0001):
|
||||||
|
if self.pvs.readback.status == 0:
|
||||||
|
print(self.name, "is not stuck")
|
||||||
|
return
|
||||||
|
|
||||||
|
current = self.pvs.setvalue.get()
|
||||||
|
temp = current + delta
|
||||||
|
self._set_set_value(temp)
|
||||||
|
self._set_set_value(current)
|
||||||
|
|
||||||
|
if self.pvs.readback.status == 0:
|
||||||
|
print(self.name, "is not stuck anymore 😍")
|
||||||
|
else:
|
||||||
|
print(self.name, "is still stuck 😭")
|
||||||
|
|
||||||
|
|
||||||
|
def _set_set_value(self, value):
|
||||||
|
self.pvs.setvalue.put(value)
|
||||||
|
sleep(0.1)
|
||||||
|
self.adj_radial_on.set_target_value(0)
|
||||||
|
sleep(0.5)
|
||||||
|
self.adj_radial_on.set_target_value(1)
|
||||||
|
sleep(0.5)
|
||||||
|
self.adj_radial_go.set_target_value(1)
|
||||||
|
sleep(3)
|
||||||
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def energy(self):
|
def energy(self):
|
||||||
return self.adj_energy.get_current_value() * 1000
|
return self.adj_energy.get_current_value() * 1000
|
||||||
|
Reference in New Issue
Block a user