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> 2025 | 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> 2025 |
<== 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 |
/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
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.0Hi Mark,
I started the medm GUI, and I found out the versions of other parts:
Firmware version: release-2024.1SDK version: 1.8.0Driver version: 3.4.0ADCore 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:00 PM 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.
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:
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