added unstuck logic
This commit is contained in:
@ -1,4 +1,5 @@
|
||||
from time import sleep
|
||||
from datetime import datetime
|
||||
import numpy as np
|
||||
from epics import PV
|
||||
|
||||
@ -159,6 +160,11 @@ class Undulators(Adjustable):
|
||||
return any(a.is_moving() for a in self.adjs)
|
||||
|
||||
|
||||
def unstuck(self):
|
||||
for a in self.adjs.values():
|
||||
a.unstuck()
|
||||
|
||||
|
||||
|
||||
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_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
|
||||
def energy(self):
|
||||
return self.adj_energy.get_current_value() * 1000
|
||||
|
Reference in New Issue
Block a user