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  <20242025  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  <20242025 
<== Date ==> <== Thread ==>

Subject: Re: Driver for Eiger1 with SIMPLON 1.8.0
From: Rong Huang via Tech-talk <tech-talk at aps.anl.gov>
To: Mark Rivers <rivers at cars.uchicago.edu>
Cc: "tech-talk at aps.anl.gov" <tech-talk at aps.anl.gov>
Date: Tue, 25 Jun 2024 23:09:41 -0500
Hi Mark,

I tried (a) iocEiger1 using "eiger2.template", (b) iocEiger2, both have probably same IOC startup errors: cannot find parameters of:

 HV_RESET_TIME, THRESHOLD2, TRIGGER_START_DELAY, HV_RESET_TIME, THRESHOLD2, TRIGGER_START_DELAY, THRESHOLD1_ENABLE, THRESHOLD2_ENABLE, THRESHOLD_DIFF_ENABLE, HV_RESET, THRESHOLD1_ENABLE, THRESHOLD2_ENABLE, THRESHOLD_DIFF_ENABLE, EXT_GATE_MODE, EXT_GATE_MODE, HV_STATE

Wondering if that is because these parameters are not available in Eiger1 hardware (I can check it tomorrow)?
If that is the case, should we just remove these records from the template file (and to modify the medm adl file)?  (Or maybe roll back to 1.6.0 for now?)

I am attaching the iocEiger2 IOC startup printout in this email.

Thank you,
Rong

######## iocEiger2 IOC startup printout for eiger1 firmware release 2024.1 #######

/opt/epics/synApps/support/areaDetector-R3-13/ADEiger/iocs/eigerIOC/iocBoot/iocEiger2$ ./st_9M.cmd

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

< envPaths

epicsEnvSet("IOC","iocEiger2")

epicsEnvSet("TOP","/opt/epics/synApps-R6-2-1/support/areaDetector-R3-13/ADEiger/iocs/eigerIOC")

epicsEnvSet("ADEIGER","/opt/epics/synApps-R6-2-1/support/areaDetector-R3-13/ADEiger/iocs/eigerIOC/../..")

epicsEnvSet("SUPPORT","/opt/epics/synApps-R6-2-1/support")

epicsEnvSet("ASYN","/opt/epics/synApps-R6-2-1/support/asyn-R4-44-2")

epicsEnvSet("AREA_DETECTOR","/opt/epics/synApps-R6-2-1/support/areaDetector-R3-13")

epicsEnvSet("ADSUPPORT","/opt/epics/synApps-R6-2-1/support/areaDetector-R3-13/ADSupport")

epicsEnvSet("ADCORE","/opt/epics/synApps-R6-2-1/support/areaDetector-R3-13/ADCore")

epicsEnvSet("AUTOSAVE","/opt/epics/synApps-R6-2-1/support/autosave-R5-11")

epicsEnvSet("BUSY","/opt/epics/synApps-R6-2-1/support/busy-R1-7-4")

epicsEnvSet("CALC","/opt/epics/synApps-R6-2-1/support/calc-R3-7-5")

epicsEnvSet("SNCSEQ","/opt/epics/synApps-R6-2-1/support/seq-R2-2-9")

epicsEnvSet("SSCAN","/opt/epics/synApps-R6-2-1/support/sscan-R2-11-6")

epicsEnvSet("DEVIOCSTATS","/opt/epics/synApps-R6-2-1/support/iocStats-3-2-0")

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

errlogInit(20000)

dbLoadDatabase("/opt/epics/synApps-R6-2-1/support/areaDetector-R3-13/ADEiger/iocs/eigerIOC/dbd/eigerDetectorApp.dbd")

eigerDetectorApp_registerRecordDeviceDriver(pdbbase)

#epicsEnvSet("PREFIX", "13EIG2:")

epicsEnvSet("PREFIX", "21EIG2:")

epicsEnvSet("PORT",   "EIG")

epicsEnvSet("QSIZE",  "20")

