adds example of EL737 and description of what differentiates the older and newer systems
This commit is contained in:
106
README.md
106
README.md
@@ -11,6 +11,20 @@ generation systems.
|
||||
[StreamGenerator](https://gitea.psi.ch/lin-epics-modules/StreamGenerator)
|
||||
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
|
||||
|
||||
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
|
||||
|
||||
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
|
||||
working and to check the IOC - Nicos integration. These can be loaded at
|
||||
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
|
||||
[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
|
||||
|
||||
@@ -132,32 +221,35 @@ devices = dict(
|
||||
'nicos_sinq.devices.epics.sinqdaq.DAQMinThresholdChannel',
|
||||
daqpvprefix = countprefix,
|
||||
channels = [],
|
||||
visibility = {'metadata', 'namespace'},
|
||||
),
|
||||
Threshold = device(
|
||||
'nicos_sinq.devices.epics.sinqdaq.DAQMinThreshold',
|
||||
daqpvprefix = countprefix,
|
||||
min_rate_channel = 'ThresholdChannel',
|
||||
visibility = {'metadata', 'namespace'},
|
||||
),
|
||||
Gate1 = device(
|
||||
'nicos_sinq.devices.epics.sinqdaq.DAQGate',
|
||||
daqpvprefix = countprefix,
|
||||
channel = 1,
|
||||
visibility = {'metadata', 'namespace'},
|
||||
visibility = {'metadata', 'namespace'},
|
||||
),
|
||||
Gate2 = device(
|
||||
'nicos_sinq.devices.epics.sinqdaq.DAQGate',
|
||||
daqpvprefix = countprefix,
|
||||
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',
|
||||
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):
|
||||
devices[f'monitor{i+1}'] = device(
|
||||
'nicos_sinq.devices.epics.sinqdaq.DAQChannel',
|
||||
|
||||
Reference in New Issue
Block a user