EPICS Controls Argonne National Laboratory

Experimental Physics and
Industrial Control System

1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024  <20252026  Index 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024  <20252026 
<== Date ==> <== Thread ==>

Subject: Can't use BayerRG8 pixel format with ADSpinnaker
From: Jesse Hopkins via Tech-talk <[email protected]>
To: EPICS Tech-Talk <[email protected]>
Date: Thu, 14 Aug 2025 15:47:09 +0000

Hi folks,

 

I’m attempting to use a FLIR Blackfly BFS-PGE-23S6C camera with the ADSpinnaker EPICS support. Mostly I’ve been able to get it set up just fine. However, the only pixel formats that seem to work with the camera are Mono8, Mono16, and RGB8Packed. The trouble I’m running into is that RGB8Packed maxes out at 16 Hz frame rate. From testing with SpinView, I can see that if I use the BayerRG8 pixel format for the camera I can reach the expected maximum framerate of 41 Hz and get color images. However, when I try to set the BayerRG8 pixel format in the EPICS control I get the following error in the IOC:

 

2025/08/14 10:18:30.364 ADSpinnaker:grabImage: unsupported pixel format=0x4

 

And the acquisition does not collect images.

 

Anyone know what’s going on here?

 

As a note, I did try regenerating the camera xml, template and display screens using aravis and the python scripts but have the same issue. This is aravis 0.8.35 on Debian 12.

 

I’ve included the entire IOC startup output below, and attached a screenshot of the main MEDM window. This is using EPICS base 7.0.8. AreaDetector, ADCore, ADSupport, ADGenICam, and ADSpinnaker (along with a few other AD modules) are all freshly downloaded from their respective github repos last week, using the latest version in the master branch. The IOC is being built and run on Debian 12.

 

All the best.

- Jesse

 

Entire IOC startup:

 

(main) biocat@dalek:/opt/epics/epics_iocs/soft_iocs/flir_cameras/iocBoot/iocflir_cameras$ ./st.cmd

#!../../bin/linux-x86_64/flir_cameras

< envPaths

epicsEnvSet("IOC","iocflir_cameras")

epicsEnvSet("TOP","/opt/epics/epics_iocs/soft_iocs/flir_cameras")

epicsEnvSet("SUPPORT","/opt/epics/synApps_6_3/support")

epicsEnvSet("EPICS_BASE","/opt/epics/base")

epicsEnvSet("ALIVE","/opt/epics/synApps_6_3/support/alive-R1-4-1")

epicsEnvSet("AREA_DETECTOR","/opt/epics/synApps_6_3/support/areaDetector-master")

epicsEnvSet("ASYN","/opt/epics/synApps_6_3/support/asyn-R4-44-2")

epicsEnvSet("AUTOSAVE","/opt/epics/synApps_6_3/support/autosave-R5-11")

epicsEnvSet("BUSY","/opt/epics/synApps_6_3/support/busy-R1-7-4")

epicsEnvSet("CALC","/opt/epics/synApps_6_3/support/calc-R3-7-5")

epicsEnvSet("CAMAC","/opt/epics/synApps_6_3/support/camac-R2-7-5")

epicsEnvSet("CAPUTRECORDER","/opt/epics/synApps_6_3/support/caputRecorder-R1-7-6")

epicsEnvSet("DAC128V","/opt/epics/synApps_6_3/support/dac128V-R2-10-1")

epicsEnvSet("DELAYGEN","/opt/epics/synApps_6_3/support/delaygen-R1-2-4")

epicsEnvSet("DEVIOCSTATS","/opt/epics/synApps_6_3/support/iocStats-3-1-16")

epicsEnvSet("ETHERIP","/opt/epics/synApps_6_3/support/ether_ip-ether_ip-3-3")

epicsEnvSet("GALIL","/opt/epics/synApps_6_3/support/Galil-4-0-02")

epicsEnvSet("IP","/opt/epics/synApps_6_3/support/ip-R2-22")

epicsEnvSet("IP330","/opt/epics/synApps_6_3/support/ip330-R2-10")

epicsEnvSet("IPAC","/opt/epics/synApps_6_3/support/ipac-2-16")

epicsEnvSet("IPUNIDIG","/opt/epics/synApps_6_3/support/ipUnidig-R2-12")

epicsEnvSet("LABJACK","/opt/epics/synApps_6_3/support/LabJack-master")

epicsEnvSet("LOVE","/opt/epics/synApps_6_3/support/love-R3-2-9")

epicsEnvSet("LUA","/opt/epics/synApps_6_3/support/lua-R3-1")

epicsEnvSet("MCA","/opt/epics/synApps_6_3/support/mca-R7-10")

epicsEnvSet("MEASCOMP","/opt/epics/synApps_6_3/support/measComp-master")

epicsEnvSet("MODBUS","/opt/epics/synApps_6_3/support/modbus-R3-3")

