diff --git a/superxas_bec/devices/nidaq/nidaq.py b/superxas_bec/devices/nidaq/nidaq.py index 098607d..cbf3ae0 100644 --- a/superxas_bec/devices/nidaq/nidaq.py +++ b/superxas_bec/devices/nidaq/nidaq.py @@ -147,6 +147,20 @@ class NidaqControl(Device): doc="EPICS counter input 7", auto_monitor=True, ) + ci8 = Cpt( + EpicsSignalRO, + suffix="NIDAQ-CI8", + kind=Kind.normal, + doc="EPICS counter input 8", + auto_monitor=True, + ) + ci9 = Cpt( + EpicsSignalRO, + suffix="NIDAQ-CI9", + kind=Kind.normal, + doc="EPICS counter input 9", + auto_monitor=True, + ) di0 = Cpt( EpicsSignalRO, @@ -276,6 +290,12 @@ class NidaqControl(Device): ci7_mean = Cpt( SetableSignal, value=0, kind=Kind.normal, doc="NIDAQ stream counter input 7, MEAN" ) + ci8_mean = Cpt( + SetableSignal, value=0, kind=Kind.normal, doc="NIDAQ stream counter input 8, MEAN" + ) + ci9_mean = Cpt( + SetableSignal, value=0, kind=Kind.normal, doc="NIDAQ stream counter input 9, MEAN" + ) ci0_std_dev = Cpt( SetableSignal, value=0, kind=Kind.normal, doc="NIDAQ stream counter input 0. STD" @@ -301,6 +321,30 @@ class NidaqControl(Device): ci7_std_dev = Cpt( SetableSignal, value=0, kind=Kind.normal, doc="NIDAQ stream counter input 7. STD" ) + ci8_std_dev = Cpt( + SetableSignal, value=0, kind=Kind.normal, doc="NIDAQ stream counter input 8. STD" + ) + ci9_std_dev = Cpt( + SetableSignal, value=0, kind=Kind.normal, doc="NIDAQ stream counter input 9. STD" + ) + + cisum = Cpt( + SetableSignal, value=0, kind=Kind.normal, doc="NIDAQ stream counter sum" + ) + smpl_abs = Cpt( + SetableSignal, value=0, kind=Kind.normal, doc="NIDAQ stream sample absorption" + ) + ref_abs = Cpt( + SetableSignal, value=0, kind=Kind.normal, doc="NIDAQ stream reference absorption" + ) + + xas_timestamp = Cpt(SetableSignal, value=0, kind=Kind.normal, doc="NIDAQ stream XAS timestamp") + + # xrd_timestamp = Cpt(SetableSignal, value=0, kind=Kind.normal, doc="NIDAQ stream XRD timestamp") + # xrd_angle = Cpt(SetableSignal, value=0, kind=Kind.normal, doc="NIDAQ stream XRD angle") + # xrd_energy = Cpt(SetableSignal, value=0, kind=Kind.normal, doc="NIDAQ stream XRD energy") + # xrd_ai0_mean = Cpt(SetableSignal, value=0, kind=Kind.normal, doc="NIDAQ stream XRD ai0 mean") + # xrd_ai0_std_dev = Cpt(SetableSignal, value=0, kind=Kind.normal, doc="NIDAQ stream XRD ai0 std dev") di0_max = Cpt(SetableSignal, value=0, kind=Kind.normal, doc="NIDAQ stream digital input 0, MAX") di1_max = Cpt(SetableSignal, value=0, kind=Kind.normal, doc="NIDAQ stream digital input 1, MAX") @@ -315,16 +359,21 @@ class NidaqControl(Device): ### Control PVs ### enable_compression = Cpt(EpicsSignal, suffix="NIDAQ-EnableRLE", kind=Kind.config) + # enable_dead_time_correction = Cpt(EpicsSignal, suffix="NIDAQ-EnableDTC", kind=Kind.config) kickoff_call = Cpt(EpicsSignal, suffix="NIDAQ-Kickoff", kind=Kind.config) stage_call = Cpt(EpicsSignal, suffix="NIDAQ-Stage", kind=Kind.config) state = Cpt(EpicsSignal, suffix="NIDAQ-FSMState", kind=Kind.config, auto_monitor=True) server_status = Cpt(EpicsSignalRO, suffix="NIDAQ-ServerStatus", kind=Kind.config) compression_ratio = Cpt(EpicsSignalRO, suffix="NIDAQ-CompressionRatio", kind=Kind.config) scan_type = Cpt(EpicsSignal, suffix="NIDAQ-ScanType", kind=Kind.config) + scan_type_string = Cpt(EpicsSignal, suffix="NIDAQ-ScanType", kind=Kind.config, string=True) sampling_rate = Cpt(EpicsSignal, suffix="NIDAQ-SamplingRateRequested", kind=Kind.config) + sampling_rate_string = Cpt(EpicsSignal, suffix="NIDAQ-SamplingRateRequested", kind=Kind.config, string=True) scan_duration = Cpt(EpicsSignal, suffix="NIDAQ-SamplingDuration", kind=Kind.config) readout_range = Cpt(EpicsSignal, suffix="NIDAQ-ReadoutRange", kind=Kind.config) + readout_range_string = Cpt(EpicsSignal, suffix="NIDAQ-ReadoutRange", kind=Kind.config, string=True) encoder_factor = Cpt(EpicsSignal, suffix="NIDAQ-EncoderFactor", kind=Kind.config) + encoder_factor_string = Cpt(EpicsSignal, suffix="NIDAQ-EncoderFactor", kind=Kind.config, string=True) stop_call = Cpt(EpicsSignal, suffix="NIDAQ-Stop", kind=Kind.config) power = Cpt(EpicsSignal, suffix="NIDAQ-Power", kind=Kind.config) heartbeat = Cpt(EpicsSignal, suffix="NIDAQ-Heartbeat", kind=Kind.config, auto_monitor=True) @@ -352,7 +401,7 @@ class Nidaq(PSIDeviceBase, NidaqControl): super().__init__(name=name, prefix=prefix, scan_info=scan_info, **kwargs) self.scan_info: ScanInfo self.timeout_wait_for_signal = 5 # put 5s firsts - self._timeout_wait_for_pv = 3 # 3s timeout for pv calls + self._timeout_wait_for_pv = 5 # 5s timeout for pv calls. editted due to timeout issues persisting self.valid_scan_names = [ "xas_simple_scan", "xas_simple_scan_with_xrd", @@ -551,7 +600,11 @@ class Nidaq(PSIDeviceBase, NidaqControl): # Stage call to IOC status = CompareStatus(self.state, NidaqState.STAGE) self.cancel_on_stop(status) - self.stage_call.set(1).wait(timeout=self._timeout_wait_for_pv) + # TODO 11.11.25/HS64 + # Switched from set to put in the hope to get rid of the rare event where nidaq is stopped at the start of a scan + # Problems consistently persisting, testing changing back to set, unconvinced this is the actual cause 14.11.25/AHC + # self.stage_call.set(1).wait(timeout=self._timeout_wait_for_pv) + self.stage_call.put(1) status.wait(timeout=self.timeout_wait_for_signal) if self.scan_info.msg.scan_name != "nidaq_continuous_scan": status = self.on_kickoff()