Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

First, define the usual environment variables in the startup script.

Common setup

Load dbd and IOC health/monitoring records.  Also, set up autosave and load the LCLS access configuration file.  Finally, copy the archive file in $IOC_DATA to enable record archiving.

Autosave initialization

Tell the IOC where to find the list of record names that will be autosaved.

Besides the auto-generated record names for autosave, copy the manually generated list of records to be autosaved.

Yaml initialization

Load the YAML hierarchy and register configuration.

Database loading

Load the phase locker records.

Asyn driver configuration

Create the ycpswAsynDriver with a dictionary option, i.e. use a limited number of interfaces to the FPGA registers, and load the YAML tree hierarchy.

Archiver list

...


Code Block
languagebash
# ===========================================
#            ENVIRONMENT VARIABLES
# ===========================================
epicsEnvSet("IOC",                  "sioc-sys0-ms11"            )   
epicsEnvSet("DEVICE",               "MSLK"                      )   
epicsEnvSet("LOCA",                 "SYS0"                      )   
epicsEnvSet("UNIT",                 "MS11"                      )   
epicsEnvSet("IOC_NAME",             "SIOC:$(LOCA):$(UNIT)"      )   
epicsEnvSet("IOC_PV",               "$(DEVICE):$(LOCA):$(UNIT)" )
epicsEnvSet("PREFIX",               "${IOC_PV}"                 )   
epicsEnvSet("INDEX",                "0"                         )   
epicsEnvSet("ENGINEER",             "Michael Skoufis"           )   
epicsEnvSet("TXIP",                 "172.27.136.38"             )   
epicsEnvSet("RXIP",                 "172.27.136.39"             )   
epicsEnvSet("STREAM_PROTOCOL_PATH", "$(TOP)/rfofApp/srcProtocol")

Common setup

Load dbd and IOC health/monitoring records.  Also, set up autosave and load the LCLS access configuration file.  Finally, copy the archive file in $IOC_DATA to enable record archiving.


Code Block
languagebash
## Load dbd
dbLoadDatabase("dbd/masterSource.dbd", 0, 0)
masterSource_registerRecordDeviceDriver(pdbbase)

## Environment variables
epicsEnvSet("ENGINEER", "MICHAEL SKOUFIS")
#epicsEnvSet("STREAM_PROTOCOL_PATH", "${TOP}/db")
## Tag log messages with IOC name
epicsEnvSet("EPICS_IOC_LOG_CLIENT_INET", "${IOC}")

## Load records
# **** Load iocAdmin databases to support IOC Health and monitoring ****
dbLoadRecords("db/iocAdminSoft.db", "IOC=${IOC_NAME}")
dbLoadRecords("db/iocAdminScanMon.db", "IOC=${IOC_NAME}")
dbLoadRecords("db/iocRelease.db", "IOC=${IOC_NAME}")

## Autosave initialization
#< $(TOP)/iocBoot/common/autosave_init.cmd

## Channel Access Security:
# This is required if you use caPutLog.
# Set access security file
# Load common LCLS Access Configuration File
< ${ACF_INIT}

## Update archive pv list in ${IOC_DATA}
system("cp $(TOP)/archive/${IOC}.archive ${IOC_DATA}/${IOC}/archive/")


Autosave initialization

Tell the IOC where to find the list of record names that will be autosaved.


Code Block
languagebash
# =====================================================================                                                                            
# Load database for autosave status
# =====================================================================
dbLoadRecords("db/save_restoreStatus.db", "P=${IOC_NAME}:")

# ============================================================
# If all PVs don't connect continue anyway
# ============================================================
save_restoreSet_IncompleteSetsOk(1)

# ============================================================
# created save/restore backup files with date string
# useful for recovery.
# ============================================================
save_restoreSet_DatedBackupFiles(1)

# ============================================================
# Where to find the list of PVs to save
# ============================================================
set_requestfile_path("${IOC_DATA}/${IOC}/autosave-req")

# ============================================================
# Where to write the save files that will be used to restore
# ============================================================
set_savefile_path("${IOC_DATA}/${IOC}/autosave")

# ============================================================
# Prefix that is use to update save/restore status database
# records
# ============================================================
save_restoreSet_status_prefix("${IOC_NAME}:")

## Restore datasets
set_pass0_restoreFile("info_positions.sav")
set_pass1_restoreFile("info_positions.sav")

set_pass0_restoreFile("info_settings.sav")
set_pass1_restoreFile("info_settings.sav")


