Skip to content

Commit d5f0719

Browse files
authored
Merge pull request #2234 from UAFPychron/dev/dc
Dev/dc
2 parents c72282e + 2884318 commit d5f0719

File tree

6 files changed

+60
-17
lines changed

6 files changed

+60
-17
lines changed

pychron/hardware/actuators/gp_actuator.py

+2
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,9 @@ def open_channel(self, obj):
6666

6767
def actuate(self, obj, action):
6868
if self._lock:
69+
self.debug(f'{self._lock} lock acquire')
6970
self._lock.acquire()
71+
self.debug('lock acquired')
7072

7173
if self._actuate(obj, action):
7274
ret = self._check_actuate(obj, action)

pychron/hardware/actuators/ngx_gp_actuator.py

+1-6
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ def initialize(self, *args, **kw):
4040
s = self.application.get_service(service)
4141
if s is not None:
4242
self.controller = s
43+
# self._lock = self.controller.lock
4344
return True
4445

4546
def actuate(self, *args, **kw):
@@ -48,12 +49,6 @@ def actuate(self, *args, **kw):
4849
self.controller.set_acquisition_buffer(False)
4950
return ret
5051

51-
# self.ask("StopAcq")
52-
# self.controller.stop_acquisition()
53-
# self.controller.canceled = True
54-
# time.sleep(1)
55-
# return super(NGXGPActuator, self).actuate(*args, **kw)
56-
5752
def get_channel_state(self, obj, delay=False, verbose=False, **kw):
5853
""" """
5954
if delay:

pychron/hardware/isotopx_spectrometer_controller.py

+16-2
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,16 @@
2828

2929
from pychron.hardware.core.core_device import CoreDevice
3030

31+
# import ctypes, _thread
32+
# class mRLock(_thread.RLock):
33+
#
34+
# offsetof_rlock_count = 32 # on 64-bit system
35+
#
36+
# @property
37+
# def count(self):
38+
# rlock_count_b = ctypes.string_at(id(self)+self.offsetof_rlock_count, 8)
39+
# return int.from_bytes(rlock_count_b, 'little', signed=False)
40+
#
3141

3242
class NGXController(CoreDevice):
3343
username = Str("")
@@ -46,10 +56,14 @@ def ask(self, cmd, *args, **kw):
4656
(cmd.startswith(t) for t in ("GetValveStatus", "OpenValve", "CloseValve"))
4757
):
4858
if resp and resp.strip() not in ("E00", "OPEN", "CLOSED"):
59+
# if resp.strip()=='E04':
60+
# time.sleep(3)
61+
# return "OPEN\r\n"
4962
# self.event_buf.push(resp)
5063
self.debug("retrying")
5164
time.sleep(0.5)
5265
return self.ask(cmd, *args, **kw)
66+
5367
return resp
5468

5569
# def read(self, *args, **kw):
@@ -58,6 +72,7 @@ def ask(self, cmd, *args, **kw):
5872
# else:
5973
# resp = self.event_buffer.get()
6074
# return resp
75+
6176
def set_acquisition_buffer(self, flag):
6277
flag = "1" if flag else "0"
6378
self.debug(f"set acquisition buffer {flag}")
@@ -81,6 +96,7 @@ def initialize(self, *args, **kw):
8196
# trying a new locking mechanism see ngx.trigger for more details
8297

8398
self.lock = Lock()
99+
# self.lock = mRLock()
84100
# self.event_buffer = Queue()
85101

86102
if ret:
@@ -92,8 +108,6 @@ def initialize(self, *args, **kw):
92108
if resp:
93109
self.info("NGX-{}".format(resp))
94110
self.ask("Login {},{}".format(self.username, self.password))
95-
96111
return True
97112

98-
99113
# ============= EOF =============================================

pychron/spectrometer/isotopx/magnet/ngx.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ def set_dac(self, v, *args, **kw):
3030
def read_mass(self):
3131
# self.ask("StopAcq")
3232
self.microcontroller.stop_acquisition()
33-
self.microcontroller.triggered = False
33+
# self.microcontroller.triggered = False
3434
return self.ask("GETMASS")
3535

3636
def set_mass(self, v, delay=None, deflect=False, **kw):

pychron/spectrometer/isotopx/spectrometer/ngx.py

+38-6
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ class NGXSpectrometer(BaseSpectrometer, IsotopxMixin):
5656
acq_count = 0
5757
total_acq_count = 10
5858
has_atonas = True
59+
# triggered_lock_release_required = False
5960

6061
def _microcontroller_default(self):
6162
service = "pychron.hardware.isotopx_spectrometer_controller.NGXController"
@@ -129,6 +130,8 @@ def trigger_acq(self, verbose=True):
129130

