Background Information

Relevant acronyms are summarized below.  For more details, please see the provided references below for an overview of the PCAV system (normal-conducting).


Acronyms

TermDescription

AMC

Advanced Mezzanine Card

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

LLRF

Low Level Radio Frequency

PCAV

Phase Cavity

SHM

Shelf Manager

IOC Deployment In Production

Two separate configurations exist.  One for normal-conducting mode and a second one for the super-conducting mode.

Normal-Conducting

IOC ApplicationTagCPUATCA SHMPCAV BOARD SLOTPCAV BOARD IPPCAV Firmware Version (git hash)
sioc-unds-pt01
cpu-unds-sp04

shm-unds-sp04-1

210.0.1.102

6690138cb0476e2f9bb57b66440047dfa8b3aaa5

sioc-unds-pt02
cpu-unds-sp04



sioc-undh-pt01
cpu-undh-sp04shm-undh-sp04-1210.0.1.1026690138cb0476e2f9bb57b66440047dfa8b3aaa5
sioc-undh-pt02
cpu-undh-sp04



Super-Conducting

IOC ApplicationTagCPUATCA SHMPCAV BOARD SLOTPCAV BOARD IPPCAV Firmware Version (git hash)
sioc-unds-pt11pcav R3.0.0 (RHEL6)
pcav R3.0.1 (RHEL7)
cpu-unds-sp04

shm-unds-sp04-1

310.0.1.103

e6a75c3517029a4ad7cd4a487c8e365e2d0bd809

sion-undh-pt11pcav R3.0.0 (RHEL6)
pcav R3.0.1 (RHEL7)
cpu-undh-sp04shm-undh-sp04-1

e6a75c3517029a4ad7cd4a487c8e365e2d0bd809

Normal-Conducting References

2021_0322 PCAV Jump - Capturing archiver data for phase jump on HXR PCAV for discussions

2021_0305 rev.5 PCAV Improvement - Phase Zeroing/New BSA/Circular Buffer

2021_0305 PCAV Improvement - Zeroing Phase and New BSA

2021_0301 BSTREAM and Register read out for debugging phase wrap round issue

2021_0226 PCAV diff mmio-Apptop-AppCore

2020_1013 PID Controls for PCAV NCO

2020_0823 PCAV FPGA Algorithm V2

2020_0403 PCAV FPGA Algorithm V1

2020_0402 Discussions for PCAV

2020_0124 PCAV Beckhoff Wiring

2020_1009 Software Design for ATCA Based Phase Cavity System

2019_0111 Rx Frame Rate Drop (SIM communication)


Additionally, the following links may be of value to the reader:


PCAV work memo: https://confluence.slac.stanford.edu/display/~khkim/PCAV+Work+Memo

