156 lines
4.3 KiB
Python
156 lines
4.3 KiB
Python
|
|
POL_IDS={ "Circ_Plus": 1, "Circ_Minus": 2, "Lin_Hor":3, "Lin_Ver": 4, "Lin": 5}
|
|
|
|
|
|
|
|
def get_id_status(id):
|
|
# 0 = ok
|
|
# 1 = Warning
|
|
# 2 = Error
|
|
# 3 = Not available
|
|
if id<1 or id>2: raise Exception("Invalid id")
|
|
return caget("X11MA-ID1-USER:STATUS" if (id==1) else "X11MA-ID2-USER:STATUS")
|
|
|
|
def get_id_error(id):
|
|
# B0 (1) = PLC (Taper, Motor controller, Limitswitch....)
|
|
# B1 (2) = Encoders (cabel, not referenced)
|
|
# B2 (4) = FeedForward (PS off, PS defect, FF ausgeschaltet)
|
|
# B3 (8) = Operator COntrol
|
|
# B4 (16)= Moving Timeout (moving longer then 120 sec)
|
|
# B5 (32)= Interlock (Orbit, Temperature...)\
|
|
if id<1 or id>2:
|
|
raise Exception("Invalid id")
|
|
return caget("X11MA-ID1-USER:ERROR-SOURCE" if (id==1) else "X11MA-ID2-USER:ERROR-SOURCE")
|
|
|
|
|
|
|
|
def get_id_pol(id, as_string=False):
|
|
# 1: Circ+
|
|
# 2: Circ-
|
|
# 3: Lin H
|
|
# 4: Lin V
|
|
# 5: LIn
|
|
if id<1 or id>2: raise Exception("Invalid id")
|
|
#ret = caget ("X11MA-ID1:MODE" if id==1 else "X11MA-ID2:MODE", 's' if as_string else 'i')
|
|
mode = id1_mode.read() if (id==1) else id2_mode.read()
|
|
if mode=="LINEAR":
|
|
#linear mode
|
|
alpha = get_alpha_id(id)
|
|
if alpha==0 :
|
|
ret = 3
|
|
elif alpha==90:
|
|
ret = 4
|
|
else:
|
|
ret = 5
|
|
elif mode == "CIRC +":
|
|
ret = 1
|
|
elif mode == "CIRC -":
|
|
ret = 2
|
|
else:
|
|
ret = -1
|
|
if as_string:
|
|
for (k,v) in POL_IDS.items():
|
|
if v==ret:
|
|
return k
|
|
return "Unknown"
|
|
return ret
|
|
|
|
def get_alpha_id(id):
|
|
if id<1 or id>2: raise Exception("Invalid id")
|
|
return id1_alpha.read() if (id==1) else id2_alpha.read()
|
|
|
|
|
|
def put_id_offset(id, v):
|
|
if id == 1:
|
|
id1_offset.write(v)
|
|
elif id == 2:
|
|
id2_offset.write(v)
|
|
else:
|
|
raise Exception("Invalid id")
|
|
|
|
def get_id_offset(id):
|
|
if id<1 or id>2:
|
|
raise Exception("Invalid id")
|
|
return id1_offset.read() if (id==1) else id2_offset.read()
|
|
|
|
|
|
def put_id_pol(id, pol, alpha=None):
|
|
#pol = 1 : Mode =1, alpha = 0 circ +
|
|
#pol = 2 : Mode =2, alpha = 0 circ -
|
|
#pol = 3 : Mode =0, alpha = 0 lin hor
|
|
#pol = 4 : Mode =0, alpha = 90 lin vert
|
|
#pol = 5 : Mode =0, alpha = ? lin rot
|
|
print "Set id" + str(id) + " Pol=" + str(pol) + " Alpha=" + str(alpha)
|
|
|
|
if id<1 or id>2:
|
|
raise Exception("Invalid id")
|
|
|
|
mode_dev = id1_mode if (id==1) else id2_mode
|
|
alpha_dev = id1_alpha if (id==1) else id2_alpha
|
|
|
|
if is_string(pol):
|
|
pol=POL_IDS[pol]
|
|
|
|
if pol == 1:
|
|
mode_dev.write("CIRC +")
|
|
elif pol == 2:
|
|
mode_dev.write("CIRC -")
|
|
elif pol == 3:
|
|
mode_dev.write("LINEAR")
|
|
time.sleep(0.5)
|
|
alpha_dev.write(0)
|
|
elif pol == 4:
|
|
mode_dev.write("LINEAR")
|
|
time.sleep(0.5)
|
|
alpha_dev.write(90)
|
|
elif pol == 5:
|
|
mode_dev.write("LINEAR")
|
|
if alpha is not None:
|
|
time.sleep(0.5)
|
|
alpha_dev.write(alpha)
|
|
|
|
|
|
def tune_detune(active_id):
|
|
offset_1 = float(get_setting("OFFSET_ID_1"))
|
|
offset_2 = float(get_setting("OFFSET_ID_2"))
|
|
|
|
if active_id ==1:
|
|
print "Tune ID1"
|
|
put_id_offset(2, offset_2-40) #detuneID2
|
|
put_id_offset(1, offset_1) #tuneID1
|
|
else:
|
|
print "Tune ID2"
|
|
put_id_offset(1, offset_1-40) #detuneID1
|
|
put_id_offset(2, offset_2) #tuneID2
|
|
|
|
class IdPol(ReadonlyRegisterBase):
|
|
def __init__(self, id):
|
|
self.id = id
|
|
def doRead(self):
|
|
return get_id_pol(self.id, True)
|
|
def getName(self):
|
|
return "id" + str(self.id) + "_pol"
|
|
|
|
add_device(IdPol(1), True)
|
|
add_device(IdPol(2), True)
|
|
id1_pol.update()
|
|
id2_pol.update()
|
|
id1_pol.setPolling(2000)
|
|
id2_pol.setPolling(2000)
|
|
|
|
|
|
class EnOptDesc(ReadonlyRegisterBase):
|
|
def doRead(self):
|
|
opt = energy_opt.read()
|
|
if opt == "PGM": return "PGM"
|
|
if opt == "PGM+ID1": return "ID1"
|
|
if opt == "PGM+ID2": return "ID2"
|
|
if opt == "PGM+ID1+ID2": return "ID1_ID2"
|
|
return ""
|
|
|
|
def getName(self):
|
|
return "energy_opt_desc"
|
|
|
|
add_device(EnOptDesc(), True)
|
|
energy_opt_desc.setPolling(2000)
|