Hi Eddy,
-
If the setpoint (*:Proc1:EnableCallbacks) is changed to 1, the readback value (*:Proc1:EnableCallbacks_RBV) changes to 0.
If the setpoint is changed to 0, the readback value changes to 1.
-
But the process plugin actually seems to do its job if the _RBV is labled as "Disable"
Similar story for the "Enable background" and its readback value.
-
StdArrays and Stats behave the same way.
But for my ROI plugin set and readback for the enable field are consistent.
That should definitely not be happening, I have never heard of that issue before.
Just to be sure it is not a problem with the GUI please test it as follows:
camonitor *:Proc1:EnableCallbacks *:Proc1:EnableCallbacks_RBV
caput *:Proc1:EnableCallbacks 1
caput *:Proc1:EnableCallbacks 0
Send the output of both windows.
Your plugin chain looks fine to me. Note if you load the commonPlugins.cmd from ADCore/iocBoot then the only thing you would have needed to add to your startup script are the 2 NDStdArrays plugins. You can then just "wire" the other plugins at run-time, and
the configuration will be saved with autosave.
Mark
From: Tech-talk on behalf of Blomley, Edmund (IBPT) via Tech-talk
Sent: Thursday, March 20, 2025 11:22 PM
To: tech-talk at aps.anl.gov
Subject: Areadetector Plugin Enable/Disable Issue and Design Question
Hey all,
I am fairly new to using most of the areadetector plugins and I encountered
one issue which seems rather confusing to me with the various Enable/Disable
fields:
If the setpoint (*:Proc1:EnableCallbacks) is changed to 1, the readback
value (*:Proc1:EnableCallbacks_RBV) changes to 0.
If the setpoint is changed to 0, the readback value changes to 1. But the
process plugin actually seems to do its job if the _RBV is labled as
"Disable"
Similar story for the "Enable background" and its readback value. StdArrays
and Stats behave the same way.
But for my ROI plugin set and readback for the enable field are consistent.
So I kind of wonder if I somehow messed up my plugin configuration, which
brings me to the second question regarding plugin interaction/design:
I am trying this setup: Camera -> raw picture (StdArray) -> process plugin
(+ FileTiff Plugin) -> processed image -> ROI plugin -> stats plugin ->
FileHDF plugin
With the basic idea: optional background substraction feeding into optional
ROI feeding into stats and file saving. Is this a "good" plugin design?
-----------------------
st.cmd setup:
[typical st.cmd header]
...
[autosave config]
epicsEnvSet("MODEL", "acA1920-25gm")
epicsEnvSet("ELEMENTS", "2073600")
epicsEnvSet("XSIZE", "1920")
epicsEnvSet("YSIZE", "1080")
aravisConfig("basler1", "Basler-$(MODEL)-$(SERIAL)", 1, -1, 0, 0)
# Load default templates
dbLoadRecords("$(ADARAVIS)/db/aravisCamera.template", "P=$(PREFIX),R=,PORT=basler1,ADDR=0,TIMEOUT=1")
dbLoadRecords("db/Basler_$(MODEL).template", "P=$(PREFIX),R=,PORT=basler1,ADDR=0,TIMEOUT=1")
# Raw Camera Image
NDStdArraysConfigure("CA1", 5, 0, "basler1", 0, 0)
dbLoadRecords("$(ADCORE)/db/NDStdArrays.template",
"P=$(PREFIX),R=Image:,PORT=CA1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=basler1,TYPE=Int16,FTVL=SHORT,NELEMENTS=$(ELEMENTS),ENABLED=1")
# Processing plugin
NDProcessConfigure("PROC1", $(QSIZE=5), 0, "basler1", 0, 0, 0)
dbLoadRecords("$(ADCORE)/db/NDProcess.template", "P=$(PREFIX),R=Proc1:,PORT=PROC1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=basler1")
# TIFF file plugin for background
NDFileTIFFConfigure("FileTIFF1", $(QSIZE=5), 0, "basler1", 0)
dbLoadRecords("$(ADCORE)/db/NDFileTIFF.template", "P=$(PREFIX),R=Proc1:TIFF:,PORT=FileTIFF1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=basler1")
# Camera Image After Processing
NDStdArraysConfigure("POST1", 5, 0, "PROC1", 0, 0)
dbLoadRecords("$(ADCORE)/db/NDStdArrays.template", "P=$(PREFIX),R=ImageProcessed:,PORT=POST1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=PROC1,TYPE=Int16,FTVL=SHORT,NELEMENTS=$(ELEMENTS),ENABLED=1")
# Region of Interest Plugin
NDROIConfigure("ROI1", $(QSIZE=5), 0, "PROC1", 0, 0, 0, 0, 0, $(MAX_THREADS=5))
dbLoadRecords("$(ADCORE)/db/NDROI.template", "P=$(PREFIX),R=ROI1:,PORT=ROI1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=PROC1")
# Statistics plugin on processed image
NDStatsConfigure("STATS1", $(QSIZE=5), 0, "PROC1", 0, 0, 0, 0, 0, $(MAX_THREADS=5))
dbLoadRecords("NDStats.template", "P=$(PREFIX),R=Stats1:, PORT=STATS1,ADDR=0,TIMEOUT=1,HIST_SIZE=256,XSIZE=$(XSIZE),YSIZE=$(YSIZE),NCHANS=$(NCHANS=100),NDARRAY_PORT=PROC1")
NDTimeSeriesConfigure("STATS1_TS", $(QSIZE=5), 0, "STATS1", 1, 23)
dbLoadRecords("$(ADCORE)/db/NDTimeSeries.template", "P=$(PREFIX),R=Stats1:TS:,PORT=STATS1_TS,ADDR=0,TIMEOUT=1,NDARRAY_PORT=STATS1,NDARRAY_ADDR=1,NCHANS=$(NCHANS=100),ENABLED=1")
[more plugins]
...
[ioc init]
Cheers
eddy
|