epicsEnvSet("XSIZE",  "3110")

epicsEnvSet("YSIZE",  "3269")

epicsEnvSet("NCHANS", "2048")

epicsEnvSet("CBUFFS", "500")

# This is an Eiger2 500K

#epicsEnvSet("EIGERIP", "10.54.160.13")

epicsEnvSet("EIGERIP", "164.54.252.45")

epicsEnvSet("EPICS_DB_INCLUDE_PATH", "/opt/epics/synApps-R6-2-1/support/areaDetector-R3-13/ADCore/db:/opt/epics/synApps-R6-2-1/support/areaDetector-R3-13/ADEiger/iocs/eigerIOC/../../db")

epicsEnvSet("EPICS_CA_MAX_ARRAY_BYTES", "5000000")

eigerDetectorConfig("EIG", "164.54.252.45", 0, 0)

dbLoadRecords("/opt/epics/synApps-R6-2-1/support/areaDetector-R3-13/ADEiger/iocs/eigerIOC/../../db/eiger2.template", "P=21EIG2:,R=cam1:,PORT=EIG,ADDR=0,TIMEOUT=1")

# Debug

#asynSetTraceMask("$(PORT)", 0, 0x11)

# Create a standard arrays plugin

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

dbLoadRecords("/opt/epics/synApps-R6-2-1/support/areaDetector-R3-13/ADCore/db/NDStdArrays.template", "P=21EIG2:,R=image1:,PORT=Image1,ADDR=0,TIMEOUT=1,TYPE=Int32,FTVL=LONG,NELEMENTS=1096950, NDARRAY_PORT=EIG")

NDStdArraysConfigure("Image2", 5, 0, "EIG", 1, 0)

dbLoadRecords("/opt/epics/synApps-R6-2-1/support/areaDetector-R3-13/ADCore/db/NDStdArrays.template", "P=21EIG2:,R=image2:,PORT=Image2,ADDR=0,TIMEOUT=1,TYPE=Int32,FTVL=LONG,NELEMENTS=1096950, NDARRAY_PORT=EIG")

# Load all other plugins using commonPlugins.cmd

< /opt/epics/synApps-R6-2-1/support/areaDetector-R3-13/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, "EIG", 0)

dbLoadRecords("NDFileNetCDF.template","P=21EIG2:,R=netCDF1:,PORT=FileNetCDF1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=EIG")

# Create a TIFF file saving plugin

NDFileTIFFConfigure("FileTIFF1", 20, 0, "EIG", 0)

dbLoadRecords("NDFileTIFF.template",  "P=21EIG2:,R=TIFF1:,PORT=FileTIFF1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=EIG")

# Create a JPEG file saving plugin

NDFileJPEGConfigure("FileJPEG1", 20, 0, "EIG", 0)

dbLoadRecords("NDFileJPEG.template",  "P=21EIG2:,R=JPEG1:,PORT=FileJPEG1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=EIG")

# Create a NeXus file saving plugin

NDFileNexusConfigure("FileNexus1", 20, 0, "EIG", 0)

dbLoadRecords("NDFileNexus.template", "P=21EIG2:,R=Nexus1:,PORT=FileNexus1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=EIG")

# Create an HDF5 file saving plugin

NDFileHDF5Configure("FileHDF1", 20, 0, "EIG", 0)

dbLoadRecords("NDFileHDF5.template",  "P=21EIG2:,R=HDF1:,PORT=FileHDF1,ADDR=0,TIMEOUT=1,XMLSIZE=2048,NDARRAY_PORT=EIG")

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

dbLoadRecords("NDROI.template",       "P=21EIG2:,R=ROI1:,  PORT=ROI1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=EIG")

NDROIConfigure("ROI2", 20, 0, "EIG", 0, 0, 0, 0, 0, 5)

dbLoadRecords("NDROI.template",       "P=21EIG2:,R=ROI2:,  PORT=ROI2,ADDR=0,TIMEOUT=1,NDARRAY_PORT=EIG")