epicsEnvSet("MOTOR","/opt/epics/synApps_6_3/support/motor-R7-3-1")

epicsEnvSet("OPTICS","/opt/epics/synApps_6_3/support/optics-R2-14")

epicsEnvSet("SCALER","/opt/epics/synApps_6_3/support/scaler-4-1")

epicsEnvSet("SNCSEQ","/opt/epics/synApps_6_3/support/sequencer-mirror-R2-2-9")

epicsEnvSet("SOFTGLUE","/opt/epics/synApps_6_3/support/softGlue-R2-8-4")

epicsEnvSet("SOFTGLUEZYNQ","/opt/epics/synApps_6_3/support/softGlueZynq-R2-0-5")

epicsEnvSet("SSCAN","/opt/epics/synApps_6_3/support/sscan-R2-11-6")

epicsEnvSet("STD","/opt/epics/synApps_6_3/support/std-R3-6-4")

epicsEnvSet("STREAM","/opt/epics/synApps_6_3/support/StreamDevice-2-8-24")

epicsEnvSet("VAC","/opt/epics/synApps_6_3/support/vac-R1-9-2")

epicsEnvSet("VME","/opt/epics/synApps_6_3/support/vme-R2-9-5")

epicsEnvSet("XXX","/opt/epics/synApps_6_3/support/xxx-R6-3")

epicsEnvSet("YOKOGAWA_DAS","/opt/epics/synApps_6_3/support/Yokogawa_DAS-R2-0-2")

epicsEnvSet("ALLENBRADLEY","/opt/epics/synApps_6_3/support/allenBradley-2-3")

epicsEnvSet("ADCORE","/opt/epics/synApps_6_3/support/areaDetector-master/ADCore")

epicsEnvSet("ADSUPPORT","/opt/epics/synApps_6_3/support/areaDetector-master/ADSupport")

epicsEnvSet("ULDAQ","/opt/epics/synApps_6_3/support/measComp-R4-2/libuldaq-1.2.1")

epicsEnvSet("ADEIGER","/opt/epics/synApps_6_3/support/areaDetector-master/ADEiger")

epicsEnvSet("ADGENICAM","/opt/epics/synApps_6_3/support/areaDetector-master/ADGenICam")

epicsEnvSet("ADPILATUS","/opt/epics/synApps_6_3/support/areaDetector-master/ADPilatus")

epicsEnvSet("ADSPINNAKER","/opt/epics/synApps_6_3/support/areaDetector-master/ADSpinnaker")

epicsEnvSet("ADURL","/opt/epics/synApps_6_3/support/areaDetector-master/ADURL")

epicsEnvSet("ADMARCCD","/opt/epics/synApps_6_3/support/areaDetector-master/ADmarCCD")

epicsEnvSet("FFMPEGSERVER","/opt/epics/synApps_6_3/support/areaDetector-master/ffmpegServer")

errlogInit(20000)

dbLoadDatabase("/opt/epics/epics_iocs/soft_iocs/flir_cameras/dbd/flir_cameras.dbd")

flir_cameras_registerRecordDeviceDriver(pdbbase)

# Use this line for a specific camera by serial number, in this case a FLIR GigE

epicsEnvSet("CAMERA_ID", "24391576")

#epicsEnvSet("CAMERA_ID", "0")

epicsEnvSet("GENICAM_DB_FILE", "/opt/epics/synApps_6_3/support/areaDetector-master/ADGenICam/db/FLIR-BFS-PGE-23S6C.template")

< st.cmd.base

# Prefix for all records

epicsEnvSet("PREFIX", "18ID:FLIR:")

# The port name for the detector

epicsEnvSet("PORT",   "SP1")

# Really large queue so we can stream to disk at full camera speed

epicsEnvSet("QSIZE",  "2000")

# The maximim image width; used for row profiles in the NDPluginStats plugin

epicsEnvSet("XSIZE",  "1920")

# The maximim image height; used for column profiles in the NDPluginStats plugin

epicsEnvSet("YSIZE",  "1080")

# The maximum number of time series 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

# This is for Windows

#epicsEnvSet("EPICS_DB_INCLUDE_PATH", "$(ADCORE)/db;$(ADGENICAM)/db;$(ADSPINNAKER)/db")

# This is for Linux

epicsEnvSet("EPICS_DB_INCLUDE_PATH", "/opt/epics/synApps_6_3/support/areaDetector-master/ADCore/db:/opt/epics/synApps_6_3/support/areaDetector-master/ADGenICam/db:/opt/epics/synApps_6_3/support/areaDetector-master/ADSpinnaker/db")

# Define NELEMENTS to be enough for a 1920*1080*3 (color) image

epicsEnvSet("NELEMENTS", "6220800")

# ADSpinnakerConfig(const char *portName, const char *cameraId, int numSPBuffers,

#                   size_t maxMemory, int priority, int stackSize)

