From b82fb42136d6f9085b5e16bee3d7c9a1327e664d Mon Sep 17 00:00:00 2001 From: mwyman <mwyman@anl.gov> Date: Wed, 8 May 2024 06:31:34 -0500 Subject: [PATCH] Working through EPIC/pyDevice layer --- .loglogin | 1 + 100idPyApp/Db/pyDevCRL_stack.db | 8 +- 100idPyApp/Db/pyDevCRLsingle.db | 51 +- 100idPyApp/python/pyTransfocator_single.py | 54 +- iocBoot/ioc100idPyCRL/crl_setup.toml | 4 +- .../ioc100idPyCRL/examples/pydeviceCRL.cmd | 12 +- iocBoot/ioc100idPySBL/.iocsh_history | 974 ------------------ 7 files changed, 75 insertions(+), 1029 deletions(-) diff --git a/.loglogin b/.loglogin index 5a8fedd..630e8e5 100644 --- a/.loglogin +++ b/.loglogin @@ -22,3 +22,4 @@ 04/23/2024 - 06:16:23 - ravioli 05/01/2024 - 15:09:31 - ravioli 05/02/2024 - 05:57:36 - ravioli +05/07/2024 - 06:21:41 - ravioli diff --git a/100idPyApp/Db/pyDevCRL_stack.db b/100idPyApp/Db/pyDevCRL_stack.db index 758cdc6..25dd71f 100644 --- a/100idPyApp/Db/pyDevCRL_stack.db +++ b/100idPyApp/Db/pyDevCRL_stack.db @@ -1,5 +1,5 @@ record(dfanout, "$(P)CRL$(N):stack$(M)_dfanout"){ - field(DOL, "$(P)CRL$(N):filter_decode.$(DECODE) CP") + field(DOL, "$(P)CRL$(N):lens_decode.$(DECODE) CP") field(OMSL, "closed_loop") field(OUTA, "$(P)CRL$(N):stack$(M) PP") } @@ -41,8 +41,8 @@ record(ao, "$(P)CRL$(N):stack$(M)_ThickErr"){ record(dfanout, "$(P)CRL$(N):stack$(M)_BW_dfanout"){ field(OMSL, "closed_loop") field(DOL, "$(P)CRL$(N):stack$(M) CP") - field(OUTA, "$(P)CRL$(N):filter_encode.$(ENCODE)") -# field(FLNK, "$(P)CRL$(N):filter_encode PP") + field(OUTA, "$(P)CRL$(N):lens_encode.$(ENCODE)") +# field(FLNK, "$(P)CRL$(N):lens_encode PP") } record(bi, "$(P)CRL$(N):stack$(M)_RBV"){ @@ -55,7 +55,7 @@ record(bi, "$(P)CRL$(N):stack$(M)_RBV"){ record(dfanout, "$(P)CRL$(N):stack$(M)_RBV_dfanout"){ field(OMSL, "closed_loop") field(DOL, "$(P)CRL$(N):stack$(M)_RBV CP") - field(OUTA, "$(P)CRL$(N):filter_RBV_encode.$(ENCODE)") + field(OUTA, "$(P)CRL$(N):lens_RBV_encode.$(ENCODE)") } record(bo, "$(P)CRL$(N):stack$(M)_Lock"){ diff --git a/100idPyApp/Db/pyDevCRLsingle.db b/100idPyApp/Db/pyDevCRLsingle.db index 8b36ee4..6cb8807 100644 --- a/100idPyApp/Db/pyDevCRLsingle.db +++ b/100idPyApp/Db/pyDevCRLsingle.db @@ -1,4 +1,4 @@ -record(ao, "$(P)$(CRL)$(N):energy"){ +record(ao, "$(P)CRL$(N):energy"){ field(EGU, "keV") field(DOL, "$(KEV) CP") field(OMSL, "closed_loop") @@ -6,23 +6,23 @@ record(ao, "$(P)$(CRL)$(N):energy"){ field(OUT, "@$(OBJ).updateE('VAL')") } -record(ao, "$(P)$(CRL)$(N):focalSize"){ +record(ao, "$(P)CRL$(N):focalSize"){ field(EGU, "m") field(DTYP, "pydev") field(OUT, "@$(OBJ).updateFsize('VAL')") } -record(bo, "$(P)$(CRL)$(N):fSize_twk_up"){ +record(bo, "$(P)CRL$(N):fSize_twk_up"){ field(DTYP, "pydev") field(OUT, "@$(OBJ).tweakUp()") } -record(bo, "$(P)$(CRL)$(N):fSize_twk_dn"){ +record(bo, "$(P)CRL$(N):fSize_twk_dn"){ field(DTYP, "pydev") field(OUT, "@$(OBJ).tweakDn()") } -record(ao, "$(P)$(CRL)$(N):slitSize_H"){ +record(ao, "$(P)CRL$(N):slitSize_H"){ field(EGU, "m") field(DOL, "$(SLITH) CP") field(OMSL, "closed_loop") @@ -30,7 +30,7 @@ record(ao, "$(P)$(CRL)$(N):slitSize_H"){ field(OUT, "@$(OBJ).updateSlitSize('VAL', 'hor')") } -record(ao, "$(P)$(CRL)$(N):slitSize_V"){ +record(ao, "$(P)CRL$(N):slitSize_V"){ field(EGU, "m") field(DOL, "$(SLITV) CP") field(OMSL, "closed_loop") @@ -38,14 +38,14 @@ record(ao, "$(P)$(CRL)$(N):slitSize_V"){ field(OUT, "@$(OBJ).updateSlitSize('VAL', 'vert')") } -record(longin, "$(P)TF$(N):lenses") { +record(longin, "$(P)CRL$(N):lenses") { field(DTYP, "pydev") - field(INP, "@pydev.iointr('new_config_calcd')") + field(INP, "@pydev.iointr('new_lenses')") field(SCAN, "I/O Intr") } -record(transform, "$(P)$(CRL)$(N):lens_decode"){ - field(INPA, "$(P)$(CRL)$(N):lenses CP") +record(transform, "$(P)CRL$(N):lens_decode"){ + field(INPA, "$(P)CRL$(N):lenses CP") field(CLCB, "A % 2") field(CLCC, "(A >> 1) % 2") field(CLCD, "(A >> 2) % 2") @@ -60,12 +60,37 @@ record(transform, "$(P)$(CRL)$(N):lens_decode"){ field(CLCM, "(A >> 11) % 2") } -record(calcout, "$(P)$(CRL)$(N):lens_encode"){ - field(OUT, "$(P)$(CRL)$(N):lensConfig_BW PP") +record(calcout, "$(P)CRL$(N):lens_encode"){ + field(OUT, "$(P)CRL$(N):lensConfig_BW PP") field(CALC, "A+B*2+C*4+D*8+E*16+F*32+G*64+H*128+I*256+J*512+K*1024+L*2048") } -record(longout, "$(P)$(CRL)$(N):lensConfig_BW") { +record(longout, "$(P)CRL$(N):lensConfig_BW") { field(DTYP, "pydev") field(OUT, "@$(OBJ).updateConfig('VAL')") } + +record(longin, "$(P)CRL$(N):inMask_RBV") { + field(DTYP, "pydev") + field(INP, "@pydev.iointr('new_inMask')") + field(SCAN, "I/O Intr") +} + +record(longin, "$(P)CRL$(N):outMask_RBV") { + field(DTYP, "pydev") + field(INP, "@pydev.iointr('new_outMask')") + field(SCAN, "I/O Intr") +} + +record(ai, "$(P)CRL$(N):fSize_actual"){ + field(DTYP, "pydev") + field(INP, "@pydev.iointr('new_fSize')") + field(SCAN, "I/O Intr") + field(PREC, "5") +} + +record(longin, "$(P)CRL$(N):sortedIndex_RBV") { + field(DTYP, "pydev") + field(INP, "@pydev.iointr('new_index')") + field(SCAN, "I/O Intr") +} diff --git a/100idPyApp/python/pyTransfocator_single.py b/100idPyApp/python/pyTransfocator_single.py index 44611d4..54fa895 100644 --- a/100idPyApp/python/pyTransfocator_single.py +++ b/100idPyApp/python/pyTransfocator_single.py @@ -26,13 +26,11 @@ Beamline properties CRL properties d_min : Minimum thickness at the apex in m stack_d : Stack thickness in m -Slit properties ''' DEFAULT_CONFIG = {'beam':{'energy': 15, 'L_und': 4.7, 'sigmaH_e': 14.8e-6, 'sigmaV_e': 3.7e-6, 'sigmaHp_e': 2.8e-6, 'sigmaVp_e': 1.5e-6}, 'beam_line': {'d_StoL': 51.9, 'd_Stof': 66.2}, - 'crl':{'stack_d': 50.0e-3, 'd_min': 3.0e-5}, - 'slits':{}} + 'crl':{'stack_d': 50.0e-3, 'd_min': 3.0e-5}} """ pyDevice TO DO: @@ -317,11 +315,6 @@ class singleTF(): # Convert the lookup table to a dictionary for faster lookup self.Lens_diameter_dict = {int(col1): col2 for col1, col2 in Lens_diameter_table} - - # Initialize pre-CRL slit size - self.slit1_H = 500.0e-6 # H slit size before CRL 1 - self.slit1_V = 300.0e-6 # V slit size before CRL 1 - self.energy = 0 # gets value from an ao (incoming beam energy) self.focalSize = 0 # get value from an ao (desired focal length) self.lenses = 0 # sets integer (2^12) whose binary representation indicates which lenses are in or out @@ -377,14 +370,6 @@ class singleTF(): ''' self.d_min = crl_properties['d_min'] self.stack_d = crl_properties['stack_d'] - - def setupSlits(self, slit_properties): - ''' - Setting up properties of slits - ''' - #Default values - - pass def setLensCount(self, lensCount): self.numLens = @@ -513,6 +498,18 @@ class singleTF(): if self.verbose: print(f'Sorting culled lookup table of length {len(self.culledTable)}') self.sorted_index = np.argsort(self.culledTable) + def updateConfig(self, config_BW): + ''' + When user manually changes lenses, this gets focal size and displays it + along with updated RBVs but it doesn't set the config PV + ''' + self.configIndex = int(config_BW) + self.configIndexSorted = self.sorted_index.tolist().index(self.configIndex) + + self.setFocalSizeActual() + self.updateLensRBV() + self.updateFocalSizeRBVs() + def setInMask(self, inMask): ''' update mask for lenses that are locked in @@ -574,19 +571,28 @@ class singleTF(): self.updateLensConfigPV() self.updateLensRBV() self.updateFocalSizeRBVs() - - def updateSlitSize(self, size, slit): + + def setSlitSize(self, size, slit): ''' - Slit size updates are propagated to CRL object from EPICS. The beam - size lookup table is then recalculated. + Update proper slit size ''' + if slit = 'hor': - self.slit1_H = float(size) # H slit size before CRL 1 + self.slit1_H = float(size) # H slit size before CRL 1 elif slit == 'vert': self.slit1_V = float(size) # V slit size before CRL 1 else # Need error handling - break + break + + + def updateSlitSize(self, size, slit): + ''' + Slit size updates are propagated to CRL object from EPICS. The beam + size lookup table is then recalculated. + ''' + self.setSlitSize(self, size, slit) + self.construct_lookup_table() def setEnergy(self, energy): @@ -618,10 +624,6 @@ class singleTF(): self.focalSize = float(focalSize) self.find_config() -# def calc_lenses(self): -# self.lenses = (self.energy * self.focalPoint) % 4096 -# pydev.iointr('new_lens_config', self.lenses) - def updateLensConfigPV(self): ''' diff --git a/iocBoot/ioc100idPyCRL/crl_setup.toml b/iocBoot/ioc100idPyCRL/crl_setup.toml index 24454c2..faca98a 100644 --- a/iocBoot/ioc100idPyCRL/crl_setup.toml +++ b/iocBoot/ioc100idPyCRL/crl_setup.toml @@ -33,6 +33,4 @@ stacks = 10 stack_d = 0.050 d_min = 0.00003 -[slits] - - +s diff --git a/iocBoot/ioc100idPyCRL/examples/pydeviceCRL.cmd b/iocBoot/ioc100idPyCRL/examples/pydeviceCRL.cmd index b75e6f8..6dfb2cf 100644 --- a/iocBoot/ioc100idPyCRL/examples/pydeviceCRL.cmd +++ b/iocBoot/ioc100idPyCRL/examples/pydeviceCRL.cmd @@ -2,12 +2,6 @@ # PyDevice Support for Transfocator ################################################################################ -# Setting some variables that are needed in multiple locations -epicsEnvSet('_STACK_THICK',0.050) # Move to TOML -epicsEnvSet('_D_MIN',0.00003) # Move to TOML -epicsEnvSet('_STACKS',10) # Move to TOML -epicsEnvSet('_ENERGY',12) # Get current value later... - # Setting some variables beamline-dependent PVs epicsEnvSet('_SLITH',"") # Horizontal size of slit before CRL epicsEnvSet('_SLITV',"") # Vertical size of slit before CRL @@ -20,7 +14,7 @@ dbLoadRecords("${TOP}/db/energyTestTools.db","P=$(PREFIX), MONOE=$(MONOE), IDENE # CRL DBs and defining substitution file to get stack properties dbLoadTemplate("substitutions/pyDeviceTfor.substitutions","P=$(PREFIX)") pydev("stack_subFile = 'substitutions/pyDeviceTfor.substitutions'") - +s # Import Transfocator class pydev("from pyTransfocator_single import singleTF") @@ -28,15 +22,15 @@ pydev("from pyTransfocator_single import singleTF") pydev("CRL1 = singleTF(crl_setup = 'crl_setup.toml')") # DB for Transfocator system -# TODO get STACK_THICK and MIN_THICK from TOML file? dbLoadRecords(""${TOP}/db/pyDevCRLsingle.db","P=$(PREFIX), N=1, OBJ=CRL1, KEV=$(BLE), SLITH = $(_SLITH), SLITV = $(_SLITV)") -# After iocInit, need to setup attenuation lookup table +# After iocInit, need to setup focal size lookup table # stack_subFile - string holding name/rel. location of substitutions file loaded # loaded in dbLoadTemplate # $(_STACKS) - number of stacks of lenses # energy - beam energy in keV used for the initial lookup table setup -- can be updated # after startup doAfterIocInit() # PROC energy read and update CRL1 object +doAfterIocInit() # PROC slit size read and update CRL1 object # TODO get STACKS from TOML file? doAfterIocInit("pydev('CRL1.setupLookupTable(stack_subFile, $(_STACKS), energy = $(_ENERGY))')") #TODO get energy from beamline... diff --git a/iocBoot/ioc100idPySBL/.iocsh_history b/iocBoot/ioc100idPySBL/.iocsh_history index f803d43..9b9f03c 100644 --- a/iocBoot/ioc100idPySBL/.iocsh_history +++ b/iocBoot/ioc100idPySBL/.iocsh_history @@ -1,977 +1,3 @@ -epicsEnvSet("OPTICS","/APSshare/epics/synApps_6_3/support/optics-R2-14") -epicsEnvSet("QUADEM","/APSshare/epics/synApps_6_3/support/quadEM-R9-5") -epicsEnvSet("SCALER","/APSshare/epics/synApps_6_3/support/scaler-4-1") -epicsEnvSet("SNCSEQ","/APSshare/epics/synApps_6_3/support/sequencer-mirror-R2-2-9") -epicsEnvSet("SOFTGLUE","/APSshare/epics/synApps_6_3/support/softGlue-R2-8-4") -epicsEnvSet("SOFTGLUEZYNQ","/APSshare/epics/synApps_6_3/support/softGlueZynq-R2-0-5") -epicsEnvSet("SSCAN","/APSshare/epics/synApps_6_3/support/sscan-R2-11-6") -epicsEnvSet("STD","/APSshare/epics/synApps_6_3/support/std-R3-6-4") -epicsEnvSet("STREAM","/APSshare/epics/synApps_6_3/support/StreamDevice-2-8-24") -epicsEnvSet("VAC","/APSshare/epics/synApps_6_3/support/vac-R1-9-2") -epicsEnvSet("VME","/APSshare/epics/synApps_6_3/support/vme-R2-9-5") -epicsEnvSet("XSPRESS3","/APSshare/epics/synApps_6_3/support/xspress3-3-2-8") -epicsEnvSet("XXX","/APSshare/epics/synApps_6_3/support/xxx-R6-3") -epicsEnvSet("YOKOGAWA_DAS","/APSshare/epics/synApps_6_3/support/Yokogawa_DAS-R2-0-2") -epicsEnvSet("ALLENBRADLEY","/APSshare/epics/synApps_6_3/support/allenBradley-2-3") -epicsEnvSet("ADCORE","/APSshare/epics/synApps_6_3/support/areaDetector-R3-13/ADCore") -epicsEnvSet("ADSUPPORT","/APSshare/epics/synApps_6_3/support/areaDetector-R3-13/ADSupport") -epicsEnvSet("ULDAQ","/APSshare/epics/synApps_6_3/support/measComp-R4-2/libuldaq-1.2.1") -epicsEnvSet("PYDEVICE","/net/s100dserv/xorApps/epics/synApps_6_3/support/PyDevice-git") -epicsEnvSet("NDDRIVERSTDARRAYS","/APSshare/epics/synApps_6_3/support/areaDetector-R3-13/NDDriverStdArrays") -epicsEnvSet("ADSIMDETECTOR","/APSshare/epics/synApps_6_3/support/areaDetector-R3-13/ADSimDetector") -# Increase size of buffer for error logging from default 1256 -errlogInit(20000) -################################################################################ -# PYTHONPATH points to folders where Python modules are. -# Needs to be done before dbd load, so moved to st.cmd -epicsEnvSet("PYTHONPATH","$(TOP)/100idPyApp/python") -################################################################################ -# Tell EPICS all about the record types, device-support modules, drivers, -# etc. in the software we just loaded (100idPy.munch) -dbLoadDatabase("../../dbd/ioc100idPyLinux.dbd") -ioc100idPyLinux_registerRecordDeviceDriver(pdbbase) -< settings.iocsh -dbLoadRecords("$(AUTOSAVE)/db/configMenu.db", "P=$(PREFIX), CONFIG=ADAutoSave") -# Optional: load NDPluginPva plugin -NDPvaConfigure("PVA1", $(QSIZE), 0, "$(PORT)", 0, $(PREFIX)Pva1:Image, 0, 0, 0) -dbLoadRecords("NDPva.template", "P=$(PREFIX),R=Pva1:, PORT=PVA1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=$(PORT)") -# Must start PVA server if this is enabled -startPVAServer -# Optional: load ffmpegServer plugin -#ffmpegServerConfigure(8081) -#ffmpegStreamConfigure("FfmStream1", 2, 0, "$(PORT)", 0, -1, 0) -#dbLoadRecords("$(FFMPEGSERVER)/db/ffmpegStream.template", "P=$(PREFIX),R=ffmstream1:,PORT=FfmStream1,NDARRAY_PORT=$(PORT)") -#ffmpegFileConfigure("FfmFile1", 16, 0, "$(PORT)", 0, -1, 0) -#dbLoadRecords("$(FFMPEGSERVER)/db/ffmpegFile.template", "P=$(PREFIX),R=ffmfile1:,PORT=FfmFile1,NDARRAY_PORT=$(PORT)") -# Optional: load NDPluginEdge plugin -#NDEdgeConfigure("EDGE1", $(QSIZE), 0, "$(PORT)", 0, 0, 0, 0) -#dbLoadRecords("$(ADPLUGINEDGE)/db/NDEdge.template", "P=$(PREFIX),R=Edge1:, PORT=EDGE1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=$(PORT)") -#set_requestfile_path("$(ADPLUGINEDGE)/db") -# Optional: load NDPluginCV plugin -#NDCVConfigure("CV1", $(QSIZE), 0, "$(PORT)", 0, 0, 0, 0, 0, $(MAX_THREADS=5)) -#dbLoadRecords("$(ADCOMPVISION)/db/NDCV.template", "P=$(PREFIX),R=CV1:, PORT=CV1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=$(PORT)") -#set_requestfile_path("$(ADCOMPVISION)/adcvApp/Db") -# Optional: load NDPluginBar plugin -#NDBarConfigure("BAR1", $(QSIZE), 0, "$(PORT)", 0, 0, 0, 0, 0, $(MAX_THREADS=5)) -#dbLoadRecords("$(ADPLUGINBAR)/db/NDBar.template", "P=$(PREFIX),R=Bar1:, PORT=BAR1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=$(PORT)") -#set_requestfile_path("$(ADPLUGINBAR)/barApp/Db") -# Optional: load scan records -#dbLoadRecords("$(SSCAN)/sscanApp/Db/scan.db", "P=$(PREFIX),MAXPTS1=2000,MAXPTS2=200,MAXPTS3=20,MAXPTS4=10,MAXPTSH=10") -#set_requestfile_path("$(SSCAN)/sscanApp/Db") -# Optional: load sseq record for acquisition sequence -#dbLoadRecords("$(CALC)/calcApp/Db/sseqRecord.db", "P=$(PREFIX), S=AcquireSequence") -#set_requestfile_path("$(CALC)/calcApp/Db") -# Optional: load devIocStats records (requires DEVIOCSTATS module) -#dbLoadRecords("$(DEVIOCSTATS)/db/iocAdminSoft.db", "IOC=$(PREFIX)") -# Optional: load alive record (requires ALIVE module) -#dbLoadRecords("$(ALIVE)/aliveApp/Db/alive.db", "P=$(PREFIX),RHOST=164.54.100.11") -# 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) -doAfterIocInit("dbpf('100idPySBL:NDSA:NDimensions', '2')") -#Shouldn't need a simdet as NDSA comes with image plugin; however, adding -#one to test some pycalc ideas -#iocshLoad("iocsh/ADSimDetector.iocsh", "PREFIX=$(PREFIX), INSTANCE=SIM1") -############################################################################### -iocInit -############################################################################### -# write all the PV names to a local file -dbl > dbl-all.txt -# Diagnostic: CA links in all records -dbcar(0,1) -# print the time our boot was finished -date -exit -# Linux startup script -< envPaths -dbLoadRecords("$(AUTOSAVE)/db/configMenu.db", "P=$(PREFIX), CONFIG=ADAutoSave") -# Optional: load NDPluginPva plugin -NDPvaConfigure("PVA1", $(QSIZE), 0, "$(PORT)", 0, $(PREFIX)Pva1:Image, 0, 0, 0) -dbLoadRecords("NDPva.template", "P=$(PREFIX),R=Pva1:, PORT=PVA1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=$(PORT)") -# Must start PVA server if this is enabled -startPVAServer -# Optional: load ffmpegServer plugin -#ffmpegServerConfigure(8081) -#ffmpegStreamConfigure("FfmStream1", 2, 0, "$(PORT)", 0, -1, 0) -#dbLoadRecords("$(FFMPEGSERVER)/db/ffmpegStream.template", "P=$(PREFIX),R=ffmstream1:,PORT=FfmStream1,NDARRAY_PORT=$(PORT)") -#ffmpegFileConfigure("FfmFile1", 16, 0, "$(PORT)", 0, -1, 0) -#dbLoadRecords("$(FFMPEGSERVER)/db/ffmpegFile.template", "P=$(PREFIX),R=ffmfile1:,PORT=FfmFile1,NDARRAY_PORT=$(PORT)") -# Optional: load NDPluginEdge plugin -#NDEdgeConfigure("EDGE1", $(QSIZE), 0, "$(PORT)", 0, 0, 0, 0) -#dbLoadRecords("$(ADPLUGINEDGE)/db/NDEdge.template", "P=$(PREFIX),R=Edge1:, PORT=EDGE1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=$(PORT)") -#set_requestfile_path("$(ADPLUGINEDGE)/db") -# Optional: load NDPluginCV plugin -#NDCVConfigure("CV1", $(QSIZE), 0, "$(PORT)", 0, 0, 0, 0, 0, $(MAX_THREADS=5)) -#dbLoadRecords("$(ADCOMPVISION)/db/NDCV.template", "P=$(PREFIX),R=CV1:, PORT=CV1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=$(PORT)") -#set_requestfile_path("$(ADCOMPVISION)/adcvApp/Db") -# Optional: load NDPluginBar plugin -#NDBarConfigure("BAR1", $(QSIZE), 0, "$(PORT)", 0, 0, 0, 0, 0, $(MAX_THREADS=5)) -#dbLoadRecords("$(ADPLUGINBAR)/db/NDBar.template", "P=$(PREFIX),R=Bar1:, PORT=BAR1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=$(PORT)") -#set_requestfile_path("$(ADPLUGINBAR)/barApp/Db") -# Optional: load scan records -#dbLoadRecords("$(SSCAN)/sscanApp/Db/scan.db", "P=$(PREFIX),MAXPTS1=2000,MAXPTS2=200,MAXPTS3=20,MAXPTS4=10,MAXPTSH=10") -#set_requestfile_path("$(SSCAN)/sscanApp/Db") -# Optional: load sseq record for acquisition sequence -#dbLoadRecords("$(CALC)/calcApp/Db/sseqRecord.db", "P=$(PREFIX), S=AcquireSequence") -#set_requestfile_path("$(CALC)/calcApp/Db") -# Optional: load devIocStats records (requires DEVIOCSTATS module) -#dbLoadRecords("$(DEVIOCSTATS)/db/iocAdminSoft.db", "IOC=$(PREFIX)") -# Optional: load alive record (requires ALIVE module) -#dbLoadRecords("$(ALIVE)/aliveApp/Db/alive.db", "P=$(PREFIX),RHOST=164.54.100.11") -# 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) -doAfterIocInit("dbpf('100idPySBL:NDSA:NDimensions', '2')") -#Shouldn't need a simdet as NDSA comes with image plugin; however, adding -#one to test some pycalc ideas -#iocshLoad("iocsh/ADSimDetector.iocsh", "PREFIX=$(PREFIX), INSTANCE=SIM1") -############################################################################### -iocInit -############################################################################### -# write all the PV names to a local file -dbl > dbl-all.txt -# Diagnostic: CA links in all records -dbcar(0,1) -# print the time our boot was finished -date -exit -epicsEnvSet("IOC","ioc100idPySBL") -epicsEnvSet("TOP","/net/s100dserv/xorApps/epics/synApps_6_3/ioc/100idPy") -epicsEnvSet("SUPPORT","/APSshare/epics/synApps_6_3/support") -epicsEnvSet("LOCAL_SUPPORT","/net/s100dserv/xorApps/epics/synApps_6_3/support") -epicsEnvSet("EPICS_BASE","/APSshare/epics/base-7.0.8") -epicsEnvSet("ALIVE","/APSshare/epics/synApps_6_3/support/alive-R1-4-1") -epicsEnvSet("AREA_DETECTOR","/APSshare/epics/synApps_6_3/support/areaDetector-R3-13") -epicsEnvSet("ASYN","/APSshare/epics/synApps_6_3/support/asyn-R4-44-2") -epicsEnvSet("AUTOSAVE","/APSshare/epics/synApps_6_3/support/autosave-R5-11") -epicsEnvSet("BUSY","/APSshare/epics/synApps_6_3/support/busy-R1-7-4") -epicsEnvSet("CALC","/APSshare/epics/synApps_6_3/support/calc-R3-7-5") -epicsEnvSet("CAMAC","/APSshare/epics/synApps_6_3/support/camac-R2-7-5") -epicsEnvSet("CAPUTRECORDER","/APSshare/epics/synApps_6_3/support/caputRecorder-R1-7-6") -epicsEnvSet("DAC128V","/APSshare/epics/synApps_6_3/support/dac128V-R2-10-1") -epicsEnvSet("DANTE","/APSshare/epics/synApps_6_3/support/Dante-R1-1") -epicsEnvSet("DELAYGEN","/APSshare/epics/synApps_6_3/support/delaygen-R1-2-4") -epicsEnvSet("DEVIOCSTATS","/APSshare/epics/synApps_6_3/support/iocStats-3-1-16") -epicsEnvSet("DXP","/APSshare/epics/synApps_6_3/support/dxp-R6-1") -epicsEnvSet("DXPSITORO","/APSshare/epics/synApps_6_3/support/dxpSITORO-R1-3") -epicsEnvSet("ETHERIP","/APSshare/epics/synApps_6_3/support/ether_ip-ether_ip-3-3") -epicsEnvSet("GALIL","/APSshare/epics/synApps_6_3/support/Galil-3-0-V3-5") -epicsEnvSet("IP","/APSshare/epics/synApps_6_3/support/ip-R2-22") -epicsEnvSet("IP330","/APSshare/epics/synApps_6_3/support/ip330-R2-10") -epicsEnvSet("IPAC","/APSshare/epics/synApps_6_3/support/ipac-2-16") -epicsEnvSet("IPUNIDIG","/APSshare/epics/synApps_6_3/support/ipUnidig-R2-12") -epicsEnvSet("LABJACK","/APSshare/epics/synApps_6_3/support/LabJack-R3-0") -epicsEnvSet("LOVE","/APSshare/epics/synApps_6_3/support/love-R3-2-9") -epicsEnvSet("LUA","/APSshare/epics/synApps_6_3/support/lua-R3-1") -epicsEnvSet("MCA","/APSshare/epics/synApps_6_3/support/mca-R7-10") -epicsEnvSet("MEASCOMP","/APSshare/epics/synApps_6_3/support/measComp-R4-2") -epicsEnvSet("MODBUS","/APSshare/epics/synApps_6_3/support/modbus-R3-3") -epicsEnvSet("MOTOR","/APSshare/epics/synApps_6_3/support/motor-R7-3-1") -epicsEnvSet("OPTICS","/APSshare/epics/synApps_6_3/support/optics-R2-14") -epicsEnvSet("QUADEM","/APSshare/epics/synApps_6_3/support/quadEM-R9-5") -epicsEnvSet("SCALER","/APSshare/epics/synApps_6_3/support/scaler-4-1") -epicsEnvSet("SNCSEQ","/APSshare/epics/synApps_6_3/support/sequencer-mirror-R2-2-9") -epicsEnvSet("SOFTGLUE","/APSshare/epics/synApps_6_3/support/softGlue-R2-8-4") -epicsEnvSet("SOFTGLUEZYNQ","/APSshare/epics/synApps_6_3/support/softGlueZynq-R2-0-5") -epicsEnvSet("SSCAN","/APSshare/epics/synApps_6_3/support/sscan-R2-11-6") -epicsEnvSet("STD","/APSshare/epics/synApps_6_3/support/std-R3-6-4") -epicsEnvSet("STREAM","/APSshare/epics/synApps_6_3/support/StreamDevice-2-8-24") -epicsEnvSet("VAC","/APSshare/epics/synApps_6_3/support/vac-R1-9-2") -epicsEnvSet("VME","/APSshare/epics/synApps_6_3/support/vme-R2-9-5") -epicsEnvSet("XSPRESS3","/APSshare/epics/synApps_6_3/support/xspress3-3-2-8") -epicsEnvSet("XXX","/APSshare/epics/synApps_6_3/support/xxx-R6-3") -epicsEnvSet("YOKOGAWA_DAS","/APSshare/epics/synApps_6_3/support/Yokogawa_DAS-R2-0-2") -epicsEnvSet("ALLENBRADLEY","/APSshare/epics/synApps_6_3/support/allenBradley-2-3") -epicsEnvSet("ADCORE","/APSshare/epics/synApps_6_3/support/areaDetector-R3-13/ADCore") -epicsEnvSet("ADSUPPORT","/APSshare/epics/synApps_6_3/support/areaDetector-R3-13/ADSupport") -epicsEnvSet("ULDAQ","/APSshare/epics/synApps_6_3/support/measComp-R4-2/libuldaq-1.2.1") -epicsEnvSet("PYDEVICE","/net/s100dserv/xorApps/epics/synApps_6_3/support/PyDevice-git") -epicsEnvSet("NDDRIVERSTDARRAYS","/APSshare/epics/synApps_6_3/support/areaDetector-R3-13/NDDriverStdArrays") -epicsEnvSet("ADSIMDETECTOR","/APSshare/epics/synApps_6_3/support/areaDetector-R3-13/ADSimDetector") -# Shell prompt -epicsEnvSet("IOCSH_PS1", "$(IOC)> ") -# prefix used for all PVs in this IOC -epicsEnvSet("PREFIX", "100idPySBL:") -#For devIocStats -epicsEnvSet("ENGINEER", "M. Wyman") -epicsEnvSet("LOCATION", "100id") -epicsEnvSet("GROUP", "BCDA") -# search path for database files -epicsEnvSet("EPICS_DB_INCLUDE_PATH", ".") -# search path for streamDevice protocol files -epicsEnvSet("STREAM_PROTOCOL_PATH", ".") -# search path for lua scripts -# epicsEnvSet("LUA_SCRIPT_PATH", "./scripts") -# Specify largest array CA will transport -# Note for N doubles, need N*8 bytes+some overhead -epicsEnvSet("EPICS_CA_MAX_ARRAY_BYTES", 64010) -### save_restore setup, change SAVE_PATH if you are having autosave manage its own NFS mount -iocshLoad("$(AUTOSAVE)/iocsh/autosave_settings.iocsh", "PREFIX=$(PREFIX), SAVE_PATH=$(TOP)/iocBoot/$(IOC)") -dbLoadRecords("$(AUTOSAVE)/db/configMenu.db", "P=$(PREFIX), CONFIG=ADAutoSave") -# Optional: load NDPluginPva plugin -NDPvaConfigure("PVA1", $(QSIZE), 0, "$(PORT)", 0, $(PREFIX)Pva1:Image, 0, 0, 0) -dbLoadRecords("NDPva.template", "P=$(PREFIX),R=Pva1:, PORT=PVA1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=$(PORT)") -# Must start PVA server if this is enabled -startPVAServer -# Optional: load ffmpegServer plugin -#ffmpegServerConfigure(8081) -#ffmpegStreamConfigure("FfmStream1", 2, 0, "$(PORT)", 0, -1, 0) -#dbLoadRecords("$(FFMPEGSERVER)/db/ffmpegStream.template", "P=$(PREFIX),R=ffmstream1:,PORT=FfmStream1,NDARRAY_PORT=$(PORT)") -#ffmpegFileConfigure("FfmFile1", 16, 0, "$(PORT)", 0, -1, 0) -#dbLoadRecords("$(FFMPEGSERVER)/db/ffmpegFile.template", "P=$(PREFIX),R=ffmfile1:,PORT=FfmFile1,NDARRAY_PORT=$(PORT)") -# Optional: load NDPluginEdge plugin -#NDEdgeConfigure("EDGE1", $(QSIZE), 0, "$(PORT)", 0, 0, 0, 0) -#dbLoadRecords("$(ADPLUGINEDGE)/db/NDEdge.template", "P=$(PREFIX),R=Edge1:, PORT=EDGE1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=$(PORT)") -#set_requestfile_path("$(ADPLUGINEDGE)/db") -# Optional: load NDPluginCV plugin -#NDCVConfigure("CV1", $(QSIZE), 0, "$(PORT)", 0, 0, 0, 0, 0, $(MAX_THREADS=5)) -#dbLoadRecords("$(ADCOMPVISION)/db/NDCV.template", "P=$(PREFIX),R=CV1:, PORT=CV1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=$(PORT)") -#set_requestfile_path("$(ADCOMPVISION)/adcvApp/Db") -# Optional: load NDPluginBar plugin -#NDBarConfigure("BAR1", $(QSIZE), 0, "$(PORT)", 0, 0, 0, 0, 0, $(MAX_THREADS=5)) -#dbLoadRecords("$(ADPLUGINBAR)/db/NDBar.template", "P=$(PREFIX),R=Bar1:, PORT=BAR1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=$(PORT)") -#set_requestfile_path("$(ADPLUGINBAR)/barApp/Db") -# Optional: load scan records -#dbLoadRecords("$(SSCAN)/sscanApp/Db/scan.db", "P=$(PREFIX),MAXPTS1=2000,MAXPTS2=200,MAXPTS3=20,MAXPTS4=10,MAXPTSH=10") -#set_requestfile_path("$(SSCAN)/sscanApp/Db") -# Optional: load sseq record for acquisition sequence -#dbLoadRecords("$(CALC)/calcApp/Db/sseqRecord.db", "P=$(PREFIX), S=AcquireSequence") -#set_requestfile_path("$(CALC)/calcApp/Db") -# Optional: load devIocStats records (requires DEVIOCSTATS module) -#dbLoadRecords("$(DEVIOCSTATS)/db/iocAdminSoft.db", "IOC=$(PREFIX)") -# Optional: load alive record (requires ALIVE module) -#dbLoadRecords("$(ALIVE)/aliveApp/Db/alive.db", "P=$(PREFIX),RHOST=164.54.100.11") -# 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) -doAfterIocInit("dbpf('100idPySBL:NDSA:NDimensions', '2')") -#Shouldn't need a simdet as NDSA comes with image plugin; however, adding -#one to test some pycalc ideas -#iocshLoad("iocsh/ADSimDetector.iocsh", "PREFIX=$(PREFIX), INSTANCE=SIM1") -############################################################################### -iocInit -############################################################################### -# write all the PV names to a local file -dbl > dbl-all.txt -# Diagnostic: CA links in all records -dbcar(0,1) -# print the time our boot was finished -date -exit -# Linux startup script -< envPaths -dbLoadRecords("$(AUTOSAVE)/db/configMenu.db", "P=$(PREFIX), CONFIG=ADAutoSave") -# Optional: load NDPluginPva plugin -NDPvaConfigure("PVA1", $(QSIZE), 0, "$(PORT)", 0, $(PREFIX)Pva1:Image, 0, 0, 0) -dbLoadRecords("NDPva.template", "P=$(PREFIX),R=Pva1:, PORT=PVA1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=$(PORT)") -# Must start PVA server if this is enabled -startPVAServer -# Optional: load ffmpegServer plugin -#ffmpegServerConfigure(8081) -#ffmpegStreamConfigure("FfmStream1", 2, 0, "$(PORT)", 0, -1, 0) -#dbLoadRecords("$(FFMPEGSERVER)/db/ffmpegStream.template", "P=$(PREFIX),R=ffmstream1:,PORT=FfmStream1,NDARRAY_PORT=$(PORT)") -#ffmpegFileConfigure("FfmFile1", 16, 0, "$(PORT)", 0, -1, 0) -#dbLoadRecords("$(FFMPEGSERVER)/db/ffmpegFile.template", "P=$(PREFIX),R=ffmfile1:,PORT=FfmFile1,NDARRAY_PORT=$(PORT)") -# Optional: load NDPluginEdge plugin -#NDEdgeConfigure("EDGE1", $(QSIZE), 0, "$(PORT)", 0, 0, 0, 0) -#dbLoadRecords("$(ADPLUGINEDGE)/db/NDEdge.template", "P=$(PREFIX),R=Edge1:, PORT=EDGE1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=$(PORT)") -#set_requestfile_path("$(ADPLUGINEDGE)/db") -# Optional: load NDPluginCV plugin -#NDCVConfigure("CV1", $(QSIZE), 0, "$(PORT)", 0, 0, 0, 0, 0, $(MAX_THREADS=5)) -#dbLoadRecords("$(ADCOMPVISION)/db/NDCV.template", "P=$(PREFIX),R=CV1:, PORT=CV1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=$(PORT)") -#set_requestfile_path("$(ADCOMPVISION)/adcvApp/Db") -# Optional: load NDPluginBar plugin -#NDBarConfigure("BAR1", $(QSIZE), 0, "$(PORT)", 0, 0, 0, 0, 0, $(MAX_THREADS=5)) -#dbLoadRecords("$(ADPLUGINBAR)/db/NDBar.template", "P=$(PREFIX),R=Bar1:, PORT=BAR1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=$(PORT)") -#set_requestfile_path("$(ADPLUGINBAR)/barApp/Db") -# Optional: load scan records -#dbLoadRecords("$(SSCAN)/sscanApp/Db/scan.db", "P=$(PREFIX),MAXPTS1=2000,MAXPTS2=200,MAXPTS3=20,MAXPTS4=10,MAXPTSH=10") -#set_requestfile_path("$(SSCAN)/sscanApp/Db") -# Optional: load sseq record for acquisition sequence -#dbLoadRecords("$(CALC)/calcApp/Db/sseqRecord.db", "P=$(PREFIX), S=AcquireSequence") -#set_requestfile_path("$(CALC)/calcApp/Db") -# Optional: load devIocStats records (requires DEVIOCSTATS module) -#dbLoadRecords("$(DEVIOCSTATS)/db/iocAdminSoft.db", "IOC=$(PREFIX)") -# Optional: load alive record (requires ALIVE module) -#dbLoadRecords("$(ALIVE)/aliveApp/Db/alive.db", "P=$(PREFIX),RHOST=164.54.100.11") -# 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) -doAfterIocInit("dbpf('100idPySBL:NDSA:NDimensions', '2')") -#Shouldn't need a simdet as NDSA comes with image plugin; however, adding -#one to test some pycalc ideas -#iocshLoad("iocsh/ADSimDetector.iocsh", "PREFIX=$(PREFIX), INSTANCE=SIM1") -############################################################################### -iocInit -############################################################################### -# write all the PV names to a local file -dbl > dbl-all.txt -# Diagnostic: CA links in all records -dbcar(0,1) -# print the time our boot was finished -date -exit -epicsEnvSet("IOC","ioc100idPySBL") -epicsEnvSet("TOP","/net/s100dserv/xorApps/epics/synApps_6_3/ioc/100idPy") -epicsEnvSet("SUPPORT","/APSshare/epics/synApps_6_3/support") -epicsEnvSet("LOCAL_SUPPORT","/net/s100dserv/xorApps/epics/synApps_6_3/support") -epicsEnvSet("EPICS_BASE","/APSshare/epics/base-7.0.8") -epicsEnvSet("ALIVE","/APSshare/epics/synApps_6_3/support/alive-R1-4-1") -epicsEnvSet("AREA_DETECTOR","/APSshare/epics/synApps_6_3/support/areaDetector-R3-13") -epicsEnvSet("ASYN","/APSshare/epics/synApps_6_3/support/asyn-R4-44-2") -epicsEnvSet("AUTOSAVE","/APSshare/epics/synApps_6_3/support/autosave-R5-11") -epicsEnvSet("BUSY","/APSshare/epics/synApps_6_3/support/busy-R1-7-4") -epicsEnvSet("CALC","/APSshare/epics/synApps_6_3/support/calc-R3-7-5") -epicsEnvSet("CAMAC","/APSshare/epics/synApps_6_3/support/camac-R2-7-5") -epicsEnvSet("CAPUTRECORDER","/APSshare/epics/synApps_6_3/support/caputRecorder-R1-7-6") -epicsEnvSet("DAC128V","/APSshare/epics/synApps_6_3/support/dac128V-R2-10-1") -epicsEnvSet("DANTE","/APSshare/epics/synApps_6_3/support/Dante-R1-1") -epicsEnvSet("DELAYGEN","/APSshare/epics/synApps_6_3/support/delaygen-R1-2-4") -epicsEnvSet("DEVIOCSTATS","/APSshare/epics/synApps_6_3/support/iocStats-3-1-16") -epicsEnvSet("DXP","/APSshare/epics/synApps_6_3/support/dxp-R6-1") -epicsEnvSet("DXPSITORO","/APSshare/epics/synApps_6_3/support/dxpSITORO-R1-3") -epicsEnvSet("ETHERIP","/APSshare/epics/synApps_6_3/support/ether_ip-ether_ip-3-3") -epicsEnvSet("GALIL","/APSshare/epics/synApps_6_3/support/Galil-3-0-V3-5") -epicsEnvSet("IP","/APSshare/epics/synApps_6_3/support/ip-R2-22") -epicsEnvSet("IP330","/APSshare/epics/synApps_6_3/support/ip330-R2-10") -epicsEnvSet("IPAC","/APSshare/epics/synApps_6_3/support/ipac-2-16") -epicsEnvSet("IPUNIDIG","/APSshare/epics/synApps_6_3/support/ipUnidig-R2-12") -epicsEnvSet("LABJACK","/APSshare/epics/synApps_6_3/support/LabJack-R3-0") -epicsEnvSet("LOVE","/APSshare/epics/synApps_6_3/support/love-R3-2-9") -epicsEnvSet("LUA","/APSshare/epics/synApps_6_3/support/lua-R3-1") -epicsEnvSet("MCA","/APSshare/epics/synApps_6_3/support/mca-R7-10") -epicsEnvSet("MEASCOMP","/APSshare/epics/synApps_6_3/support/measComp-R4-2") -epicsEnvSet("MODBUS","/APSshare/epics/synApps_6_3/support/modbus-R3-3") -epicsEnvSet("MOTOR","/APSshare/epics/synApps_6_3/support/motor-R7-3-1") -epicsEnvSet("OPTICS","/APSshare/epics/synApps_6_3/support/optics-R2-14") -epicsEnvSet("QUADEM","/APSshare/epics/synApps_6_3/support/quadEM-R9-5") -epicsEnvSet("SCALER","/APSshare/epics/synApps_6_3/support/scaler-4-1") -epicsEnvSet("SNCSEQ","/APSshare/epics/synApps_6_3/support/sequencer-mirror-R2-2-9") -epicsEnvSet("SOFTGLUE","/APSshare/epics/synApps_6_3/support/softGlue-R2-8-4") -epicsEnvSet("SOFTGLUEZYNQ","/APSshare/epics/synApps_6_3/support/softGlueZynq-R2-0-5") -epicsEnvSet("SSCAN","/APSshare/epics/synApps_6_3/support/sscan-R2-11-6") -epicsEnvSet("STD","/APSshare/epics/synApps_6_3/support/std-R3-6-4") -epicsEnvSet("STREAM","/APSshare/epics/synApps_6_3/support/StreamDevice-2-8-24") -epicsEnvSet("VAC","/APSshare/epics/synApps_6_3/support/vac-R1-9-2") -epicsEnvSet("VME","/APSshare/epics/synApps_6_3/support/vme-R2-9-5") -epicsEnvSet("XSPRESS3","/APSshare/epics/synApps_6_3/support/xspress3-3-2-8") -epicsEnvSet("XXX","/APSshare/epics/synApps_6_3/support/xxx-R6-3") -epicsEnvSet("YOKOGAWA_DAS","/APSshare/epics/synApps_6_3/support/Yokogawa_DAS-R2-0-2") -epicsEnvSet("ALLENBRADLEY","/APSshare/epics/synApps_6_3/support/allenBradley-2-3") -epicsEnvSet("ADCORE","/APSshare/epics/synApps_6_3/support/areaDetector-R3-13/ADCore") -epicsEnvSet("ADSUPPORT","/APSshare/epics/synApps_6_3/support/areaDetector-R3-13/ADSupport") -epicsEnvSet("ULDAQ","/APSshare/epics/synApps_6_3/support/measComp-R4-2/libuldaq-1.2.1") -epicsEnvSet("PYDEVICE","/net/s100dserv/xorApps/epics/synApps_6_3/support/PyDevice-git") -epicsEnvSet("NDDRIVERSTDARRAYS","/APSshare/epics/synApps_6_3/support/areaDetector-R3-13/NDDriverStdArrays") -epicsEnvSet("ADSIMDETECTOR","/APSshare/epics/synApps_6_3/support/areaDetector-R3-13/ADSimDetector") -# Increase size of buffer for error logging from default 1256 -errlogInit(20000) -################################################################################ -# PYTHONPATH points to folders where Python modules are. -# Needs to be done before dbd load, so moved to st.cmd -epicsEnvSet("PYTHONPATH","$(TOP)/100idPyApp/python") -################################################################################ -# Tell EPICS all about the record types, device-support modules, drivers, -# etc. in the software we just loaded (100idPy.munch) -dbLoadDatabase("../../dbd/ioc100idPyLinux.dbd") -ioc100idPyLinux_registerRecordDeviceDriver(pdbbase) -< settings.iocsh -dbLoadRecords("$(AUTOSAVE)/db/configMenu.db", "P=$(PREFIX), CONFIG=ADAutoSave") -# Optional: load NDPluginPva plugin -NDPvaConfigure("PVA1", $(QSIZE), 0, "$(PORT)", 0, $(PREFIX)Pva1:Image, 0, 0, 0) -dbLoadRecords("NDPva.template", "P=$(PREFIX),R=Pva1:, PORT=PVA1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=$(PORT)") -# Must start PVA server if this is enabled -startPVAServer -# Optional: load ffmpegServer plugin -#ffmpegServerConfigure(8081) -#ffmpegStreamConfigure("FfmStream1", 2, 0, "$(PORT)", 0, -1, 0) -#dbLoadRecords("$(FFMPEGSERVER)/db/ffmpegStream.template", "P=$(PREFIX),R=ffmstream1:,PORT=FfmStream1,NDARRAY_PORT=$(PORT)") -#ffmpegFileConfigure("FfmFile1", 16, 0, "$(PORT)", 0, -1, 0) -#dbLoadRecords("$(FFMPEGSERVER)/db/ffmpegFile.template", "P=$(PREFIX),R=ffmfile1:,PORT=FfmFile1,NDARRAY_PORT=$(PORT)") -# Optional: load NDPluginEdge plugin -#NDEdgeConfigure("EDGE1", $(QSIZE), 0, "$(PORT)", 0, 0, 0, 0) -#dbLoadRecords("$(ADPLUGINEDGE)/db/NDEdge.template", "P=$(PREFIX),R=Edge1:, PORT=EDGE1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=$(PORT)") -#set_requestfile_path("$(ADPLUGINEDGE)/db") -# Optional: load NDPluginCV plugin -#NDCVConfigure("CV1", $(QSIZE), 0, "$(PORT)", 0, 0, 0, 0, 0, $(MAX_THREADS=5)) -#dbLoadRecords("$(ADCOMPVISION)/db/NDCV.template", "P=$(PREFIX),R=CV1:, PORT=CV1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=$(PORT)") -#set_requestfile_path("$(ADCOMPVISION)/adcvApp/Db") -# Optional: load NDPluginBar plugin -#NDBarConfigure("BAR1", $(QSIZE), 0, "$(PORT)", 0, 0, 0, 0, 0, $(MAX_THREADS=5)) -#dbLoadRecords("$(ADPLUGINBAR)/db/NDBar.template", "P=$(PREFIX),R=Bar1:, PORT=BAR1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=$(PORT)") -#set_requestfile_path("$(ADPLUGINBAR)/barApp/Db") -# Optional: load scan records -#dbLoadRecords("$(SSCAN)/sscanApp/Db/scan.db", "P=$(PREFIX),MAXPTS1=2000,MAXPTS2=200,MAXPTS3=20,MAXPTS4=10,MAXPTSH=10") -#set_requestfile_path("$(SSCAN)/sscanApp/Db") -# Optional: load sseq record for acquisition sequence -#dbLoadRecords("$(CALC)/calcApp/Db/sseqRecord.db", "P=$(PREFIX), S=AcquireSequence") -#set_requestfile_path("$(CALC)/calcApp/Db") -# Optional: load devIocStats records (requires DEVIOCSTATS module) -#dbLoadRecords("$(DEVIOCSTATS)/db/iocAdminSoft.db", "IOC=$(PREFIX)") -# Optional: load alive record (requires ALIVE module) -#dbLoadRecords("$(ALIVE)/aliveApp/Db/alive.db", "P=$(PREFIX),RHOST=164.54.100.11") -# 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) -doAfterIocInit("dbpf('100idPySBL:NDSA:NDimensions', '2')") -#Shouldn't need a simdet as NDSA comes with image plugin; however, adding -#one to test some pycalc ideas -#iocshLoad("iocsh/ADSimDetector.iocsh", "PREFIX=$(PREFIX), INSTANCE=SIM1") -############################################################################### -iocInit -############################################################################### -# write all the PV names to a local file -dbl > dbl-all.txt -# Diagnostic: CA links in all records -dbcar(0,1) -# print the time our boot was finished -date -exit -# Linux startup script -< envPaths -dbLoadRecords("$(AUTOSAVE)/db/configMenu.db", "P=$(PREFIX), CONFIG=ADAutoSave") -# Optional: load NDPluginPva plugin -NDPvaConfigure("PVA1", $(QSIZE), 0, "$(PORT)", 0, $(PREFIX)Pva1:Image, 0, 0, 0) -dbLoadRecords("NDPva.template", "P=$(PREFIX),R=Pva1:, PORT=PVA1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=$(PORT)") -# Must start PVA server if this is enabled -startPVAServer -# Optional: load ffmpegServer plugin -#ffmpegServerConfigure(8081) -#ffmpegStreamConfigure("FfmStream1", 2, 0, "$(PORT)", 0, -1, 0) -#dbLoadRecords("$(FFMPEGSERVER)/db/ffmpegStream.template", "P=$(PREFIX),R=ffmstream1:,PORT=FfmStream1,NDARRAY_PORT=$(PORT)") -#ffmpegFileConfigure("FfmFile1", 16, 0, "$(PORT)", 0, -1, 0) -#dbLoadRecords("$(FFMPEGSERVER)/db/ffmpegFile.template", "P=$(PREFIX),R=ffmfile1:,PORT=FfmFile1,NDARRAY_PORT=$(PORT)") -# Optional: load NDPluginEdge plugin -#NDEdgeConfigure("EDGE1", $(QSIZE), 0, "$(PORT)", 0, 0, 0, 0) -#dbLoadRecords("$(ADPLUGINEDGE)/db/NDEdge.template", "P=$(PREFIX),R=Edge1:, PORT=EDGE1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=$(PORT)") -#set_requestfile_path("$(ADPLUGINEDGE)/db") -# Optional: load NDPluginCV plugin -#NDCVConfigure("CV1", $(QSIZE), 0, "$(PORT)", 0, 0, 0, 0, 0, $(MAX_THREADS=5)) -#dbLoadRecords("$(ADCOMPVISION)/db/NDCV.template", "P=$(PREFIX),R=CV1:, PORT=CV1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=$(PORT)") -#set_requestfile_path("$(ADCOMPVISION)/adcvApp/Db") -# Optional: load NDPluginBar plugin -#NDBarConfigure("BAR1", $(QSIZE), 0, "$(PORT)", 0, 0, 0, 0, 0, $(MAX_THREADS=5)) -#dbLoadRecords("$(ADPLUGINBAR)/db/NDBar.template", "P=$(PREFIX),R=Bar1:, PORT=BAR1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=$(PORT)") -#set_requestfile_path("$(ADPLUGINBAR)/barApp/Db") -# Optional: load scan records -#dbLoadRecords("$(SSCAN)/sscanApp/Db/scan.db", "P=$(PREFIX),MAXPTS1=2000,MAXPTS2=200,MAXPTS3=20,MAXPTS4=10,MAXPTSH=10") -#set_requestfile_path("$(SSCAN)/sscanApp/Db") -# Optional: load sseq record for acquisition sequence -#dbLoadRecords("$(CALC)/calcApp/Db/sseqRecord.db", "P=$(PREFIX), S=AcquireSequence") -#set_requestfile_path("$(CALC)/calcApp/Db") -# Optional: load devIocStats records (requires DEVIOCSTATS module) -#dbLoadRecords("$(DEVIOCSTATS)/db/iocAdminSoft.db", "IOC=$(PREFIX)") -# Optional: load alive record (requires ALIVE module) -#dbLoadRecords("$(ALIVE)/aliveApp/Db/alive.db", "P=$(PREFIX),RHOST=164.54.100.11") -# 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) -doAfterIocInit("dbpf('100idPySBL:NDSA:NDimensions', '2')") -#Shouldn't need a simdet as NDSA comes with image plugin; however, adding -#one to test some pycalc ideas -#iocshLoad("iocsh/ADSimDetector.iocsh", "PREFIX=$(PREFIX), INSTANCE=SIM1") -############################################################################### -iocInit -############################################################################### -# write all the PV names to a local file -dbl > dbl-all.txt -# Diagnostic: CA links in all records -dbcar(0,1) -# print the time our boot was finished -date -exit -epicsEnvSet("IOC","ioc100idPySBL") -epicsEnvSet("TOP","/net/s100dserv/xorApps/epics/synApps_6_3/ioc/100idPy") -epicsEnvSet("SUPPORT","/APSshare/epics/synApps_6_3/support") -epicsEnvSet("LOCAL_SUPPORT","/net/s100dserv/xorApps/epics/synApps_6_3/support") -epicsEnvSet("EPICS_BASE","/APSshare/epics/base-7.0.8") -epicsEnvSet("ALIVE","/APSshare/epics/synApps_6_3/support/alive-R1-4-1") -epicsEnvSet("AREA_DETECTOR","/APSshare/epics/synApps_6_3/support/areaDetector-R3-13") -epicsEnvSet("ASYN","/APSshare/epics/synApps_6_3/support/asyn-R4-44-2") -epicsEnvSet("AUTOSAVE","/APSshare/epics/synApps_6_3/support/autosave-R5-11") -epicsEnvSet("BUSY","/APSshare/epics/synApps_6_3/support/busy-R1-7-4") -epicsEnvSet("CALC","/APSshare/epics/synApps_6_3/support/calc-R3-7-5") -epicsEnvSet("CAMAC","/APSshare/epics/synApps_6_3/support/camac-R2-7-5") -epicsEnvSet("CAPUTRECORDER","/APSshare/epics/synApps_6_3/support/caputRecorder-R1-7-6") -epicsEnvSet("DAC128V","/APSshare/epics/synApps_6_3/support/dac128V-R2-10-1") -epicsEnvSet("DANTE","/APSshare/epics/synApps_6_3/support/Dante-R1-1") -epicsEnvSet("DELAYGEN","/APSshare/epics/synApps_6_3/support/delaygen-R1-2-4") -epicsEnvSet("DEVIOCSTATS","/APSshare/epics/synApps_6_3/support/iocStats-3-1-16") -epicsEnvSet("DXP","/APSshare/epics/synApps_6_3/support/dxp-R6-1") -epicsEnvSet("DXPSITORO","/APSshare/epics/synApps_6_3/support/dxpSITORO-R1-3") -epicsEnvSet("ETHERIP","/APSshare/epics/synApps_6_3/support/ether_ip-ether_ip-3-3") -epicsEnvSet("GALIL","/APSshare/epics/synApps_6_3/support/Galil-3-0-V3-5") -epicsEnvSet("IP","/APSshare/epics/synApps_6_3/support/ip-R2-22") -epicsEnvSet("IP330","/APSshare/epics/synApps_6_3/support/ip330-R2-10") -epicsEnvSet("IPAC","/APSshare/epics/synApps_6_3/support/ipac-2-16") -epicsEnvSet("IPUNIDIG","/APSshare/epics/synApps_6_3/support/ipUnidig-R2-12") -epicsEnvSet("LABJACK","/APSshare/epics/synApps_6_3/support/LabJack-R3-0") -epicsEnvSet("LOVE","/APSshare/epics/synApps_6_3/support/love-R3-2-9") -epicsEnvSet("LUA","/APSshare/epics/synApps_6_3/support/lua-R3-1") -epicsEnvSet("MCA","/APSshare/epics/synApps_6_3/support/mca-R7-10") -epicsEnvSet("MEASCOMP","/APSshare/epics/synApps_6_3/support/measComp-R4-2") -epicsEnvSet("MODBUS","/APSshare/epics/synApps_6_3/support/modbus-R3-3") -epicsEnvSet("MOTOR","/APSshare/epics/synApps_6_3/support/motor-R7-3-1") -epicsEnvSet("OPTICS","/APSshare/epics/synApps_6_3/support/optics-R2-14") -epicsEnvSet("QUADEM","/APSshare/epics/synApps_6_3/support/quadEM-R9-5") -epicsEnvSet("SCALER","/APSshare/epics/synApps_6_3/support/scaler-4-1") -epicsEnvSet("SNCSEQ","/APSshare/epics/synApps_6_3/support/sequencer-mirror-R2-2-9") -epicsEnvSet("SOFTGLUE","/APSshare/epics/synApps_6_3/support/softGlue-R2-8-4") -epicsEnvSet("SOFTGLUEZYNQ","/APSshare/epics/synApps_6_3/support/softGlueZynq-R2-0-5") -epicsEnvSet("SSCAN","/APSshare/epics/synApps_6_3/support/sscan-R2-11-6") -epicsEnvSet("STD","/APSshare/epics/synApps_6_3/support/std-R3-6-4") -epicsEnvSet("STREAM","/APSshare/epics/synApps_6_3/support/StreamDevice-2-8-24") -epicsEnvSet("VAC","/APSshare/epics/synApps_6_3/support/vac-R1-9-2") -epicsEnvSet("VME","/APSshare/epics/synApps_6_3/support/vme-R2-9-5") -epicsEnvSet("XSPRESS3","/APSshare/epics/synApps_6_3/support/xspress3-3-2-8") -epicsEnvSet("XXX","/APSshare/epics/synApps_6_3/support/xxx-R6-3") -epicsEnvSet("YOKOGAWA_DAS","/APSshare/epics/synApps_6_3/support/Yokogawa_DAS-R2-0-2") -epicsEnvSet("ALLENBRADLEY","/APSshare/epics/synApps_6_3/support/allenBradley-2-3") -epicsEnvSet("ADCORE","/APSshare/epics/synApps_6_3/support/areaDetector-R3-13/ADCore") -epicsEnvSet("ADSUPPORT","/APSshare/epics/synApps_6_3/support/areaDetector-R3-13/ADSupport") -epicsEnvSet("ULDAQ","/APSshare/epics/synApps_6_3/support/measComp-R4-2/libuldaq-1.2.1") -epicsEnvSet("PYDEVICE","/net/s100dserv/xorApps/epics/synApps_6_3/support/PyDevice-git") -epicsEnvSet("NDDRIVERSTDARRAYS","/APSshare/epics/synApps_6_3/support/areaDetector-R3-13/NDDriverStdArrays") -epicsEnvSet("ADSIMDETECTOR","/APSshare/epics/synApps_6_3/support/areaDetector-R3-13/ADSimDetector") -# Shell prompt -epicsEnvSet("IOCSH_PS1", "$(IOC)> ") -# prefix used for all PVs in this IOC -epicsEnvSet("PREFIX", "100idPySBL:") -#For devIocStats -epicsEnvSet("ENGINEER", "M. Wyman") -epicsEnvSet("LOCATION", "100id") -epicsEnvSet("GROUP", "BCDA") -# search path for database files -epicsEnvSet("EPICS_DB_INCLUDE_PATH", ".") -# search path for streamDevice protocol files -epicsEnvSet("STREAM_PROTOCOL_PATH", ".") -# search path for lua scripts -# epicsEnvSet("LUA_SCRIPT_PATH", "./scripts") -# Specify largest array CA will transport -# Note for N doubles, need N*8 bytes+some overhead -epicsEnvSet("EPICS_CA_MAX_ARRAY_BYTES", 64010) -# ### autosave_settings.iocsh ### -#- ################################################### -#- PREFIX - IOC Prefix -#- AUTOSAVE - Location of autosave module -#- SAVE_PATH - Location to create autosave directory where files will be saved -#- INCOMPLETE - Optional: Ok to save/restore save sets with missing values? -#- Default: 1 -#- -#- DATED_BACKUP - Optional: Save dated backup files? -#- Default: 1 -#- -#- CA_RECONNECT - Optional: Retry connecting to PVs whose initial connection attempt failed? -#- Default: 1 -#- -#- NUM_SEQ - Optional: Number of sequenced backup files to write -#- Default: 3 -#- -#- SEQ_PERIOD - Optional: Time interval in seconds between sequenced backups -#- - Default: 300 -#- ################################################### -set_savefile_path("$(SAVE_PATH)", "autosave") -#- Add save path and autosave to list of directories to find files -set_requestfile_path("$(SAVE_PATH)", "") -set_requestfile_path("$(AUTOSAVE)", "asApp/Db") -save_restoreSet_status_prefix("$(PREFIX)") -save_restoreSet_CAReconnect($(CA_RECONNECT=1)) -save_restoreSet_IncompleteSetsOk($(INCOMPLETE=1)) -save_restoreSet_DatedBackupFiles($(DATED_BACKUP=1)) -save_restoreSet_NumSeqFiles($(NUM_SEQ=3)) -save_restoreSet_SeqPeriodInSeconds($(SEQ_PERIOD=300)) -#- Time interval in seconds between forced save-file writes. (-1 means forever). -#- This is intended to get save files written even if the normal trigger mechanism is broken. -save_restoreSet_CallbackTimeout(-1) -dbLoadRecords("$(AUTOSAVE)/asApp/Db/save_restoreStatus.db", "P=$(PREFIX), DEAD_SECONDS=5") -# ### save_restore.iocsh ### -#- ################################################### -#- PREFIX - IOC Prefix -#- POSITIONS_FILE - Name of positions file, script will search for $(POSITIONS_FILE).req, -#- saved positions will be in $(POSITIONS_FILE).sav -#- macro PREFIX will be defined for the file -#- SETTINGS_FILE - Name of settings file, script will search for $(SETTINGS_FILE).req, -#- saved settings will be in $(SETTINGS_FILE).sav -#- macro PREFIX will be defined for the file -#- AUTOSAVE - Location of Autosave module -#- POSITION_PERIOD- Optional: Time interval in seconds between saving positions -#- - Default: 5 -#- -#- SETTING_PERIOD - Optional: Time interval in seconds between saving settings -#- - Default: 30 -#- ################################################### -#- Specify what save files should be restored. Note these files must be -#- in the directory specified in set_savefile_path(), or, if that function -#- has not been called, from the directory current when iocInit is invoked -set_pass0_restoreFile("$(POSITIONS_FILE).sav") -set_pass0_restoreFile("$(SETTINGS_FILE).sav") -set_pass1_restoreFile("$(SETTINGS_FILE).sav") -#- Note doAfterIocInit() supplied by std module. -doAfterIocInit("create_monitor_set('$(POSITIONS_FILE).req',$(POSITION_PERIOD=5),'P=$(PREFIX)')") -doAfterIocInit("create_monitor_set('$(SETTINGS_FILE).req',$(SETTING_PERIOD=30),'P=$(PREFIX)')") -#- Debug-output level -save_restoreSet_Debug(0) -# ### autosaveBuild.iocsh ### -#- ################################################### -#- PREFIX - IOC Prefix -#- BUILD_PATH - Optional: Location to create BUILT_SETTINGS and BUILT_POSITIONS -#- Default: Current Directory -#- AUTOSAVE - Location of Autosave module -#- POSITION_PERIOD- Optional: Time interval in seconds between saving positions -#- - Default: 5 -#- -#- SETTING_PERIOD - Optional: Time interval in seconds between saving settings -#- - Default: 30 -#- ################################################### -#- Specify what save files should be restored. Note these files must be -#- in the directory specified in set_savefile_path(), or, if that function -#- has not been called, from the directory current when iocInit is invoked -set_pass0_restoreFile("built_positions.sav") -set_pass0_restoreFile("built_settings.sav") -set_pass1_restoreFile("built_settings.sav") -#- Note doAfterIocInit() supplied by std module. -doAfterIocInit("create_monitor_set('built_positions.req',$(POSITION_PERIOD=5), P=$(PREFIX))") -doAfterIocInit("create_monitor_set('built_settings.req',$(SETTING_PERIOD=30), P=$(PREFIX))") -#- Debug-output level -save_restoreSet_Debug(0) -#- Tell autosave to automatically build built_settings.req and -#- built_positions.req from databases and macros supplied to dbLoadRecords() -#- (and dbLoadTemplate(), which calls dbLoadRecords()). -#- This requires EPICS 3.15.1 or later, or 3.14 patched as described in -#- autosave R5-5 documentation. -epicsEnvSet("BUILT_SETTINGS", "built_settings.req") -epicsEnvSet("BUILT_POSITIONS", "built_positions.req") -autosaveBuild("$(BUILD_PATH=.)/$(BUILT_SETTINGS)", "_settings.req", 1) -autosaveBuild("$(BUILD_PATH=.)/$(BUILT_POSITIONS)", "_positions.req", 1) -set_requestfile_path("$(BUILD_PATH=.)") -# ### caputRecorder.iocsh ### -#- ################################################### -#- PREFIX - IOC Prefix -#- CAPUTRECORDER - Location of caputRecorder module -#- -#- SIZE - Optional: Manages the size of certain elements -#- in the caputRecorder database -#- Default: 300 -#- ################################################### -#- trap listener -dbLoadRecords("$(CAPUTRECORDER)/caputRecorderApp/Db/caputPoster.db","P=$(PREFIX),N=300") -doAfterIocInit("registerCaputRecorderTrapListener('$(PREFIX)caputRecorderCommand')") -#- GUI database -dbLoadRecords("$(CAPUTRECORDER)/caputRecorderApp/Db/caputRecorder.db","P=$(PREFIX),N=300") -# ### sscan.iocsh ### -#- ################################################### -#- PREFIX - IOC Prefix -#- SSCAN - Location of sscan module -#- MAX_PTS - Optional: Maximum number of scan points -#- for all dimensions -#- Default: 1000 -#- -#- MAX_PTS1 - Optional: Maximum number of scan points -#- for first dimension -#- Default: $(MAX_PTS) -#- -#- MAX_PTS2 - Optional: Maximum number of scan points -#- for second dimension -#- Default: $(MAX_PTS) -#- -#- MAX_PTS3 - Optional: Maximum number of scan points -#- for third dimension -#- Default: $(MAX_PTS) -#- -#- MAX_PTS4 - Optional: Maximum number of scan points -#- for fourth dimension -#- Default: $(MAX_PTS) -#- -#- MAX_PTSH - Optional: Maximum number of scan points -#- for H dimension -#- Default: $(MAX_PTS) -#- -#- REQ_FILE - Optional: Name of saveData req file -#- Default: saveData.req -#- ################################################### -#- ### Scan-support software -#- crate-resident scan. This executes 1D, 2D, 3D, and 4D scans, and caches -#- 1D data, but it doesn't store anything to disk. (See 'saveData' below for that.) -dbLoadRecords("$(SSCAN)/sscanApp/Db/standardScans.db","P=$(PREFIX),MAXPTS1=$(MAX_PTS1=$(MAX_PTS=1000)),MAXPTS2=$(MAX_PTS2=$(MAX_PTS=1000)),MAXPTS3=$(MAX_PTS3=$(MAX_PTS=1000)),MAXPTS4=$(MAX_PTS4=$(MAX_PTS=1000)),MAXPTSH=$(MAX_PTSH=$(MAX_PTS=1000))") -#- Start the saveData task. If you start this task, scan records mentioned -#- in saveData.req will *always* write data files. There is no programmable -#- disable for this software. -dbLoadRecords("$(SSCAN)/sscanApp/Db/saveData.db","P=$(PREFIX)") -doAfterIocInit("saveData_Init('$(REQ_FILE=saveData.req)', 'P=$(PREFIX)')") -dbLoadRecords("$(SSCAN)/sscanApp/Db/scanProgress.db","P=$(PREFIX)scanProgress:") -doAfterIocInit("seq &scanProgress, 'S=$(PREFIX), P=$(PREFIX)scanProgress:'") -# ### configMenu.iocsh ### -#- ################################################### -#- PREFIX - IOC Prefix -#- CONFIG - Menu name, will search for $(CONFIG)Menu.req -#- AUTOSAVE - Location of autosave module -#- ################################################### -#- configMenu example. -dbLoadRecords("$(AUTOSAVE)/asApp/Db/configMenu.db","P=$(PREFIX),CONFIG=$(CONFIG)") -#- Note that the request file MUST be named $(CONFIG)Menu.req -#- If the macro CONFIGMENU is defined with any value, backup (".savB") and -#- sequence files (".savN") will not be written. We don't want these for configMenu. -#- Run this after iocInit: -doAfterIocInit("create_manual_set('$(CONFIG)Menu.req','P=$(PREFIX),CONFIG=$(CONFIG),CONFIGMENU=1')") -# ### userCalc.iocsh ### -#- ################################################### -#- PREFIX - IOC Prefix -#- CALC - Location of Calc module -#- ARRAY_SIZE - Optional: Size of userArrayCalc array -#- Default: 8000 -#- ################################################### -#- ## Stuff for user programming ### -dbLoadRecords("$(CALC)/db/userCalcGlobalEnable.db", "P=$(PREFIX)") -dbLoadRecords("$(CALC)/db/userCalcs10.db", "P=$(PREFIX)") -dbLoadRecords("$(CALC)/db/userCalcOuts10.db", "P=$(PREFIX)") -dbLoadRecords("$(CALC)/db/userStringCalcs10.db", "P=$(PREFIX)") -dbLoadRecords("$(CALC)/db/userArrayCalcs10.db", "P=$(PREFIX), N=$(ARRAY_SIZE=8000)") -dbLoadRecords("$(CALC)/db/userTransforms10.db", "P=$(PREFIX)") -dbLoadRecords("$(CALC)/db/userAve10.db", "P=$(PREFIX)") -# ### userCalc.iocsh ### -#- ################################################### -#- PREFIX - IOC Prefix -#- CALC - Location of Calc module -#- N - Additional calcs index (Ex: N=1 creates calcs 10-19) -#- ARRAY_SIZE - Optional: Size of userArrayCalc array -#- Default: 8000 -#- ################################################### -#- ## Stuff for user programming ### -dbLoadRecords("$(CALC)/db/userCalcs10more.db","P=$(PREFIX),N10=$(N)0,N1=$(N)1,N2=$(N)2,N3=$(N)3,N4=$(N)4,N5=$(N)5,N6=$(N)6,N7=$(N)7,N8=$(N)8,N9=$(N)9") -dbLoadRecords("$(CALC)/db/userCalcOuts10more.db","P=$(PREFIX),N10=$(N)0,N1=$(N)1,N2=$(N)2,N3=$(N)3,N4=$(N)4,N5=$(N)5,N6=$(N)6,N7=$(N)7,N8=$(N)8,N9=$(N)9") -dbLoadRecords("$(CALC)/db/userStringCalcs10more.db","P=$(PREFIX),N10=$(N)0,N1=$(N)1,N2=$(N)2,N3=$(N)3,N4=$(N)4,N5=$(N)5,N6=$(N)6,N7=$(N)7,N8=$(N)8,N9=$(N)9") -dbLoadRecords("$(CALC)/db/userArrayCalcs10more.db","P=$(PREFIX),N10=$(N)0,N1=$(N)1,N2=$(N)2,N3=$(N)3,N4=$(N)4,N5=$(N)5,N6=$(N)6,N7=$(N)7,N8=$(N)8,N9=$(N)9,N=$(ARRAY_SIZE=8000)") -dbLoadRecords("$(CALC)/db/userTransforms10more.db","P=$(PREFIX),N10=$(N)0,N1=$(N)1,N2=$(N)2,N3=$(N)3,N4=$(N)4,N5=$(N)5,N6=$(N)6,N7=$(N)7,N8=$(N)8,N9=$(N)9") -dbLoadRecords("$(CALC)/db/userAve10more.db","P=$(PREFIX),N10=$(N)0,N1=$(N)1,N2=$(N)2,N3=$(N)3,N4=$(N)4,N5=$(N)5,N6=$(N)6,N7=$(N)7,N8=$(N)8,N9=$(N)9") -# ### sseq.iocsh ### -#- ################################################### -#- PREFIX - IOC Prefix -#- INSTANCE - Instance Prefix -#- CALC - Location of Calc module -#- ################################################### -#- string sequence (sseq) records -dbLoadRecords("$(CALC)/db/userStringSeqs10.db","P=$(PREFIX)") -#- editSseq - edit any sseq or seq record -dbLoadRecords("$(CALC)/db/editSseq.db", "P=$(PREFIX),Q=$(INSTANCE)") -doAfterIocInit("seq &editSseq, 'P=$(PREFIX),Q=$(INSTANCE)'") -#- interpolation -dbLoadRecords("$(CALC)/calcApp/Db/interp.db", "P=$(PREFIX),N=2000") -dbLoadRecords("$(CALC)/calcApp/Db/interpNew.db", "P=$(PREFIX),Q=1,N=2000") -#- busy record -dbLoadRecords("$(BUSY)/busyApp/Db/busyRecord.db", "P=$(PREFIX),R=mybusy1") -dbLoadRecords("$(BUSY)/busyApp/Db/busyRecord.db", "P=$(PREFIX),R=mybusy2") -#- Soft function generator -#dbLoadRecords("$(CALC)/calcApp/Db/FuncGen.db","P=$(PREFIX),Q=fgen,OUT=$(PREFIX)m7.VAL") -### Load database record for alive heartbeating support. -#- IOCNM is name of IOC, RHOST specifies the remote server accepting hearbeats -dbLoadRecords("$(ALIVE)/aliveApp/Db/alive.db", "P=$(PREFIX),IOCNM=$(IOC),RHOST=164.54.100.11") -dbLoadRecords("$(ALIVE)/aliveApp/Db/aliveMSGCalc.db", "P=$(PREFIX)") -#- A set of scan parameters for each positioner. This is a convenience -#- for the user. It can contain an entry for each scannable thing in the -#- crate. -#dbLoadTemplate("substitutions/scanParms.substitutions", "P=$(PREFIX)") -################################################################################ -# PyDevice Support for a simulated beamline -################################################################################ -# load template of simulated motors -# load db for detector -# AD stuff (NDSA? image? is simDet needed?) -iocshRun('epicsEnvSet("__FTVL", "$($(TYPE=Int8)_VAL)")', "Int8_VAL=UCHAR, UInt8_VAL=UCHAR, Int16_VAL=SHORT, UInt16_VAL=SHORT, Int32_VAL=LONG, UInt32_VAL=LONG, Float32_VAL=DOUBLE, Float64_VAL=DOUBLE") -iocshRun('epicsEnvSet("__TYPE", "$($(TYPE=Int8)_VAL)")', "Int8_VAL=Int8, UInt8_VAL=Int8, Int16_VAL=Int16, UInt16_VAL=Int16, Int32_VAL=Int32, UInt32_VAL=Int32, Float32_VAL=Float32, Float64_VAL=Float64") -luaCmd("epicsEnvSet('__SIZE', tostring((XSIZE*YSIZE)|0))", "XSIZE=$(XSIZE=1024), YSIZE=$(YSIZE=1024)") -# load python code for simulated beamline (detector(s) -- intensity, image(?)) -pydev("from beamline_29 import IEX") -pydev("from pyDevSBL import surrogateBL") -pydev("sbl = surrogateBL(IEX)") -# load db file for simulated detectors -dbLoadRecords("${TOP}/db/pyDevSBL.db","P=$(PREFIX), INSTANCE=SBL, OBJ=sbl, SIZE=$(__SIZE),TYPE=$(__TYPE),FTVL=$(__FTVL), NDSA=NDSA, YSIZE=$(YSIZE), XSIZE=$(XSIZE)") -# load db file for optical elements -dbLoadTemplate("substitutions/pyDevSBL_element.substitutions","P=$(PREFIX), INSTANCE=SBL, OBJ=sbl") -# Any commands to carry out after ioc init? -#doAfterIocInit("pydev('sbl.setupMotorLimits()')") # Shouldn't need this line for now as manually put limits in subs file -# ### motorSim.iocsh ### -#- ################################################### -#- PREFIX - IOC Prefix -#- INSTANCE - Instance name, used to create the low-level driver drvet name -#- Combined with the controller number to create the asyn port name -#- -#- SUB - Optional: Subsitutions file (asyn_motor.db), Macros P, DTYP, PORT, -#- DHLM, DLLM, and INIT will be predefined. -#- Default: $(MOTOR)/iocsh/EXAMPLE_motorSim.substitutions -#- -#- CONTROLLER - Optional: Which controller is being configured -#- Default: 0 -#- -#- NUM_AXES - Optional: Number of axes on this controller -#- Default: 1 -#- -#- LOW_LIM - Optional: Low Limit (in steps) -#- Default: -32000 -#- -#- HIGH_LIM - Optional: High Limit (in steps) -#- Default: 32000 -#- -#- DLLM - Optional: Motor Record Low Limit (in EGU) -#- Default: -320.0 -#- -#- DHLM - Optional: Motor Record High Limit (in EGU) -#- Default: 320.0 -#- -#- HOME_POS - Optional: Home position -#- Default: 0 -#- ################################################### -# Create simulated motors: ( start card , start axis , low limit, high limit, home posn, # cards, # axes to setup) -motorSimCreate($(CONTROLLER=0), 0, $(LOW_LIM=-32000), $(HIGH_LIM=32000), $(HOME_POS=0), 1, $(NUM_AXES=12)) -# Setup the Asyn layer (portname, low-level driver drvet name, card, number of axes on card) -drvAsynMotorConfigure("$(INSTANCE)$(CONTROLLER=0)", "$(INSTANCE)", $(CONTROLLER=0), $(NUM_AXES=12)) -dbLoadTemplate("$(SUB=$(MOTOR)/iocsh/EXAMPLE_motorSim.substitutions)", "P=$(PREFIX), DTYP='asynMotor', PORT=$(INSTANCE)$(CONTROLLER=0),DHLM=$(DHLM=320.0),DLLM=$(DLLM=-320.0)") -# 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", $(QSIZE), 0, "$(PORT)", 0) -dbLoadRecords("NDFileNetCDF.template","P=$(PREFIX),R=netCDF1:,PORT=FileNetCDF1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=$(PORT)") -# Create a TIFF file saving plugin -NDFileTIFFConfigure("FileTIFF1", $(QSIZE), 0, "$(PORT)", 0) -dbLoadRecords("NDFileTIFF.template", "P=$(PREFIX),R=TIFF1:,PORT=FileTIFF1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=$(PORT)") -# Create a JPEG file saving plugin -NDFileJPEGConfigure("FileJPEG1", $(QSIZE), 0, "$(PORT)", 0) -dbLoadRecords("NDFileJPEG.template", "P=$(PREFIX),R=JPEG1:,PORT=FileJPEG1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=$(PORT)") -# Create a NeXus file saving plugin -NDFileNexusConfigure("FileNexus1", $(QSIZE), 0, "$(PORT)", 0) -dbLoadRecords("NDFileNexus.template", "P=$(PREFIX),R=Nexus1:,PORT=FileNexus1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=$(PORT)") -# Create an HDF5 file saving plugin -NDFileHDF5Configure("FileHDF1", $(QSIZE), 0, "$(PORT)", 0) -dbLoadRecords("NDFileHDF5.template", "P=$(PREFIX),R=HDF1:,PORT=FileHDF1,ADDR=0,TIMEOUT=1,XMLSIZE=2048,NDARRAY_PORT=$(PORT)") -# 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", $(QSIZE), 0, "$(PORT)", 0, 0, 0, 0, 0, $(MAX_THREADS=5)) -dbLoadRecords("NDROI.template", "P=$(PREFIX),R=ROI1:, PORT=ROI1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=$(PORT)") -NDROIConfigure("ROI2", $(QSIZE), 0, "$(PORT)", 0, 0, 0, 0, 0, $(MAX_THREADS=5)) -dbLoadRecords("NDROI.template", "P=$(PREFIX),R=ROI2:, PORT=ROI2,ADDR=0,TIMEOUT=1,NDARRAY_PORT=$(PORT)") -NDROIConfigure("ROI3", $(QSIZE), 0, "$(PORT)", 0, 0, 0, 0, 0, $(MAX_THREADS=5)) -dbLoadRecords("NDROI.template", "P=$(PREFIX),R=ROI3:, PORT=ROI3,ADDR=0,TIMEOUT=1,NDARRAY_PORT=$(PORT)") -NDROIConfigure("ROI4", $(QSIZE), 0, "$(PORT)", 0, 0, 0, 0, 0, $(MAX_THREADS=5)) -dbLoadRecords("NDROI.template", "P=$(PREFIX),R=ROI4:, PORT=ROI4,ADDR=0,TIMEOUT=1,NDARRAY_PORT=$(PORT)") -# Create 8 ROIStat plugins -NDROIStatConfigure("ROISTAT1", $(QSIZE), 0, "$(PORT)", 0, 8, 0, 0, 0, 0, $(MAX_THREADS=5)) -dbLoadRecords("NDROIStat.template", "P=$(PREFIX),R=ROIStat1: ,PORT=ROISTAT1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=$(PORT),NCHANS=$(NCHANS)") -dbLoadRecords("NDROIStatN.template", "P=$(PREFIX),R=ROIStat1:1:,PORT=ROISTAT1,ADDR=0,TIMEOUT=1,NCHANS=$(NCHANS)") -dbLoadRecords("NDROIStatN.template", "P=$(PREFIX),R=ROIStat1:2:,PORT=ROISTAT1,ADDR=1,TIMEOUT=1,NCHANS=$(NCHANS)") -dbLoadRecords("NDROIStatN.template", "P=$(PREFIX),R=ROIStat1:3:,PORT=ROISTAT1,ADDR=2,TIMEOUT=1,NCHANS=$(NCHANS)") -dbLoadRecords("NDROIStatN.template", "P=$(PREFIX),R=ROIStat1:4:,PORT=ROISTAT1,ADDR=3,TIMEOUT=1,NCHANS=$(NCHANS)") -dbLoadRecords("NDROIStatN.template", "P=$(PREFIX),R=ROIStat1:5:,PORT=ROISTAT1,ADDR=4,TIMEOUT=1,NCHANS=$(NCHANS)") -dbLoadRecords("NDROIStatN.template", "P=$(PREFIX),R=ROIStat1:6:,PORT=ROISTAT1,ADDR=5,TIMEOUT=1,NCHANS=$(NCHANS)") -dbLoadRecords("NDROIStatN.template", "P=$(PREFIX),R=ROIStat1:7:,PORT=ROISTAT1,ADDR=6,TIMEOUT=1,NCHANS=$(NCHANS)") -dbLoadRecords("NDROIStatN.template", "P=$(PREFIX),R=ROIStat1:8:,PORT=ROISTAT1,ADDR=7,TIMEOUT=1,NCHANS=$(NCHANS)") -# Create a processing plugin -NDProcessConfigure("PROC1", $(QSIZE), 0, "$(PORT)", 0, 0, 0) -dbLoadRecords("NDProcess.template", "P=$(PREFIX),R=Proc1:, PORT=PROC1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=$(PORT)") -# Create a TIFF file plugin to read dark and flatfield images into the processing plugin -NDFileTIFFConfigure("PROC1TIFF", $(QSIZE), 0, "$(PORT)", 0) -dbLoadRecords("NDFileTIFF.template", "P=$(PREFIX),R=Proc1:TIFF:,PORT=PROC1TIFF,ADDR=0,TIMEOUT=1,NDARRAY_PORT=$(PORT)") -# Create a scatter plugin -NDScatterConfigure("SCATTER1", $(QSIZE), 0, "$(PORT)", 0, 0, 0) -dbLoadRecords("NDScatter.template", "P=$(PREFIX),R=Scatter1:, PORT=SCATTER1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=$(PORT)") -# Create a gather plugin with 8 ports -NDGatherConfigure("GATHER1", $(QSIZE), 0, 8, 0, 0) -dbLoadRecords("NDGather.template", "P=$(PREFIX),R=Gather1:, PORT=GATHER1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=$(PORT)") -dbLoadRecords("NDGatherN.template", "P=$(PREFIX),R=Gather1:, N=1, PORT=GATHER1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=$(PORT)") -dbLoadRecords("NDGatherN.template", "P=$(PREFIX),R=Gather1:, N=2, PORT=GATHER1,ADDR=1,TIMEOUT=1,NDARRAY_PORT=$(PORT)") -dbLoadRecords("NDGatherN.template", "P=$(PREFIX),R=Gather1:, N=3, PORT=GATHER1,ADDR=2,TIMEOUT=1,NDARRAY_PORT=$(PORT)") -dbLoadRecords("NDGatherN.template", "P=$(PREFIX),R=Gather1:, N=4, PORT=GATHER1,ADDR=3,TIMEOUT=1,NDARRAY_PORT=$(PORT)") -dbLoadRecords("NDGatherN.template", "P=$(PREFIX),R=Gather1:, N=5, PORT=GATHER1,ADDR=4,TIMEOUT=1,NDARRAY_PORT=$(PORT)") -dbLoadRecords("NDGatherN.template", "P=$(PREFIX),R=Gather1:, N=6, PORT=GATHER1,ADDR=5,TIMEOUT=1,NDARRAY_PORT=$(PORT)") -dbLoadRecords("NDGatherN.template", "P=$(PREFIX),R=Gather1:, N=7, PORT=GATHER1,ADDR=6,TIMEOUT=1,NDARRAY_PORT=$(PORT)") -dbLoadRecords("NDGatherN.template", "P=$(PREFIX),R=Gather1:, N=8, PORT=GATHER1,ADDR=7,TIMEOUT=1,NDARRAY_PORT=$(PORT)") -# Create 5 statistics plugins -NDStatsConfigure("STATS1", $(QSIZE), 0, "$(PORT)", 0, 0, 0, 0, 0, $(MAX_THREADS=5)) -dbLoadRecords("NDStats.template", "P=$(PREFIX),R=Stats1:, PORT=STATS1,ADDR=0,TIMEOUT=1,HIST_SIZE=256,XSIZE=$(XSIZE),YSIZE=$(YSIZE),NCHANS=$(NCHANS),NDARRAY_PORT=$(PORT)") -NDTimeSeriesConfigure("STATS1_TS", $(QSIZE), 0, "STATS1", 1, 23) -dbLoadRecords("$(ADCORE)/db/NDTimeSeries.template", "P=$(PREFIX),R=Stats1:TS:, PORT=STATS1_TS,ADDR=0,TIMEOUT=1,NDARRAY_PORT=STATS1,NDARRAY_ADDR=1,NCHANS=$(NCHANS),ENABLED=1") -NDStatsConfigure("STATS2", $(QSIZE), 0, "ROI1", 0, 0, 0, 0, 0, $(MAX_THREADS=5)) -dbLoadRecords("NDStats.template", "P=$(PREFIX),R=Stats2:, PORT=STATS2,ADDR=0,TIMEOUT=1,HIST_SIZE=256,XSIZE=$(XSIZE),YSIZE=$(YSIZE),NCHANS=$(NCHANS),NDARRAY_PORT=$(PORT)") -NDTimeSeriesConfigure("STATS2_TS", $(QSIZE), 0, "STATS2", 1, 23) -dbLoadRecords("$(ADCORE)/db/NDTimeSeries.template", "P=$(PREFIX),R=Stats2:TS:, PORT=STATS2_TS,ADDR=0,TIMEOUT=1,NDARRAY_PORT=STATS2,NDARRAY_ADDR=1,NCHANS=$(NCHANS),ENABLED=1") -NDStatsConfigure("STATS3", $(QSIZE), 0, "ROI2", 0, 0, 0, 0, 0, $(MAX_THREADS=5)) -dbLoadRecords("NDStats.template", "P=$(PREFIX),R=Stats3:, PORT=STATS3,ADDR=0,TIMEOUT=1,HIST_SIZE=256,XSIZE=$(XSIZE),YSIZE=$(YSIZE),NCHANS=$(NCHANS),NDARRAY_PORT=$(PORT)") -NDTimeSeriesConfigure("STATS3_TS", $(QSIZE), 0, "STATS3", 1, 23) -dbLoadRecords("$(ADCORE)/db/NDTimeSeries.template", "P=$(PREFIX),R=Stats3:TS:, PORT=STATS3_TS,ADDR=0,TIMEOUT=1,NDARRAY_PORT=STATS3,NDARRAY_ADDR=1,NCHANS=$(NCHANS),ENABLED=1") -NDStatsConfigure("STATS4", $(QSIZE), 0, "ROI3", 0, 0, 0, 0, 0, $(MAX_THREADS=5)) -dbLoadRecords("NDStats.template", "P=$(PREFIX),R=Stats4:, PORT=STATS4,ADDR=0,TIMEOUT=1,HIST_SIZE=256,XSIZE=$(XSIZE),YSIZE=$(YSIZE),NCHANS=$(NCHANS),NDARRAY_PORT=$(PORT)") -NDTimeSeriesConfigure("STATS4_TS", $(QSIZE), 0, "STATS4", 1, 23) -dbLoadRecords("$(ADCORE)/db/NDTimeSeries.template", "P=$(PREFIX),R=Stats4:TS:, PORT=STATS4_TS,ADDR=0,TIMEOUT=1,NDARRAY_PORT=STATS4,NDARRAY_ADDR=1,NCHANS=$(NCHANS),ENABLED=1") -NDStatsConfigure("STATS5", $(QSIZE), 0, "ROI4", 0, 0, 0, 0, 0, $(MAX_THREADS=5)) -dbLoadRecords("NDStats.template", "P=$(PREFIX),R=Stats5:, PORT=STATS5,ADDR=0,TIMEOUT=1,HIST_SIZE=256,XSIZE=$(XSIZE),YSIZE=$(YSIZE),NCHANS=$(NCHANS),NDARRAY_PORT=$(PORT)") -NDTimeSeriesConfigure("STATS5_TS", $(QSIZE), 0, "STATS5", 1, 23) -dbLoadRecords("$(ADCORE)/db/NDTimeSeries.template", "P=$(PREFIX),R=Stats5:TS:, PORT=STATS5_TS,ADDR=0,TIMEOUT=1,NDARRAY_PORT=STATS5,NDARRAY_ADDR=1,NCHANS=$(NCHANS),ENABLED=1") -# Create a transform plugin -NDTransformConfigure("TRANS1", $(QSIZE), 0, "$(PORT)", 0, 0, 0, 0, 0, $(MAX_THREADS=5)) -dbLoadRecords("NDTransform.template", "P=$(PREFIX),R=Trans1:, PORT=TRANS1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=$(PORT)") -# Create an overlay plugin with 8 overlays -NDOverlayConfigure("OVER1", $(QSIZE), 0, "$(PORT)", 0, 8, 0, 0, 0, 0, $(MAX_THREADS=5)) -dbLoadRecords("NDOverlay.template", "P=$(PREFIX),R=Over1:, PORT=OVER1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=$(PORT)") -dbLoadRecords("NDOverlayN.template","P=$(PREFIX),R=Over1:1:,NAME=ROI1, SHAPE=1,O=Over1:,XPOS=$(PREFIX)ROI1:MinX_RBV,YPOS=$(PREFIX)ROI1:MinY_RBV,XSIZE=$(PREFIX)ROI1:SizeX_RBV,YSIZE=$(PREFIX)ROI1:SizeY_RBV,PORT=OVER1,ADDR=0,TIMEOUT=1") -dbLoadRecords("NDOverlayN.template","P=$(PREFIX),R=Over1:2:,NAME=ROI2, SHAPE=1,O=Over1:,XPOS=$(PREFIX)ROI2:MinX_RBV,YPOS=$(PREFIX)ROI2:MinY_RBV,XSIZE=$(PREFIX)ROI2:SizeX_RBV,YSIZE=$(PREFIX)ROI2:SizeY_RBV,PORT=OVER1,ADDR=1,TIMEOUT=1") -dbLoadRecords("NDOverlayN.template","P=$(PREFIX),R=Over1:3:,NAME=ROI3, SHAPE=1,O=Over1:,XPOS=$(PREFIX)ROI3:MinX_RBV,YPOS=$(PREFIX)ROI3:MinY_RBV,XSIZE=$(PREFIX)ROI3:SizeX_RBV,YSIZE=$(PREFIX)ROI3:SizeY_RBV,PORT=OVER1,ADDR=2,TIMEOUT=1") -dbLoadRecords("NDOverlayN.template","P=$(PREFIX),R=Over1:4:,NAME=ROI4, SHAPE=1,O=Over1:,XPOS=$(PREFIX)ROI4:MinX_RBV,YPOS=$(PREFIX)ROI4:MinY_RBV,XSIZE=$(PREFIX)ROI4:SizeX_RBV,YSIZE=$(PREFIX)ROI4:SizeY_RBV,PORT=OVER1,ADDR=3,TIMEOUT=1") -dbLoadRecords("NDOverlayN.template","P=$(PREFIX),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=$(PREFIX),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=$(PREFIX),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=$(PREFIX),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", $(QSIZE), 0, "$(PORT)", 0, 0, 0, 0, 0, $(MAX_THREADS=5)) -dbLoadRecords("NDColorConvert.template", "P=$(PREFIX),R=CC1:, PORT=CC1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=$(PORT)") -NDColorConvertConfigure("CC2", $(QSIZE), 0, "$(PORT)", 0, 0, 0, 0, 0, $(MAX_THREADS=5)) -dbLoadRecords("NDColorConvert.template", "P=$(PREFIX),R=CC2:, PORT=CC2,ADDR=0,TIMEOUT=1,NDARRAY_PORT=$(PORT)") -# Create a circular buffer plugin -NDCircularBuffConfigure("CB1", $(QSIZE), 0, "$(PORT)", 0, $(CBUFFS), 0) -dbLoadRecords("NDCircularBuff.template", "P=$(PREFIX),R=CB1:, PORT=CB1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=$(PORT)") -# Create an NDAttribute plugin with 8 attributes -NDAttrConfigure("ATTR1", $(QSIZE), 0, "$(PORT)", 0, 8, 0, 0, 0) -dbLoadRecords("NDAttribute.template", "P=$(PREFIX),R=Attr1:, PORT=ATTR1,ADDR=0,TIMEOUT=1,NCHANS=$(NCHANS),NDARRAY_PORT=$(PORT)") -dbLoadRecords("NDAttributeN.template", "P=$(PREFIX),R=Attr1:1:, PORT=ATTR1,ADDR=0,TIMEOUT=1,NCHANS=$(NCHANS)") -dbLoadRecords("NDAttributeN.template", "P=$(PREFIX),R=Attr1:2:, PORT=ATTR1,ADDR=1,TIMEOUT=1,NCHANS=$(NCHANS)") -dbLoadRecords("NDAttributeN.template", "P=$(PREFIX),R=Attr1:3:, PORT=ATTR1,ADDR=2,TIMEOUT=1,NCHANS=$(NCHANS)") -dbLoadRecords("NDAttributeN.template", "P=$(PREFIX),R=Attr1:4:, PORT=ATTR1,ADDR=3,TIMEOUT=1,NCHANS=$(NCHANS)") -dbLoadRecords("NDAttributeN.template", "P=$(PREFIX),R=Attr1:5:, PORT=ATTR1,ADDR=4,TIMEOUT=1,NCHANS=$(NCHANS)") -dbLoadRecords("NDAttributeN.template", "P=$(PREFIX),R=Attr1:6:, PORT=ATTR1,ADDR=5,TIMEOUT=1,NCHANS=$(NCHANS)") -dbLoadRecords("NDAttributeN.template", "P=$(PREFIX),R=Attr1:7:, PORT=ATTR1,ADDR=6,TIMEOUT=1,NCHANS=$(NCHANS)") -dbLoadRecords("NDAttributeN.template", "P=$(PREFIX),R=Attr1:8:, PORT=ATTR1,ADDR=7,TIMEOUT=1,NCHANS=$(NCHANS)") -NDTimeSeriesConfigure("ATTR1_TS", $(QSIZE), 0, "ATTR1", 1, 8) -dbLoadRecords("$(ADCORE)/db/NDTimeSeries.template", "P=$(PREFIX),R=Attr1:TS:, PORT=ATTR1_TS,ADDR=0,TIMEOUT=1,NDARRAY_PORT=ATTR1,NDARRAY_ADDR=1,NCHANS=$(NCHANS),ENABLED=1") -# Create an FFT plugin -NDFFTConfigure("FFT1", $(QSIZE), 0, "$(PORT)", 0, 0, 0, 0, 0, 5) -dbLoadRecords("NDFFT.template", "P=$(PREFIX), R=FFT1:, PORT=FFT1, ADDR=0, TIMEOUT=1, NDARRAY_PORT=$(PORT), NAME=FFT1, NCHANS=$(XSIZE)") -# Create 2 Codec plugins -NDCodecConfigure("CODEC1", $(QSIZE), 0, "$(PORT)", 0, 0, 0, 0, 0, 5) -dbLoadRecords("NDCodec.template", "P=$(PREFIX), R=Codec1:, PORT=CODEC1, ADDR=0, TIMEOUT=1, NDARRAY_PORT=$(PORT)") -NDCodecConfigure("CODEC2", $(QSIZE), 0, "$(PORT)", 0, 0, 0, 0, 0, 5) -dbLoadRecords("NDCodec.template", "P=$(PREFIX), R=Codec2:, PORT=CODEC2, ADDR=0, TIMEOUT=1, NDARRAY_PORT=$(PORT)") -# Create a bad pixel plugin -NDBadPixelConfigure("BADPIX1", $(QSIZE), 0, "$(PORT)", 0, 0, 0, 0, 0, 5) -dbLoadRecords("NDBadPixel.template", "P=$(PREFIX), R=BadPix1:, PORT=BADPIX1, ADDR=0, TIMEOUT=1, NDARRAY_PORT=$(PORT)") -set_requestfile_path("./") -set_requestfile_path("$(ADCORE)/db") -set_requestfile_path("$(ADCORE)/iocBoot") -set_requestfile_path("$(AUTOSAVE)/db") -set_savefile_path("./autosave") -set_pass0_restoreFile("auto_settings.sav") -set_pass1_restoreFile("auto_settings.sav") -save_restoreSet_status_prefix("$(PREFIX)") -dbLoadRecords("$(AUTOSAVE)/db/save_restoreStatus.db", "P=$(PREFIX)") dbLoadRecords("$(AUTOSAVE)/db/configMenu.db", "P=$(PREFIX), CONFIG=ADAutoSave") # Optional: load NDPluginPva plugin NDPvaConfigure("PVA1", $(QSIZE), 0, "$(PORT)", 0, $(PREFIX)Pva1:Image, 0, 0, 0) -- GitLab