Besides the auto-generated record names for autosave, copy the manually generated list of records to be autosaved.


Code Block
languagebash
# Copy over the manual settings request file
system("cp $(TOP)/autosave/${IOC}.req ${IOC_DATA}/${IOC}/autosave-req/")

# Load manual settings from autosave
set_pass0_restoreFile("${IOC}.sav")
set_pass1_restoreFile("${IOC}.sav")


Database loading

Load the phase locker records.

Code Block
languagebash
# ===========================================
#          DB LOADING
# ===========================================

## RFOF Transmitter
dbLoadRecords("db/rfof_status.db", "BASE=${PREFIX}, DEV=tx${INDEX}")
dbLoadRecords("db/rfof_tx.db", "BASE=${PREFIX}, DEV=tx${INDEX}")

## RFOF Raceiver
dbLoadRecords("db/rfof_rx.db", "BASE=${PREFIX}, DEV=rx${INDEX}")

## Load record instances
dbLoadRecords("db/iocSoft.db", "IOC=$(IOC)")
dbLoadRecords("db/save_restoreStatus.db", "P=$(IOC):")

Stream driver configuration

Create an EPICS Stream Driver to interface with the Transmitter and Receiver.


Code Block
languagebash
# ===========================================
#          DRIVER SETUP 
# ===========================================

## RFOF Transmitter
drvAsynIPPortConfigure("tx${INDEX}", "${TXIP}:23", 0, 0, 0)

asynSetTraceMask("tx${INDEX}", 0, 0x1)
asynSetTraceIOMask("tx${INDEX}",0, 0)

## RFOF Raceiver
drvAsynIPPortConfigure("rx${INDEX}", "${RXIP}:23", 0, 0, 0)

asynSetTraceMask("rx${INDEX}", 0, 0x1)
asynSetTraceIOMask("rx${INDEX}",0, 0)

Archiver list

A complete list of the records to archive is provided below.


Code Block
languagebash
(base) skoufis@aird-b50-srv01  (master) $ cat archive/sioc-sys0-ms11.archive 
# archive_iocAdmin Archive template
# Format:
# <PVNAME> <PERIOD> [ monitor ]

# Archive these values only when they change
SIOC:SYS0:MS11:APP_DIR 30 monitor 
SIOC:SYS0:MS11:APP_DIR1 30 monitor 
SIOC:SYS0:MS11:APP_DIR2 30 monitor 
SIOC:SYS0:MS11:CA_CLNT_CNT 1 monitor 
SIOC:SYS0:MS11:CA_CONN_CNT 1 monitor 
SIOC:SYS0:MS11:EPICS_VERS 30 monitor
SIOC:SYS0:MS11:FD_CNT 1 monitor 
SIOC:SYS0:MS11:FD_FREE 1 monitor 
SIOC:SYS0:MS11:FD_MAX 1 monitor 
SIOC:SYS0:MS11:HOSTNAME 30 monitor
SIOC:SYS0:MS11:KERNEL_VERS 30 monitor
SIOC:SYS0:MS11:RECORD_CNT 10 monitor
SIOC:SYS0:MS11:START_CNT 30 monitor
SIOC:SYS0:MS11:STARTTOD 30 monitor
SIOC:SYS0:MS11:ST_SCRIPT 30 monitor 
SIOC:SYS0:MS11:ST_SCRIPT1 30 monitor 
SIOC:SYS0:MS11:ST_SCRIPT2 30 monitor 
SIOC:SYS0:MS11:SUSP_TASK_CNT 30 monitor 
SIOC:SYS0:MS11:SYSRESET 30 monitor 

# Archive these values at the specified rate
SIOC:SYS0:MS11:SYS_CPU_LOAD 10
SIOC:SYS0:MS11:LOAD 10 
SIOC:SYS0:MS11:MEM_BLK_FREE 10 
SIOC:SYS0:MS11:MEM_FREE 10 
SIOC:SYS0:MS11:MEM_USED 10 
SIOC:SYS0:MS11:UPTIME 3600 
# autosave Save/Restore Archive template
# Format:
# <PVNAME> <PERIOD> [ monitor ]

