You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 25 Next »

Overview

Acronyms

TermDescription

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

VCO

Voltage Controlled Oscillator

Linac Locking System-Level Description

A high-level description of the linac locking system is captured in the page linked below:

Linac Locking - A System Level Overview

IOC Description


DHCP Configuration


IOC Deployment

In this section, we provide IOC deployment details such as the App hosting the PLL IOCs, as well as the IOC names and the assigned CPUs in both Dev and Production. 

IOC Repository

The IOC is housed by the masterSource App.  The intended released tag in Production is R2.2.3.

IOC App NameApp Version
masterSourceR2.2.3

Deployment In Production

The configuration used in Production is seen below.

IOC NameCPU Name
sioc-sys0-ms07 (11.5MHz)cpu-sys0-sp01
sioc-sys0-ms08 (476MHz)cpu-sys0-sp01

Deployment In Dev

The configuration used in Dev is seen below.  As of now, there is no designated test stand in Dev.

IOC NameCPU Name (Intended)
sioc-b084-ms07cpu-b084-sp12
sioc-b084-ms08cpu-b084-sp12

IOC Packages

List of required packages and associated versions.

Package NamePackage 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

IOC Modules

List of required modules and associated versions.

Module NameModule 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

IOC Bootup

In this section, a detailed description of the IOC bootup process is laid out.

Generic variable definition

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


11.5MHZ PLL:

# ===========================================
#            ENVIRONMENT VARIABLES
# ===========================================
epicsEnvSet("AREA",     "SYS0"             )   
epicsEnvSet("IOC_NAME", "SIOC:$(AREA):MS07")
epicsEnvSet("LOCATION", "$(AREA)"          )   
epicsEnvSet("P",        "PRL:$(AREA):07"   )   


476MHz PLL:

# ===========================================
#            ENVIRONMENT VARIABLES
# ===========================================
epicsEnvSet("AREA",     "SYS0"             )   
epicsEnvSet("IOC_NAME", "SIOC:$(AREA):MS08")
epicsEnvSet("LOCATION", "$(AREA)"          )   
epicsEnvSet("P",        "PRL:$(AREA):08"   )   

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.

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

## Environment variables
epicsEnvSet("ENGINEER", "")
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/")

Yaml initialization

Point to the YAML hierarchy file.

# Yaml File
epicsEnvSet("YAML_FILE", "yaml/Gen1Lcls2PrlMaster_project.yaml/000TopLevel.yaml")

Autosave initialization

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.

Database loading

Load the PLL EPICS records.


# **************************************
# PLL for Linac Locking
dbLoadRecords("db/pll_linacLock.db", "P=$(P),SIM_PREFIX=$(SIM_PREFIX)")

Asyn driver configuration

Load the YAML hierarchy and register configuration.


11.5MHz PLL:

# **** Environment variables for YCPSWASYN ****
# CPSW Port name
epicsEnvSet("CPSW_PORT", "SIM1")
# Yaml File
epicsEnvSet("YAML_FILE", "yaml/Gen1Lcls2PrlMaster_project.yaml/000TopLevel.yaml")
# FPGA IP address
# SIM module for 11.5MHz PLL
epicsEnvSet("FPGA_IP", "192.168.1.17")
# Use Automatic generation of records from the YAML definition
# 0 = No, 1 = Yes
epicsEnvSet("AUTO_GEN", 1)
# Automatically generated record prefix
epicsEnvSet("SIM_PREFIX", "SIM07")
# Dictionary file for manual (empty string if none)
epicsEnvSet("DICT_FILE", "")

# ===========================================
#              DRIVER SETUP
# ===========================================
cpswLoadYamlFile("${YAML_FILE}", "NetIODev", "yaml/Gen1Lcls2PrlMaster_project.yaml", "${FPGA_IP}")
cpswLoadConfigFile("yaml/config/sioc-sys0-ms07.yaml", "mmio", "yaml/config")