ADSpinnakerConfig("SP1", 24391576)

asynSetTraceIOMask(SP1, 0, 2)

# Set ASYN_TRACE_WARNING and ASYN_TRACE_ERROR

#asynSetTraceMask($(PORT), 0, 0xff)

#asynSetTraceFile($(PORT), 0, "asynTrace.out")

#asynSetTraceInfoMask($(PORT), 0, 0xf)

# Main database.  This just loads and modifies ADBase.template

dbLoadRecords("/opt/epics/synApps_6_3/support/areaDetector-master/ADSpinnaker/db/spinnaker.template", "P=18ID:FLIR:,R=cam1:,PORT=SP1")

# Load the autogenerated file of GenICam features

dbLoadRecords("/opt/epics/synApps_6_3/support/areaDetector-master/ADGenICam/db/FLIR-BFS-PGE-23S6C.template", "P=18ID:FLIR:,R=cam1:,PORT=SP1")

# Transport diagnostics

#dbLoadRecords("$(ADSPINNAKER)/db/spinnakerIntReadback.template", "P=$(PREFIX),R=cam1:,PORT=$(PORT),PROP=TransmitFailureCount,PN=SP_TRANSMIT_FAILURE_COUNT")

#dbLoadRecords("$(ADSPINNAKER)/db/spinnakerIntReadback.template", "P=$(PREFIX),R=cam1:,PORT=$(PORT),PROP=BufferUnderrunCount, PN=SP_BUFFER_UNDERRUN_COUNT")

#dbLoadRecords("$(ADSPINNAKER)/db/spinnakerIntReadback.template", "P=$(PREFIX),R=cam1:,PORT=$(PORT),PROP=FailedBufferCount,   PN=SP_FAILED_BUFFER_COUNT")

#dbLoadRecords("$(ADSPINNAKER)/db/spinnakerIntReadback.template", "P=$(PREFIX),R=cam1:,PORT=$(PORT),PROP=FailedPacketCount,   PN=SP_FAILED_PACKET_COUNT")

# Create a standard arrays plugin

NDStdArraysConfigure("Image1", 5, 0, "SP1", 0, 0)

# Use this line for 8-bit data only

#dbLoadRecords("$(ADCORE)/db/NDStdArrays.template", "P=$(PREFIX),R=image1:,PORT=Image1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=$(PORT),TYPE=Int8,FTVL=CHAR,NELEMENTS=$(NELEMENTS)")

# Use this line for 8-bit or 16-bit data

dbLoadRecords("/opt/epics/synApps_6_3/support/areaDetector-master/ADCore/db/NDStdArrays.template", "P=18ID:FLIR:,R=image1:,PORT=Image1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=SP1,TYPE=Int16,FTVL=SHORT,NELEMENTS=6220800")

# Load all other plugins using commonPlugins.cmd

< /opt/epics/synApps_6_3/support/areaDetector-master/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", 2000, 0, "SP1", 0)

dbLoadRecords("NDFileNetCDF.template","P=18ID:FLIR:,R=netCDF1:,PORT=FileNetCDF1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=SP1")

# Create a TIFF file saving plugin

NDFileTIFFConfigure("FileTIFF1", 2000, 0, "SP1", 0)

dbLoadRecords("NDFileTIFF.template",  "P=18ID:FLIR:,R=TIFF1:,PORT=FileTIFF1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=SP1")

# Create a JPEG file saving plugin

NDFileJPEGConfigure("FileJPEG1", 2000, 0, "SP1", 0)

dbLoadRecords("NDFileJPEG.template",  "P=18ID:FLIR:,R=JPEG1:,PORT=FileJPEG1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=SP1")

# Create a NeXus file saving plugin

NDFileNexusConfigure("FileNexus1", 2000, 0, "SP1", 0)

dbLoadRecords("NDFileNexus.template", "P=18ID:FLIR:,R=Nexus1:,PORT=FileNexus1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=SP1")

# Create an HDF5 file saving plugin

NDFileHDF5Configure("FileHDF1", 2000, 0, "SP1", 0)

dbLoadRecords("NDFileHDF5.template",  "P=18ID:FLIR:,R=HDF1:,PORT=FileHDF1,ADDR=0,TIMEOUT=1,XMLSIZE=2048,NDARRAY_PORT=SP1")

# 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", 2000, 0, "SP1", 0, 0, 0, 0, 0, 5)

dbLoadRecords("NDROI.template",       "P=18ID:FLIR:,R=ROI1:,  PORT=ROI1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=SP1")

NDROIConfigure("ROI2", 2000, 0, "SP1", 0, 0, 0, 0, 0, 5)

dbLoadRecords("NDROI.template",       "P=18ID:FLIR:,R=ROI2:,  PORT=ROI2,ADDR=0,TIMEOUT=1,NDARRAY_PORT=SP1")

