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: Re: [Ext]Re: Can't use BayerRG8 pixel format with ADSpinnaker
From: Mark Rivers via Tech-talk <[email protected]>
To: Jesse Hopkins <[email protected]>
Cc: Tech-Talk EPICS <[email protected]>
Date: Thu, 14 Aug 2025 19:40:11 +0000
Yes, I think that weird value for Lost Frames is either a bug in their SDK or in my driver. I should track it down.

Mark

Sent from my iPhone

On Aug 14, 2025, at 2:33 PM, Jesse Hopkins <[email protected]> wrote:



Hi Mark,

 

You’re right on both counts. Somehow I had just assumed that since all the camera feature displays were in GenICam that’s what I should use and I didn’t even check ADSpinnaker for a display.

 

I think the only other thing at this point is that now that I’m using the Spinnaker display it’s showing a “Lost frames” value in the status that seems to be always negative the value of to “Received packets” (see attached screenshot). I’m assuming this is a bug in the display or that these values aren’t supported for my particular camera, since based on the ImageJ viewer and the plugins I seem to be getting all the frames I expect.

 

As always thanks for the help!

 

All the best.

- Jesse

 

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

Sector 18, Advanced Photon Source

Research Associate Professor, Illinois Tech

 

From: Mark Rivers <[email protected]>
Date: Thursday, August 14, 2025 at 1:49
PM
To: Jesse Hopkins <[email protected]>
Cc: Tech-Talk EPICS <[email protected]>
Subject: [Ext]Re: Can't use BayerRG8 pixel format with ADSpinnaker

You are using the wrong medm screen. You should be using ADSpinnker.adl,  not ADGenICam which does not support ConvertPixelFormat.

 

Mark

 

Sent from my iPhone



On Aug 14, 2025, at 10:47AM, Jesse Hopkins via Tech-talk <[email protected]> wrote:



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

<Screenshot 2025-08-14 at 10.25.16AM.png>

<Screenshot 2025-08-14 at 2.27.36 PM.png>

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

Navigate by Date:
Prev: Re: Can't use BayerRG8 pixel format with ADSpinnaker Mark Rivers via Tech-talk
Next: Re: Mapping customised pva structures to epics v4 Normative Types and v3 PVs (channel access). Gabriel Fedel 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: Re: Can't use BayerRG8 pixel format with ADSpinnaker Mark Rivers via Tech-talk
Next: Compatibility issues between the Eurotherm 2000 series and the EPC3008 LONG FENG 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 ·