This morning our Pilatus stopped responding to control through the IOC and after restarting the entirety of the system, I’ve noticed that it hangs during the initialization, due to a readCamserver timeout of varying lengths. After the
PVs connect there is a long incessantly updating string of messages like this:
2026/03/20 09:53:01.890 pilatusDetector:readCamserver, timeout=1.000000, status=1 received 0 bytes
2026/03/20 09:53:02.900 pilatusDetector:readCamserver, timeout=1.000000, status=1 received 0 bytes
2026/03/20 09:53:03.911 pilatusDetector:readCamserver, timeout=1.000000, status=1 received 0 bytes
2026/03/20 09:53:08.925 pilatusDetector:readCamserver, timeout=5.000000, status=1 received 0 bytes
CA client library is unable to contact CA repeater after 50 tries.
Silence this message by starting a CA repeater daemon
or by calling ca_pend_event() and or ca_poll() more often.
2026/03/20 09:54:58.945 pilatusDetector:readCamserver, timeout=110.000000, status=1 received 0 bytes
2026/03/20 09:55:03.957 pilatusDetector:readCamserver, timeout=5.000000, status=1 received 0 bytes
2026/03/20 09:55:08.971 pilatusDetector:readCamserver, timeout=5.000000, status=1 received 0 bytes
2026/03/20 09:55:09.983 pilatusDetector:readCamserver, timeout=1.000000, status=1 received 0 bytes
If I attempt to start an acquisition through the medm it will tell me there’s a timeout waiting for camserver response or it will hang indefinitely while collecting with status “waiting for 70K response” and to camserver saying “gapfil
-1”
I have active link lights on the NICs for the ppu and dcu and I’m able to SSH to both without trouble. I did notice the link lights for the two ethernet cables from the Pilatus to the DCU are static, but I’m not sure if that’s abnormal.
If it’s useful here’s the rest of the startup scripting:
< envPaths
epicsEnvSet("IOC","iocPilatus")
epicsEnvSet("TOP","/home/det/epics/pilatusIOC")
epicsEnvSet("ADPILATUS","/home/det/epics/pilatusIOC/db/ADPilatus")
epicsEnvSet("ADCORE","/home/det/epics/pilatusIOC/db/ADCore")
epicsEnvSet("AUTOSAVE","/home/det/epics/pilatusIOC/db/autosave")
errlogInit(20000)
dbLoadDatabase("/home/det/epics/pilatusIOC/dbd/pilatusDetectorApp.dbd")
pilatusDetectorApp_registerRecordDeviceDriver(pdbbase)
Warning: IOC is booting with TOP = "/home/det/epics/pilatusIOC"
but was built with TOP = "/nfs/chess/epics/det/support/areaDetector/ADPilatus/iocs/pilatusIOC"
epicsEnvSet("EPICS_CAS_INTF_ADDR_LIST", "172.30.5.13")
# Prefix for all records
epicsEnvSet("PREFIX", "PIL10:")
# The port name for the detector
epicsEnvSet("PORT", "PIL")
# The queue size for all plugins
epicsEnvSet("QSIZE", "20")
# The maximim image width; used for row profiles in the NDPluginStats plugin
epicsEnvSet("XSIZE", "2463")
# The maximim image height; used for column profiles in the NDPluginStats plugin
epicsEnvSet("YSIZE", "2527")
# The maximum number of time seried points in the NDPluginStats plugin
epicsEnvSet("NCHANS", "2048")
# The maximum number of frames buffered in the NDPluginCircularBuff plugin
epicsEnvSet("CBUFFS", "500")
# The search path for database files
epicsEnvSet("EPICS_DB_INCLUDE_PATH", "/home/det/epics/pilatusIOC/db/ADCore/db")
###
# Create the asyn port to talk to the Pilatus on port 41234.
drvAsynIPPortConfigure("camserver","10.10.10.100:41234")
# Uncomment the following to enable asynTrace on the camserver port
#asynSetTraceIOMask("camserver",0,2)
#asynSetTraceMask("camserver",0,9)
# Set the input and output terminators.
asynOctetSetInputEos("camserver", 0, "\030")
asynOctetSetOutputEos("camserver", 0, "\n")
pilatusDetectorConfig("PIL", "camserver", 2463, 2527, 50, 300000000)
2026/03/20 09:04:28.269 pilatusDetector:readCamserver, timeout=1.000000, status=1 received 0 bytes
2026/03/20 09:04:29.274 pilatusDetector:readCamserver, timeout=1.000000, status=1 received 0 bytes
dbLoadRecords("/home/det/epics/pilatusIOC/db/ADPilatus/db/pilatus.template","P=PIL10:,R=cam1:,PORT=PIL,ADDR=0,TIMEOUT=1,CAMSERVER_PORT=camserver")
# Create a standard arrays plugin
NDStdArraysConfigure("Image1", 5, 0, "PIL", 0, 0)
dbLoadRecords("/home/det/epics/pilatusIOC/db/ADCore/db/NDStdArrays.template", "P=PIL10:,R=image1:,PORT=Image1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=PIL,TYPE=Int32,FTVL=LONG,
NELEMENTS=25000000")
# Load all other plugins using commonPlugins.cmd
< /home/det/epics/pilatusIOC/db/ADCore/iocBoot/commonPlugins.cmd
# This is an example file for creating plugins
# It uses the following environment variable macros
Many of the parameters defined in this file are also in commonPlugins_settings.req so if autosave is being
# use the autosave value will replace the value passed to this file.
# $(PREFIX) Prefix for all records
# $(PORT) The port name for the detector. In autosave.
# $(QSIZE) The queue size for all plugins. In autosave.
# $(XSIZE) The maximum image width; used to set the maximum size for row profiles in the NDPluginStats plugin and 1-D FFT
# profiles in NDPluginFFT.
# $(YSIZE) The maximum image height; used to set the maximum size for column profiles in the NDPluginStats plugin
# $(NCHANS) The maximum number of time series points in the NDPluginStats, NDPluginROIStats, and NDPluginAttribute plugins
# $(CBUFFS) The maximum number of frames buffered in the NDPluginCircularBuff plugin
# $(MAX_THREADS) The maximum number of threads for plugins which can run in multiple threads. Defaults to 5.
# Create a netCDF file saving plugin
NDFileNetCDFConfigure("FileNetCDF1", 20, 0, "PIL", 0)
dbLoadRecords("NDFileNetCDF.template","P=PIL10:,R=netCDF1:,PORT=FileNetCDF1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=PIL")
# Create a TIFF file saving plugin
NDFileTIFFConfigure("FileTIFF1", 20, 0, "PIL", 0)
dbLoadRecords("NDFileTIFF.template", "P=PIL10:,R=TIFF1:,PORT=FileTIFF1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=PIL")
# Create a JPEG file saving plugin
NDFileJPEGConfigure("FileJPEG1", 20, 0, "PIL", 0)
dbLoadRecords("NDFileJPEG.template", "P=PIL10:,R=JPEG1:,PORT=FileJPEG1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=PIL")
# Create a NeXus file saving plugin
NDFileNexusConfigure("FileNexus1", 20, 0, "PIL", 0)
dbLoadRecords("NDFileNexus.template", "P=PIL10:,R=Nexus1:,PORT=FileNexus1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=PIL")
# Create an HDF5 file saving plugin
NDFileHDF5Configure("FileHDF1", 20, 0, "PIL", 0)
dbLoadRecords("NDFileHDF5.template", "P=PIL10:,R=HDF1:,PORT=FileHDF1,ADDR=0,TIMEOUT=1,XMLSIZE=2048,NDARRAY_PORT=PIL")
# Create a Magick file saving plugin
#NDFileMagickConfigure("FileMagick1", $(QSIZE), 0, "$(PORT)", 0)
#dbLoadRecords("NDFileMagick.template","P=$(PREFIX),R=Magick1:,PORT=FileMagick1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=$(PORT)")
# Create 4 ROI plugins
NDROIConfigure("ROI1", 20, 0, "PIL", 0, 0, 0, 0, 0, 5)
dbLoadRecords("NDROI.template", "P=PIL10:,R=ROI1:, PORT=ROI1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=PIL")
NDROIConfigure("ROI2", 20, 0, "PIL", 0, 0, 0, 0, 0, 5)
dbLoadRecords("NDROI.template", "P=PIL10:,R=ROI2:, PORT=ROI2,ADDR=0,TIMEOUT=1,NDARRAY_PORT=PIL")
NDROIConfigure("ROI3", 20, 0, "PIL", 0, 0, 0, 0, 0, 5)
dbLoadRecords("NDROI.template", "P=PIL10:,R=ROI3:, PORT=ROI3,ADDR=0,TIMEOUT=1,NDARRAY_PORT=PIL")
NDROIConfigure("ROI4", 20, 0, "PIL", 0, 0, 0, 0, 0, 5)
dbLoadRecords("NDROI.template", "P=PIL10:,R=ROI4:, PORT=ROI4,ADDR=0,TIMEOUT=1,NDARRAY_PORT=PIL")
# Create 8 ROIStat plugins
NDROIStatConfigure("ROISTAT1", 20, 0, "PIL", 0, 8, 0, 0, 0, 0, 5)
dbLoadRecords("NDROIStat.template", "P=PIL10:,R=ROIStat1: ,PORT=ROISTAT1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=PIL,NCHANS=2048")
dbLoadRecords("NDROIStatN.template", "P=PIL10:,R=ROIStat1:1:,PORT=ROISTAT1,ADDR=0,TIMEOUT=1,NCHANS=2048")
dbLoadRecords("NDROIStatN.template", "P=PIL10:,R=ROIStat1:2:,PORT=ROISTAT1,ADDR=1,TIMEOUT=1,NCHANS=2048")
dbLoadRecords("NDROIStatN.template", "P=PIL10:,R=ROIStat1:3:,PORT=ROISTAT1,ADDR=2,TIMEOUT=1,NCHANS=2048")
dbLoadRecords("NDROIStatN.template", "P=PIL10:,R=ROIStat1:4:,PORT=ROISTAT1,ADDR=3,TIMEOUT=1,NCHANS=2048")
dbLoadRecords("NDROIStatN.template", "P=PIL10:,R=ROIStat1:5:,PORT=ROISTAT1,ADDR=4,TIMEOUT=1,NCHANS=2048")
dbLoadRecords("NDROIStatN.template", "P=PIL10:,R=ROIStat1:6:,PORT=ROISTAT1,ADDR=5,TIMEOUT=1,NCHANS=2048")
dbLoadRecords("NDROIStatN.template", "P=PIL10:,R=ROIStat1:7:,PORT=ROISTAT1,ADDR=6,TIMEOUT=1,NCHANS=2048")
dbLoadRecords("NDROIStatN.template", "P=PIL10:,R=ROIStat1:8:,PORT=ROISTAT1,ADDR=7,TIMEOUT=1,NCHANS=2048")
# Create a processing plugin
NDProcessConfigure("PROC1", 20, 0, "PIL", 0, 0, 0)
dbLoadRecords("NDProcess.template", "P=PIL10:,R=Proc1:, PORT=PROC1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=PIL")
# Create a TIFF file plugin to read dark and flatfield images into the processing plugin
NDFileTIFFConfigure("PROC1TIFF", 20, 0, "PIL", 0)
dbLoadRecords("NDFileTIFF.template", "P=PIL10:,R=Proc1:TIFF:,PORT=PROC1TIFF,ADDR=0,TIMEOUT=1,NDARRAY_PORT=PIL")
# Create a scatter plugin
NDScatterConfigure("SCATTER1", 20, 0, "PIL", 0, 0, 0)
dbLoadRecords("NDScatter.template", "P=PIL10:,R=Scatter1:, PORT=SCATTER1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=PIL")
# Create a gather plugin with 8 ports
NDGatherConfigure("GATHER1", 20, 0, 8, 0, 0)
dbLoadRecords("NDGather.template", "P=PIL10:,R=Gather1:, PORT=GATHER1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=PIL")
dbLoadRecords("NDGatherN.template", "P=PIL10:,R=Gather1:, N=1, PORT=GATHER1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=PIL")
dbLoadRecords("NDGatherN.template", "P=PIL10:,R=Gather1:, N=2, PORT=GATHER1,ADDR=1,TIMEOUT=1,NDARRAY_PORT=PIL")
dbLoadRecords("NDGatherN.template", "P=PIL10:,R=Gather1:, N=3, PORT=GATHER1,ADDR=2,TIMEOUT=1,NDARRAY_PORT=PIL")
dbLoadRecords("NDGatherN.template", "P=PIL10:,R=Gather1:, N=4, PORT=GATHER1,ADDR=3,TIMEOUT=1,NDARRAY_PORT=PIL")
dbLoadRecords("NDGatherN.template", "P=PIL10:,R=Gather1:, N=5, PORT=GATHER1,ADDR=4,TIMEOUT=1,NDARRAY_PORT=PIL")
dbLoadRecords("NDGatherN.template", "P=PIL10:,R=Gather1:, N=6, PORT=GATHER1,ADDR=5,TIMEOUT=1,NDARRAY_PORT=PIL")
dbLoadRecords("NDGatherN.template", "P=PIL10:,R=Gather1:, N=7, PORT=GATHER1,ADDR=6,TIMEOUT=1,NDARRAY_PORT=PIL")
dbLoadRecords("NDGatherN.template", "P=PIL10:,R=Gather1:, N=8, PORT=GATHER1,ADDR=7,TIMEOUT=1,NDARRAY_PORT=PIL")
# Create 5 statistics plugins
NDStatsConfigure("STATS1", 20, 0, "PIL", 0, 0, 0, 0, 0, 5)
dbLoadRecords("NDStats.template", "P=PIL10:,R=Stats1:, PORT=STATS1,ADDR=0,TIMEOUT=1,HIST_SIZE=256,XSIZE=2463,YSIZE=2527,NCHANS=2048,NDARRAY_PORT=PIL")
NDTimeSeriesConfigure("STATS1_TS", 20, 0, "STATS1", 1, 23)
dbLoadRecords("/home/det/epics/pilatusIOC/db/ADCore/db/NDTimeSeries.template", "P=PIL10:,R=Stats1:TS:, PORT=STATS1_TS,ADDR=0,TIMEOUT=1,NDARRAY_PORT=STATS1,NDARRAY_A
DDR=1,NCHANS=2048,ENABLED=1")
NDStatsConfigure("STATS2", 20, 0, "ROI1", 0, 0, 0, 0, 0, 5)
dbLoadRecords("NDStats.template", "P=PIL10:,R=Stats2:, PORT=STATS2,ADDR=0,TIMEOUT=1,HIST_SIZE=256,XSIZE=2463,YSIZE=2527,NCHANS=2048,NDARRAY_PORT=PIL")
NDTimeSeriesConfigure("STATS2_TS", 20, 0, "STATS2", 1, 23)
dbLoadRecords("/home/det/epics/pilatusIOC/db/ADCore/db/NDTimeSeries.template", "P=PIL10:,R=Stats2:TS:, PORT=STATS2_TS,ADDR=0,TIMEOUT=1,NDARRAY_PORT=STATS2,NDARRAY_A
DDR=1,NCHANS=2048,ENABLED=1")
NDStatsConfigure("STATS3", 20, 0, "ROI2", 0, 0, 0, 0, 0, 5)
dbLoadRecords("NDStats.template", "P=PIL10:,R=Stats3:, PORT=STATS3,ADDR=0,TIMEOUT=1,HIST_SIZE=256,XSIZE=2463,YSIZE=2527,NCHANS=2048,NDARRAY_PORT=PIL")
NDTimeSeriesConfigure("STATS3_TS", 20, 0, "STATS3", 1, 23)
dbLoadRecords("/home/det/epics/pilatusIOC/db/ADCore/db/NDTimeSeries.template", "P=PIL10:,R=Stats3:TS:, PORT=STATS3_TS,ADDR=0,TIMEOUT=1,NDARRAY_PORT=STATS3,NDARRAY_A
DDR=1,NCHANS=2048,ENABLED=1")
NDStatsConfigure("STATS4", 20, 0, "ROI3", 0, 0, 0, 0, 0, 5)
dbLoadRecords("NDStats.template", "P=PIL10:,R=Stats4:, PORT=STATS4,ADDR=0,TIMEOUT=1,HIST_SIZE=256,XSIZE=2463,YSIZE=2527,NCHANS=2048,NDARRAY_PORT=PIL")
NDTimeSeriesConfigure("STATS4_TS", 20, 0, "STATS4", 1, 23)
dbLoadRecords("/home/det/epics/pilatusIOC/db/ADCore/db/NDTimeSeries.template", "P=PIL10:,R=Stats4:TS:, PORT=STATS4_TS,ADDR=0,TIMEOUT=1,NDARRAY_PORT=STATS4,
DDR=1,NCHANS=2048,ENABLED=1")
NDStatsConfigure("STATS5", 20, 0, "ROI4", 0, 0, 0, 0, 0, 5)
dbLoadRecords("NDStats.template", "P=PIL10:,R=Stats5:, PORT=STATS5,ADDR=0,TIMEOUT=1,HIST_SIZE=256,XSIZE=2463,YSIZE=2527,NCHANS=2048,NDARRAY_PORT=PIL")
NDTimeSeriesConfigure("STATS5_TS", 20, 0, "STATS5", 1, 23)
dbLoadRecords("/home/det/epics/pilatusIOC/db/ADCore/db/NDTimeSeries.template", "P=PIL10:,R=Stats5:TS:, PORT=STATS5_TS,ADDR=0,TIMEOUT=1,NDARRAY_PORT=STATS5,NDARRAY_A
DDR=1,NCHANS=2048,ENABLED=1")
# Create a transform plugin
NDTransformConfigure("TRANS1", 20, 0, "PIL", 0, 0, 0, 0, 0, 5)
dbLoadRecords("NDTransform.template", "P=PIL10:,R=Trans1:, PORT=TRANS1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=PIL")
# Create an overlay plugin with 8 overlays
NDOverlayConfigure("OVER1", 20, 0, "PIL", 0, 8, 0, 0, 0, 0, 5)
dbLoadRecords("NDOverlay.template", "P=PIL10:,R=Over1:, PORT=OVER1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=PIL")
dbLoadRecords("NDOverlayN.template","P=PIL10:,R=Over1:1:,NAME=ROI1, SHAPE=1,O=Over1:,XPOS=PIL10:ROI1:MinX_RBV,YPOS=PIL10:ROI1:MinY_RBV,XSIZE=PIL10:ROI1:SizeX_RBV,Y
SIZE=PIL10:ROI1:SizeY_RBV,PORT=OVER1,ADDR=0,TIMEOUT=1")
dbLoadRecords("NDOverlayN.template","P=PIL10:,R=Over1:2:,NAME=ROI2, SHAPE=1,O=Over1:,XPOS=PIL10:ROI2:MinX_RBV,YPOS=PIL10:ROI2:MinY_RBV,XSIZE=PIL10:ROI2:SizeX_RBV,Y
SIZE=PIL10:ROI2:SizeY_RBV,PORT=OVER1,ADDR=1,TIMEOUT=1")
dbLoadRecords("NDOverlayN.template","P=PIL10:,R=Over1:3:,NAME=ROI3, SHAPE=1,O=Over1:,XPOS=PIL10:ROI3:MinX_RBV,YPOS=PIL10:ROI3:MinY_RBV,XSIZE=PIL10:ROI3:SizeX_RBV,Y
SIZE=PIL10:ROI3:SizeY_RBV,PORT=OVER1,ADDR=2,TIMEOUT=1")
dbLoadRecords("NDOverlayN.template","P=PIL10:,R=Over1:4:,NAME=ROI4, SHAPE=1,O=Over1:,XPOS=PIL10:ROI4:MinX_RBV,YPOS=PIL10:ROI4:MinY_RBV,XSIZE=PIL10:ROI4:SizeX_RBV,Y
SIZE=PIL10:ROI4:SizeY_RBV,PORT=OVER1,ADDR=3,TIMEOUT=1")
dbLoadRecords("NDOverlayN.template","P=PIL10:,R=Over1:5:,NAME=Cursor1,SHAPE=1,O=Over1:,XPOS=junk, YPOS=junk, XSIZE=junk,
YSIZE=junk, PORT=OVER1,ADDR=4,TIMEOUT=1")
dbLoadRecords("NDOverlayN.template","P=PIL10:,R=Over1:6:,NAME=Cursor2,SHAPE=1,O=Over1:,XPOS=junk, YPOS=junk, XSIZE=junk,
YSIZE=junk, PORT=OVER1,ADDR=5,TIMEOUT=1")
dbLoadRecords("NDOverlayN.template","P=PIL10:,R=Over1:7:,NAME=Box1, SHAPE=1,O=Over1:,XPOS=junk, YPOS=junk, XSIZE=junk,
YSIZE=junk, PORT=OVER1,ADDR=6,TIMEOUT=1")
dbLoadRecords("NDOverlayN.template","P=PIL10:,R=Over1:8:,NAME=Box2, SHAPE=1,O=Over1:,XPOS=junk, YPOS=junk, XSIZE=junk,
YSIZE=junk, PORT=OVER1,ADDR=7,TIMEOUT=1")
# Create 2 color conversion plugins
NDColorConvertConfigure("CC1", 20, 0, "PIL", 0, 0, 0, 0, 0, 5)
dbLoadRecords("NDColorConvert.template", "P=PIL10:,R=CC1:, PORT=CC1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=PIL")
NDColorConvertConfigure("CC2", 20, 0, "PIL", 0, 0, 0, 0, 0, 5)
dbLoadRecords("NDColorConvert.template", "P=PIL10:,R=CC2:, PORT=CC2,ADDR=0,TIMEOUT=1,NDARRAY_PORT=PIL")
# Create a circular buffer plugin
NDCircularBuffConfigure("CB1", 20, 0, "PIL", 0, 500, 0)
dbLoadRecords("NDCircularBuff.template", "P=PIL10:,R=CB1:, PORT=CB1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=PIL")
# Create an NDAttribute plugin with 8 attributes
NDAttrConfigure("ATTR1", 20, 0, "PIL", 0, 8, 0, 0, 0)
dbLoadRecords("NDAttribute.template", "P=PIL10:,R=Attr1:, PORT=ATTR1,ADDR=0,TIMEOUT=1,NCHANS=2048,NDARRAY_PORT=PIL")
dbLoadRecords("NDAttributeN.template", "P=PIL10:,R=Attr1:1:, PORT=ATTR1,ADDR=0,TIMEOUT=1,NCHANS=2048")
dbLoadRecords("NDAttributeN.template", "P=PIL10:,R=Attr1:2:, PORT=ATTR1,ADDR=1,TIMEOUT=1,NCHANS=2048")
dbLoadRecords("NDAttributeN.template", "P=PIL10:,R=Attr1:3:, PORT=ATTR1,ADDR=2,TIMEOUT=1,NCHANS=2048")
dbLoadRecords("NDAttributeN.template", "P=PIL10:,R=Attr1:4:, PORT=ATTR1,ADDR=3,TIMEOUT=1,NCHANS=2048")
dbLoadRecords("NDAttributeN.template", "P=PIL10:,R=Attr1:5:, PORT=ATTR1,ADDR=4,TIMEOUT=1,NCHANS=2048")
dbLoadRecords("NDAttributeN.template", "P=PIL10:,R=Attr1:5:, PORT=ATTR1,ADDR=4,TIMEOUT=1,NCHANS=2048")
dbLoadRecords("NDAttributeN.template", "P=PIL10:,R=Attr1:6:, PORT=ATTR1,ADDR=5,TIMEOUT=1,NCHANS=2048")
dbLoadRecords("NDAttributeN.template", "P=PIL10:,R=Attr1:7:, PORT=ATTR1,ADDR=6,TIMEOUT=1,NCHANS=2048")
dbLoadRecords("NDAttributeN.template", "P=PIL10:,R=Attr1:8:, PORT=ATTR1,ADDR=7,TIMEOUT=1,NCHANS=2048")
NDTimeSeriesConfigure("ATTR1_TS", 20, 0, "ATTR1", 1, 8)
dbLoadRecords("/home/det/epics/pilatusIOC/db/ADCore/db/NDTimeSeries.template", "P=PIL10:,R=Attr1:TS:, PORT=ATTR1_TS,ADDR=0,TIMEOUT=1,NDARRAY_PORT=ATTR1,NDARRAY_ADDR
=1,NCHANS=2048,ENABLED=1")
# Create an FFT plugin
NDFFTConfigure("FFT1", 20, 0, "PIL", 0, 0, 0, 0, 0, 5)
dbLoadRecords("NDFFT.template", "P=PIL10:, R=FFT1:, PORT=FFT1, ADDR=0, TIMEOUT=1, NDARRAY_PORT=PIL, NAME=FFT1, NCHANS=2463")
# Create 2 Codec plugins
NDCodecConfigure("CODEC1", 20, 0, "PIL", 0, 0, 0, 0, 0, 5)
dbLoadRecords("NDCodec.template", "P=PIL10:, R=Codec1:, PORT=CODEC1, ADDR=0, TIMEOUT=1, NDARRAY_PORT=PIL")
NDCodecConfigure("CODEC2", 20, 0, "PIL", 0, 0, 0, 0, 0, 5)
dbLoadRecords("NDCodec.template", "P=PIL10:, R=Codec2:, PORT=CODEC2, ADDR=0, TIMEOUT=1, NDARRAY_PORT=PIL")
set_requestfile_path("./")
set_requestfile_path("/home/det/epics/pilatusIOC/db/ADCore/ADApp/Db")
set_requestfile_path("/home/det/epics/pilatusIOC/db/ADCore/iocBoot")
set_savefile_path("./autosave")
set_pass0_restoreFile("auto_settings.sav")
set_pass1_restoreFile("auto_settings.sav")
save_restoreSet_status_prefix("PIL10:")
dbLoadRecords("/home/det/epics/pilatusIOC/db/autosave/asApp/Db/save_restoreStatus.db", "P=PIL10:")
# Optional: load NDPluginPva plugin
#NDPvaConfigure("PVA1", $(QSIZE), 0, "$(PORT)", 0, $(PREFIX)Pva1:Image, 0, 0, 0)
#dbLoadRecords("NDPva.template", "P=$(PREFIX),R=Pva1:, PORT=PVA1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=$(PORT)")
# Must start PVA server if this is enabled
#startPVAServer
# Optional: load ffmpegServer plugin
#ffmpegServerConfigure(8081)
#ffmpegStreamConfigure("FfmStream1", 2, 0, "$(PORT)", 0, -1, 0)
#dbLoadRecords("$(FFMPEGSERVER)/db/ffmpegStream.template", "P=$(PREFIX),R=ffmstream1:,PORT=FfmStream1,NDARRAY_PORT=$(PORT)")
#ffmpegFileConfigure("FfmFile1", 16, 0, "$(PORT)", 0, -1, 0)
#dbLoadRecords("$(FFMPEGSERVER)/db/ffmpegFile.template", "P=$(PREFIX),R=ffmfile1:,PORT=FfmFile1,NDARRAY_PORT=$(PORT)")
# Optional: load NDPluginEdge plugin
#NDEdgeConfigure("EDGE1", $(QSIZE), 0, "$(PORT)", 0, 0, 0, 0)
#dbLoadRecords("$(ADPLUGINEDGE)/db/NDEdge.template", "P=$(PREFIX),R=Edge1:, PORT=EDGE1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=$(PORT)")
#set_requestfile_path("$(ADPLUGINEDGE)/edgeApp/Db")
# Optional: load NDPluginCV plugin
#NDCVConfigure("CV1", $(QSIZE), 0, "$(PORT)", 0, 0, 0, 0, 0, $(MAX_THREADS=5))
#dbLoadRecords("$(ADCOMPVISION)/db/NDCV.template", "P=$(PREFIX),R=CV1:, PORT=CV1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=$(PORT)")
#set_requestfile_path("$(ADCOMPVISION)/adcvApp/Db")
# Optional: load NDPluginBar plugin
#NDBarConfigure("BAR1", $(QSIZE), 0, "$(PORT)", 0, 0, 0, 0, 0, $(MAX_THREADS=5))
#dbLoadRecords("$(ADPLUGINBAR)/db/NDBar.template", "P=$(PREFIX),R=Bar1:, PORT=BAR1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=$(PORT)")
#set_requestfile_path("$(ADPLUGINBAR)/barApp/Db")
# Optional: load scan records
#dbLoadRecords("$(SSCAN)/sscanApp/Db/scan.db", "P=$(PREFIX),MAXPTS1=2000,MAXPTS2=200,MAXPTS3=20,MAXPTS4=10,MAXPTSH=10")
#set_requestfile_path("$(SSCAN)/sscanApp/Db")
# Optional: load sseq record for acquisition sequence
#dbLoadRecords("$(CALC)/calcApp/Db/sseqRecord.db", "P=$(PREFIX), S=AcquireSequence")
#set_requestfile_path("$(CALC)/calcApp/Db")
# Optional: load devIocStats records (requires DEVIOCSTATS module)
#dbLoadRecords("$(DEVIOCSTATS)/db/iocAdminSoft.db", "IOC=$(PREFIX)")
# Optional: load alive record (requires ALIVE module)
#dbLoadRecords("$(ALIVE)/aliveApp/Db/alive.db", "P=$(PREFIX),RHOST=192.168.1.254")
# Set the callback queue size to 5000, up from default of 2000 in base.
# This can be needed to avoid errors "callbackRequest: cbLow ring buffer full".
callbackSetQueueSize(5000)
set_requestfile_path("/home/det/epics/pilatusIOC/db/ADPilatus/pilatusApp/Db")
# Uncomment to enable asynTrace on the driver port
#asynSetTraceMask("$(PORT)",0,255)
iocInit()
Starting iocInit
############################################################################
## EPICS R7.0.3
## EPICS Base built Nov 24 2020
############################################################################
reboot_restore: entry for file 'auto_settings.sav'
reboot_restore: Found filename 'auto_settings.sav' in restoreFileList.
*** restoring from './autosave/auto_settings.sav' at initHookState 6 (before record/device init) ***
reboot_restore: done with file 'auto_settings.sav'
reboot_restore: entry for file 'auto_settings.sav'
reboot_restore: Found filename 'auto_settings.sav' in restoreFileList.
*** restoring from './autosave/auto_settings.sav' at initHookState 7 (after record/device init) ***
reboot_restore: done with file 'auto_settings.sav'
iocRun: All initialization complete
# save things every thirty seconds
create_monitor_set("auto_settings.req", 30,"P=PIL10:")
save_restore:readReqFile: unable to open file sseq_settings.req. Exiting.
save_restore:readReqFile: unable to open file sseq_settings.req. Exiting.
save_restore:readReqFile: unable to open file sseq_settings.req. Exiting.
save_restore:readReqFile: unable to open file sseq_settings.req. Exiting.
save_restore:readReqFile: unable to open file sseq_settings.req. Exiting.
save_restore:readReqFile: unable to open file sseq_settings.req. Exiting.
save_restore:readReqFile: unable to open file sseq_settings.req. Exiting.
save_restore:readReqFile: unable to open file sseq_settings.req. Exiting.
save_restore:readReqFile: unable to open file sseq_settings.req. Exiting.
save_restore:readReqFile: unable to open file sseq_settings.req. Exiting.
save_restore:readReqFile: unable to open file sseq_settings.req. Exiting.
save_restore:readReqFile: unable to open file sseq_settings.req. Exiting.
save_restore:readReqFile: unable to open file sseq_settings.req. Exiting.
save_restore:readReqFile: unable to open file sseq_settings.req. Exiting.
save_restore:readReqFile: unable to open file sseq_settings.req. Exiting.
save_restore:readReqFile: unable to open file sseq_settings.req. Exiting.
caRepeater: error while loading shared libraries: libca.so.4.13.3: cannot open shared object file: No such file or directory
epics> 2026/03/20 09:04:31.017 pilatusDetector:readCamserver, timeout=1.000000, status=1 received 0 bytes
auto_settings.sav: 1249 of 1249 PV's connected
Any insight is appreciated!
Keith Surrena
Research Support Specialist
Cornell High Energy Synchrotron
Source