NDROIConfigure("ROI3", 2000, 0, "SP1", 0, 0, 0, 0, 0, 5)

dbLoadRecords("NDROI.template",       "P=18ID:FLIR:,R=ROI3:,  PORT=ROI3,ADDR=0,TIMEOUT=1,NDARRAY_PORT=SP1")

NDROIConfigure("ROI4", 2000, 0, "SP1", 0, 0, 0, 0, 0, 5)

dbLoadRecords("NDROI.template",       "P=18ID:FLIR:,R=ROI4:,  PORT=ROI4,ADDR=0,TIMEOUT=1,NDARRAY_PORT=SP1")

# Create 8 ROIStat plugins

NDROIStatConfigure("ROISTAT1", 2000, 0, "SP1", 0, 8, 0, 0, 0, 0, 5)

dbLoadRecords("NDROIStat.template",   "P=18ID:FLIR:,R=ROIStat1:  ,PORT=ROISTAT1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=SP1,NCHANS=2048")

dbLoadRecords("NDROIStatN.template",  "P=18ID:FLIR:,R=ROIStat1:1:,PORT=ROISTAT1,ADDR=0,TIMEOUT=1,NCHANS=2048")

dbLoadRecords("NDROIStatN.template",  "P=18ID:FLIR:,R=ROIStat1:2:,PORT=ROISTAT1,ADDR=1,TIMEOUT=1,NCHANS=2048")

dbLoadRecords("NDROIStatN.template",  "P=18ID:FLIR:,R=ROIStat1:3:,PORT=ROISTAT1,ADDR=2,TIMEOUT=1,NCHANS=2048")

dbLoadRecords("NDROIStatN.template",  "P=18ID:FLIR:,R=ROIStat1:4:,PORT=ROISTAT1,ADDR=3,TIMEOUT=1,NCHANS=2048")

dbLoadRecords("NDROIStatN.template",  "P=18ID:FLIR:,R=ROIStat1:5:,PORT=ROISTAT1,ADDR=4,TIMEOUT=1,NCHANS=2048")

dbLoadRecords("NDROIStatN.template",  "P=18ID:FLIR:,R=ROIStat1:6:,PORT=ROISTAT1,ADDR=5,TIMEOUT=1,NCHANS=2048")

dbLoadRecords("NDROIStatN.template",  "P=18ID:FLIR:,R=ROIStat1:7:,PORT=ROISTAT1,ADDR=6,TIMEOUT=1,NCHANS=2048")

dbLoadRecords("NDROIStatN.template",  "P=18ID:FLIR:,R=ROIStat1:8:,PORT=ROISTAT1,ADDR=7,TIMEOUT=1,NCHANS=2048")

# Create a processing plugin

NDProcessConfigure("PROC1", 2000, 0, "SP1", 0, 0, 0)

dbLoadRecords("NDProcess.template",   "P=18ID:FLIR:,R=Proc1:,  PORT=PROC1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=SP1")

# Create a TIFF file plugin to read dark and flatfield images into the processing plugin

NDFileTIFFConfigure("PROC1TIFF", 2000, 0, "SP1", 0)

dbLoadRecords("NDFileTIFF.template",  "P=18ID:FLIR:,R=Proc1:TIFF:,PORT=PROC1TIFF,ADDR=0,TIMEOUT=1,NDARRAY_PORT=SP1")

# Create a scatter plugin

NDScatterConfigure("SCATTER1", 2000, 0, "SP1", 0, 0, 0)

dbLoadRecords("NDScatter.template",   "P=18ID:FLIR:,R=Scatter1:,  PORT=SCATTER1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=SP1")

# Create a gather plugin with 8 ports

NDGatherConfigure("GATHER1", 2000, 0, 8, 0, 0)

dbLoadRecords("NDGather.template",   "P=18ID:FLIR:,R=Gather1:, PORT=GATHER1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=SP1")

dbLoadRecords("NDGatherN.template",   "P=18ID:FLIR:,R=Gather1:, N=1, PORT=GATHER1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=SP1")

dbLoadRecords("NDGatherN.template",   "P=18ID:FLIR:,R=Gather1:, N=2, PORT=GATHER1,ADDR=1,TIMEOUT=1,NDARRAY_PORT=SP1")

dbLoadRecords("NDGatherN.template",   "P=18ID:FLIR:,R=Gather1:, N=3, PORT=GATHER1,ADDR=2,TIMEOUT=1,NDARRAY_PORT=SP1")

dbLoadRecords("NDGatherN.template",   "P=18ID:FLIR:,R=Gather1:, N=4, PORT=GATHER1,ADDR=3,TIMEOUT=1,NDARRAY_PORT=SP1")

dbLoadRecords("NDGatherN.template",   "P=18ID:FLIR:,R=Gather1:, N=5, PORT=GATHER1,ADDR=4,TIMEOUT=1,NDARRAY_PORT=SP1")

