adds example of EL737 and description of what differentiates the older and newer systems
Some checks failed
Example Action / Lint (push) Successful in 2s
Example Action / BuildAndTest (push) Failing after 9s

This commit is contained in:
2026-02-04 10:39:32 +01:00
parent df4f140c12
commit 4801dc3279

106
README.md
View File

@@ -11,6 +11,20 @@ generation systems.
[StreamGenerator](https://gitea.psi.ch/lin-epics-modules/StreamGenerator) [StreamGenerator](https://gitea.psi.ch/lin-epics-modules/StreamGenerator)
module. module.
## Functional Differences Between Models
The 2nd Generation DAQ offers some additional features that aren't available on the
older EL737 Counterboxes. Specifically,
* the possibility to change the channel monitored by the count-based preset (on
the older EL737 boxes, only the 1st channel can be used)
* two gating inputs, that enable counting to be halted via configurable
high/low electrical inputs.
* a test signal generator
Furthermore, the 2nd Generation DAQ's have 10 input channels, in place of the 8
or 4 channels on the older EL737 Counterboxes.
## How to Use ## How to Use
Unless a custom database is needed, a device can be configure simply by setting Unless a custom database is needed, a device can be configure simply by setting
@@ -64,7 +78,7 @@ runScript "$(sinqDAQ_DIR)daq_2nd_gen.cmd" "NAME=DAQ, DAQ_IP=TestInst-DAQ1, DAQ_P
## Generating Test Signals ## Generating Test Signals
The 2nd generation systems have two test channels that can be used to output The 2nd Generation DAQ's have two test channels that can be used to output
signals at a variable rate. These can be used to ensure the other channels are signals at a variable rate. These can be used to ensure the other channels are
working and to check the IOC - Nicos integration. These can be loaded at working and to check the IOC - Nicos integration. These can be loaded at
runtime via the following runtime via the following
@@ -82,7 +96,82 @@ A set of Nicos devices have been developed which allow control of the Detector
Hardware via this Epics Driver. The corresponding code can be found in Hardware via this Epics Driver. The corresponding code can be found in
[sinqdaq.py](https://gitea.psi.ch/lin-instrument-computers/Nicos/src/branch/release-3.12/nicos_sinq/devices/epics/sinqdaq.py). [sinqdaq.py](https://gitea.psi.ch/lin-instrument-computers/Nicos/src/branch/release-3.12/nicos_sinq/devices/epics/sinqdaq.py).
## Full Example ## Full Example of 8 Channel EL737 Counterbox
Include the following snippet in your IOC
```
# st.cmd at TASP
epicsEnvSet("STREAM_PROTOCOL_PATH","./db")
epicsEnvSet("INSTR","SQ:SINQTEST:")
require sinqDAQ
runScript "$(sinqDAQ_DIR)daq_8ch.cmd" "NAME=counter, DAQ_IP=tasp-ts0, DAQ_PORT=3004"
```
What follows is an example Nicos setup file.
```
# simplified tasp.py
countprefix = 'SQ:TASP:counter'
configured_channels = ['detector', 'protoncount']
devices = dict(
elapsedtime = device(
'nicos_sinq.devices.epics.sinqdaq.DAQTime',
daqpvprefix = countprefix,
),
detector = device(
'nicos_sinq.devices.epics.sinqdaq.DAQChannel',
description = 'Actual neutron detector',
daqpvprefix = countprefix,
channel = 1,
type = 'counter',
),
protoncount = device(
'nicos_sinq.devices.epics.sinqdaq.DAQChannel',
description = 'Monitor for proton current',
daqpvprefix = countprefix,
channel = 2,
type = 'monitor',
),
DAQPreset = device(
'nicos_sinq.devices.epics.sinqdaq.DAQPreset',
description = '8 Channel EL737 Counterbox',
daqpvprefix = countprefix,
channels = configured_channels,
time_channel = ['elapsedtime'],
),
ThresholdChannel = device(
'nicos_sinq.devices.epics.sinqdaq.DAQMinThresholdChannel',
daqpvprefix = countprefix,
channels = configured_channels,
),
Threshold = device(
'nicos_sinq.devices.epics.sinqdaq.DAQMinThreshold',
daqpvprefix = countprefix,
min_rate_channel = 'ThresholdChannel',
),
taspdet = device(
'nicos_sinq.devices.epics.sinqdaq.SinqDetector',
description = 'Detector Interface',
timers = ['elapsedtime'],
monitors = ['DAQPreset'] + configured_channels,
others = [],
liveinterval = 1,
),
)
startupcode = '''
SetDetectors(taspdet)
ThresholdChannel.move('protoncount')
'''
```
## Full Example of 2nd Generation DAQ
Include the following snippet in your IOC Include the following snippet in your IOC
@@ -132,32 +221,35 @@ devices = dict(
'nicos_sinq.devices.epics.sinqdaq.DAQMinThresholdChannel', 'nicos_sinq.devices.epics.sinqdaq.DAQMinThresholdChannel',
daqpvprefix = countprefix, daqpvprefix = countprefix,
channels = [], channels = [],
visibility = {'metadata', 'namespace'},
), ),
Threshold = device( Threshold = device(
'nicos_sinq.devices.epics.sinqdaq.DAQMinThreshold', 'nicos_sinq.devices.epics.sinqdaq.DAQMinThreshold',
daqpvprefix = countprefix, daqpvprefix = countprefix,
min_rate_channel = 'ThresholdChannel', min_rate_channel = 'ThresholdChannel',
visibility = {'metadata', 'namespace'},
), ),
Gate1 = device( Gate1 = device(
'nicos_sinq.devices.epics.sinqdaq.DAQGate', 'nicos_sinq.devices.epics.sinqdaq.DAQGate',
daqpvprefix = countprefix, daqpvprefix = countprefix,
channel = 1, channel = 1,
visibility = {'metadata', 'namespace'}, visibility = {'metadata', 'namespace'},
), ),
Gate2 = device( Gate2 = device(
'nicos_sinq.devices.epics.sinqdaq.DAQGate', 'nicos_sinq.devices.epics.sinqdaq.DAQGate',
daqpvprefix = countprefix, daqpvprefix = countprefix,
channel = 2, channel = 2,
visibility = {'metadata', 'namespace'}, visibility = {'metadata', 'namespace'},
), ),
# Only necessary if you want to use the signal generator in the
# 2nd Generation DAQ for testing.
TestGen = device('nicos_sinq.devices.epics.sinqdaq.DAQTestGen', TestGen = device('nicos_sinq.devices.epics.sinqdaq.DAQTestGen',
daqpvprefix = countprefix, daqpvprefix = countprefix,
visibility = {'metadata', 'namespace'}, visibility = {'metadata', 'namespace'},
), ),
) )
# On an actual instrument, it might be better if instead of just calling
# your channels 'Monitor <num>', you describe what is actually plugged
# into the DAQ on each channel.
for i in range(10): for i in range(10):
devices[f'monitor{i+1}'] = device( devices[f'monitor{i+1}'] = device(
'nicos_sinq.devices.epics.sinqdaq.DAQChannel', 'nicos_sinq.devices.epics.sinqdaq.DAQChannel',