# Archive each status change
SIOC:SYS0:MS11:SR_rebootStatus 1 monitor
SIOC:SYS0:MS11:SR_status 1 monitor
SIOC:SYS0:MS11:SR_rebootStatusStr 1 monitor
SIOC:SYS0:MS11:SR_statusStr 1 monitor
SIOC:SYS0:MS11:SR_0_Status 1 monitor
SIOC:SYS0:MS11:SR_0_StatusStr 1 monitor
SIOC:SYS0:MS11:SR_1_Status 1 monitor
SIOC:SYS0:MS11:SR_1_StatusStr 1 monitor
SIOC:SYS0:MS11:SR_2_Status 1 monitor
SIOC:SYS0:MS11:SR_2_StatusStr 1 monitor
SIOC:SYS0:MS11:SR_3_Status 1 monitor
SIOC:SYS0:MS11:SR_3_StatusStr 1 monitor
SIOC:SYS0:MS11:SR_4_Status 1 monitor
SIOC:SYS0:MS11:SR_4_StatusStr 1 monitor
SIOC:SYS0:MS11:SR_5_Status 1 monitor
SIOC:SYS0:MS11:SR_5_StatusStr 1 monitor
SIOC:SYS0:MS11:SR_6_Status 1 monitor
SIOC:SYS0:MS11:SR_6_StatusStr 1 monitor
SIOC:SYS0:MS11:SR_7_Status 1 monitor
SIOC:SYS0:MS11:SR_7_StatusStr 1 monitor
SIOC:SYS0:MS11:SR_0_State 1 monitor
SIOC:SYS0:MS11:SR_1_State 1 monitor
SIOC:SYS0:MS11:SR_2_State 1 monitor
SIOC:SYS0:MS11:SR_3_State 1 monitor
SIOC:SYS0:MS11:SR_4_State 1 monitor
SIOC:SYS0:MS11:SR_5_State 1 monitor
SIOC:SYS0:MS11:SR_6_State 1 monitor
SIOC:SYS0:MS11:SR_7_State 1 monitor

# Archive these values only when they change
SIOC:SYS0:MS11:SR_recentlyStr 30 monitor
SIOC:SYS0:MS11:SR_rebootTime 30 monitor
SIOC:SYS0:MS11:SR_0_Name 30 monitor
SIOC:SYS0:MS11:SR_1_Name 30 monitor
SIOC:SYS0:MS11:SR_2_Name 30 monitor
SIOC:SYS0:MS11:SR_3_Name 30 monitor
SIOC:SYS0:MS11:SR_4_Name 30 monitor
SIOC:SYS0:MS11:SR_5_Name 30 monitor
SIOC:SYS0:MS11:SR_6_Name 30 monitor
SIOC:SYS0:MS11:SR_7_Name 30 monitor

# Archive these values at the specified rate
SIOC:SYS0:MS11:SR_heartbeat 30
SIOC:SYS0:MS11:SR_0_Time 30
SIOC:SYS0:MS11:SR_1_Time 30
SIOC:SYS0:MS11:SR_2_Time 30
SIOC:SYS0:MS11:SR_3_Time 30
SIOC:SYS0:MS11:SR_4_Time 30
SIOC:SYS0:MS11:SR_5_Time 30
SIOC:SYS0:MS11:SR_6_Time 30
SIOC:SYS0:MS11:SR_7_Time 30

#
# syntax <PVNAME>  <POLL_SEC>  <MONITOR option>
# MSLK:SYS0:MS11:A  1 monitor
#

