Term | Description |
---|---|
ATCA | Advanced Telecommunications Computing Architecture |
CPU | Central Processing Unit |
EPICS | Experimental Physics and Industrial Control System |
FPGA | Field Programmable Gate Array |
IOC | Input Output Controller |
RF | Radio Frequency |
SHM | Shelf Manager |
A high-level description of the linac locking system is captured in the page linked below:
Linac Locking - A System Level Overview
In this section, we provide IOC deployment details such as the App hosting the Trigger Alignment IOC, as well as the IOC name and the assigned CPU in both Dev and Production.
The IOC is housed by the masterSource App. The intended released tag in Production is R2.2.3.
IOC App Name | App Version |
---|---|
masterSource | R2.2.3 |
The configuration used in Production is seen below.
IOC Name | CPU Name |
---|---|
sioc-sys0-ms12 | cpu-li20-ms01 |
The configuration used in Dev is seen below.
IOC Name | CPU Name (Intended) |
---|---|
sioc-b084-ms12 | cpu-b084-sp12 |
List of required packages and associated versions.
Package Name | Package Version |
---|---|
cpsw/framework | R4.4.1 |
yaml-cpp | yaml-cpp-0.5.3_boost-1.64.0 |
boost | 1.64.0 |
pcre | 8.37 |
mrllrf/llrfLib | R1.1.0 |
timing/hpsTpr | R2.3.0 |
atca/commonATCA | R1.3.1 |
List of required modules and associated versions.
Module Name | Module Version |
---|---|
ATCACommon | R7.0.3.1-1.0 |
agilent53220A | R1.0.6 |
asyn | R4.39-1.0.1 |
autosave | R5.10-1.1.0 |
bkhAsyn | R0.4.6 |
caPutLog | R4.0-1.0.0 |
iocAdmin | R3.1.16-1.3.2 |
miscUtils | R2.2.5 |
modbus | R3.2-1.0.1 |
seq | R2.2.4-1.2 |
std | R3.2-1.0.5 |
streamdevice | R2.8.9-1.2.1 |
timingApi | R0.9 |
tprTrigger | R2.5.3-4.0-2 |
yamlLoader | R2.3.5 |
ycpswasyn | R3.3.6-1.0 |
In this section, a detailed description of the IOC bootup process is laid out.
First, define the usual environment variables in the startup script.
# =========================================== # ENVIRONMENT VARIABLES # =========================================== # Setup environment variables epicsEnvSet("LOCATION","SYS0" ) epicsEnvSet("SYS_PV", "TPR:SYS0:MS12" ) epicsEnvSet("IOC_PV", "SIOC:SYS0:MS12") epicsEnvSet("IOC", "sioc-sys0-ms12") epicsEnvSet("SUBSYS" ,"trigAlign" ) epicsEnvSet("SYS", "SYS0" ) epicsEnvSet("UNIT", "MS12" ) # Support Large Arrays/Waveforms; Number in Bytes # The default max size for a channel access array is 16Kb epicsEnvSet("EPICS_CA_MAX_ARRAY_BYTES", "80000000")
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.
## Load dbd dbLoadDatabase("dbd/masterSource.dbd", 0, 0) masterSource_registerRecordDeviceDriver(pdbbase) ## Environment variables epicsEnvSet("ENGINEER", "MATT WEAVER") 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/")
Tell the IOC where to find the list of record names and where they will be autosaved. Also, restore previously autosaved values.
# ===================================================================== # 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 and restore their previously autosaved values.
# 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")
Load the YAML hierarchy and register configuration.
Load the relevant trigger alignment records.
Initialize and configure the trigger alignment Asyn driver to interface with the FPGA registers.
A complete list of the records to archive is provided below.
Initialize the IOC and logging capability.
# =========================================== # IOC INIT # =========================================== iocInit() # =========================================== # CAPUTLOG # =========================================== # Turn on caPutLogging: # Log values only on change to the iocLogServer: caPutLogInit("${EPICS_CA_PUT_LOG_ADDR}") caPutLogShow(2)
Start the autosave process.
# =========================================== # AUTOSAVE # =========================================== # Autosave start < $(TOP)/iocBoot/common/autosave_start.cmd
A complete list of the Trigger Alignment IOC Process Variables (PVs) --along with their revision dates, following feedback from the naming team-- can be found in the page linked below.
Linac Locking - Trigger Alignment IOC (sioc-sys0-ms12) PVs
There are no displays for this IOC.
The released software will be made available in the main IOC release area post-deployment (Dev: /afs/slac/g/lcls/epics/iocTop/masterSource/, Production:/usr/local/lcls/epics/iocTop/masterSource/). See below for the specific repositories and tags.
See software release details below.
Repository | Version | IOC Name |
---|---|---|
masterSource | R2.2.3 | sioc-sys0-ms07, sioc-b084-ms07 (11.5MHz) |
masterSource | R2.2.3 | sioc-sys0-ms08, sioc-b084-ms08 (476MHz) |
See firmware release details below.
Repository | Version |
---|---|