dbLoadRecords("NDGatherN.template",   "P=18ID:FLIR:,R=Gather1:, N=6, PORT=GATHER1,ADDR=5,TIMEOUT=1,NDARRAY_PORT=SP1")

dbLoadRecords("NDGatherN.template",   "P=18ID:FLIR:,R=Gather1:, N=7, PORT=GATHER1,ADDR=6,TIMEOUT=1,NDARRAY_PORT=SP1")

dbLoadRecords("NDGatherN.template",   "P=18ID:FLIR:,R=Gather1:, N=8, PORT=GATHER1,ADDR=7,TIMEOUT=1,NDARRAY_PORT=SP1")

# Create 5 statistics plugins

NDStatsConfigure("STATS1", 2000, 0, "SP1", 0, 0, 0, 0, 0, 5)

dbLoadRecords("NDStats.template",     "P=18ID:FLIR:,R=Stats1:,  PORT=STATS1,ADDR=0,TIMEOUT=1,HIST_SIZE=256,XSIZE=1920,YSIZE=1080,NCHANS=2048,NDARRAY_PORT=SP1")

NDTimeSeriesConfigure("STATS1_TS", 2000, 0, "STATS1", 1, 23)

dbLoadRecords("/opt/epics/synApps_6_3/support/areaDetector-master/ADCore/db/NDTimeSeries.template",  "P=18ID:FLIR:,R=Stats1:TS:, PORT=STATS1_TS,ADDR=0,TIMEOUT=1,NDARRAY_PORT=STATS1,NDARRAY_ADDR=1,NCHANS=2048,ENABLED=1")

NDStatsConfigure("STATS2", 2000, 0, "ROI1",    0, 0, 0, 0, 0, 5)

dbLoadRecords("NDStats.template",     "P=18ID:FLIR:,R=Stats2:,  PORT=STATS2,ADDR=0,TIMEOUT=1,HIST_SIZE=256,XSIZE=1920,YSIZE=1080,NCHANS=2048,NDARRAY_PORT=SP1")

NDTimeSeriesConfigure("STATS2_TS", 2000, 0, "STATS2", 1, 23)

dbLoadRecords("/opt/epics/synApps_6_3/support/areaDetector-master/ADCore/db/NDTimeSeries.template",  "P=18ID:FLIR:,R=Stats2:TS:, PORT=STATS2_TS,ADDR=0,TIMEOUT=1,NDARRAY_PORT=STATS2,NDARRAY_ADDR=1,NCHANS=2048,ENABLED=1")

NDStatsConfigure("STATS3", 2000, 0, "ROI2",    0, 0, 0, 0, 0, 5)

dbLoadRecords("NDStats.template",     "P=18ID:FLIR:,R=Stats3:,  PORT=STATS3,ADDR=0,TIMEOUT=1,HIST_SIZE=256,XSIZE=1920,YSIZE=1080,NCHANS=2048,NDARRAY_PORT=SP1")

NDTimeSeriesConfigure("STATS3_TS", 2000, 0, "STATS3", 1, 23)

dbLoadRecords("/opt/epics/synApps_6_3/support/areaDetector-master/ADCore/db/NDTimeSeries.template",  "P=18ID:FLIR:,R=Stats3:TS:, PORT=STATS3_TS,ADDR=0,TIMEOUT=1,NDARRAY_PORT=STATS3,NDARRAY_ADDR=1,NCHANS=2048,ENABLED=1")

NDStatsConfigure("STATS4", 2000, 0, "ROI3",    0, 0, 0, 0, 0, 5)

dbLoadRecords("NDStats.template",     "P=18ID:FLIR:,R=Stats4:,  PORT=STATS4,ADDR=0,TIMEOUT=1,HIST_SIZE=256,XSIZE=1920,YSIZE=1080,NCHANS=2048,NDARRAY_PORT=SP1")

NDTimeSeriesConfigure("STATS4_TS", 2000, 0, "STATS4", 1, 23)

dbLoadRecords("/opt/epics/synApps_6_3/support/areaDetector-master/ADCore/db/NDTimeSeries.template",  "P=18ID:FLIR:,R=Stats4:TS:, PORT=STATS4_TS,ADDR=0,TIMEOUT=1,NDARRAY_PORT=STATS4,NDARRAY_ADDR=1,NCHANS=2048,ENABLED=1")

NDStatsConfigure("STATS5", 2000, 0, "ROI4",    0, 0, 0, 0, 0, 5)

dbLoadRecords("NDStats.template",     "P=18ID:FLIR:,R=Stats5:,  PORT=STATS5,ADDR=0,TIMEOUT=1,HIST_SIZE=256,XSIZE=1920,YSIZE=1080,NCHANS=2048,NDARRAY_PORT=SP1")

NDTimeSeriesConfigure("STATS5_TS", 2000, 0, "STATS5", 1, 23)