MSLK:SYS0:MS11:COMMAND                5        monitor
MSLK:SYS0:MS11:RESPONSE               5        monitor
MSLK:SYS0:MS11:VERSION                5        monitor
MSLK:SYS0:MS11:TIME                   5        monitor
MSLK:SYS0:MS11:TX_FANSPEED1           5        monitor
MSLK:SYS0:MS11:TX_FANSPEED2           5        monitor
MSLK:SYS0:MS11:TX_FANSPEED3           5        monitor
MSLK:SYS0:MS11:RX_FANSPEED1           5        monitor
MSLK:SYS0:MS11:RX_FANSPEED2           5        monitor
MSLK:SYS0:MS11:RX_FANSPEED3           5        monitor
MSLK:SYS0:MS11:FANSPEED_RBV           5        monitor
MSLK:SYS0:MS11:OPT_RBV                5        monitor
MSLK:SYS0:MS11:DELAY_RBV              5        monitor
MSLK:SYS0:MS11:FANSPEED               5        monitor
MSLK:SYS0:MS11:OPT                    5        monitor
MSLK:SYS0:MS11:PWR                    5        monitor
MSLK:SYS0:MS11:DELAY                  5        monitor
MSLK:SYS0:MS11:STATUS                 5        monitor
MSLK:SYS0:MS11:UPTIME                 5        monitor
MSLK:SYS0:MS11:LOCK_STATE             5        monitor
MSLK:SYS0:MS11:STATE                  5        monitor
MSLK:SYS0:MS11:UNLOCKED               5        monitor
MSLK:SYS0:MS11:SEMILOCKED             5        monitor
MSLK:SYS0:MS11:LOCKED                 5        monitor
MSLK:SYS0:MS11:START                  5        monitor
MSLK:SYS0:MS11:SHUTDOWN               5        monitor
MSLK:SYS0:MS11:INIT                   5        monitor
MSLK:SYS0:MS11:WARMING_UP             5        monitor
MSLK:SYS0:MS11:TUNING                 5        monitor
MSLK:SYS0:MS11:READY                  5        monitor
MSLK:SYS0:MS11:HEALTH                 5        monitor
MSLK:SYS0:MS11:HEALTH_SPLIT           5        monitor
MSLK:SYS0:MS11:COMM_ERR               5        monitor
MSLK:SYS0:MS11:PS_VOLT_ERR            5        monitor
MSLK:SYS0:MS11:ENV_COND_ERR           5        monitor
MSLK:SYS0:MS11:INT_MOD_ERR            5        monitor
MSLK:SYS0:MS11:RF_PWR_ERR             5        monitor
MSLK:SYS0:MS11:OPT_PWR_ERR            5        monitor
MSLK:SYS0:MS11:LASR_PWR_ERR           5        monitor
MSLK:SYS0:MS11:PHAS_ERR               5        monitor
MSLK:SYS0:MS11:FANSPEED_ERR           5        monitor
MSLK:SYS0:MS11:PS_CURR_ERR            5        monitor
MSLK:SYS0:MS11:ERROR                  5        monitor
MSLK:SYS0:MS11:TX_ERR_SPLIT           5        monitor
MSLK:SYS0:MS11:RX_ERR_SPLIT           5        monitor
MSLK:SYS0:MS11:TX_COMM_SYNC_ERR       5        monitor
MSLK:SYS0:MS11:TX_RF_IN_ERR           5        monitor
MSLK:SYS0:MS11:TX_TEMP_ERR            5        monitor
MSLK:SYS0:MS11:TX_RF_ID_ERR           5        monitor
MSLK:SYS0:MS11:TX_RF_ERR              5        monitor
MSLK:SYS0:MS11:TX_ARM_ID_ERR          5        monitor
MSLK:SYS0:MS11:TX_ARM_ERR             5        monitor
MSLK:SYS0:MS11:RX_COMM_SYNC_ERR       5        monitor
MSLK:SYS0:MS11:RX_RF_OUT_ERR          5        monitor
MSLK:SYS0:MS11:RX_TEMP_ERR            5        monitor
MSLK:SYS0:MS11:UNLOCK_ERR             5        monitor
MSLK:SYS0:MS11:RX_RF_ID_ERR           5        monitor
MSLK:SYS0:MS11:RX_RF_ERR              5        monitor
MSLK:SYS0:MS11:RX_ARM_ID_ERR          5        monitor
MSLK:SYS0:MS11:RX_ARM_ERR             5        monitor
MSLK:SYS0:MS11:SSTATE_RAW             5        monitor
MSLK:SYS0:MS11:SSTATE_CALC            5        monitor
MSLK:SYS0:MS11:SSTATE_CALC2           5        monitor
MSLK:SYS0:MS11:SSTATE_FANOUT          5        monitor
MSLK:SYS0:MS11:SSTATE1                5        monitor
MSLK:SYS0:MS11:SSTATE2                5        monitor
MSLK:SYS0:MS11:SSTATE3                5        monitor
MSLK:SYS0:MS11:SSTATE_STATUS          5        monitor
MSLK:SYS0:MS11:TX_IP                  5        monitor
MSLK:SYS0:MS11:TX_REMOTE_IP_RBV       5        monitor
MSLK:SYS0:MS11:TX_REMOTE_IP           5        monitor
MSLK:SYS0:MS11:TX_SCAN                5        monitor
MSLK:SYS0:MS11:TX_BAS                 5        monitor
MSLK:SYS0:MS11:TX_ADV                 5        monitor
MSLK:SYS0:MS11:TX_PC1                 5        monitor
MSLK:SYS0:MS11:TX_PC2                 5        monitor
MSLK:SYS0:MS11:TX_PD1_CURR            5        monitor
MSLK:SYS0:MS11:TX_PD2_CURR            5        monitor
MSLK:SYS0:MS11:TX_LD_SETPT            5        monitor
MSLK:SYS0:MS11:TX_LASR_TEMP           5        monitor
MSLK:SYS0:MS11:TX_TEMP_SPOOL          5        monitor
MSLK:SYS0:MS11:TX_TEMP_SPOOL_SETPT    5        monitor
MSLK:SYS0:MS11:TX_RF_PWR_IN           5        monitor
MSLK:SYS0:MS11:TX_RF_PWR_PD1          5        monitor
MSLK:SYS0:MS11:TX_RF_PWR_PD2          5        monitor
MSLK:SYS0:MS11:TX_LASR_OPT_PWR        5        monitor
MSLK:SYS0:MS11:TX_RF_PWR_MZM          5        monitor
MSLK:SYS0:MS11:TX_LASR_CURR           5        monitor
MSLK:SYS0:MS11:TX_PHAS_SHFT_ELEC      5        monitor
MSLK:SYS0:MS11:TX_ATTN_SETPT          5        monitor
MSLK:SYS0:MS11:TX_ATTN                5        monitor
MSLK:SYS0:MS11:TX_PHAS_SHFT_IN        5        monitor
MSLK:SYS0:MS11:TX_MZM_BIAS            5        monitor
MSLK:SYS0:MS11:TX_VOA_SETPT           5        monitor
MSLK:SYS0:MS11:TX_VOA                 5        monitor
MSLK:SYS0:MS11:TX_TEMP_SETPT          5        monitor
MSLK:SYS0:MS11:TX_TEMP                5        monitor
MSLK:SYS0:MS11:TX_TEMP_OPT            5        monitor
MSLK:SYS0:MS11:TX_EXT_RELHMD          5        monitor
MSLK:SYS0:MS11:TX_EXT_TEMP_HS         5        monitor
MSLK:SYS0:MS11:TX_EXT_PRES            5        monitor
MSLK:SYS0:MS11:TX_EXT_TEMP_PS         5        monitor
MSLK:SYS0:MS11:TX_RELHMD              5        monitor
MSLK:SYS0:MS11:TX_TEMP_HS             5        monitor
MSLK:SYS0:MS11:TX_PRES                5        monitor
MSLK:SYS0:MS11:TX_TEMP_PS             5        monitor
MSLK:SYS0:MS11:RX_IP                  5        monitor
MSLK:SYS0:MS11:RX_REMOTE_IP_RBV       5        monitor
MSLK:SYS0:MS11:RX_REMOTE_IP           5        monitor
MSLK:SYS0:MS11:RX_SCAN                5        monitor
MSLK:SYS0:MS11:RX_BAS                 5        monitor
MSLK:SYS0:MS11:RX_ADV                 5        monitor
MSLK:SYS0:MS11:RX_PC1                 5        monitor
MSLK:SYS0:MS11:RX_PD1_CURR            5        monitor
MSLK:SYS0:MS11:RX_PD2_CURR            5        monitor
MSLK:SYS0:MS11:RX_RF_PWR_OUT          5        monitor
MSLK:SYS0:MS11:RX_RF_PWR_PD1          5        monitor
MSLK:SYS0:MS11:RX_RF_PWR_PD2          5        monitor
MSLK:SYS0:MS11:RX_RF_PWR_OUT_SETPT    5        monitor
MSLK:SYS0:MS11:RX_ATTN                5        monitor
MSLK:SYS0:MS11:RX_PHAS_SHFT           5        monitor
MSLK:SYS0:MS11:RX_TEMP_SETPT          5        monitor
MSLK:SYS0:MS11:RX_TEMP                5        monitor
MSLK:SYS0:MS11:RX_TEMP_OPT            5        monitor
MSLK:SYS0:MS11:RX_TEMP_SPOOL          5        monitor
MSLK:SYS0:MS11:RX_EXT_RELHMD          5        monitor
MSLK:SYS0:MS11:RX_EXT_TEMP_HS         5        monitor
MSLK:SYS0:MS11:RX_EXT_PRES            5        monitor
MSLK:SYS0:MS11:RX_EXT_TEMP_PS         5        monitor
MSLK:SYS0:MS11:RX_RELHMD              5        monitor
MSLK:SYS0:MS11:RX_TEMP_HS             5        monitor
MSLK:SYS0:MS11:RX_PRES                5        monitor
MSLK:SYS0:MS11:RX_TEMP_PS             5        monitor

IOC initialization

Initialize the IOC and logging capability.

...