added unstuck logic

This commit is contained in:
2023-02-16 17:31:48 +01:00
parent a906fe3d96
commit 1d95eef744

View File

@ -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