split SlitUnit into two SlitBlades; simplified interface

This commit is contained in:
2022-07-09 17:15:04 +02:00
parent e41b83f0b2
commit da00f29246
3 changed files with 60 additions and 37 deletions
@@ -0,0 +1,38 @@
from slic.devices.general.motor import Motor
class SlitBlades:
def __init__(self, ID, mot1, mot2):
self.ID = ID
self.mot1 = Motor(mot1)
self.mot2 = Motor(mot2)
@classmethod
def from_motor_name(cls, ID, motor_name="MOTOR_X"):
mot1 = ID + ":" + motor_name + "1"
mot2 = ID + ":" + motor_name + "2"
return cls(ID, mot1, mot2)
def get_gap(self):
return self.mot2.get_current_value() - self.mot1.get_current_value()
def get_pos(self):
return (self.mot1.get_current_value() + self.mot2.get_current_value()) / 2
def set_gap(self, value, pos=None):
if pos is None:
pos = self.get_pos()
t1 = self.mot1.set_target_value(pos - value / 2)
t2 = self.mot2.set_target_value(pos + value / 2)
return t1, t2
def set_pos(self, value, gap=None):
if gap is None:
gap = self.get_gap()
t1 = self.mot1.set_target_value(value - gap / 2)
t2 = self.mot2.set_target_value(value + gap / 2)
return t1, t2
+17 -36
View File
@@ -1,16 +1,13 @@
from slic.devices.general.motor import Motor
from slitbase import SlitBase
from slitblades import SlitBlades
class SlitUnit(SlitBase):
def __init__(self, ID, x1="MOTOR_X1", x2="MOTOR_X2", y1="MOTOR_Y1", y2="MOTOR_Y2"):
def __init__(self, ID, x1, x2, y1, y2):
self.ID = ID
self.x1 = Motor(x1)
self.x2 = Motor(x2)
self.y1 = Motor(y1)
self.y2 = Motor(y2)
self.x = SlitBlades(ID + "-X", x1, x2)
self.y = SlitBlades(ID + "-Y", y1, y2)
@classmethod
def from_motor_name(cls, ID, motor_name="MOTOR_"):
@@ -18,47 +15,31 @@ class SlitUnit(SlitBase):
x2 = ID + ":" + motor_name + "X2"
y1 = ID + ":" + motor_name + "Y1"
y2 = ID + ":" + motor_name + "Y2"
return cls(ID, x1=x1, x2=x2, y1=y1, y2=y2)
return cls(ID, x1, x2, y1, y2)
def get_hg(self):
return self.x2.get_current_value() - self.x1.get_current_value()
return self.x.get_gap()
def get_vg(self):
return self.y2.get_current_value() - self.y1.get_current_value()
return self.y.get_gap
def get_ho(self):
return (self.x1.get_current_value() + self.x2.get_current_value()) / 2
return self.x.get_pos()
def get_vo(self):
return (self.y1.get_current_value() + self.y2.get_current_value()) / 2
return self.y.get_pos()
def set_hg(self, value, ho=None):
if ho is None:
ho = self.get_ho()
c1 = self.x1.set_target_value(ho - value / 2)
c2 = self.x2.set_target_value(ho + value / 2)
return c1, c2
def set_hg(self, *args, **kwargs):
return self.x.set_gap(*args, **kwargs)
def set_vg(self, value, vo=None):
if vo is None:
vo = self.get_vo()
c1 = self.y1.set_target_value(vo - value / 2)
c2 = self.y2.set_target_value(vo + value / 2)
return c1, c2
def set_vg(self, *args, **kwargs):
return self.y.set_gap(*args, **kwargs)
def set_ho(self, value, hg=None):
if hg is None:
hg = self.get_hg()
c1 = self.x1.set_target_value(value - hg / 2)
c2 = self.x2.set_target_value(value + hg / 2)
return c1, c2
def set_ho(self, *args, **kwargs):
return self.x.set_pos(*args, **kwargs)
def set_vo(self, value, vg=None):
if vg is None:
vg = self.get_vg()
c1 = self.y1.set_target_value(value - vg / 2)
c2 = self.y2.set_target_value(value + vg / 2)
return c1, c2
def set_vo(self, *args, **kwargs):
return self.y.set_pos(*args, **kwargs)
+5 -1
View File
@@ -4,7 +4,11 @@ from slitunit import SlitUnit
class SlitUnitJJ(SlitUnit):
def __init__(self, ID):
super().__init__(ID, x1="MOT3", x2="MOT2", y1="MOT5", y2="MOT4")
x1 = ID + ":MOT3"
x2 = ID + ":MOT2"
y1 = ID + ":MOT5"
y2 = ID + ":MOT4"
super().__init__(ID, x1, x2, y1, y2)