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 |
RFoF | RF-over-Fiber |
Rx | Receiver |
SHM | Shelf Manager |
SMF | Single Mode Fibers |
Tx | Transmitter |
VCO | Voltage Controlled Oscillator |
A high-level description of the linac locking system is captured in the page linked below:
Linac Locking - A System Level Overview
The IOC provides the controls and a monitoring capability for a low drift and low phase noise continuous-wave optical link system. The latter is used for the transmission of a 3GHz RF reference signal over long distance. The system consists of a Transmitter (Tx) and a Receiver (Rx) that are connected with two single mode fibers (SMF) (optical links). To achieve low phase noise performance, the RF signal is propagated through the unidirectional optical link. The low noise link is additionally stabilized against phase drifts with the bidirectional phase-compensated optical link (low drift link). An ethernet connection between the units is also needed for data exchange and control purposes. We will refer to this system as an RF-over-Fiber (RFoF) system.
The control system for RFoF consists of a state machine responsible for the initialization, tuning and reliable operation of the system. The state machine consists of 6 states and its functional view is provided below.
The state machine always starts in the INIT state. In this state, all temperature controllers are enabled, while all phase controllers are disabled.
In the STARTUP state, the power supply voltages, ethernet connection between the Tx and Rx units and environmental conditions are checked. All units are equipped with external humidity, pressure and temperature sensors.
After the thermal stabilization of all internal modules (WARMING UP state), the TUNING state is reached. This state consists of 30 sub-states. See attached manual for details on this. The basic tasks that are performed in these sub-states are: starting the laser, identification of MZM and VOA best working points, checking if the optical power levels are sufficient, stabilizing the optical power at different photodiodes and closing the phase and amplitude control loops for the optical and RF signals in the Tx and Rx units.
When all phase control loops are closed and the RF output power at Rx is stabilized, the state machine enters the READY state. The latter has two basic sub-states: LOCKED and UNLOCKED. Sub-State Locked consists of two additional sub-states. As before, see the manual for more details on these states and sub-states.
In summary however, in LOCKED, all phase loops are locked and some other actuators are in their nominal working regions (laser and fiber spool temperatures in Tx module, RF phase shifters, RF attenuators, MZM bias voltage, VOA voltage). The LOCKED state is indicated as an illuminated green LED diode on the front panel of the Tx and Rx units and with the LOCKD caption on the LCD display.
If any of these actuators approaches its working region boundary and all the phase control loops are still closed and the output RF power at Rx unit is sufficient, then the system goes to the SEMI-LOCKED state. The latter is indicated by a blinking green LED on the front panel of Tx and Rx units and with the blinking LOCKD* caption on the LCD display.
In the case that any of the phase control loops is unlocked or the output RF power is too low, then the system goes to the UNLOCKED sub-state. If the timer exceeds the 15 minutes limit, then the state machine enters the SHUTDOWN state and procedure.
Also, the Tx unit receives data from Rx via the ethernet connection at all time. In the case of a broken ethernet connection, the system goes from LOCKED to UNLOCKED. This may eventually cause the system to go to SHUTDOWN, unless the connection is reestablished within 10 minutes.
In this section, we address IOC deployment details such as the App hosting the RFoF Telnet IOC, IOC name and the assigned CPUs in both Dev and Production.
The IOC is housed in 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-ms11 | cpu-sys0-sp02 |
The configuration used in Dev is seen below. As of now, there is no designated test stand in Dev.
IOC Name | CPU Name (Intended) |
---|---|
sioc-b084-ms11 | 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 # =========================================== 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")
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", "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/")
Tell the IOC where to find the list of record names that will be autosaved.
# ===================================================================== # 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.
# 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 phase locker records.
# =========================================== # 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):")
Create an EPICS Stream Driver to interface with the Transmitter and Receiver.
# =========================================== # 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)
A complete list of the records to archive is provided below.
(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
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 START # =========================================== # Autosave start < $(TOP)/iocBoot/common/autosave_start.cmd create_monitor_set("${IOC}.req", 5, "")
A complete list of the RFoF Telnet IOC Process Variables (PVs) can be found in the page linked below, along with revision dates based on feedback received from the naming team.
Linac Locking - RFoF Telnet IOC (sioc-sys0-ms11) PVs
Currently, there is no RFoF test stand in Dev and hence only the Production displays are available.
To access and launch the displays in Production, follow the steps outlined below.
[softegr@lcls-srv01 skoufis]$ cd $EPICS_IOCS/sioc-sys0-ms11/iocSpecificRelease/masterSourceApp/srcDisplay/ [softegr@lcls-srv01 skoufis]$ cat masterSourceApp/srcDisplay/README.rfof To run the the RFOF screens, follow these steps from within this directory: 1. $ source /usr/local/lcls/epics/setup/epicsenv-7.0.3.1-1.0.bash 2. $ source /usr/local/lcls/tools/script/ENVS64.bash 3. Invoke the GUI you need, i.e. $ pydm -m "BASE=MSLK:SYS0:MS11" rfof.ui $ pydm -m "BASE=MSLK:SYS0:MS11" Errors.ui $ pydm -m "BASE=MSLK:SYS0:MS11" StateMachine.ui $ pydm -m "BASE=MSLK:SYS0:MS11" TransmitterParameters.ui $ pydm -m "BASE=MSLK:SYS0:MS11" ReceiverParameters.ui
The released software will be made available in the main IOC release area post-deployment (Dev: /afs/slac/g/lcls/epics/iocTop, Production:/usr/local/lcls/epics/iocTop/). See below for the specific repositories and tags.
See software release details below.
Repository | Version | IOC Name |
---|---|---|
masterSource | R2.2.3 | sioc-sys0-ms10 |
See firmware release details below.
Repository | Version |
---|---|