124 lines
3.7 KiB
Python
124 lines
3.7 KiB
Python
import time
|
|
import traceback
|
|
|
|
running = False
|
|
counts = {}
|
|
encoder_raw = {}
|
|
|
|
|
|
def crossZero(encoder):
|
|
global counts
|
|
global encoder_raw
|
|
try:
|
|
time.sleep(1.0)
|
|
counts[encoder]=0
|
|
if caget(encoder+".RVAL") > 0:
|
|
encoder_raw[encoder]=1
|
|
elif caget(encoder+".RVAL") < 0:
|
|
encoder_raw[encoder]=-1
|
|
def on_change(value):
|
|
global counts
|
|
global encoder_raw
|
|
if (encoder_raw[encoder]==1 and value < 0):
|
|
counts[encoder]=counts[encoder]+1
|
|
encoder_raw[encoder]=-1
|
|
print "Zero on" , encoder, "crossed"
|
|
elif(encoder_raw[encoder]==-1 and value > 0):
|
|
counts[encoder]=counts[encoder]+1
|
|
encoder_raw[encoder]=1
|
|
print "Zero on" , encoder, "crossed"
|
|
|
|
#if int(value) == 0:
|
|
# print "Raw vlaue on" , encoder, "crossed", value
|
|
# counts[encoder]=counts[encoder]+1
|
|
|
|
with Channel(encoder+".RVAL", callback=on_change, monitored=True, name="test") as ch:
|
|
while(running==True):
|
|
time.sleep(0.1)
|
|
print "Encoder "+encoder +" crossed 0 "+ str(counts[encoder]) + " times"
|
|
return counts[encoder]
|
|
except:
|
|
print "Exception counting "+str(encoder)
|
|
traceback.print_exc()
|
|
raise
|
|
|
|
def init():
|
|
try:
|
|
global running
|
|
running = True
|
|
|
|
print "startint FE slit initilization"
|
|
cenV = caget('X11MA-FE-SV:center')
|
|
cenH = caget('X11MA-FE-SH:center')
|
|
offV = caget('X11MA-FE-DSVER.A')
|
|
offH = caget('X11MA-FE-DSHOR.A')
|
|
|
|
print "Old motor positions: centerV = " +str(cenV)+ \
|
|
", centerH = " +str(cenH)+ \
|
|
", offset V = " +str(offV)+ \
|
|
", offset H = " +str(offH)
|
|
|
|
print "Initializing UP motor."
|
|
caput('X11MA-FE-DSUP:II.PROC',1)
|
|
time.sleep(1.0)
|
|
cawait('X11MA-FE-SV1:TR1.DMOV', 1)
|
|
print "Initializing DOWN motor."
|
|
caput('X11MA-FE-DSDW:II.PROC',1)
|
|
time.sleep(1.0)
|
|
cawait('X11MA-FE-SV1:TR2.DMOV', 1)
|
|
print "Initializing RING motor."
|
|
caput('X11MA-FE-DSRI:II.PROC',1)
|
|
time.sleep(1.0)
|
|
cawait('X11MA-FE-SH1:TR1.DMOV', 1)
|
|
print "Initializing WALL motor."
|
|
caput('X11MA-FE-DSWA:II.PROC',1)
|
|
time.sleep(1.0)
|
|
cawait('X11MA-FE-SH1:TR2.DMOV', 1)
|
|
|
|
print "Setting offH and offV to 0."
|
|
caput('X11MA-FE-DSVER.A',0)
|
|
caput('X11MA-FE-DSHOR.A',0)
|
|
|
|
print "Checking encoder offset values."
|
|
if(abs(caget('X11MA-FE-SV1:EC1Off')+42683)>10):
|
|
print "Up position not ok"
|
|
elif(abs(caget('X11MA-FE-SV1:EC2Off')+41362)>10):
|
|
print "Down position not ok"
|
|
elif(abs(caget('X11MA-FE-SH1:EC1Off')+40782)>10):
|
|
print "Ring position not ok"
|
|
elif(abs(caget('X11MA-FE-SH1:EC2Off')+39548)>10):
|
|
print "Wall position not ok"
|
|
else:
|
|
print "All positions OK"
|
|
|
|
print "restoring Center and off values"
|
|
caput('X11MA-FE-SV:center',cenV)
|
|
caput('X11MA-FE-SH:center',cenH)
|
|
caput('X11MA-FE-DSVER.A',offV)
|
|
caput('X11MA-FE-DSHOR.A',offH)
|
|
|
|
running = False
|
|
return 0
|
|
except:
|
|
print "Exception in init"
|
|
traceback.print_exc()
|
|
raise
|
|
|
|
#Fork and join
|
|
futures = fork(init,(crossZero,("X11MA-FE-SV1:EC1",)), \
|
|
(crossZero,("X11MA-FE-SV1:EC2",)), \
|
|
(crossZero,("X11MA-FE-SH1:EC1",)), \
|
|
(crossZero,("X11MA-FE-SH1:EC2",)) )
|
|
ret = join(futures)
|
|
|
|
#check zero crossing status after init
|
|
zerocr=True
|
|
for i in range(1,4):
|
|
if(ret[i] != 2):
|
|
zerocr=False
|
|
#final status report
|
|
print "Zero crossing status for all motors: %s" %("OK" if zerocr == True else "Not OK")
|
|
print "init FE-slits: ==> done. %s" % ("OK" if zerocr == True else "Not OK")
|
|
|
|
|