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)
|
[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',
|
||||||
|
|||||||
Reference in New Issue
Block a user