Closedown

This commit is contained in:
gac-x03da
2018-04-06 18:13:50 +02:00
parent 57ddec8245
commit 8d0c097dd7
3 changed files with 40 additions and 25 deletions

View File

@@ -35,7 +35,7 @@ DetectorMode=ch.psi.pshell.epics.ChannelString|X03DA-SCIENTA:cam1:DETECTOR_MODE_
PassEnergy=ch.psi.pshell.epics.ChannelString|X03DA-SCIENTA:cam1:PASS_ENERGY_RBV|Read||true
ElementSet=ch.psi.pshell.epics.ChannelString|X03DA-SCIENTA:cam1:ELEMENT_SET_RBV|Read||true
AnalyserSlit=ch.psi.pshell.epics.ChannelString|X03DA-SCIENTA:cam1:ANALYSER_SLIT_RBV|Read||
ScientaDwellTime=ch.psi.pshell.epics.ChannelDouble|X03DA-SCIENTA:cam1:AcquireTime_RBV|Read||
ScientaDwellTime=ch.psi.pshell.epics.ChannelDouble|X03DA-SCIENTA:cam1:AcquireTime_RBV|Read||true
#AcquisitionModeNum=ch.psi.pshell.epics.ChannelDouble|X03DA-SCIENTA:cam1:ACQ_MODE_RBV|Read||
#EnergyModeNum=ch.psi.pshell.epics.ChannelDouble|X03DA-SCIENTA:cam1:ENERGY_MODE_RBV|Read||
#LensModeNum=ch.psi.pshell.epics.ChannelDouble|X03DA-SCIENTA:cam1:LENS_MODE_RBV|Read||

View File

@@ -5,9 +5,12 @@ class Keithley(object):
RANGE_STATES = ['AUTO', '20 mA', '2 mA', '200 uA', '20 uA', '2 uA', '200 nA', '20 nA', '2 nA', '200 pA', '20 pA']
TTYPE_STATES = ['IMM', 'TLIN', 'BUS', 'EXT']
USER_MODE_STATES = ['def setting', 'poll curr fast', 'poll curr medi', 'poll curr slow', 'trig setting', 'trigger BUS', 'trigger TLIN', 'trigger EXT', 'poll volt medi']
SCAN_STATES = ['Passive', 'Event', 'I/O Intr', '10 second', '5 second', '2 second', '1 second', '.5 second', '.2 second', '.1 second']
SCAN_INTERVALS = [0., 0., 0., 10., 5., 2., 1., .5, .2, .1]
def __init__(self, base_name, base_channel):
self.dwell = 0.
self.triggered = False
self.base_channel = base_channel
self.base_name = base_name
self.rangeCh = None
@@ -62,15 +65,27 @@ class Keithley(object):
self.dosetdefaultCh.write(1)
self.scanCh.write(9)
def prepare(self, dwell):
def prepare(self, dwell, triggered):
"""
prepare keithley for gpib polling:
scan passive, bus triggered, set dwell time
dwell = dwell time in seconds (0.1 - 20.0)
dwell: dwell time in seconds.
0.1 - 20.0 in triggered mode,
0.1 - 1.0 in free running mode.
triggered:
True: wait for self.trig call and trigger once per call.
False: 1 Hz free run using EPICS SCAN attribute.
"""
self.scanCh.write(0)
self.ttypeCh.write(2)
self.triggered = triggered
if triggered:
self.scanCh.write(0)
self.ttypeCh.write(2)
else:
self.ttypeCh.write(0)
self.scanCh.write(6)
dwell = min(dwell, 1.)
nplc = 5.
navg = dwell / 0.1
if navg > 100:
@@ -78,6 +93,7 @@ class Keithley(object):
navg /= 2
navg = min(navg, 100)
nplc = min(nplc, 10.)
self.nplcCh.write(nplc)
self.navgCh.write(navg)
self.dwell = self.tottimeCh.read() / 1000.
@@ -86,9 +102,13 @@ class Keithley(object):
"""
trigger keithleys, wait until done, and read the result into EPICS.
the value can then be read by pshell from the channel.
if self.prepare was called with triggered = False,
this method has no effect.
"""
self.doinitCh.write(1)
self.dotriggerCh.write(1)
if self.triggered:
self.doinitCh.write(1)
self.dotriggerCh.write(1)
def get_dwell(self):
"""
@@ -101,9 +121,12 @@ class Keithley(object):
def fetch(self):
"""
fetch the current value from the keithley into EPICS.
if self.prepare was called with triggered = False,
this method has no effect.
"""
#time.sleep(self.get_dwell())
self.dofetchCh.write(1)
if self.triggered:
self.dofetchCh.write(1)
def read(self):
"""
@@ -114,11 +137,11 @@ class Keithley(object):
def release(self):
"""
switch keithleys to free run.
0.1 s polling and dwell time
0.1 s dwell time, 1 s poll interval.
"""
self.nplcCh.write(5.)
self.navgCh.write(1)
self.scanCh.write(9)
self.scanCh.write(6)
self.ttypeCh.write(0)
def reset(self):