130131
if not self.microcontroller.triggered:
131132
# self.microcontroller.lock.acquire()
133+
# self.triggered_lock_release_required = True
134+
132135
# self.ask("StopAcq", verbose=verbose)
133136
self.microcontroller.stop_acquisition()
134137
self.microcontroller.triggered = True
@@ -186,7 +189,7 @@ def set_source_parameter(self, name, value):
186189
self.ask(f"SetSourceOutput {name},{value}")
187190

188191
def read_intensities(
189-
self, timeout=60, trigger=False, target="ACQ.B", verbose=False
192+
self, timeout=60, trigger=False, target="ACQ.B", verbose=True
190193
):
191194
# self.microcontroller.lock.acquire()
192195
# verbose=True
@@ -203,10 +206,15 @@ def read_intensities(
203206

204207
# self.microcontroller.lock.acquire()
205208
resp = True
206-
# trigger_release = self.microcontroller.triggered
209+
# trigger_release = self.triggered_lock_release_required
210+
# self.debug(f'trigger={trigger} triggered={self.microcontroller.triggered} '
211+
# f'triggered_locrelease_required={self.triggered_lock_release_required}')
212+
# print('treigger', trigger, self.microcontroller.triggered)
207213
if trigger or not self.microcontroller.triggered:
208214
resp = self.trigger_acq()
209-
# trigger_release = True
215+
# trigger_release = self.microcontroller.triggered
216+
# self.debug(f'trigger_relase={trigger_release}')
217+
210218
# self.microcontroller.lock.release()
211219
if resp is not None:
212220
# if verbose:
@@ -215,6 +223,9 @@ def read_intensities(
215223
time.sleep(0.95)
216224
# if verbose:
217225
# self.debug('trigger wait finished')
226+
# else:
227+
# self.microcontroller.lock.acquire()
228+
# self.triggered_lock_release_required = True
218229

219230
keys = []
220231
signals = []
@@ -293,6 +304,29 @@ def read_intensities(
293304
self.debug("signals: {}".format(signals))
294305

295306
# try:
307+
# # the integration cycle is complete. release the lock
308+
# if inc:
309+
# self.microcontroller.lock.release()
310+
# self.debug(f'Released lock. {self.microcontroller.lock}')
311+
# except RuntimeError as e:
312+
# self.debug(f'Cannot release lock. "RuntimeError" {e}')
313+
314+
# if self.triggered_lock_release_required:
315+
# self.triggered_lock_release_required = False
316+
# if trigger_release:
317+
# if self.microcontroller.lock.active_count() > 0:
318+
# self.debug(f"trigger release. lock count={self.microcontroller.lock.count}")
319+
# self.microcontroller.lock.release()
320+
# self.debug(f'trigger release. {trigger_release}')
321+
# if trigger_release:
322+
# self.triggered_lock_release_required = False
323+
324+
# if self.microcontroller.lock.count>0:
325+
# try:
326+
# self.microcontroller.lock.release()
327+
# except RuntimeError as e:
328+
# if verbose:
329+
# self.debug(f'Trigger Release. Cannot release lock. "RuntimeError" {e}')
296330
# self.microcontroller.lock.release()
297331
# except RuntimeError as e:
298332
# self.debug(f'Cannot release lock. "RuntimeError" {e}')
@@ -322,7 +356,7 @@ def set_integration_time(self, it, force=False):
322356
self.microcontroller.stop_acquisition()
323357
self.ask("SetAcqPeriod 1000")
324358
self._read_enabled = False
325-
self.microcontroller.triggered = False
359+
# self.microcontroller.triggered = False
326360
self.integration_time = it
327361

328362
# if self.integration_time != it or force:
@@ -361,6 +395,4 @@ def _get_simulation_data(self):
361395
def _integration_time_default(self):
362396
self.default_integration_time = ISOTOPX_DEFAULT_INTEGRATION_TIME
363397
return ISOTOPX_DEFAULT_INTEGRATION_TIME
364-
365-
366398
# ============= EOF =============================================

pychron/spectrometer/jobs/dac_scanner.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,6 @@ def __init__(self, *args, **kw):
183183
# graph.set_x_title('Magnet DAC (Voltage)')
184184
# graph.set_y_title('Intensity')
185185

186-
self._use_mftable_limits_fired()
187186

188187
# private
189188
def _reset_hook(self):
@@ -197,8 +196,9 @@ def _setup_graph(self, graph, plot):
197196
graph.new_series()
198197
graph.set_x_title("Magnet DAC (Voltage)")
199198
graph.set_y_title("Intensity")
199+
# self._use_mftable_limits_fired()
200200

201-
# scan methods
201+
# scan methods
202202
def _do_step(self, magnet, step):
203203
magnet.set_dac(step, verbose=False)
204204

0 commit comments

Comments
 (0)