dbLoadRecords("/opt/epics/synApps_6_3/support/areaDetector-master/ADCore/db/NDTimeSeries.template",  "P=18ID:FLIR:,R=Stats5:TS:, PORT=STATS5_TS,ADDR=0,TIMEOUT=1,NDARRAY_PORT=STATS5,NDARRAY_ADDR=1,NCHANS=2048,ENABLED=1")

# Create a transform plugin

NDTransformConfigure("TRANS1", 2000, 0, "SP1", 0, 0, 0, 0, 0, 5)

dbLoadRecords("NDTransform.template", "P=18ID:FLIR:,R=Trans1:,  PORT=TRANS1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=SP1")

# Create an overlay plugin with 8 overlays

NDOverlayConfigure("OVER1", 2000, 0, "SP1", 0, 8, 0, 0, 0, 0, 5)

dbLoadRecords("NDOverlay.template", "P=18ID:FLIR:,R=Over1:, PORT=OVER1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=SP1")

dbLoadRecords("NDOverlayN.template","P=18ID:FLIR:,R=Over1:1:,NAME=ROI1,   SHAPE=1,O=Over1:,XPOS=18ID:FLIR:ROI1:MinX_RBV,YPOS=18ID:FLIR:ROI1:MinY_RBV,XSIZE=18ID:FLIR:ROI1:SizeX_RBV,YSIZE=18ID:FLIR:ROI1:SizeY_RBV,PORT=OVER1,ADDR=0,TIMEOUT=1")

dbLoadRecords("NDOverlayN.template","P=18ID:FLIR:,R=Over1:2:,NAME=ROI2,   SHAPE=1,O=Over1:,XPOS=18ID:FLIR:ROI2:MinX_RBV,YPOS=18ID:FLIR:ROI2:MinY_RBV,XSIZE=18ID:FLIR:ROI2:SizeX_RBV,YSIZE=18ID:FLIR:ROI2:SizeY_RBV,PORT=OVER1,ADDR=1,TIMEOUT=1")

dbLoadRecords("NDOverlayN.template","P=18ID:FLIR:,R=Over1:3:,NAME=ROI3,   SHAPE=1,O=Over1:,XPOS=18ID:FLIR:ROI3:MinX_RBV,YPOS=18ID:FLIR:ROI3:MinY_RBV,XSIZE=18ID:FLIR:ROI3:SizeX_RBV,YSIZE=18ID:FLIR:ROI3:SizeY_RBV,PORT=OVER1,ADDR=2,TIMEOUT=1")

dbLoadRecords("NDOverlayN.template","P=18ID:FLIR:,R=Over1:4:,NAME=ROI4,   SHAPE=1,O=Over1:,XPOS=18ID:FLIR:ROI4:MinX_RBV,YPOS=18ID:FLIR:ROI4:MinY_RBV,XSIZE=18ID:FLIR:ROI4:SizeX_RBV,YSIZE=18ID:FLIR:ROI4:SizeY_RBV,PORT=OVER1,ADDR=3,TIMEOUT=1")

dbLoadRecords("NDOverlayN.template","P=18ID:FLIR:,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=18ID:FLIR:,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=18ID:FLIR:,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=18ID:FLIR:,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", 2000, 0, "SP1", 0, 0, 0, 0, 0, 5)

dbLoadRecords("NDColorConvert.template", "P=18ID:FLIR:,R=CC1:,  PORT=CC1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=SP1")

NDColorConvertConfigure("CC2", 2000, 0, "SP1", 0, 0, 0, 0, 0, 5)

dbLoadRecords("NDColorConvert.template", "P=18ID:FLIR:,R=CC2:,  PORT=CC2,ADDR=0,TIMEOUT=1,NDARRAY_PORT=SP1")

# Create a circular buffer plugin

NDCircularBuffConfigure("CB1", 2000, 0, "SP1", 0, 500, 0)

dbLoadRecords("NDCircularBuff.template", "P=18ID:FLIR:,R=CB1:,  PORT=CB1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=SP1")

# Create an NDAttribute plugin with 8 attributes

NDAttrConfigure("ATTR1", 2000, 0, "SP1", 0, 8, 0, 0, 0)

dbLoadRecords("NDAttribute.template",  "P=18ID:FLIR:,R=Attr1:,    PORT=ATTR1,ADDR=0,TIMEOUT=1,NCHANS=2048,NDARRAY_PORT=SP1")

dbLoadRecords("NDAttributeN.template", "P=18ID:FLIR:,R=Attr1:1:,  PORT=ATTR1,ADDR=0,TIMEOUT=1,NCHANS=2048")

dbLoadRecords("NDAttributeN.template", "P=18ID:FLIR:,R=Attr1:2:,  PORT=ATTR1,ADDR=1,TIMEOUT=1,NCHANS=2048")

dbLoadRecords("NDAttributeN.template", "P=18ID:FLIR:,R=Attr1:3:,  PORT=ATTR1,ADDR=2,TIMEOUT=1,NCHANS=2048")