PCAV commissioning support (Charlie's firmware): https://confluence.slac.stanford.edu/pages/viewpage.action?pageId=284340901

Mapping between PCAV firmware internal and PVs: https://confluence.slac.stanford.edu/display/~khkim/Mapping+between+PCAV+firmware+internal+and+PVs

PCAV firmware register amp and data type (aug 3, 2020): https://confluence.slac.stanford.edu/pages/viewpage.action?pageId=285672859

PVs for PCAV UNDH heater control (sioc-undh-pt02): https://confluence.slac.stanford.edu/pages/viewpage.action?pageId=274825300

PCAV IOC Repository

The IOC organization can be seen in the figure below.  IOCs sioc-unds-pt01 and sioc-undh-pt01 are for the normal-conducting beam, while IOCs sioc-unds-pt11 and sioc-undh-pt11 are for super-conducting beam.  Lastly, IOCs sioc-unds-pt02 and sioc-undh-pt02 are the Beckoff IOCs for heater control in the soft and hard line respectively.


Super-Conducting IOCs

In the sections below, one can find excerpts of the IOC startup script that handle a specific task, such as environment setup, database loading, etc.  The information is provided in this way, so that the reader more easily understands what each portion of the script does.  Although the following content is from the soft-line (SXR) IOC, the same applies for the hard-line (HXR) IOC with an obvious difference in variable names.

Generic variable definition

 8 # ====================================================================
  9 # Setup some additional environment variables
 10 # ====================================================================
 11 # Setup environment variables
 12 epicsEnvSet("IOC"               , "sioc-unds-pt11")
 13 epicsEnvSet("LOCA"              , "UNDS")
 14 epicsEnvSet("UNIT"              , "PT11")
 15 epicsEnvSet("IOC_NAME"          , "SIOC:${LOCA}:${UNIT}")
 16 epicsEnvSet("BOARD_IP"          , "10.0.1.105")
 17 epicsEnvSet("YAML_DIR"          , "${IOC_DATA}/${IOC}/yaml")
 18 epicsEnvSet("YAML_FILE"         , "${YAML_DIR}/000TopLevel.yaml")
 19 epicsEnvSet("YAML_DEFAULTS_FILE", "${YAML_DIR}/config/defaults.yaml")
 20 epicsEnvSet("YAML_LOCAL_DIR"    , "firmware/sc/yaml")
 21 
 22 epicsEnvSet("IOC_PV", "${IOC_NAME}")
 23 epicsEnvSet("SYS_PV", "${IOC_NAME}")
 24 
 25 # Tag log messages with IOC name
 26 # How to escape the "iocrflab" as the PERL program
 27 # will try to replace it.
 28 # So, uncomment the following and remove the backslash
 29 epicsEnvSet("EPICS\_IOC\_LOG_CLIENT_INET","${IOC}")
 30 
 31 # Setup the CA server port address
 32 epicsEnvSet("EPICS_CA_SERVER_PORT","5066")

 46 # CPSW Port name
 47 epicsEnvSet("CPSW_PORT", "CPSW_PORT")
 48 
 49 # Use Automatic generation of records from the YAML definition
 50 # 0 = No, 1 = Yes
 51 epicsEnvSet("AUTO_GEN", 0)
 52 
 53 # Automatically generated record prefix
 54 epicsEnvSet("PREFIX0", "${IOC_NAME}:0")
 55 
 56 # Dictionary file for manual (empty string if none)
 57 epicsEnvSet("DICT_FILE", "")

 81 # Uncomment and set appropriate size for your application:
 82 epicsEnvSet("EPICS_CA_MAX_ARRAY_BYTES", "21000000")

 

Real-time environment & databases

35 # Set environment variables
 36 < envPaths
 37 
 38 # iocAdmin environment variables
 39 epicsEnvSet("ENGINEER"   , "Michael Skoufis")
 40 epicsEnvSet("IOC_RESTORE", "${IOC_DATA}/${IOC}/restore")
 41 epicsEnvSet("IOC_BOOT"   , "${EPICS_IOC_APP}")
 42 epicsEnvSet("STARTUP"    , "${EPICS_IOCS}/${IOC}")
 43 epicsEnvSet("ST_CMD"     , "startup.cmd")
 44 
 45 # Define subsystem, used by iocLogPrefix
 46 epicsEnvSet("SUBSYS","b084")
 47 
 48 # ========================================================
 49 # Support Large Arrays/Waveforms; Number in Bytes
 50 # Please calculate the size of the largest waveform
 51 # that you support in your IOC.  Do not just copy numbers
 52 # from other apps.  This will only lead to an exhaustion
 53 # of resources and problems with your IOC.
 54 # The default maximum size for a channel access array is
 55 # 16K bytes.
 56 # ========================================================
 57 # For large BSA waveforms
 58 epicsEnvSet("EPICS_CA_MAX_ARRAY_BYTES", "21000000")
 59 
 60 # Location of stream protocol files
 61 #epicsEnvSet("STREAM_PROTOCOL_PATH", "${TOP}/db")
 62 
 63 # Point 'YAML_PATH' to the 'yaml_local' directory.
 64 # This directory contains patched files which will be
 65 # used instead of the ones downloaded from the FPGA.
 66 # This is an absolute path.
 67 #epicsEnvSet("YAML_PATH", "${TOP}/${YAML_LOCAL_DIR}")
 68 
 69 #==============================================================
 70 # Load standard databases
 71 #==============================================================
 72 cd ${TOP}
 73 dbLoadDatabase("dbd/pcav.dbd")
 74 pcav_registerRecordDeviceDriver(pdbbase)
 75 
 76 # Load IOC Administration Databse
 77 dbLoadRecords("db/iocAdminSoft.db","IOC=${IOC_NAME}")
 78 dbLoadRecords("db/iocAdminScanMon.db","IOC=${IOC_NAME}")
 79 
 80 # The following database is a result of a python parser
 81 # which looks at RELEASE_SITE and RELEASE to discover
 82 # versions of software your IOC is referencing
 83 # The python parser is part of iocAdmin
 84 dbLoadRecords("db/iocRelease.db"  ,"IOC=${IOC_NAME}")
 85 
 86 #==============================================================
 87 #  Load Channe Access Security
 88 #==============================================================
 89 < ${ACF_INIT}
 90 
 91 #==============================================================
 92 # Start IOC Log Client
 93 #==============================================================
 94 < ${LOG_INIT}

Yaml initialization

 27 # Change directory to YAML directory
 28 cd ${YAML_DIR}
 29 pwd()
 30 
 31 # Download the YAML files from the FPGA
 32 # DownloadYamlFile ( IP address for carrier board
 33 #                    Output directory for the YAML files)
 34 #
 35 #
 36 DownloadYamlFile("${BOARD_IP}", "${YAML_DIR}")
 37 
 38 # Load FPGA hierarchy from YAML
 39 # cpswLoadYamlFile ( YAML hierarchy descrtiption file,
 40 #                    Root Device Name (optional; default = 'root'),
 41 #                    directory where YAML includes can be found (optional),
 42 #                    IP address for carrier board (override the IP address in YAML) )
 43 #
 44 # Note: the format of the ip address for the carrier board is auto-generated from the
 45 # ATCA Shelf Manager local address: 4-digits hex number. The default address is set to
 46 #     0A<crate #>, where the crate number ranges from 01-ff.
 47 # The crates referred to are the crates that are connected to the industrial PC (IPC). So if there
 48 # are 4 crates connected to one IPC, the crate numbers would be 01-04. If another IPC exists in the same a    rea
 49 # that is phisically connected to 2 other crates, those crates would be defined as 01-02.
 50 # The Shelf Manager local address generates the board locat address, where the bpard adress
 51 # has the following format: 10:<2nd field>:<3rd field>:<4th field>
 52 #
 53 # So the two left most digits of shelf manager address, 0A hex, which is 10 decimal, 
 54 # defines the 2nd field of the board address.  decimal The 2-rightmost digits.
 55 #
 56 # The two right most digits of the shelf manager address <crate #>, 01, produces the
 57 # 3rd field of the boar address.. 
 58 # board ip address format: 10.<2nd field>.<3rd field>.<4th field>
 59 #
 60 # ATCA AMC board local address:  10.10.01.<100+slot#>. The MPS module is located in slot #, so the
 61 # board adress is:  10:10:01:102  (crate 1), 10.10.02.102 (crate 2), etc..
 62 # Low-level RF only has 1 ATCA crate and shelf manager per station, so the first 3 fields
 63 # should be the same, the only difference is the slot number of the IP Carrier for the
 64 # AMC boards
 65 cpswLoadYamlFile("${YAML_FILE}", "NetIODev", "", "${BOARD_IP}", "MyRoot0")
 66 
 67 # Load FPGA configuration from YAML file
 68 # cpswLoadConfigFile ( CONFIG YAML file (NOT hierarchy YAML!),
 69 #                      Path prefix (if config YAML is not based of the root device; optional),
 70 #                      directory where YAML includes can be found (optional) )
 71 #cpswLoadConfigFile("${YAML_DEFAULTS_FILE}", "mmio", "",  "MyRoot0")
 72 
 73 # ======================================================
 74 # disable BLD/BSSS/BSAS temporally
 75 # until the iocInit process is completed
 76 # the services will be restored back by its control PVs
 77 # =======================================================
 78 cd ("${IOC_DATA}/${IOC}/yamlConfig")
 79 cpswLoadConfigFile("./config_test.yaml", "mmio", "", "MyRoot0")
 80 cpswLoadConfigFile("./disable_bld_bsss_bsas.yaml", "mmio/AmcCarrierCore/AmcCarrierBsa")

PCAV initialization

 25 cpswATCACommonAsynDriverConfigure ("atca0"    , "mmio"                          , "MyRoot0")
 26 crossbarControlAsynDriverConfigure("crossbar0", "mmio/AmcCarrierCore/AxiSy56040", "MyRoot0")
 27 tprTriggerAsynDriverConfigure("trig0"         , "mmio/AmcCarrierCore", "MyRoot0")
 28 
 29 # epicsThreadSleep(5.)
 30 
 31 # ===============================================
 32 # We can add a maximum of only 31 BSA Channels
 33 # ===============================================
 34 bsaAdd("REFAMPL",        "uint32")
 35 bsaAdd("REFPHASE",       "int32")
 36 bsaAdd("CAV0PRB0PHASE",  "int32")
 37 bsaAdd("CAV0PRB0AMPL",   "int32")
 38 bsaAdd("SIGNAL04",       "int32")
 39 bsaAdd("SIGNAL05",       "int32")
 40 bsaAdd("CAV0PRB1PHASE",  "int32")
 41 bsaAdd("CAV0PRB1AMPL",   "int32")
 42 bsaAdd("SIGNAL08",       "int32")
 43 bsaAdd("SIGNAL09",       "int32")
 44 bsaAdd("CAV1PRB0PHASE",  "int32")
 45 bsaAdd("CAV1PRB0AMPL",   "int32")
 46 bsaAdd("SIGNAL12",       "int32")
 47 bsaAdd("SIGNAL13",       "int32")
 48 bsaAdd("CAV1PRB1PHASE",  "int32")
 49 bsaAdd("CAV1PRB1AMPL",   "int32")
 50 bsaAdd("CAV0TIME",       "int32")                                                                         
 51 bsaAdd("CAV1TIME",       "int32")
 52 bsaAdd("CAV0CHARGE",     "int32")
 53 bsaAdd("CAV1CHARGE",     "int32")
 54 
 55 # Initialize the BSA driver
 56 # BSA driver for yaml
 57 bsaAsynDriverConfigure("bsaPort", "mmio/AmcCarrierCore/AmcCarrierBsa", "strm/AmcCarrierDRAM/dram")
 58 
 59 # check up the BSA PVs
 60 bsaList()
 61 
 62 #  Initialize BSSS driver
 63 #  make association with BSA channels: bsssAssociateBsaChannels(<BSA port name>)
 64 bsssAssociateBsaChannels("bsaPort")
 65 
 66 # configure BSSS driver: bsssAsynDriverConfigure(<bsss port>, <register path>)
 67 bsssAsynDriverConfigure("bsssPort", "mmio/AmcCarrierCore/AmcCarrierBsa/Bsss")
 68 
 69 # configure Bld driver: bldAsynDriverConfigure(<bsss port>, <register path>)
 70 bldAssociateBsaChannels("bsaPort")
 71 bldAsynDriverConfigure("bldPort", "mmio/AmcCarrierCore/AmcCarrierBsa/Bld", "${SYS_PV}")
 72 bldChannelName("REFAMPL",       "REFAMPL")
 73 bldChannelName("REFPHASE",      "REFPHASE")
 74 bldChannelName("CAV0PRB0PHASE", "CAV0PRB0PHASE")
 75 bldChannelName("CAV0PRB0AMPL",  "CAV0PRB0AMPL")
 76 bldChannelName("SIGNAL04",      "signal04")
 77 bldChannelName("SIGNAL05",      "signal05")
 78 bldChannelName("CAV0PRB1PHASE", "CAV0PRB1PHASE")
 79 bldChannelName("CAV0PRB1AMPL",  "CAV0PRB1AMPL")
 80 bldChannelName("SIGNAL08",      "signal08")
 81 bldChannelName("SIGNAL09",      "signal09")
 82 bldChannelName("CAV1PRB0PHASE", "CAV1PRB0PHASE")
 83 bldChannelName("CAV1PRB0AMPL",  "CAV1PRB0AMPL")
 84 bldChannelName("SIGNAL12",      "signal12")
 85 bldChannelName("SIGNAL13",      "signal13")
 86 bldChannelName("CAV1PRB1PHASE", "CAV1PRB1PHASE")
 87 bldChannelName("CAV1PRB1AMPL",  "CAV1PRB1AMPL")
 88 bldChannelName("CAV0TIME",      "CAV0TIME")
 89 bldChannelName("CAV1TIME",      "CAV1TIME")
 90 bldChannelName("CAV0CHARGE",    "CAV0CHARGE")
 91 bldChannelName("CAV1CHARGE",    "CAV1CHARGE")
 92 
 93 #  Initialize BSSS driver
 94 #  make association with BSA channels: bsssAssociateBsaChannels(<BSA port name>)
 95 bsasAssociateBsaChannels("bsaPort")
 96 
 97 # base name assign for the BSAS channels
 98 # bsasBaseName(<BSAS data channel, BsaKey>, <base PV name>)
 99 bsasBaseName("REFAMPL",       "${SYS_PV}:REFAMPL")
100 bsasBaseName("REFPHASE",      "${SYS_PV}:REFPHASE")
101 bsasBaseName("CAV0PRB0PHASE", "${SYS_PV}:CAV0PRB0PHASE")
102 bsasBaseName("CAV0PRB0AMPL",  "${SYS_PV}:CAV0PRB0AMPL")
103 bsasBaseName("SIGNAL04",      "${SYS_PV}:SIGNAL04")
104 bsasBaseName("SIGNAL05",      "${SYS_PV}:SIGNAL05")
105 bsasBaseName("CAV0PRB1PHASE", "${SYS_PV}:CAV0PRB1PHASE")
106 bsasBaseName("CAV0PRB1AMPL",  "${SYS_PV}:CAV0PRB1AMPL")
107 bsasBaseName("SIGNAL08",      "${SYS_PV}:SIGNAL08")
108 bsasBaseName("SIGNAL09",      "${SYS_PV}:SIGNAL09")
109 bsasBaseName("CAV1PRB0PHASE", "${SYS_PV}:CAV1PRB0PHASE")
110 bsasBaseName("CAV1PRB0AMPL",  "${SYS_PV}:CAV1PRB0AMPL")
111 bsasBaseName("SIGNAL12",      "${SYS_PV}:SIGNAL12")
112 bsasBaseName("SIGNAL13",      "${SYS_PV}:SIGNAL13")
113 bsasBaseName("CAV1PRB1PHASE", "${SYS_PV}:CAV1PRB1PHASE")
114 bsasBaseName("CAV1PRB1AMPL",  "${SYS_PV}:CAV1PRB1AMPL")
115 bsasBaseName("CAV0TIME",      "${SYS_PV}:CAV0TIME")
116 bsasBaseName("CAV1TIME",      "${SYS_PV}:CAV1TIME")
117 bsasBaseName("CAV0CHARGE",    "${SYS_PV}:CAV0CHARGE")
118 bsasBaseName("CAV1CHARGE",    "${SYS_PV}:CAV1CHARGE")
119 
120 # configure BSAS driver: bsasAsynDriverConfigure(<bsas port>, <register path>, <NTTable PV1>, <NTTable PV2    >, <NTTable PV3>, <NTTable PV4>, [named_root (optional)])
121 # remarks) ioc shell does NOT allow multiple-line input for a command, thus, we need to list up all of the     arguments in a sngle line
122 bsasAsynDriverConfigure("bsasPort", "mmio/AmcCarrierCore/AmcCarrierBsa/Bsas", "${SYS_PV}:SC_HXR", "${SYS_P    V}:SC_SXR", "${SYS_PV}:SC_BSYD","${SYS_PV}:SC_DIAG0" )

Database loading

 87 # ===========================================
 88 #               DBD LOADING
 89 # ===========================================
 90 # Load crossbarControl PVs
 91 dbLoadRecords("db/crossbarCtrl.db", "DEV=${PREFIX0},LOCA=${LOCA},IOC_UNIT=${UNIT},INST=0,PORT=crossbar0")
 92 
 93 # Load tprTrigger PVs
 94 dbLoadRecords("db/tprTrig.db", "DEV=${IOC_PV}:0,LOCA=${LOCA},IOC_UNIT=${UNIT},INST=0,PORT=trig0")
 95 
 96 # LCLS2 mode PCAV
 97 dbLoadRecords("db/ATCACommon.db", "DEV=${PREFIX0},PORT=atca0")
 98 dbLoadRecords("db/StreamType.db", "DEV=${PREFIX0}:STR0,PORT=atca0_str0")                                                                                          
 99 dbLoadRecords("db/StreamLong.db", "DEV=${PREFIX0}:STR0,PORT=atca0_str0, NELM=4096, TSE=-2")
100 dbLoadRecords("db/StreamShort.db","DEV=${PREFIX0}:STR0,PORT=atca0_str0, NELM=4096, TSE=-2")
101 dbLoadRecords("db/StreamType.db", "DEV=${PREFIX0}:STR1,PORT=atca0_str1")
102 dbLoadRecords("db/StreamLong.db", "DEV=${PREFIX0}:STR1,PORT=atca0_str1, NELM=4096, TSE=-2")
103 dbLoadRecords("db/StreamShort.db","DEV=${PREFIX0}:STR1,PORT=atca0_str1, NELM=4096, TSE=-2")
104 dbLoadRecords("db/RFCommon.db", "DEV=${PREFIX0},PORT=rfc0")
105 dbLoadRecords("db/StreamLong.db", "DEV=${PREFIX0}:STR0,PORT=atca0_str0, NELM=4096, TSE=-2")
106 dbLoadRecords("db/StreamLong.db", "DEV=${PREFIX0}:STR1,PORT=atca0_str1, NELM=4096, TSE=-2")
107 dbLoadRecords("db/LlrfUpConverter.db", "DEV=${PREFIX0},PORT=upc0")
108 dbLoadRecords("db/LlrfDownConverter.db", "DEV=${PREFIX0},PORT=dnc0")
109 dbLoadRecords("db/pcavAsyn.db", "DEV=${PREFIX0},PORT=pcav0")


Load the databases for the BSA PVs.

124 # ========================================================================================
125 # SC Timing Mode: BSA driver DB
126 # ========================================================================================
127 # FPGA Driven: We can add a maximum of only 31 BSA Channels
128 # ========================================================================================
129 dbLoadRecords("db/bsa.db", "DEV=${SYS_PV},PORT=bsaPort,BSAKEY=REFAMPL,SECN=REFAMPL")
130 dbLoadRecords("db/bsa.db", "DEV=${SYS_PV},PORT=bsaPort,BSAKEY=REFPHASE,SECN=REFPHASE")
131 dbLoadRecords("db/bsa.db", "DEV=${SYS_PV},PORT=bsaPort,BSAKEY=CAV0PRB0PHASE,SECN=CAV0PRB0PHASE")
132 dbLoadRecords("db/bsa.db", "DEV=${SYS_PV},PORT=bsaPort,BSAKEY=CAV0PRB0AMPL,SECN=CAV0PRB0AMPL")
133 dbLoadRecords("db/bsa.db", "DEV=${SYS_PV},PORT=bsaPort,BSAKEY=SIGNAL04,SECN=SIGNAL04")
134 dbLoadRecords("db/bsa.db", "DEV=${SYS_PV},PORT=bsaPort,BSAKEY=SIGNAL05,SECN=SIGNAL05")
135 dbLoadRecords("db/bsa.db", "DEV=${SYS_PV},PORT=bsaPort,BSAKEY=CAV0PRB1PHASE,SECN=CAV0PRB1PHASE")
136 dbLoadRecords("db/bsa.db", "DEV=${SYS_PV},PORT=bsaPort,BSAKEY=CAV0PRB1AMPL,SECN=CAV0PRB1AMPL")
137 dbLoadRecords("db/bsa.db", "DEV=${SYS_PV},PORT=bsaPort,BSAKEY=SIGNAL08,SECN=SIGNAL08")
138 dbLoadRecords("db/bsa.db", "DEV=${SYS_PV},PORT=bsaPort,BSAKEY=SIGNAL09,SECN=SIGNAL09")
139 dbLoadRecords("db/bsa.db", "DEV=${SYS_PV},PORT=bsaPort,BSAKEY=CAV1PRB0PHASE,SECN=CAV1PRB0PHASE")
140 dbLoadRecords("db/bsa.db", "DEV=${SYS_PV},PORT=bsaPort,BSAKEY=CAV1PRB0AMPL,SECN=CAV1PRB0AMPL")
141 dbLoadRecords("db/bsa.db", "DEV=${SYS_PV},PORT=bsaPort,BSAKEY=SIGNAL12,SECN=SIGNAL12")
142 dbLoadRecords("db/bsa.db", "DEV=${SYS_PV},PORT=bsaPort,BSAKEY=SIGNAL13,SECN=SIGNAL13")
143 dbLoadRecords("db/bsa.db", "DEV=${SYS_PV},PORT=bsaPort,BSAKEY=CAV1PRB1PHASE,SECN=CAV1PRB1PHASE")
144 dbLoadRecords("db/bsa.db", "DEV=${SYS_PV},PORT=bsaPort,BSAKEY=CAV1PRB1AMPL,SECN=CAV1PRB1AMPL")
145 dbLoadRecords("db/bsa.db", "DEV=${SYS_PV},PORT=bsaPort,BSAKEY=CAV0TIME,SECN=CAV0TIME")
146 dbLoadRecords("db/bsa.db", "DEV=${SYS_PV},PORT=bsaPort,BSAKEY=CAV1TIME,SECN=CAV1TIME")
147 dbLoadRecords("db/bsa.db", "DEV=${SYS_PV},PORT=bsaPort,BSAKEY=CAV0CHARGE,SECN=CAV0CHARGE")
148 dbLoadRecords("db/bsa.db", "DEV=${SYS_PV},PORT=bsaPort,BSAKEY=CAV1CHARGE,SECN=CAV1CHARGE")
149 
150 # BSSS Control/Monintoring PVs
151 dbLoadRecords("db/bsssCtrl.db", "GLOBAL=BSSS:SYS0:2,DEV=${SYS_PV},PORT=bsssPort")
152 
153 # BSSS Scalar PVs
154 dbLoadRecords("db/bsss.db", "DEV=${SYS_PV},PORT=bsssPort,BSAKEY=REFAMPL,SECN=REFAMPL")
155 dbLoadRecords("db/bsss.db", "DEV=${SYS_PV},PORT=bsssPort,BSAKEY=REFPHASE,SECN=REFPHASE")
156 dbLoadRecords("db/bsss.db", "DEV=${SYS_PV},PORT=bsssPort,BSAKEY=CAV0PRB0PHASE,SECN=CAV0PRB0PHASE")
157 dbLoadRecords("db/bsss.db", "DEV=${SYS_PV},PORT=bsssPort,BSAKEY=CAV0PRB0AMPL,SECN=CAV0PRB0AMPL")
158 dbLoadRecords("db/bsss.db", "DEV=${SYS_PV},PORT=bsssPort,BSAKEY=SIGNAL04,SECN=SIGNAL04")
159 dbLoadRecords("db/bsss.db", "DEV=${SYS_PV},PORT=bsssPort,BSAKEY=SIGNAL05,SECN=SIGNAL05")
160 dbLoadRecords("db/bsss.db", "DEV=${SYS_PV},PORT=bsssPort,BSAKEY=CAV0PRB1PHASE,SECN=CAV0PRB1PHASE")
161 dbLoadRecords("db/bsss.db", "DEV=${SYS_PV},PORT=bsssPort,BSAKEY=CAV0PRB1AMPL,SECN=CAV0PRB1AMPL")
162 dbLoadRecords("db/bsss.db", "DEV=${SYS_PV},PORT=bsssPort,BSAKEY=SIGNAL08,SECN=SIGNAL08")
163 dbLoadRecords("db/bsss.db", "DEV=${SYS_PV},PORT=bsssPort,BSAKEY=SIGNAL09,SECN=SIGNAL09")
164 dbLoadRecords("db/bsss.db", "DEV=${SYS_PV},PORT=bsssPort,BSAKEY=CAV1PRB0PHASE,SECN=CAV1PRB0PHASE")
165 dbLoadRecords("db/bsss.db", "DEV=${SYS_PV},PORT=bsssPort,BSAKEY=CAV1PRB0AMPL,SECN=CAV1PRB0AMPL")
166 dbLoadRecords("db/bsss.db", "DEV=${SYS_PV},PORT=bsssPort,BSAKEY=SIGNAL12,SECN=SIGNAL12")
167 dbLoadRecords("db/bsss.db", "DEV=${SYS_PV},PORT=bsssPort,BSAKEY=SIGNAL13,SECN=SIGNAL13")
168 dbLoadRecords("db/bsss.db", "DEV=${SYS_PV},PORT=bsssPort,BSAKEY=CAV1PRB1PHASE,SECN=CAV1PRB1PHASE")
169 dbLoadRecords("db/bsss.db", "DEV=${SYS_PV},PORT=bsssPort,BSAKEY=CAV1PRB1AMPL,SECN=CAV1PRB1AMPL")
170 dbLoadRecords("db/bsss.db", "DEV=${SYS_PV},PORT=bsssPort,BSAKEY=CAV0TIME,SECN=CAV0TIME")
171 dbLoadRecords("db/bsss.db", "DEV=${SYS_PV},PORT=bsssPort,BSAKEY=CAV1TIME,SECN=CAV1TIME")
172 dbLoadRecords("db/bsss.db", "DEV=${SYS_PV},PORT=bsssPort,BSAKEY=CAV0CHARGE,SECN=CAV0CHARGE")
173 dbLoadRecords("db/bsss.db", "DEV=${SYS_PV},PORT=bsssPort,BSAKEY=CAV1CHARGE,SECN=CAV1CHARGE")
174 
175 #BLD Control/Monintoring PVs
176 dbLoadRecords("db/bldCtrl.db", "GLOBAL=BLD:SYS0:2,DEV=${SYS_PV},SERVICE=BLD,PORT=bldPort")
177 
178 # BLD Scalar PVs
179 dbLoadRecords("db/bld.db", "DEV=${SYS_PV},PORT=bldPort,BSAKEY=REFAMPL,SECN=REFAMPL")
180 dbLoadRecords("db/bld.db", "DEV=${SYS_PV},PORT=bldPort,BSAKEY=REFPHASE,SECN=REFPHASE")
181 dbLoadRecords("db/bld.db", "DEV=${SYS_PV},PORT=bldPort,BSAKEY=CAV0PRB0PHASE,SECN=CAV0PRB0PHASE")
182 dbLoadRecords("db/bld.db", "DEV=${SYS_PV},PORT=bldPort,BSAKEY=CAV0PRB0AMPL,SECN=CAV0PRB0AMPL")
183 dbLoadRecords("db/bld.db", "DEV=${SYS_PV},PORT=bldPort,BSAKEY=SIGNAL04,SECN=SIGNAL04")
184 dbLoadRecords("db/bld.db", "DEV=${SYS_PV},PORT=bldPort,BSAKEY=SIGNAL05,SECN=SIGNAL05")
185 dbLoadRecords("db/bld.db", "DEV=${SYS_PV},PORT=bldPort,BSAKEY=CAV0PRB1PHASE,SECN=CAV0PRB1PHASE")
186 dbLoadRecords("db/bld.db", "DEV=${SYS_PV},PORT=bldPort,BSAKEY=CAV0PRB1AMPL,SECN=CAV0PRB1AMPL")
187 dbLoadRecords("db/bld.db", "DEV=${SYS_PV},PORT=bldPort,BSAKEY=SIGNAL08,SECN=SIGNAL08")
188 dbLoadRecords("db/bld.db", "DEV=${SYS_PV},PORT=bldPort,BSAKEY=SIGNAL09,SECN=SIGNAL09")
189 dbLoadRecords("db/bld.db", "DEV=${SYS_PV},PORT=bldPort,BSAKEY=CAV1PRB0PHASE,SECN=CAV1PRB0PHASE")
190 dbLoadRecords("db/bld.db", "DEV=${SYS_PV},PORT=bldPort,BSAKEY=CAV1PRB0AMPL,SECN=CAV1PRB0AMPL")
191 dbLoadRecords("db/bld.db", "DEV=${SYS_PV},PORT=bldPort,BSAKEY=SIGNAL12,SECN=SIGNAL12")
192 dbLoadRecords("db/bld.db", "DEV=${SYS_PV},PORT=bldPort,BSAKEY=SIGNAL13,SECN=SIGNAL13")
193 dbLoadRecords("db/bld.db", "DEV=${SYS_PV},PORT=bldPort,BSAKEY=CAV1PRB1PHASE,SECN=CAV1PRB1PHASE")
194 dbLoadRecords("db/bld.db", "DEV=${SYS_PV},PORT=bldPort,BSAKEY=CAV1PRB1AMPL,SECN=CAV1PRB1AMPL")
195 dbLoadRecords("db/bld.db", "DEV=${SYS_PV},PORT=bldPort,BSAKEY=CAV0TIME,SECN=CAV0TIME")
196 dbLoadRecords("db/bld.db", "DEV=${SYS_PV},PORT=bldPort,BSAKEY=CAV1TIME,SECN=CAV1TIME")
197 dbLoadRecords("db/bld.db", "DEV=${SYS_PV},PORT=bldPort,BSAKEY=CAV0CHARGE,SECN=CAV0CHARGE")
198 dbLoadRecords("db/bld.db", "DEV=${SYS_PV},PORT=bldPort,BSAKEY=CAV1CHARGE,SECN=CAV1CHARGE")
199 
200 # BSAS Control/Monintoring PVs
201 dbLoadRecords("db/bsasCtrl.db", "GLOBAL=BSAS:SYS0:2,AREA=${LOCA},IOC_UNIT=${UNIT},IOC_INST=0,DEV=${SYS_PV}    ,PORT=bsasPort")
202 
203 # BSAS Scalar PVs
204 dbLoadRecords("db/bsas.db", "DEV=${SYS_PV},PORT=bsasPort,BSAKEY=REFAMPL,SECN=REFAMPL")
205 dbLoadRecords("db/bsas.db", "DEV=${SYS_PV},PORT=bsasPort,BSAKEY=REFPHASE,SECN=REFPHASE")
206 dbLoadRecords("db/bsas.db", "DEV=${SYS_PV},PORT=bsasPort,BSAKEY=CAV0PRB0PHASE,SECN=CAV0PRB0PHASE")
207 dbLoadRecords("db/bsas.db", "DEV=${SYS_PV},PORT=bsasPort,BSAKEY=CAV0PRB0AMPL,SECN=CAV0PRB0AMPL")
208 dbLoadRecords("db/bsas.db", "DEV=${SYS_PV},PORT=bsasPort,BSAKEY=SIGNAL04,SECN=SIGNAL04")
209 dbLoadRecords("db/bsas.db", "DEV=${SYS_PV},PORT=bsasPort,BSAKEY=SIGNAL05,SECN=SIGNAL05")
210 dbLoadRecords("db/bsas.db", "DEV=${SYS_PV},PORT=bsasPort,BSAKEY=CAV0PRB1PHASE,SECN=CAV0PRB1PHASE")
211 dbLoadRecords("db/bsas.db", "DEV=${SYS_PV},PORT=bsasPort,BSAKEY=CAV0PRB1AMPL,SECN=CAV0PRB1AMPL")
212 dbLoadRecords("db/bsas.db", "DEV=${SYS_PV},PORT=bsasPort,BSAKEY=SIGNAL08,SECN=SIGNAL08")
213 dbLoadRecords("db/bsas.db", "DEV=${SYS_PV},PORT=bsasPort,BSAKEY=SIGNAL09,SECN=SIGNAL09")
214 dbLoadRecords("db/bsas.db", "DEV=${SYS_PV},PORT=bsasPort,BSAKEY=CAV1PRB0PHASE,SECN=CAV1PRB0PHASE")
215 dbLoadRecords("db/bsas.db", "DEV=${SYS_PV},PORT=bsasPort,BSAKEY=CAV1PRB0AMPL,SECN=CAV1PRB0AMPL")
216 dbLoadRecords("db/bsas.db", "DEV=${SYS_PV},PORT=bsasPort,BSAKEY=SIGNAL12,SECN=SIGNAL12")
217 dbLoadRecords("db/bsas.db", "DEV=${SYS_PV},PORT=bsasPort,BSAKEY=SIGNAL13,SECN=SIGNAL13")
218 dbLoadRecords("db/bsas.db", "DEV=${SYS_PV},PORT=bsasPort,BSAKEY=CAV1PRB1PHASE,SECN=CAV1PRB1PHASE")
219 dbLoadRecords("db/bsas.db", "DEV=${SYS_PV},PORT=bsasPort,BSAKEY=CAV1PRB1AMPL,SECN=CAV1PRB1AMPL")
220 dbLoadRecords("db/bsas.db", "DEV=${SYS_PV},PORT=bsasPort,BSAKEY=CAV0TIME,SECN=CAV0TIME")
221 dbLoadRecords("db/bsas.db", "DEV=${SYS_PV},PORT=bsasPort,BSAKEY=CAV1TIME,SECN=CAV1TIME")
222 dbLoadRecords("db/bsas.db", "DEV=${SYS_PV},PORT=bsasPort,BSAKEY=CAV0CHARGE,SECN=CAV0CHARGE")
223 dbLoadRecords("db/bsas.db", "DEV=${SYS_PV},PORT=bsasPort,BSAKEY=CAV1CHARGE,SECN=CAV1CHARGE")

Asyn driver configuration

111 # slot 6, LCLS2 mode PCAV
112 cpswDebugStreamAsynDriverConfigure("atca0_str0", 0x4000, "header_enabled", "Stream0", "Stream1", "Stream2"    , "Stream3")
113 cpswDebugStreamAsynDriverConfigure("atca0_str1", 0x4000, "header_enabled", "Stream4", "Stream5", "Stream6"    , "Stream7")
114 cpswRFCommonAsynDriverConfigure("rfc0",      "mmio/AppTop/AppCore/Sysgen", "MyRoot0")
115 cpswLlrfDownConvAsynDriverConfigure("dnc0",  "mmio/AppTop/AppCore/AmcMrLlrfDownConvert")
116 cpswLlrfUpConvAsynDriverConfigure("upc0",    "mmio/AppTop/AppCore/AmcMrLlrfUpConvert")
117 pcavAsynDriverConfigure("pcav0",  "", "bstream", "${PREFIX0}", "MyRoot0","SC")

Archiver list

In the PCAV Application directory, there is a specific area where the archive files are kept.  In particular, see content of srcArchive/ for the archive files produced for each of the IOCs.

The list of the archived PVs for each IOC is shown below.

#
# syntax <PVNAME>  <POLL_SEC>  <MONITOR option>
# $(PREFIX):A  1 monitor
#

$(PREFIX):PCAVVER            30       monitor
# -----------------------
#  RF reference
# -----------------------
$(PREFIX):RFREFSEL           15       monitor
$(PREFIX):RFREFPHASE         15       monitor
$(PREFIX):RFREFAMPL          15       monitor
$(PREFIX):RFREFI             15       monitor
$(PREFIX):RFREFQ             15       monitor

# -----------------------
# Cavity 0
# -----------------------
$(PREFIX):CAV0NCOPHASEADJ    15       monitor
$(PREFIX):CAV0FREQEVALSTART  15       monitor
$(PREFIX):CAV0FREQEVALEND    15       monitor
$(PREFIX):CAV0REGLATCHPT     15       monitor

# Probe 0
$(PREFIX):CAV0PRB0CHSEL      15       monitor
$(PREFIX):CAV0PRB0WNDSTART   15       monitor
$(PREFIX):CAV0PRB0WNDEND     15       monitor
$(PREFIX):CAV0PRB0CALIBCOEFF 15       monitor
$(PREFIX):CAV0PRB0POFF       15       monitor
#
$(PREFIX):CAV0PRB0IFPHASE     5       monitor
$(PREFIX):CAV0PRB0IFAMPL      5       monitor
$(PREFIX):CAV0PRB0IFI         5       monitor
$(PREFIX):CAV0PRB0IFQ         5       monitor
$(PREFIX):CAV0PRB0DCREAL      5       monitor
$(PREFIX):CAV0PRB0DCIMAGE     5       monitor
$(PREFIX):CAV0PRB0DCFREQ      5       monitor
$(PREFIX):CAV0PRB0INTEGI      5       monitor
$(PREFIX):CAV0PRB0INTEGQ      5       monitor
$(PREFIX):CAV0PRB0OUTPHASE    5       monitor
$(PREFIX):CAV0PRB0OUTAMPL     5       monitor
$(PREFIX):CAV0PRB0COMPPHASE   5       monitor

# Probe 1
$(PREFIX):CAV0PRB1CHSEL      15       monitor
$(PREFIX):CAV0PRB1WNDSTART   15       monitor
$(PREFIX):CAV0PRB1WNDEND     15       monitor
$(PREFIX):CAV0PRB1CALIBCOEFF 15       monitor
$(PREFIX):CAV0PRB1POFF       15       monitor
#
$(PREFIX):CAV0PRB1IFPHASE     5       monitor
$(PREFIX):CAV0PRB1IFAMPL      5       monitor
$(PREFIX):CAV0PRB1IFI         5       monitor
$(PREFIX):CAV0PRB1IFQ         5       monitor
$(PREFIX):CAV0PRB1DCREAL      5       monitor
$(PREFIX):CAV0PRB1DCIMAGE     5       monitor
$(PREFIX):CAV0PRB1DCFREQ      5       monitor
$(PREFIX):CAV0PRB1INTEGI      5       monitor
$(PREFIX):CAV0PRB1INTEGQ      5       monitor
$(PREFIX):CAV0PRB1OUTPHASE    5       monitor
$(PREFIX):CAV0PRB1OUTAMPL     5       monitor
$(PREFIX):CAV0PRB1COMPPHASE   5       monitor

# -----------------------
# Cavity 1
# -----------------------
$(PREFIX):CAV1NCOPHASEADJ    15       monitor
$(PREFIX):CAV1FREQEVALSTART  15       monitor
$(PREFIX):CAV1FREQEVALEND    15       monitor
$(PREFIX):CAV1REGLATCHPT     15       monitor

# Probe 0
$(PREFIX):CAV1PRB0CHSEL      15       monitor
$(PREFIX):CAV1PRB0WNDSTART   15       monitor
$(PREFIX):CAV1PRB0WNDEND     15       monitor
$(PREFIX):CAV1PRB0CALIBCOEFF 15       monitor
$(PREFIX):CAV1PRB0POFF       15       monitor
#
$(PREFIX):CAV1PRB0IFPHASE     5       monitor
$(PREFIX):CAV1PRB0IFAMPL      5       monitor
$(PREFIX):CAV1PRB0IFI         5       monitor
$(PREFIX):CAV1PRB0IFQ         5       monitor
$(PREFIX):CAV1PRB0DCREAL      5       monitor
$(PREFIX):CAV1PRB0DCIMAGE     5       monitor
$(PREFIX):CAV1PRB0DCFREQ      5       monitor
$(PREFIX):CAV1PRB0INTEGI      5       monitor
$(PREFIX):CAV1PRB0INTEGQ      5       monitor
$(PREFIX):CAV1PRB0OUTPHASE    5       monitor
$(PREFIX):CAV1PRB0OUTAMPL     5       monitor
$(PREFIX):CAV1PRB0COMPPHASE   5       monitor

# Probe 1
$(PREFIX):CAV1PRB1CHSEL      15       monitor
$(PREFIX):CAV1PRB1WNDSTART   15       monitor
$(PREFIX):CAV1PRB1WNDEND     15       monitor
$(PREFIX):CAV1PRB1CALIBCOEFF 15       monitor
$(PREFIX):CAV1PRB1POFF       15       monitor
#
$(PREFIX):CAV1PRB1IFPHASE     5       monitor
$(PREFIX):CAV1PRB1IFAMPL      5       monitor
$(PREFIX):CAV1PRB1IFI         5       monitor
$(PREFIX):CAV1PRB1IFQ         5       monitor
$(PREFIX):CAV1PRB1DCREAL      5       monitor
$(PREFIX):CAV1PRB1DCIMAGE     5       monitor
$(PREFIX):CAV1PRB1DCFREQ      5       monitor
$(PREFIX):CAV1PRB1INTEGI      5       monitor
$(PREFIX):CAV1PRB1INTEGQ      5       monitor
$(PREFIX):CAV1PRB1OUTPHASE    5       monitor 
$(PREFIX):CAV1PRB1OUTAMPL     5       monitor
$(PREFIX):CAV1PRB1COMPPHASE   5       monitor

# ----------------------------
# Linear Conversion
# ----------------------------

# Cavity 0
$(PREFIX):TIME0               5      monitor
$(PREFIX):CHRG0               5      monitor
#
$(PREFIX):COEFFA_TIME0       15      monitor
$(PREFIX):COEFFB_TIME0       15      monitor
$(PREFIX):COEFFA_CHRG0       15      monitor
$(PREFIX):COEFFB_CHRG0       15      monitor

# Cavity 1
$(PREFIX):TIME1               5      monitor
$(PREFIX):CHRG1               5      monitor
#
$(PREFIX):COEFFA_TIME1       15      monitor
$(PREFIX):COEFFB_TIME1       15      monitor
$(PREFIX):COEFFA_CHRG1       15      monitor
$(PREFIX):COEFFB_CHRG1       15      monitor


# ----------------------------
# RMS/Average
# ----------------------------

# Cavity 0
$(PREFIX):THREDCHRG0         15      monitor
$(PREFIX):VARGAIN0           15      monitor
$(PREFIX):RMSTIME0            5      monitor
$(PREFIX):RAWTIME0            5      monitor
$(PREFIX):RMSCHRG0            5      monitor
$(PREFIX):RAWCHRG0            5      monitor
$(PREFIX):VALIDCNT0           5      monitor
$(PREFIX):INVALIDCNT0         5      monitor

# Cavity 1
$(PREFIX):THREDCHRG1         15      monitor
$(PREFIX):VARGAIN1           15      monitor
$(PREFIX):RMSTIME1            5      monitor
$(PREFIX):RAWTIME1            5      monitor
$(PREFIX):RMSCHRG1            5      monitor
$(PREFIX):RAWCHRG1            5      monitor
$(PREFIX):VALIDCNT1           5      monitor
$(PREFIX):INVALIDCNT1         5      monitor

# ----------------------------------------
# Up-Converter/Down-Converter Temperatures 
# ----------------------------------------

# Up-Converter
$(PREFIX):UPC_TEMP0          5      monitor
$(PREFIX):UPC_TEMP1          5      monitor
$(PREFIX):UPC_TEMP2          5      monitor
$(PREFIX):UPC_TEMP3          5      monitor

# Down-Converter
$(PREFIX):DNC_TEMP0          5      monitor
$(PREFIX):DNC_TEMP1          5      monitor
$(PREFIX):DNC_TEMP2          5      monitor
$(PREFIX):DNC_TEMP3          5      monitor


In the startup script, we ensure that the archive list is copied over to the data directory.

119 # =====================================================================
120 # Copy Archive List file into the ioc Data Area
121 # =====================================================================
122 system("cp ${TOP}/archive/${IOC}.archive ${IOC_DATA}/${IOC}/archive")

PV restoration

27 save_restoreSet_Debug(0)
 28 
 29 # Specify where request and save_restore files can be found
 30 set_requestfile_path("${IOC_DATA}/${IOC}/autosave-req")
 31 set_savefile_path("${IOC_DATA}/${IOC}/autosave")
 32 
 33 # Status-PV prefix, so save_restore can find its status PVs.
 34 save_restoreSet_status_prefix("${IOC_NAME}:")
 35 
 36 # Load bumpless reboot status database
 37 dbLoadRecords("db/save_restoreStatus.db","P=${IOC_NAME}:")
 38 
 39 # Ok to restore a save set that had missing values (no CA connection to PV)?
 40 # Ok to save a file if some CA connections are bad?
 41 save_restoreSet_IncompleteSetsOk(1)
 42 
 43 # In the restore operation, a copy of the save file will be written.  The
 44 # file name can look like "auto_settings.sav.bu", and be overwritten every
 45 # reboot, or it can look like "auto_settings.sav_020306-083522" (this is what
 46 # is meant by a dated backup file) and every reboot will write a new copy.
 47 save_restoreSet_DatedBackupFiles(1)
 48 
 49 # Specify what save files should be restored and when.
 50 # Note: up to eight files can be specified for each pass.
 51 set_pass0_restoreFile("info_positions.sav")
 52 set_pass1_restoreFile("info_positions.sav")
 53 set_pass0_restoreFile("info_settings.sav")
 54 set_pass1_restoreFile("info_settings.sav")
 55 
 56 # Number of sequenced backup files (e.g., 'info_settings.sav0') to write
 57 save_restoreSet_NumSeqFiles(3)
 58 
 59 # Time interval between sequenced backups
 60 save_restoreSet_SeqPeriodInSeconds(600)
 61 
 62 # Time between failed .sav-file write and the retry.
 63 save_restoreSet_RetrySeconds(60)

Set crossbar control

225 ################################################################################
226 # ATCA Carrier Slots downstream of slot 2 RTM, will receive 
227 # timing over the backplane
228 ################################################################################
229 # crossbar control ('output', 'inpput')
230 #    output: 'RTM_OUT0' | 'FPGA' | 'BP' | 'RTM_OUT1'
231 #    input:  'RTM_IN0' ['LCLS1'] | 'FPGA' | 'BP' | 'RTM_IN1' ['LCLS2']
232 ################################################################################
233 crossbarControl("FPGA", "BP")

IOC initialization

238 # Increase callback and scanOnce quese sizes
239 # Note: must do after db load but before iocInit
240 callbackSetQueueSize(12000)
241 scanOnceSetQueueSize(12000)
242 
243 # Start EPICS
244 iocInit()
245 
246 # Initialize caPutLog
247 caPutLogInit("${EPICS_CA_PUT_LOG_ADDR}")

Initialize waveform engines (NC)

249 # ##########################
250 # Initialize Waveform Engines
251 # ##########################
252 dbpf $(PREFIX0):WFENG0_INIT 1
253 dbpf $(PREFIX0):WFENG0_INIT 0
254 dbpf $(PREFIX0):WFENG1_INIT 1
255 dbpf $(PREFIX0):WFENG1_INIT 0

Enable DaqMux

257 # ############
258 # Enable DaqMux
259 # ############
260 dbpf $(PREFIX0):DAQMUX0_AUTOREARM  1
261 dbpf $(PREFIX0):DAQMUX1_AUTOREARM  1

PV autosave start

40 # Wait before building autosave files 
 41 epicsThreadSleep(1)  
 42 
 43 # Generate the autosave PV list
 44 # Note we need change directory to 
 45 # where we are saving the restore 
 46 # request file.
 47 cd("${IOC_DATA}/${IOC}/autosave-req")
 48 makeAutosaveFiles()
 49 
 50 # Start the save_restore task  
 51 # save changes on change, but no faster
 52 # than every 5 seconds.
 53 # Note: the last arg cannot be set to 0
 54 create_monitor_set("info_positions.req", 60 )
 55 create_monitor_set("info_settings.req" , 60 )  
 56 
 57 # change directory to TOP of application 
 58 cd("${TOP}")
 59 pwd()

Screens

To bring up the screens in either Der or Production, following the instructions below.

Dev

To launch the main screen, do the following:

$  cd /afs/slac/g/lcls/epics/iocTop/pcav/pcav-git/edm
$  edm -eolc -x main_b084_unds.edl

Production

As in the case of Dev, the steps are similar for Production.  Please see below.

$  cd /usr/local/lcls/epics/iocTop/pcav/R3.0.0/edm
$  edm -eolc -x main_sc_unds.edl


NCO Frequency Feedback

A script has been set up to monitor the ringing seen in the raw waveform from the cavity and feed that into the firmware calculation.  To run the script, see usage below.

[softegr@lcls-srv01 edm]$ cd /u1/lcls/epics/ioc/data/sioc-unds-pt11/
[softegr@lcls-srv01 sioc-unds-pt11]$ ls
archive  autosave  autosave-req  iocInfo  restart.date  restore  screenlog.0  screenlog.0-20230921103955  unds_pcav_freq_fbk.py  yaml  yamlConfig
[softegr@lcls-srv01 sioc-unds-pt11]$ python unds_pcav_freq_fbk.py --help
usage: unds_pcav_freq_fbk.py [-h] [--base BASE] [--start START] [--stop STOP] [--interval INTERVAL]

pcav frequency tracker

optional arguments:
  -h, --help           show this help message and exit
  --base BASE          base PV name
  --start START        fit start
  --stop STOP          fit stop
  --interval INTERVAL  nfits per update


The defaults for NC are:

parser.add_argument('--base', help='base PV name', default='SIOC:UNDS:PT01:0') 
parser.add_argument('--start', help='fit start', type=int, default=620) 
parser.add_argument('--stop' , help='fit stop', type=int, default=1620) 
parser.add_argument('--interval' , help='nfits per update', type=int, default=100)


The defaults for SC are:

parser.add_argument('--base', help='base PV name', default='SIOC:UNDS:PT11:0') 
parser.add_argument('--start', help='fit start', type=int, default=620) 
parser.add_argument('--stop' , help='fit stop', type=int, default=1620) 
parser.add_argument('--interval' , help='nfits per update', type=int, default=100)

Deliverables

See below for the tagged releases used in production.

Software

RepositoryTag (RHEL6)Tag (RHEL7)SXR IOCHXR IOC
pcavR3.0.0R3.0.1sioc-unds-pt11sion-undh-pt11

Firmware

RepositoryGit Hash
lcls2-pcav6690138cb0476e2f9bb57b66440047dfa8b3aaa5
  • No labels