diff --git a/iocBoot/iocxxx/common.iocsh b/iocBoot/iocxxx/common.iocsh new file mode 100644 index 0000000000000000000000000000000000000000..4e25bdc91bfbf48f04c2d94bd0c878ab77316442 --- /dev/null +++ b/iocBoot/iocxxx/common.iocsh @@ -0,0 +1,244 @@ +########################## ############################################################################ +# environment variable description +########################## ############################################################################ +# PREFIX prefix used for all PVs in this IOC +# EPICS_DB_INCLUDE_PATH search path for database files +# EPICS_CA_MAX_ARRAY_BYTES Specify largest array CA will transport +# IOCBOOT absolute directory path in which this file is located +########################## ############################################################################ +#For devIocStats +epicsEnvSet("ENGINEER", "engineer") +epicsEnvSet("LOCATION", "location") +epicsEnvSet("GROUP", "group") + +epicsEnvSet("PREFIX", "xxx:") + +### For alive +epicsEnvSet("IOCBOOT", $(TOP)/iocBoot/$(IOC)) + +epicsEnvSet("EPICS_DB_INCLUDE_PATH", "$(DEVIOCSTATS)/db") + +# set the protocol path for streamDevice +epicsEnvSet("STREAM_PROTOCOL_PATH", ".") + +# save_restore.cmd needs the full path to the startup directory, which +# envPaths currently does not provide +epicsEnvSet(STARTUP,$(TOP)/iocBoot/$(IOC)) + +# 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 +< common/save_restore.cmd + +# Access Security +dbLoadRecords("$(TOP)/xxxApp/Db/Security_Control.db","P=$(PREFIX)") +asSetFilename("$(TOP)/iocBoot/accessSecurity.acf") +asSetSubstitutions("P=$(PREFIX)") + +### caputRecorder + +# 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") + +# second copy of GUI database +#dbLoadRecords("$(CAPUTRECORDER)/caputRecorderApp/Db/caputRecorder.db","P=$(PREFIX)A:,N=300") + +# user-assignable ramp/tweak +dbLoadRecords("$(STD)/stdApp/Db/ramp_tweak.db","P=$(PREFIX),Q=rt1") + +# < $(PLATFORM)/areaDetector.cmd + +# Motors +dbLoadTemplate("$(PLATFORM)/motor.substitutions") +#dbLoadTemplate("common/softMotor.substitutions") +#dbLoadTemplate("common/pseudoMotor.substitutions") + +# Allstop, alldone +dbLoadRecords("$(MOTOR)/db/motorUtil.db", "P=$(PREFIX)") +doAfterIocInit("motorUtilInit('$(PREFIX)')") + +### streamDevice example +#dbLoadRecords("$(TOP)/xxxApp/Db/streamExample.db","P=$(PREFIX),PORT=serial1") + +### Insertion-device control +#dbLoadRecords("$(STD)/stdApp/Db/IDctrl.db","P=$(PREFIX),xx=02us") + +### 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.) +epicsEnvSet("SDB", "$(SSCAN)/sscanApp/Db/standardScans.db") +dbLoadRecords("$(SDB)","P=$(PREFIX),MAXPTS1=1000,MAXPTS2=1000,MAXPTS3=1000,MAXPTS4=1000,MAXPTSH=1000") +#dbLoadRecords("$(SSCAN)/sscanApp/Db/scanAux.db","P=$(PREFIX),S=scanAux,MAXPTS=100") + +# 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(saveData.req, 'P=$(PREFIX)')") + +dbLoadRecords("$(SSCAN)/sscanApp/Db/scanProgress.db","P=$(PREFIX)scanProgress:") +doAfterIocInit("seq &scanProgress, 'S=$(PREFIX), P=$(PREFIX)scanProgress:'") + +# configMenu example. +dbLoadRecords("$(AUTOSAVE)/asApp/Db/configMenu.db","P=$(PREFIX),CONFIG=scan1") +# 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('scan1Menu.req','P=$(PREFIX),CONFIG=scan1,CONFIGMENU=1')") +# You could make scan configurations read-only: +#dbLoadRecords("$(AUTOSAVE)/asApp/Db/configMenu.db","P=$(PREFIX),CONFIG=scan1,ENABLE_SAVE=0") + +# read-only configMenu example. (Read-only, because we're not calling create_manual_set().) +#dbLoadRecords("$(AUTOSAVE)/asApp/Db/configMenu.db","P=$(PREFIX),CONFIG=scan2") + +# 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("$(PLATFORM)/scanParms.substitutions") + +### Slits (If not supplied, RELTOCENTER defaults to zero) +dbLoadRecords("$(OPTICS)/opticsApp/Db/2slit.db","P=$(PREFIX),SLIT=Slit1V,mXp=m3,mXn=m4,RELTOCENTER=0") +dbLoadRecords("$(OPTICS)/opticsApp/Db/2slit.db","P=$(PREFIX),SLIT=Slit1H,mXp=m5,mXn=m6,RELTOCENTER=0") + +# X-ray Instrumentation Associates Huber Slit Controller +# supported by a customized version of the SNL program written by Pete Jemian +# (Uses asyn record loaded separately) +#dbLoadRecords("$(OPTICS)/opticsApp/Db/xia_slit.db", "P=$(PREFIX), HSC=hsc1:") +#dbLoadRecords("$(OPTICS)/opticsApp/Db/xia_slit.db", "P=$(PREFIX), HSC=hsc2:") +#dbLoadRecords("$(IP)/ipApp/Db/generic_serial.db", "P=$(PREFIX),C=0,SERVER=serial7") +#doAfterIocInit("seq &xia_slit, 'name=hsc1, P=$(PREFIX), HSC=hsc1:, S=$(PREFIX)asyn_6'") +#doAfterIocInit("seq &xia_slit, 'name=hsc2, P=$(PREFIX), HSC=hsc2:, S=$(PREFIX)asyn_6'") + +### 2-post mirror +#dbLoadRecords("$(OPTICS)/opticsApp/Db/2postMirror.db","P=$(PREFIX),Q=M1,mDn=m1,mUp=m2,LENGTH=0.3") + +### User filters +#dbLoadRecords("$(OPTICS)/opticsApp/Db/filterMotor.db","P=$(PREFIX),Q=fltr1:,MOTOR=m1,LOCK=fltr_1_2:") +#dbLoadRecords("$(OPTICS)/opticsApp/Db/filterMotor.db","P=$(PREFIX),Q=fltr2:,MOTOR=m2,LOCK=fltr_1_2:") +#dbLoadRecords("$(OPTICS)/opticsApp/Db/filterLock.db","P=$(PREFIX),Q=fltr2:,LOCK=fltr_1_2:,LOCK_PV=$(PREFIX)DAC1_1.VAL") + +### Optical tables +epicsEnvSet("DIR", "$(OPTICS)/opticsApp/Db") +dbLoadRecords("$(DIR)/table.db","P=$(PREFIX),Q=Table1,T=table1,M0X=m1,M0Y=m2,M1Y=m3,M2X=m4,M2Y=m5,M2Z=m6,GEOM=SRI") +#dbLoadRecords("$(DIR)/table.db","P=$(PREFIX),Q=Table1,T=table1,M0X=m1,M0Y=m2,M1Y=m3,M2X=m4,M2Y=m5,M2Z=m6,GEOM=NEWPORT") +#dbLoadRecords("$(DIR)/table.db","P=$(PREFIX),Q=Table2,T=table2,M0X=m1,M0Y=m2,M1Y=m3,M2X=m4,M2Y=m5,M2Z=m6,GEOM=SRI") + +# Io calculation +#dbLoadRecords("$(OPTICS)/opticsApp/Db/Io.db","P=$(PREFIX)Io:") +#doAfterIocInit("seq &Io, 'P=$(PREFIX)Io:,MONO=$(PREFIX)BraggEAO,VSC=$(PREFIX)scaler1'") + +### Monochromator support ### +# Kohzu and PSL monochromators: Bragg and theta/Y/Z motors +# standard geometry (geometry 1) +#dbLoadRecords("$(OPTICS)/opticsApp/Db/kohzuSeq.db","P=$(PREFIX),M_THETA=m1,M_Y=m2,M_Z=m3,yOffLo=17.4999,yOffHi=17.5001") +#doAfterIocInit("seq &kohzuCtl, 'P=$(PREFIX), M_THETA=m1, M_Y=m2, M_Z=m3, GEOM=1, logfile=kohzuCtl.log'") +# modified geometry (geometry 2) +#dbLoadRecords("$(OPTICS)/opticsApp/Db/kohzuSeq.db","P=$(PREFIX),M_THETA=m1,M_Y=m2,M_Z=m2,yOffLo=4,yOffHi=36") +#doAfterIocInit("seq &kohzuCtl, 'P=$(PREFIX), M_THETA=m1, M_Y=m2, M_Z=m3, GEOM=2, logfile=kohzuCtl.log'") +# Example of specifying offset limits +#doAfterIocInit("epicsThreadSleep(5.)") +#doAfterIocInit("dbpf $(PREFIX)kohzu_yOffsetAO.DRVH 17.51") +#doAfterIocInit("dbpf $(PREFIX)kohzu_yOffsetAO.DRVL 17.49") + +# Spherical grating monochromator +#dbLoadRecords("$(OPTICS)/opticsApp/Db/SGM.db","P=$(PREFIX),N=1,M_x=m7,M_rIn=m6,M_rOut=m8,M_g=m9") + +# 4-bounce high-resolution monochromator +#dbLoadRecords("$(OPTICS)/opticsApp/Db/hrSeq.db","P=$(PREFIX),N=1,M_PHI1=m1,M_PHI2=m2") +#doAfterIocInit("dbpf '$(PREFIX)HR1CtlDebug','1'") +#doAfterIocInit("seq &hrCtl, 'P=$(PREFIX), N=1, M_PHI1=m4, M_PHI2=m5, logfile=hrCtl.log'") +#dbLoadRecords("$(OPTICS)/opticsApp/Db/hrSeq.db","P=$(PREFIX),N=2,M_PHI1=m11,M_PHI2=m12") + +### multilayer monochromator: Bragg and theta/Y/Z motors +#dbLoadRecords("$(OPTICS)/opticsApp/Db/ml_monoSeq.db","P=$(PREFIX)") +#doAfterIocInit("seq &ml_monoCtl, 'P=$(PREFIX), M_THETA=m1, M_THETA2=m2, M_Y=m3, M_Z=m4, Y_OFF=35., GEOM=1'") + +### Orientation matrix, four-circle diffractometer (see seq program 'orient' below) +#dbLoadRecords("$(OPTICS)/opticsApp/Db/orient.db", "P=$(PREFIX),O=1,PREC=6") +#dbLoadTemplate("common/orient_xtals.substitutions") +#doAfterIocInit("seq &orient, 'P=$(PREFIX)orient1:,PM=$(PREFIX),mTTH=m9,mTH=m10,mCHI=m11,mPHI=m12'") + + +# Coarse/Fine stage +#dbLoadRecords("$(OPTICS)/opticsApp/Db/CoarseFineMotor.db","P=$(PREFIX)cf1:,PM=$(PREFIX),CM=m7,FM=m8") + +# Load single element Canberra AIM MCA and ICB modules +#< $(PLATFORM)/canberra_1.cmd + +# Load 13 element detector software +#< $(PLATFORM)/canberra_13.cmd + +# Load 3 element detector software +#< $(PLATFORM)/canberra_3.cmd + +### Stuff for user programming ### +< common/calc.cmd + +# 4-step measurement +dbLoadRecords("$(STD)/stdApp/Db/4step.db", "P=$(PREFIX),Q=4step:") + +# user-assignable ramp/tweak +dbLoadRecords("$(STD)/stdApp/Db/ramp_tweak.db","P=$(PREFIX),Q=rt1") + +# pvHistory (in-crate archive of up to three PV's) +dbLoadRecords("$(STD)/stdApp/Db/pvHistory.db","P=$(PREFIX),N=1,MAXSAMPLES=1440") + +# software timer +dbLoadRecords("$(STD)/stdApp/Db/timer.db","P=$(PREFIX),N=1") + +# Slow feedback +dbLoadTemplate "pid_slow.substitutions" +dbLoadTemplate "$(PLATFORM)/async_pid_slow.substitutions" +#dbLoadTemplate "common/fb_epid.substitutions" + +# Miscellaneous PV's, such as burtResult +dbLoadRecords("$(STD)/stdApp/Db/misc.db","P=$(PREFIX)") + +### Queensgate piezo driver +#dbLoadRecords("$(IP)/ipApp/Db/pzt.db","P=$(PREFIX)") +#dbLoadRecords("$(IP)/ipApp/Db/pzt.db","P=$(PREFIX),PORT=") + +### Queensgate Nano2k piezo controller +#dbLoadRecords("$(STD)/stdApp/Db/Nano2k.db","P=$(PREFIX),S=s1") + +### Load database records for Femto amplifiers +#dbLoadRecords("$(STD)/stdApp/Db/femto.db","P=$(PREFIX),H=fem01:,F=seq01:") +epicsEnvSet("FBO", "$(PREFIX)Unidig1Bo") +#doAfterIocInit("seq &femto,'name=fem1,P=$(PREFIX),H=fem01:,F=seq01:,G1=$(FBO)6,G2=$(FBO)7,G3=$(FBO)8,NO=$(FBO)10'") + +### Load database records for dual PF4 filters +#dbLoadRecords("$(OPTICS)/opticsApp/Db/pf4common.db","P=$(PREFIX),H=pf4:,A=A,B=B") +#dbLoadRecords("$(OPTICS)/opticsApp/Db/pf4bank.db","P=$(PREFIX),H=pf4:,B=A") +#dbLoadRecords("$(OPTICS)/opticsApp/Db/pf4bank.db","P=$(PREFIX),H=pf4:,B=B") +# Start PF4 filter sequence programs +# name = what user will call it +# P = prefix of database and sequencer +# H = hardware (i.e. pf4) +# B = bank indicator (i.e. A,B) +# M = Monochromatic-beam energy PV +# BP = Filter control bit PV prefix +# B1 = Filter control bit 0 number +# B2 = Filter control bit 1 number +# B3 = Filter control bit 2 number +# B4 = Filter control bit 3 number +#doAfterIocInit("seq pf4,'name=pf1,P=$(PREFIX),H=pf4:,B=A,M=$(PREFIX)userTran10.I,B1=$(PREFIX)userTran10.A,B2=$(PREFIX)userTran10.B,B3=$(PREFIX)userTran10.C,B4=$(PREFIX)userTran10.D'") +#doAfterIocInit("seq pf4,'name=pf2,P=$(PREFIX),H=pf4:,B=B,M=$(PREFIX)userTran10.I,B1=$(PREFIX)userTran10.E,B2=$(PREFIX)userTran10.F,B3=$(PREFIX)userTran10.G,B4=$(PREFIX)userTran10.H'") + +### Load database records for alternative PF4-filter support +#dbLoadTemplate "filter.substitutions" +#doAfterIocInit("seq filterDrive,'NAME=filterDrive,P=$(PREFIX),R=filter:,NUM_FILTERS=16'") + +# trajectory scan +#dbLoadRecords("$(MOTOR)/motorApp/Db/trajectoryScan.db","P=$(PREFIX),R=traj1:,NAXES=2,NELM=300,NPULSE=300") +#doAfterIocInit("seq &MAX_trajectoryScan, 'P=$(PREFIX),R=traj1:,M1=m1,M2=m2,M3=m3,M4=m4,M5=m5,M6=m6,M7=m7,M8=m8,PORT=none'") + +### Load database record for alive heartbeating support. +# RHOST specifies the IP address that receives the heartbeats. +dbLoadRecords("$(ALIVE)/aliveApp/Db/alive.db", "P=$(PREFIX),RHOST=164.54.100.11")