dbLoadRecords("NDAttributeN.template", "P=18ID:FLIR:,R=Attr1:4:,  PORT=ATTR1,ADDR=3,TIMEOUT=1,NCHANS=2048")

dbLoadRecords("NDAttributeN.template", "P=18ID:FLIR:,R=Attr1:5:,  PORT=ATTR1,ADDR=4,TIMEOUT=1,NCHANS=2048")

dbLoadRecords("NDAttributeN.template", "P=18ID:FLIR:,R=Attr1:6:,  PORT=ATTR1,ADDR=5,TIMEOUT=1,NCHANS=2048")

dbLoadRecords("NDAttributeN.template", "P=18ID:FLIR:,R=Attr1:7:,  PORT=ATTR1,ADDR=6,TIMEOUT=1,NCHANS=2048")

dbLoadRecords("NDAttributeN.template", "P=18ID:FLIR:,R=Attr1:8:,  PORT=ATTR1,ADDR=7,TIMEOUT=1,NCHANS=2048")

NDTimeSeriesConfigure("ATTR1_TS", 2000, 0, "ATTR1", 1, 8)

dbLoadRecords("/opt/epics/synApps_6_3/support/areaDetector-master/ADCore/db/NDTimeSeries.template",  "P=18ID:FLIR:,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", 2000, 0, "SP1", 0, 0, 0, 0, 0, 5)

dbLoadRecords("NDFFT.template", "P=18ID:FLIR:, R=FFT1:, PORT=FFT1, ADDR=0, TIMEOUT=1, NDARRAY_PORT=SP1, NAME=FFT1, NCHANS=1920")

# Create 2 Codec plugins

NDCodecConfigure("CODEC1", 2000, 0, "SP1", 0, 0, 0, 0, 0, 5)

dbLoadRecords("NDCodec.template", "P=18ID:FLIR:, R=Codec1:, PORT=CODEC1, ADDR=0, TIMEOUT=1, NDARRAY_PORT=SP1")

NDCodecConfigure("CODEC2", 2000, 0, "SP1", 0, 0, 0, 0, 0, 5)

dbLoadRecords("NDCodec.template", "P=18ID:FLIR:, R=Codec2:, PORT=CODEC2, ADDR=0, TIMEOUT=1, NDARRAY_PORT=SP1")

# Create a bad pixel plugin

NDBadPixelConfigure("BADPIX1", 2000, 0, "SP1", 0, 0, 0, 0, 0, 5)

dbLoadRecords("NDBadPixel.template", "P=18ID:FLIR:, R=BadPix1:, PORT=BADPIX1, ADDR=0, TIMEOUT=1, NDARRAY_PORT=SP1")

# Load NDPluginPva plugin

NDPvaConfigure("PVA1", 2000, 0, "SP1", 0, 18ID:FLIR:Pva1:Image, 0, 0, 0)

dbLoadRecords("NDPva.template",  "P=18ID:FLIR:,R=Pva1:, PORT=PVA1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=SP1")

#Must start PVA server if this is enabled

startPVAServer

2025-08-14T10:17:39.586 Using dynamically assigned TCP port 59963.

set_requestfile_path("./")

set_requestfile_path("/opt/epics/synApps_6_3/support/areaDetector-master/ADCore/db")

set_requestfile_path("/opt/epics/synApps_6_3/support/areaDetector-master/ADCore/iocBoot")

set_requestfile_path("/opt/epics/synApps_6_3/support/autosave-R5-11/db")

set_requestfile_path("/opt/epics/synApps_6_3/support/calc-R3-7-5/db")

set_savefile_path("./autosave")

set_pass0_restoreFile("auto_settings.sav")

set_pass1_restoreFile("auto_settings.sav")

save_restoreSet_status_prefix("18ID:FLIR:")

dbLoadRecords("/opt/epics/synApps_6_3/support/autosave-R5-11/db/save_restoreStatus.db", "P=18ID:FLIR:")

dbLoadRecords("/opt/epics/synApps_6_3/support/autosave-R5-11/db/configMenu.db", "P=18ID:FLIR:, CONFIG=ADAutoSave")

# 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)")

#set_requestfile_path("$(FFMPEGSERVER)/db")

# 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)/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)/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)/db")

# Optional: load scan records

#dbLoadRecords("$(SSCAN)/db/scan.db", "P=$(PREFIX),MAXPTS1=2000,MAXPTS2=200,MAXPTS3=20,MAXPTS4=10,MAXPTSH=10")

#set_requestfile_path("$(SSCAN)/db")

# Optional: load sseq record for acquisition sequence

#dbLoadRecords("$(CALC)/db/sseqRecord.db", "P=$(PREFIX), S=AcquireSequence")

#set_requestfile_path("$(CALC)/db")

