From 8d0c097dd717bed7684081df371139ab2ab64a5b Mon Sep 17 00:00:00 2001 From: gac-x03da Date: Fri, 6 Apr 2018 18:13:50 +0200 Subject: [PATCH] Closedown --- config/devices.properties | 2 +- script/keithley.py | 43 ++++++++++++++++++++++++++++++--------- script/local.py | 20 ++++++------------ 3 files changed, 40 insertions(+), 25 deletions(-) diff --git a/config/devices.properties b/config/devices.properties index da399e8c..a555cc9c 100644 --- a/config/devices.properties +++ b/config/devices.properties @@ -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|| diff --git a/script/keithley.py b/script/keithley.py index a915d4f7..1811c144 100644 --- a/script/keithley.py +++ b/script/keithley.py @@ -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): diff --git a/script/local.py b/script/local.py index 86add788..577ddad9 100644 --- a/script/local.py +++ b/script/local.py @@ -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)