NDROIConfigure("ROI3", 20, 0, "EIG", 0, 0, 0, 0, 0, 5)

dbLoadRecords("NDROI.template",       "P=21EIG2:,R=ROI3:,  PORT=ROI3,ADDR=0,TIMEOUT=1,NDARRAY_PORT=EIG")

NDROIConfigure("ROI4", 20, 0, "EIG", 0, 0, 0, 0, 0, 5)

dbLoadRecords("NDROI.template",       "P=21EIG2:,R=ROI4:,  PORT=ROI4,ADDR=0,TIMEOUT=1,NDARRAY_PORT=EIG")

# Create 8 ROIStat plugins

NDROIStatConfigure("ROISTAT1", 20, 0, "EIG", 0, 8, 0, 0, 0, 0, 5)

dbLoadRecords("NDROIStat.template",   "P=21EIG2:,R=ROIStat1:  ,PORT=ROISTAT1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=EIG,NCHANS=2048")

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

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

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

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

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

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

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

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

# Create a processing plugin

NDProcessConfigure("PROC1", 20, 0, "EIG", 0, 0, 0)

dbLoadRecords("NDProcess.template",   "P=21EIG2:,R=Proc1:,  PORT=PROC1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=EIG")

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

NDFileTIFFConfigure("PROC1TIFF", 20, 0, "EIG", 0)

dbLoadRecords("NDFileTIFF.template",  "P=21EIG2:,R=Proc1:TIFF:,PORT=PROC1TIFF,ADDR=0,TIMEOUT=1,NDARRAY_PORT=EIG")

# Create a scatter plugin

NDScatterConfigure("SCATTER1", 20, 0, "EIG", 0, 0, 0)

dbLoadRecords("NDScatter.template",   "P=21EIG2:,R=Scatter1:,  PORT=SCATTER1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=EIG")

# Create a gather plugin with 8 ports

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

dbLoadRecords("NDGather.template",   "P=21EIG2:,R=Gather1:, PORT=GATHER1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=EIG")

dbLoadRecords("NDGatherN.template",   "P=21EIG2:,R=Gather1:, N=1, PORT=GATHER1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=EIG")

dbLoadRecords("NDGatherN.template",   "P=21EIG2:,R=Gather1:, N=2, PORT=GATHER1,ADDR=1,TIMEOUT=1,NDARRAY_PORT=EIG")

dbLoadRecords("NDGatherN.template",   "P=21EIG2:,R=Gather1:, N=3, PORT=GATHER1,ADDR=2,TIMEOUT=1,NDARRAY_PORT=EIG")

dbLoadRecords("NDGatherN.template",   "P=21EIG2:,R=Gather1:, N=4, PORT=GATHER1,ADDR=3,TIMEOUT=1,NDARRAY_PORT=EIG")

dbLoadRecords("NDGatherN.template",   "P=21EIG2:,R=Gather1:, N=5, PORT=GATHER1,ADDR=4,TIMEOUT=1,NDARRAY_PORT=EIG")

dbLoadRecords("NDGatherN.template",   "P=21EIG2:,R=Gather1:, N=6, PORT=GATHER1,ADDR=5,TIMEOUT=1,NDARRAY_PORT=EIG")

dbLoadRecords("NDGatherN.template",   "P=21EIG2:,R=Gather1:, N=7, PORT=GATHER1,ADDR=6,TIMEOUT=1,NDARRAY_PORT=EIG")

dbLoadRecords("NDGatherN.template",   "P=21EIG2:,R=Gather1:, N=8, PORT=GATHER1,ADDR=7,TIMEOUT=1,NDARRAY_PORT=EIG")

# Create 5 statistics plugins

NDStatsConfigure("STATS1", 20, 0, "EIG", 0, 0, 0, 0, 0, 5)