# ************************************
# **** Driver setup for YCPSWAsyn ****
# YCPSWASYNConfig(
#    PORT_NAME,             # the name given to this port driver
#    ROOT_PATH,             # root path to start the generation, if empty, the root will be used
#    PREFIX,                # record name prefix
#    AUTO_GEN_MODE,         # 0: disable auto-generation, 1: enable autogeneration using mapped names
#                           # 2: enable autogeneration using hashed names
#    DICIT_FILE             # dictionary file path with registers to load, an empty string will disable this function
# )
YCPSWASYNConfig("${CPSW_PORT}","", "${SIM_PREFIX}", "${AUTO_GEN}", "${DICT_FILE}")


476MHz PLL:

# **** Environment variables for YCPSWASYN ****
# CPSW Port name
epicsEnvSet("CPSW_PORT", "SIM1")
# FPGA IP address
# SIM module for 476MHz PLL 
epicsEnvSet("FPGA_IP", "192.168.1.18")
# Use Automatic generation of records from the YAML definition
# 0 = No, 1 = Yes
epicsEnvSet("AUTO_GEN", 1)
# Automatically generated record prefix
epicsEnvSet("SIM_PREFIX", "SIM08")
# Dictionary file for manual (empty string if none)
epicsEnvSet("DICT_FILE", "")

# ===========================================
#              DRIVER SETUP
# ===========================================
cpswLoadYamlFile("${YAML_FILE}", "NetIODev", "yaml/Gen1Lcls2PrlMaster_project.yaml", "${FPGA_IP}")
cpswLoadConfigFile("yaml/config/sioc-sys0-ms08.yaml", "mmio", "yaml/config")

# ************************************
# **** Driver setup for YCPSWAsyn ****
# YCPSWASYNConfig(
#    PORT_NAME,             # the name given to this port driver
#    ROOT_PATH,             # root path to start the generation, if empty, the root will be used
#    PREFIX,                # record name prefix
#    AUTO_GEN_MODE,         # 0: disable auto-generation, 1: enable autogeneration using mapped names
#                           # 2: enable autogeneration using hashed names
#    DICIT_FILE             # dictionary file path with registers to load, an empty string will disable this function
# )
YCPSWASYNConfig("${CPSW_PORT}","", "${SIM_PREFIX}", "${AUTO_GEN}", "${DICT_FILE}") 

Archiver list

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

IOC initialization

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)

Autosave start

Start the autosave process. 

EPICS Records

A complete list of the PLL IOC Process Variables (PVs) can be found in the page linked below, Look for Section PLL Loop for  L0-L1 PRL (L0-L1 VCO Control).

PV name for LCLS2 Master Source

Displays

Displays in both Dev and Production exist for the control of the PLLs.

Dev

To access and launch the display in Dev, follow the steps outlined below. 


For the 11.5MHz PLL GUI:

(base) skoufis@aird-b50-srv01  (master) $ cd $EPICS_IOCS/sioc-b084-ms07/iocSpecificRelease/masterSourceApp/srcDisplay/ 
(base) skoufis@aird-b50-srv01  (master) $ ./prl115_b084_screen


For the 476MHz PLL GUI:

(base) skoufis@aird-b50-srv01  (master) $ cd $EPICS_IOCS/sioc-b084-ms08/iocSpecificRelease/masterSourceApp/srcDisplay/ 
(base) skoufis@aird-b50-srv01  (master) $ ./prl476_b084_screen

Production

To access and launch the display in Production, follow the steps outlined below. 


For the 11.5MHz PLL GUI:

[softegr@lcls-srv01 skoufis]$ cd $EPICS_IOCS/sioc-sys0-ms07/iocSpecificRelease/masterSourceApp/srcDisplay/
[softegr@lcls-srv01 skoufis]$ ./prl115_screen


For the 476MHz PLL GUI:

[softegr@lcls-srv01 skoufis]$ cd $EPICS_IOCS/sioc-sys0-ms08/iocSpecificRelease/masterSourceApp/srcDisplay/
[softegr@lcls-srv01 skoufis]$ ./prl476_screen

Deliverables

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.

Software Release

See software release details below.

RepositoryVersionIOC Name
masterSourceR2.2.3sioc-sys0-ms07, sioc-b084-ms07 (11.5MHz)
masterSourceR2.2.3sioc-sys0-ms08, sioc-b084-ms08 (476MHz)

Firmware Release

See firmware release details below.

RepositoryVersion


References 

  • No labels