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') ret = caget ("X11MA-ID1:MODE" if id==1 else "X11MA-ID2:MODE", 'i') if ret==0: #linear mode alpha = get_alpha_id(id) if alpha==0 : ret = 3 elif alpha==90: ret = 4 else: ret = 5 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 caget ("X11MA-ID1:ALPHA" if id==1 else "X11MA-ID2:ALPHA") def put_id_offset(id, v): if id<1 or id>2: raise Exception("Invalid id") caput("X11MA-ID1:ENERGY-OFFS" if (id==1) else "X11MA-ID2:ENERGY-OFFS",v) def get_id_offset(id): if id<1 or id>2: raise Exception("Invalid id") return caget("X11MA-ID1:ENERGY-OFFS" if (id==1) else "X11MA-ID2:ENERGY-OFFS") 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 if id<1 or id>2: raise Exception("Invalid id") pv1="X11MA-ID1:MODE" if (id==1) else "X11MA-ID2:MODE" pv2="X11MA-ID1:ALPHA" if (id==1) else "X11MA-ID2:ALPHA" if is_string(pol): pol=POL_IDS[v] if pol == 1: caput(pv1,1) elif pol == 2: caput(pv1,2) elif pol == 3: caput(pv1,0) caput(pv2,0) elif pol == 4: caput(pv1,0) caput(pv2,0) elif pol == 5: caput(pv1,0) time.sleep(1.0) caput(pv2,alpha)