dbLoadRecords("NDStats.template",     "P=21EIG2:,R=Stats1:,  PORT=STATS1,ADDR=0,TIMEOUT=1,HIST_SIZE=256,XSIZE=3110,YSIZE=3269,NCHANS=2048,NDARRAY_PORT=EIG")

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

dbLoadRecords("/opt/epics/synApps-R6-2-1/support/areaDetector-R3-13/ADCore/db/NDTimeSeries.template",  "P=21EIG2:,R=Stats1:TS:, PORT=STATS1_TS,ADDR=0,TIMEOUT=1,NDARRAY_PORT=STATS1,NDARRAY_ADDR=1,NCHANS=2048,ENABLED=1")

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

dbLoadRecords("NDStats.template",     "P=21EIG2:,R=Stats2:,  PORT=STATS2,ADDR=0,TIMEOUT=1,HIST_SIZE=256,XSIZE=3110,YSIZE=3269,NCHANS=2048,NDARRAY_PORT=EIG")

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

dbLoadRecords("/opt/epics/synApps-R6-2-1/support/areaDetector-R3-13/ADCore/db/NDTimeSeries.template",  "P=21EIG2:,R=Stats2:TS:, PORT=STATS2_TS,ADDR=0,TIMEOUT=1,NDARRAY_PORT=STATS2,NDARRAY_ADDR=1,NCHANS=2048,ENABLED=1")

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

dbLoadRecords("NDStats.template",     "P=21EIG2:,R=Stats3:,  PORT=STATS3,ADDR=0,TIMEOUT=1,HIST_SIZE=256,XSIZE=3110,YSIZE=3269,NCHANS=2048,NDARRAY_PORT=EIG")

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

dbLoadRecords("/opt/epics/synApps-R6-2-1/support/areaDetector-R3-13/ADCore/db/NDTimeSeries.template",  "P=21EIG2:,R=Stats3:TS:, PORT=STATS3_TS,ADDR=0,TIMEOUT=1,NDARRAY_PORT=STATS3,NDARRAY_ADDR=1,NCHANS=2048,ENABLED=1")

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

dbLoadRecords("NDStats.template",     "P=21EIG2:,R=Stats4:,  PORT=STATS4,ADDR=0,TIMEOUT=1,HIST_SIZE=256,XSIZE=3110,YSIZE=3269,NCHANS=2048,NDARRAY_PORT=EIG")

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

dbLoadRecords("/opt/epics/synApps-R6-2-1/support/areaDetector-R3-13/ADCore/db/NDTimeSeries.template",  "P=21EIG2:,R=Stats4:TS:, PORT=STATS4_TS,ADDR=0,TIMEOUT=1,NDARRAY_PORT=STATS4,NDARRAY_ADDR=1,NCHANS=2048,ENABLED=1")

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

dbLoadRecords("NDStats.template",     "P=21EIG2:,R=Stats5:,  PORT=STATS5,ADDR=0,TIMEOUT=1,HIST_SIZE=256,XSIZE=3110,YSIZE=3269,NCHANS=2048,NDARRAY_PORT=EIG")

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

dbLoadRecords("/opt/epics/synApps-R6-2-1/support/areaDetector-R3-13/ADCore/db/NDTimeSeries.template",  "P=21EIG2:,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", 20, 0, "EIG", 0, 0, 0, 0, 0, 5)

dbLoadRecords("NDTransform.template", "P=21EIG2:,R=Trans1:,  PORT=TRANS1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=EIG")

# Create an overlay plugin with 8 overlays

NDOverlayConfigure("OVER1", 20, 0, "EIG", 0, 8, 0, 0, 0, 0, 5)

dbLoadRecords("NDOverlay.template", "P=21EIG2:,R=Over1:, PORT=OVER1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=EIG")

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

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

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

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