View File

@@ -86,25 +86,21 @@ def trig_scienta():
time.sleep(0.1)
else:
image_id = Scienta.currentImageCount
# print time.time(), " trig_scienta: start"
Scienta.start()
# print time.time(), " trig_scienta: waitReady"
Scienta.waitReady(-1)
# print time.time(), " trig_scienta: waitNewImage"
Scienta.waitNewImage(3000, image_id)
# print time.time(), " trig_scienta: return"
from keithley import KeiSample, KeiReference
def prepare_keithleys(dwell):
def prepare_keithleys(dwell, triggered):
"""
prepare keithleys for gpib polling:
passive, bus triggered, dwell time
dwell = dwell time in seconds (0.1 - 20.0)
"""
KeiSample.prepare(dwell)
KeiReference.prepare(dwell)
KeiSample.prepare(dwell, triggered)
KeiReference.prepare(dwell, triggered)
def trig_keithleys():
"""
@@ -144,7 +140,7 @@ diag_channels.append(Scienta.channelEnd) #diag_channels.append(ChannelDo
diag_channels.append(Scienta.sliceBegin) # diag_channels.append(ChannelDouble("SliceBegin", "X03DA-SCIENTA:cam1:SLICE_BEGIN_RBV"))
diag_channels.append(Scienta.sliceEnd) #diag_channels.append(ChannelDouble("StepTime", "X03DA-SCIENTA:cam1:SLICE_END_RBV"))
diag_channels.append(Scienta.numSlices) # diag_channels.append(ChannelDouble("NumSlices", "X03DA-SCIENTA:cam1:SLICES_RBV"))
diag_channels.append(Scienta.frames) # diag_channels.append(ChannelDouble("NumFrames", "X03DA-SCIENTA:cam1:FRAMES"))
#diag_channels.append(Scienta.frames) # diag_channels.append(ChannelDouble("NumFrames", "X03DA-SCIENTA:cam1:FRAMES"))
diag_channels.append(Scienta.numChannels) #diag_channels.append(ChannelDouble("NumChannels", "X03DA-SCIENTA:cam1:NUM_CHANNELS_RBV"))
diag_channels.append(Scienta.lowEnergy) #diag_channels.append(ChannelDouble("LowEnergy", "X03DA-SCIENTA:cam1:LOW_ENERGY_RBV"))
diag_channels.append(Scienta.centerEnergy) #diag_channels.append(ChannelDouble("CenterEnergy", "X03DA-SCIENTA:cam1:CENTRE_ENERGY_RBV"))
@@ -288,18 +284,13 @@ def before_readout():
sample_scienta = True
break
#print time.time(), " before_readout: beam"
wait_beam()
#print time.time(), " before_readout: trig"
trig_keithleys()
#print time.time(), " before_readout: wait"
if sample_scienta:
trig_scienta()
else:
wait_keithleys()
#print time.time(), " before_readout: fetch"
fetch_keithleys()
#print time.time(), " before_readout: return"
def after_readout(rec):
if get_exec_pars().persist:
@@ -318,7 +309,8 @@ def set_adc_averaging():
dwell = Scienta.getStepTime().read()
dwell = min(dwell, 20.0)
dwell = max(dwell, 0.1)
prepare_keithleys(dwell)
fixed = AcquisitionMode.read() == "Fixed"
prepare_keithleys(dwell, fixed)
#value = Scienta.getStepTime().read() * 10.0 #averaging count in 100ms
#SampleCurrentAveraging.write(value)
#RefCurrentAveraging.write(value)