Files
ecmc_plugin_fft/iocsh/test_plugin_FFT.script
2020-12-04 10:30:23 +01:00

84 lines
4.3 KiB
Plaintext

##############################################################################
## Example: Configuraftion for running ecmc FFT plugin
##############################################################################
## Initiation:
epicsEnvSet("IOC" ,"$(IOC="IOC_TEST")")
epicsEnvSet("ECMCCFG_INIT" ,"") #Only run startup once (auto at PSI, need call at ESS), variable set to "#" in startup.cmd
epicsEnvSet("SCRIPTEXEC" ,"$(SCRIPTEXEC="iocshLoad")")
require ecmccfg "6.3.0"
##############################################################################
###### Startup
require ecmc "6.3.0"
#-------------------------------------------------------------------------------
#- define default PATH for scripts and database/templates
epicsEnvSet("SCRIPTEXEC", "${SCRIPTEXEC=iocshLoad}")
epicsEnvSet("ECMC_CONFIG_ROOT", "${ecmccfg_DIR}")
epicsEnvSet("STREAM_PROTOCOL_PATH", "${STREAM_PROTOCOL_PATH=""}:${ECMC_CONFIG_ROOT}:${ecmccfg_DB}")
#-
#-------------------------------------------------------------------------------
#- define IOC Prefix
epicsEnvSet("SM_PREFIX", "${IOC}:") # colon added since IOC is _not_ PREFIX
#-
#-------------------------------------------------------------------------------
#- call init-script, defaults to 'initAll'
ecmcFileExist("${ecmccfg_DIR}${INIT=initAll}.cmd",1)
${SCRIPTEXEC} "${ecmccfg_DIR}${INIT=initAll}.cmd"
#-
#-------------------------------------------------------------------------------
epicsEnvSet("ECMC_SAMPLE_RATE_MS" ,100) # Records update period
epicsEnvSet("ECMC_EC_SAMPLE_RATE" ,100) # Realtime loop sample rate
ecmcConfigOrDie "Cfg.SetSampleRate(${ECMC_EC_SAMPLE_RATE})"
##############################################################################
## Configure hardware.
# No EtherCAT hardware..
##############################################################################
require ecmc_plugin_fft master # te get access to db file..
epicsEnvSet("FFT_NELM", 1024)
########################################################################s######
## Load plugin: FFT
epicsEnvSet(ECMC_PLUGIN_FILNAME,"/home/pi/epics/base-7.0.4/require/3.3.0/siteMods/ecmc_plugin_fft/master/lib/${EPICS_HOST_ARCH=linux-x86_64}/libecmc_plugin_fft.so")
epicsEnvSet(ECMC_PLUGIN_CONFIG,"SOURCE=plcs.plc0.static.sineval;DBG_PRINT=0;NFFT=1024;RATE=100;RM_DC=1;SCALE=1;MODE=CONT;ENABLE=1;")
${SCRIPTEXEC} ${ecmccfg_DIR}loadPlugin.cmd, "PLUGIN_ID=0,FILE=${ECMC_PLUGIN_FILNAME},CONFIG='${ECMC_PLUGIN_CONFIG}', REPORT=1"
# Note: INDEX is the index of FFT object in FFT plugin and not PLUGIN_ID. In this case the same
dbLoadRecords(ecmcPluginFFT.template,"P=$(IOC):,INDEX=0, NELM=${FFT_NELM}, AMP_DESC='Sine amplitude',AMP_EGU='',RAW_DESC='Sine',AMP_EGU='', TITLE='FFT of sinus in 5Hz'")
########################################################################s######
## Load plugin: FFT again (will create a new FFT object in the same namespace)
epicsEnvSet(ECMC_PLUGIN_FILNAME,"/home/pi/epics/base-7.0.4/require/3.3.0/siteMods/ecmc_plugin_fft/master/lib/${EPICS_HOST_ARCH=linux-x86_64}/libecmc_plugin_fft.so")
epicsEnvSet(ECMC_PLUGIN_CONFIG,"SOURCE=ecmc.thread.latency.max;DBG_PRINT=0;NFFT=1024;ENABLE=1;")
${SCRIPTEXEC} ${ecmccfg_DIR}loadPlugin.cmd, "PLUGIN_ID=1,FILE=${ECMC_PLUGIN_FILNAME},CONFIG='${ECMC_PLUGIN_CONFIG}', REPORT=1"
# Note: INDEX is the index of FFT object in FFT plugin and not PLUGIN_ID. In this case the same
dbLoadRecords(ecmcPluginFFT.template,"P=$(IOC):,INDEX=1, NELM=${FFT_NELM}, AMP_DESC='Latency amplitude',AMP_EGU='ns',RAW_DESC='Latency',AMP_EGU='ns',TITLE='FFT of ecmc latencny'")
epicsEnvUnset(ECMC_PLUGIN_FILNAME)
epicsEnvUnset(ECMC_PLUGIN_CONFIG)
##############################################################################
## PLC 0: Generate a sine wave at 5Hz
$(SCRIPTEXEC) $(ecmccfg_DIR)loadPLCFile.cmd, "PLC_ID=0, SAMPLE_RATE_MS=10,FILE=./plc/plc_no_ec_fft_sin.plc, PLC_MACROS='FREQ=5'")
##############################################################################
############# Configure diagnostics:
# go active
ecmcFileExist("${ecmccfg_DIR}generalDiagnostics.cmd",1)
${SCRIPTEXEC} ${ecmccfg_DIR}generalDiagnostics.cmd ECMC_TSE=0
ecmcFileExist("ecmcGeneral.db",1,1)
dbLoadRecords("ecmcGeneral.db","P=${ECMC_PREFIX},PORT=${ECMC_ASYN_PORT},ADDR=0,TIMEOUT=1,T_SMP_MS=10,TSE=${ECMC_TSE=0}")
# Nice commands for info ecmcReport <level> or asynReport <level>
# ecmcReport 3
ecmcConfigOrDie "Cfg.SetAppMode(1)"
iocInit
dbl > pvs.log