# Optional: load devIocStats records (requires DEVIOCSTATS module)

#dbLoadRecords("$(DEVIOCSTATS)/db/iocAdminSoft.db", "IOC=$(PREFIX)")

# Optional: load alive record (requires ALIVE module)

#dbLoadRecords("$(ALIVE)/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("/opt/epics/synApps_6_3/support/areaDetector-master/ADGenICam/GenICamApp/Db")

set_requestfile_path("/opt/epics/synApps_6_3/support/areaDetector-master/ADSpinnaker/spinnakerApp/Db")

set_requestfile_path("/opt/epics/synApps_6_3/support/areaDetector-master/ADCore/iocBoot")

set_requestfile_path("/opt/epics/synApps_6_3/support/areaDetector-master/ADCore/ADApp/Db")

# Optional: load ffmpegServer plugin

ffmpegServerConfigure(8081)

Starting server on port 8081...

Null httpd 0.5.1

Binding to 'http://any:8081/'...OK.

OK

ffmpegStreamConfigure("FfmStream1", 2, 0, "SP1", 0, -1, 0)

dbLoadRecords("/opt/epics/synApps_6_3/support/areaDetector-master/ffmpegServer/db/ffmpegStream.template", "P=18ID:FLIR:,R=ffmstream1:,PORT=FfmStream1,NDARRAY_PORT=SP1")

#ffmpegFileConfigure("FfmFile1", 16, 0, "$(PORT)", 0, -1, 0)

#dbLoadRecords("$(FFMPEGSERVER)/db/ffmpegFile.template", "P=$(PREFIX),R=ffmfile1:,PORT=FfmFile1,NDARRAY_PORT=$(PORT)")

set_requestfile_path("/opt/epics/synApps_6_3/support/areaDetector-master/ffmpegServer/db")

iocInit()

Starting iocInit

############################################################################

## EPICS R7.0.8

## Rev. 2024-03-01T16:24-0600

## Rev. Date build date/time:

############################################################################

drvStreamInit: Warning! STREAM_PROTOCOL_PATH not set.

7 PVs had no saved value.

7 PVs had no saved value.

cas WARNING: Configured TCP port was unavailable.

cas WARNING: Using dynamically assigned TCP port 43937,

cas WARNING: but now two or more servers share the same UDP port.

cas WARNING: Depending on your IP kernel this server may not be

cas WARNING: reachable with UDP unicast (a host's IP in EPICS_CA_ADDR_LIST)

iocRun: All initialization complete

# save things every thirty seconds

create_monitor_set("auto_settings.req", 30,"P=18ID:FLIR:")

# Wait for enum callbacks to complete

epicsThreadSleep(1.0)

# Wait for callbacks on the property limits (DRVL, DRVH) to complete

epicsThreadSleep(1.0)

save_restore: connect failed for channel '18ID:FLIR:cam1:GC_BlackLevelAuto'

save_restore: connect failed for channel '18ID:FLIR:cam1:GC_SaturationEnabled'

save_restore: connect failed for channel '18ID:FLIR:cam1:GC_GammaEnabled'

save_restore: connect failed for channel '18ID:FLIR:cam1:GC_Sharpness'

save_restore: connect failed for channel '18ID:FLIR:cam1:GC_SharpnessAuto'

save_restore: connect failed for channel '18ID:FLIR:cam1:GC_SharpnessEnabled'

save_restore: connect failed for channel '18ID:FLIR:cam1:GC_TriDelayEnabled'

auto_settings.sav: 2391 of 2398 PV's connected

 

----
Jesse Hopkins, PhD (he/him)
Director, BioCAT

Sector 18, Advanced Photon Source

Research Associate Professor, Illinois Tech

Attachment: Screenshot 2025-08-14 at 10.25.16 AM.png
Description: =?utf-8?B?U2NyZWVuc2hvdCAyMDI1LTA4LTE0IGF0IDEwLjI1LjE24oCvQU0ucG5n?=


Replies:
Re: Can't use BayerRG8 pixel format with ADSpinnaker Mark Rivers via Tech-talk
Re: Can't use BayerRG8 pixel format with ADSpinnaker Mark Rivers via Tech-talk

Navigate by Date:
Prev: Re: Mapping customised pva structures to epics v4 Normative Types and v3 PVs (channel access). Heinz Junkes via Tech-talk
Next: Re: Can't use BayerRG8 pixel format with ADSpinnaker Mark Rivers via Tech-talk
Index: 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024  <20252026 
Navigate by Thread:
Prev: Announcing linStat 1.0.0 Michael Davidsaver via Tech-talk
Next: Re: Can't use BayerRG8 pixel format with ADSpinnaker Mark Rivers via Tech-talk
Index: 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024  <20252026 
ANJ, 19 Mar 2026 · Home · News · About · Talk · Base · Modules · Extensions ·
· Distributions · Download · Documents · Links · Licensing ·