dbLoadRecords("NDOverlayN.template","P=21EIG2:,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=21EIG2:,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=21EIG2:,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=21EIG2:,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, "EIG", 0, 0, 0, 0, 0, 5)

dbLoadRecords("NDColorConvert.template", "P=21EIG2:,R=CC1:,  PORT=CC1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=EIG")

NDColorConvertConfigure("CC2", 20, 0, "EIG", 0, 0, 0, 0, 0, 5)

dbLoadRecords("NDColorConvert.template", "P=21EIG2:,R=CC2:,  PORT=CC2,ADDR=0,TIMEOUT=1,NDARRAY_PORT=EIG")

# Create a circular buffer plugin

NDCircularBuffConfigure("CB1", 20, 0, "EIG", 0, 500, 0)

dbLoadRecords("NDCircularBuff.template", "P=21EIG2:,R=CB1:,  PORT=CB1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=EIG")

# Create an NDAttribute plugin with 8 attributes

NDAttrConfigure("ATTR1", 20, 0, "EIG", 0, 8, 0, 0, 0)

dbLoadRecords("NDAttribute.template",  "P=21EIG2:,R=Attr1:,    PORT=ATTR1,ADDR=0,TIMEOUT=1,NCHANS=2048,NDARRAY_PORT=EIG")

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

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

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

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

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

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

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

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

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

dbLoadRecords("/opt/epics/synApps-R6-2-1/support/areaDetector-R3-13/ADCore/db/NDTimeSeries.template",  "P=21EIG2:,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, "EIG", 0, 0, 0, 0, 0, 5)

dbLoadRecords("NDFFT.template", "P=21EIG2:, R=FFT1:, PORT=FFT1, ADDR=0, TIMEOUT=1, NDARRAY_PORT=EIG, NAME=FFT1, NCHANS=3110")

# Create 2 Codec plugins

NDCodecConfigure("CODEC1", 20, 0, "EIG", 0, 0, 0, 0, 0, 5)

dbLoadRecords("NDCodec.template", "P=21EIG2:, R=Codec1:, PORT=CODEC1, ADDR=0, TIMEOUT=1, NDARRAY_PORT=EIG")

NDCodecConfigure("CODEC2", 20, 0, "EIG", 0, 0, 0, 0, 0, 5)

dbLoadRecords("NDCodec.template", "P=21EIG2:, R=Codec2:, PORT=CODEC2, ADDR=0, TIMEOUT=1, NDARRAY_PORT=EIG")

# Create a bad pixel plugin

NDBadPixelConfigure("BADPIX1", 20, 0, "EIG", 0, 0, 0, 0, 0, 5)

dbLoadRecords("NDBadPixel.template", "P=21EIG2:, R=BadPix1:, PORT=BADPIX1, ADDR=0, TIMEOUT=1, NDARRAY_PORT=EIG")

set_requestfile_path("./")

set_requestfile_path("/opt/epics/synApps-R6-2-1/support/areaDetector-R3-13/ADCore/db")

set_requestfile_path("/opt/epics/synApps-R6-2-1/support/areaDetector-R3-13/ADCore/iocBoot")

set_requestfile_path("/opt/epics/synApps-R6-2-1/support/autosave-R5-11/db")

set_savefile_path("./autosave")

set_pass0_restoreFile("auto_settings.sav")

set_pass1_restoreFile("auto_settings.sav")

save_restoreSet_status_prefix("21EIG2:")

dbLoadRecords("/opt/epics/synApps-R6-2-1/support/autosave-R5-11/db/save_restoreStatus.db", "P=21EIG2:")

dbLoadRecords("/opt/epics/synApps-R6-2-1/support/autosave-R5-11/db/configMenu.db", "P=21EIG2:, CONFIG=ADAutoSave")

# Load NDPluginPva plugin

NDPvaConfigure("PVA1", 20, 0, "EIG", 0, 21EIG2:Pva1:Image, 0, 0, 0)

dbLoadRecords("NDPva.template",  "P=21EIG2:,R=Pva1:, PORT=PVA1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=EIG")

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

#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-R6-2-1/support/areaDetector-R3-13/ADEiger/iocs/eigerIOC/../../eigerApp/Db")

# RH: remove error of "unable to open file sseq_settings.req. Exiting"

# trigger by "auto_settings.req" -> "commonPlugin_settings.req" -> "NDStats_settings.req"

# -> "sseq_settings.req".  https://epics.anl.gov/tech-talk/2020/msg00305.php

set_requestfile_path("/opt/epics/synApps-R6-2-1/support/calc-R3-7-5/calcApp/Db")

iocInit()

Starting iocInit

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

## EPICS R7.0.8

## Rev. 2024-04-05T14:18-0500

## Rev. Date build date/time: 

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

2024/06/25 22:33:40.431 asynPortDriver:drvUserCreate: addr=0, cannot find parameter HV_RESET_TIME

21EIG2:cam1:HVResetTime_RBV devAsynFloat64::initCommon drvUserCreate 

2024/06/25 22:33:40.431 asynPortDriver:drvUserCreate: addr=0, cannot find parameter THRESHOLD2

21EIG2:cam1:Threshold2Energy_RBV devAsynFloat64::initCommon drvUserCreate 

2024/06/25 22:33:40.431 asynPortDriver:drvUserCreate: addr=0, cannot find parameter TRIGGER_START_DELAY

21EIG2:cam1:TriggerStartDelay_RBV devAsynFloat64::initCommon drvUserCreate 

2024/06/25 22:33:40.435 asynPortDriver:drvUserCreate: addr=0, cannot find parameter HV_RESET_TIME

21EIG2:cam1:HVResetTime devAsynFloat64::initCommon drvUserCreate 

recGblRecordError: ao: init_record Error (514,11) PV: 21EIG2:cam1:HVResetTime

2024/06/25 22:33:40.435 asynPortDriver:drvUserCreate: addr=0, cannot find parameter THRESHOLD2

21EIG2:cam1:Threshold2Energy devAsynFloat64::initCommon drvUserCreate 

recGblRecordError: ao: init_record Error (514,11) PV: 21EIG2:cam1:Threshold2Energy

2024/06/25 22:33:40.435 asynPortDriver:drvUserCreate: addr=0, cannot find parameter TRIGGER_START_DELAY

21EIG2:cam1:TriggerStartDelay devAsynFloat64::initCommon drvUserCreate 

recGblRecordError: ao: init_record Error (514,11) PV: 21EIG2:cam1:TriggerStartDelay

2024/06/25 22:33:40.488 asynPortDriver:drvUserCreate: addr=0, cannot find parameter THRESHOLD1_ENABLE

21EIG2:cam1:Threshold1Enable_RBV devAsynInt32::initCommon drvUserCreate 

2024/06/25 22:33:40.488 asynPortDriver:drvUserCreate: addr=0, cannot find parameter THRESHOLD2_ENABLE

21EIG2:cam1:Threshold2Enable_RBV devAsynInt32::initCommon drvUserCreate 

2024/06/25 22:33:40.488 asynPortDriver:drvUserCreate: addr=0, cannot find parameter THRESHOLD_DIFF_ENABLE

21EIG2:cam1:ThresholdDiffEnable_RBV devAsynInt32::initCommon drvUserCreate 

2024/06/25 22:33:40.492 asynPortDriver:drvUserCreate: addr=0, cannot find parameter HV_RESET

21EIG2:cam1:HVReset devAsynInt32::initCommon drvUserCreate 

2024/06/25 22:33:40.492 asynPortDriver:drvUserCreate: addr=0, cannot find parameter THRESHOLD1_ENABLE

21EIG2:cam1:Threshold1Enable devAsynInt32::initCommon drvUserCreate 

2024/06/25 22:33:40.492 asynPortDriver:drvUserCreate: addr=0, cannot find parameter THRESHOLD2_ENABLE

21EIG2:cam1:Threshold2Enable devAsynInt32::initCommon drvUserCreate 

2024/06/25 22:33:40.492 asynPortDriver:drvUserCreate: addr=0, cannot find parameter THRESHOLD_DIFF_ENABLE

21EIG2:cam1:ThresholdDiffEnable devAsynInt32::initCommon drvUserCreate 

2024/06/25 22:33:40.541 asynPortDriver:drvUserCreate: addr=0, cannot find parameter EXT_GATE_MODE

21EIG2:cam1:ExtGateMode_RBV devAsynInt32::initCommon drvUserCreate 

2024/06/25 22:33:40.542 asynPortDriver:drvUserCreate: addr=0, cannot find parameter EXT_GATE_MODE

21EIG2:cam1:ExtGateMode devAsynInt32::initCommon drvUserCreate 

2024/06/25 22:33:40.557 asynPortDriver:drvUserCreate: addr=0, cannot find parameter HV_STATE

21EIG2:cam1:HVState_RBV devAsynOctet::initDrvUser drvUserCreate failed 

iocRun: All initialization complete

# Avoid deluge of messages when debugging

#dbpf $(PREFIX)cam1:PoolUsedMem.SCAN Passive

# save things every thirty seconds

create_monitor_set("auto_settings.req", 30, "P=21EIG2:")

epics> auto_settings.sav: 2380 of 2380 PV's connected




On Tue, Jun 25, 2024 at 9:22 PM Mark Rivers <rivers at cars.uchicago.edu> wrote:
Hi Rong,

I see the problem now.  You said:

  • Simply tried areaDetector-R3-13, iocEiger1, but it has IOC startup errors. I am not sure about the version of ADEiger, but likely a recent release on github.

I did not read that carefully.  The problem is that you should be using iocEiger2, not iocEiger1.  It loads eiger2.template, rather than eiger1.template.  eiger1.template contains the records for the Simplon 1.6.0 API, which are causing the error messages.  eiger2.template is for the 1.8.0 API, and adds more records which you will want for your detector.  You should also use eiger2Detector.xxx for your OPI screen, not eigerDetector.xxx.

Mark



From: Rong Huang <ronghuang at ls-cat.org>
Sent: Tuesday, June 25, 2024 5:02 PM
To: Mark Rivers <rivers at cars.uchicago.edu>
Cc: tech-talk at aps.anl.gov <tech-talk at aps.anl.gov>
Subject: Re: Driver for Eiger1 with SIMPLON 1.8.0
 
Hi Mark,

I started the medm GUI, and I found out the versions of other parts:

Firmware version:    release-2024.1
SDK version:            1.8.0
Driver version:          3.4.0
ADCore version:       3.13.0

(Detector) Model:     EIGER1 Si 9M

There are no blank fields in the "eigerDetector.al" window (but not sure about other windows).

Thanks,
Rong

On Tue, Jun 25, 2024 at 4:45 PM Rong Huang <ronghuang at ls-cat.org> wrote:
Hi Mark,

In my eigerDetector.cpp, line 61:

static const string DRIVER_VERSION("3.4.0");

Rong

On Tue, Jun 25, 2024 at 4:41 PM Mark Rivers <rivers at cars.uchicago.edu> wrote:

eigerApp/src/restApi.h defines the versions:

 

typedef enum {

  API_1_6_0,

  API_1_8_0

} eigerAPIVersion_t;

 

So API_1_6_0 = 0 and API_1_8_0=1.  The fact that you are getting 1 means it is returning the correct value.

 

I suspect you may have an old version of the driver, because as I said before the new version does not try to access parameters like LINK_0, etc. unless the detector is using API_1_6_0.

 

You need to figure out what version of the driver you are running.  There is a line that defines DRIVER_VERSION in eigerDetector.cpp:

 

static const string DRIVER_VERSION("3.4.0");

 

What does yours say?

 

If you are running a git clone then you can do

 

git status to find what version you are using.

 

Mark

 

From: Rong Huang <ronghuang at ls-cat.org>
Sent: Tuesday, June 25, 2024 4:34 PM
To: Mark Rivers <rivers at cars.uchicago.edu>
Cc: tech-talk at aps.anl.gov
Subject: Re: Driver for Eiger1 with SIMPLON 1.8.0

 

Hi Mark,

 

After "mAPIVersion = mApi.getAPIVersion();", I added "std::cout << "mAPIVersion: " << mAPIVersion << std::endl;" and the printout is:

 

mAPIVersion: 1

 

Not sure what else to check

 

Thanks,

Rong

 

 

On Tue, Jun 25, 2024 at 2:00PM Mark Rivers <rivers at cars.uchicago.edu> wrote:

The areaDetector driver works with Simplon 1.8.0.  See the screenshot here:

https://areadetector.github.io/areaDetector/ADEiger/eiger.html#medm-screens

 

The unknown parameters are only present in the Simplon 1.6, not 1.8.0.  The driver only tries to create those parameters if it thinks the detector is running Simplon 1.6.0.

https://github.com/areaDetector/ADEiger/blob/9603656227ba50007401f6dcc1b4c24fb977b9bf/eigerApp/src/eigerDetector.cpp#L352

 

I can think of 2 possible reasons for the error messages:

  • You are running an old version of the driver that did not do this test.
  • The driver is not correctly detecting that your detector is running the Simplon 1.8.0 API.

 

This is where it reads the API version:

https://github.com/areaDetector/ADEiger/blob/9603656227ba50007401f6dcc1b4c24fb977b9bf/eigerApp/src/eigerDetector.cpp#L197

 

You could add some debugging to see what value it is getting in that call.

 

Mark

 

 

 

 

From: Tech-talk <tech-talk-bounces at aps.anl.gov> On Behalf Of Rong Huang via Tech-talk
Sent: Tuesday, June 25, 2024 1:07 PM
To: tech-talk at aps.anl.gov
Subject: Driver for Eiger1 with SIMPLON 1.8.0

 

Hello,

 

We have an Eiger X Si 9M detector using SIMPLON 1.8.0, and we would like to use EPICS areaDetector driver. 

Simply tried areaDetector-R3-13, iocEiger1, but it has IOC startup errors. I am not sure about the version of ADEiger, but likely a recent release on github.

Should we roll back to SIMPLON 1.6? Or is there something I have overlooked during installation? Or the IOC startup errors can just be ignored? (cannot find parameters of DCU_BUF_FREE, CLEAR, LINK_0, LINK_1, LINK_2, LINK_3).

 

Thanks,

Rong



Replies:
Re: Driver for Eiger1 with SIMPLON 1.8.0 Rong Huang via Tech-talk
References:
Driver for Eiger1 with SIMPLON 1.8.0 Rong Huang via Tech-talk
RE: Driver for Eiger1 with SIMPLON 1.8.0 Mark Rivers via Tech-talk
Re: Driver for Eiger1 with SIMPLON 1.8.0 Rong Huang via Tech-talk
RE: Driver for Eiger1 with SIMPLON 1.8.0 Mark Rivers via Tech-talk
Re: Driver for Eiger1 with SIMPLON 1.8.0 Rong Huang via Tech-talk
Re: Driver for Eiger1 with SIMPLON 1.8.0 Rong Huang via Tech-talk
Re: Driver for Eiger1 with SIMPLON 1.8.0 Mark Rivers via Tech-talk

Navigate by Date:
Prev: Re: Driver for Eiger1 with SIMPLON 1.8.0 Mark Rivers via Tech-talk
Next: RE: Archiver Appliance PV by Policy Sky Brewer 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  <20242025 
Navigate by Thread:
Prev: Re: Driver for Eiger1 with SIMPLON 1.8.0 Mark Rivers via Tech-talk
Next: Re: Driver for Eiger1 with SIMPLON 1.8.0 Rong Huang 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  <20242025 
ANJ, 11 Sep 2024 Valid HTML 4.01! · Home · News · About · Base · Modules · Extensions · Distributions ·
· Download · Search · IRMIS · Talk · Documents · Links · Licensing ·