add Ecol.py script

This commit is contained in:
2022-09-17 08:07:48 +02:00
parent 0b9bc44f14
commit cdb43c2d23
4 changed files with 55 additions and 22 deletions

53
Ecol.py Normal file
View File

@ -0,0 +1,53 @@
from slic.core.adjustable import Adjustable, PVAdjustable
from slic.core.device import SimpleDevice
class EcolScaler(Adjustable):
def __init__(self, ID="ECOL-SCALER", factor=1):
super().__init__(ID)
self.factor = factor
mag01 = Magnet("SARCL02-MQUA130")
mag02 = Magnet("SARCL02-MQUA150")
mag03 = Magnet("SARCL02-MQSK160")
mag04 = Magnet("SARCL02-MQUA210")
mag05 = Magnet("SARCL02-MQUA250")
mag06 = Magnet("SARCL02-MQKS300")
mag07 = Magnet("SARCL02-MQUA310")
mag08 = Magnet("SARCL02-MQUA350")
mag09 = Magnet("SARCL02-MQSK420")
mag10 = Magnet("SARCL02-MQUA430")
mag11 = Magnet("SARCL02-MQUA460")
self.magnets = SimpleDevice(
ID,
m01=mag01,
m02=mag02,
m02=mag03,
m02=mag04,
m02=mag05,
m02=mag06,
m02=mag07,
m02=mag08,
m02=mag09,
m02=mag10,
m02=mag11
)
def get_current_value(self):
return self.factor
def set_target_value(self, factor):
old_factor = self.factor
self.factor = factor
print(old_factor, factor)
tasks = []
for m in self.magnets:
current = m.get()
t = m.set(current / old_factor * factor)
for t in tasks:
t.wait()
def is_moving(self):
return any(m.is_moving() for m in self.magnets)
class Magnet(PVAdjustable):
def __init__(self, ID):
pvn_set = ID + ":I-SET"
pvn_read = ID + ":I-READ"
super().__init__(pvn_set, pvn_read, accuracy=0.01)

0
README.md Normal file → Executable file
View File

View File

@ -1,11 +1,7 @@
from slic.core.adjustable import Adjustable, PVAdjustable
from slic.core.device import SimpleDevice
class MagnetsScaler(Adjustable):
def __init__(self, ID="MAGNETS-SCALER", factor=1):
super().__init__(ID)
self.factor = factor
@ -16,35 +12,23 @@ class MagnetsScaler(Adjustable):
m1=mag1,
# m2=mag2
)
self._magnets = [
mag1,
# mag2
]
def get_current_value(self):
return self.factor
def set_target_value(self, factor):
old_factor = self.factor
self.factor = factor
print(old_factor, factor)
tasks = [] # we collect tasks to run in parallel, ...
for m in self._magnets:
for m in self.magnets:
current = m.get()
print(current, current / old_factor * factor)
t = m.set(current / old_factor * factor)
for t in tasks: # ... then we need to wait for all tasks to finish
t.wait()
def is_moving(self):
return any(m.is_moving() for m in self.magnets)
class Magnet(PVAdjustable):
def __init__(self, ID):
pvn_set = ID + ":I-SET"
pvn_read = ID + ":I-READ"
@ -52,7 +36,3 @@ class Magnet(PVAdjustable):
# super().__init__(pvn_set, pvn_read, pvname_moving=pvn_comp) # COMP updates only once per second, so we cannot use it.
super().__init__(pvn_set, pvn_read, accuracy=0.01)

View File

@ -1,5 +1,5 @@
from magnets import MagnetsScaler
mags = MagnetsScaler()
ecol = EcolScaler()