DUTs
E_Op
TYPE E_Op :
(
IDLE := 0, //Initialized at plc first cycle and be ready to start monitor when system are under vacuum
STANDBY := 1, //Monitoring IF pump lost speed
ISOLATE := 2, //Isolate MC and CAT chambers
PRE_VENT := 3, //connect DP1 to ROUGH2 and stop turbos
CLS_ROUGH2_VRCs :=4, //close rough2 vrcs to isolate roughing pumps
VENTING := 5, //Venting in progress
COMP := 6 //Venting complete, MC and CAT are atmosphere
// AT_VACUUM := 4, //Monitor Vacuum status
// VENT_ALL := 5, //Vent full system
// VENT_NC := 6, //Vent nozzle chamber only
// VENT_MC_CAT := 7, //Vent Main Chamber + cather
// VENT_CAT := 8 //Vent cather only
);
END_TYPE
- Related:
E_OpStep
TYPE E_OpStep :
(
IDLE := 0, // Idle when first plc cycle and system is not under vacuum
STANDBY := 0, //STANDBY when system is under vacuum and all pumps are at speed
(* Vent MC and CAT System steps *)
VMCAS_CLOSE_ISOLATION_VALVES,
VMCAS_STOP_TURBO_PUMPS,
VMCAS_CLOSE_ROUGH_VALVES,
VMCAS_STOP_GAUGES,
VMCAS_WAIT_FOR_TURBO_PUMPS_SPIN_DOWN,
VMCAS_VENTING,
VMCAS_FINISH
(* Add new states for other procedures *)
);
END_TYPE
GVLs
GVL_Automation_Constants
VAR_GLOBAL CONSTANT
EPICS_STRING_SIZE : INT := 40;
ATM_PRESS : REAL := 760.0; // Atmospheric pressure in Torr
ATM_PRESS_INTERLOCK_SP : INT := 800; // Interlock pressure SP for valves
ATM_PRESS_ERR_RNG : INT := 10; // Error range that is still considered atmospheric pressure // update while testing these values
PTM_INTERLOCK_SP : REAL := 1E-2; // Turbo pumps interlock backing pressure SP
VALVE_INTERLOCK_SP : REAL := 5E-3; // Roughing valve interlock pressure SP
AT_VAC_SP : REAL := 1E-6; // Setpoint for at vacuum condition // update based on James and Jing input
VALVE_TIMEOUT : TIME := T#10S; // How long system tries to open or close valve before failing
TURBOS_NOT_RUNNING_TIMEOUT : TIME := T#10M; // How long to try turbo pumping before failing
TURBOS_SPINDOWN_TIMEOUT : TIME := T#30M; // How long for turbos to spin down
//Vent Valves
VENTING_CYCLE : TIME := T#2M; // Increase open position every 2 min
VFV_POSITION_STEP : INT := 1; // Position increase step
ROUGH2_VFV_02_INITIAL_POSITION : INT := 50; // Initial postion in % for ROUGH2_VFV_02 valve
ROUGH2_VFV_03_INITIAL_POSITION : INT := 40; // Initial postion in % for ROUGH2_VFV_03 valve
END_VAR
GVL_FWM
//{attribute 'qualified_only'}
VAR_GLOBAL
(*
{attribute 'pytmc' := 'pv: DREAM:COIL'}
{attribute 'TcLinkTo' := '.iRaw := TIIB[K4S8_DRL_03_E21_EL3052]^AI Standard Channel 1^Value'}
fbDreamCoilFlowMeter : FB_FDQ_FlowMeter;
*)
{attribute 'TcLinkTo' := '.iRaw := TIIB[K4S8_DRL_03_E21_EL3052]^AI Standard Channel 1^Value'}
fbCoilFlowMeter : FB_AnalogInput := (iTermBits:=15, fTermMax:=60, fTermMin:=0);
{attribute 'pytmc' := '
pv: DREAM:COIL:FWM:VAL
io: i
field: EGU "lpm"
'}
fCoilCoolantFlowMeterRBV : LREAL;
//Coil PS Current Monitoring
// {attribute 'TcLinkTo' := '.iRaw := TIIB[K4S8_DRL_04_E16_EL3174-0002]^AI Standard Channel 4^Value'}
fbCoilCurrentMonitoring : FB_AnalogInput := (iTermBits:=15, fTermMax:=310, fTermMin:=0);
{attribute 'pytmc' := '
pv: DREAM:COIL:CURRENT:VAL
io: i
field: EGU "A"
field: PREC "2"
'}
fCoilCurrentRBV : LREAL;
END_VAR
GVL_PLC_Interface
//{attribute 'qualified_only'}
VAR_GLOBAL
(*TMO Vacuum PLC ETHERCAT BRRIDGE COM STATUS*)
//0: Other side is in OP state, >0: Error
{attribute 'TcLinkTo' := 'TIIB[R20_DRL_03_E14_EL6695]^SYNC Inputs^TxPDO state'}
bEcatBridge_TxPDO_state AT %I* :BOOL;
//0: External device connectd, 1: External device not connected
{attribute 'TcLinkTo' := 'TIIB[R20_DRL_03_E14_EL6695]^SYNC Inputs^External device not connected'}
bEcatBridge_External_device_not_connected AT %I* : BOOL;
//0 = Data valid, 1 = Data invalid
{attribute 'TcLinkTo' := 'TIIB[R20_DRL_03_E14_EL6695]^WcState^WcStateIn'}
bEcatBridge_WcState AT %I* : BOOL;
//EtherCAT status
bTMOVacEcatBridge_COM_ERROR : BOOL;
(*Inputs from TMO Beamline*)
{attribute 'TcLinkTo' := 'TIIB[R20_DRL_03_E14_EL6695]^IO Inputs^HUTCH_PLC_NAME'}
sHUTCH_PLC_NAME AT %I* : STRING(8);
{attribute 'TcLinkTo' := 'TIIB[R20_DRL_03_E14_EL6695]^IO Inputs^TMO_MR5K4_VWC_CLOSED_LS'}
bTMO_MR5K4_VWC_CLOSED_LS AT %I* : BOOL;
{attribute 'TcLinkTo' := 'TIIB[R20_DRL_03_E14_EL6695]^IO Inputs^TMO_TM2K4_VWC_CLOSED_LS'}
bTMO_TM2K4_VWC_CLOSED_LS AT %I* : BOOL;
{attribute 'TcLinkTo' := 'TIIB[R20_DRL_03_E14_EL6695]^IO Inputs^TMO_MR5K4_VWC_OPEN_LS'}
bTMO_MR5K4_VWC_OPEN_LS AT %I* : BOOL;
{attribute 'TcLinkTo' := 'TIIB[R20_DRL_03_E14_EL6695]^IO Inputs^TMO_TM2K4_VWC_OPEN_LS'}
bTMO_TM2K4_VWC_OPEN_LS AT %I* : BOOL;
(*Outputs to TMO Beamline PLC*)
{attribute 'TcLinkTo' := 'TIIB[R20_DRL_03_E14_EL6695]^IO Outputs^ENDSTATION_PLC_NAME'}
sENDSTATION_PLC_NAME AT %Q* : STRING(8):= 'DREAM';
{attribute 'TcLinkTo' := 'TIIB[R20_DRL_03_E14_EL6695]^IO Outputs^DREAM_HV_SAFETY_ENABLE'}
bDREAM_HV_SAFETY_ENABLE AT %Q* : BOOL;
{attribute 'TcLInkTo' := 'TIIB[R20_DRL_03_E14_EL6695]^IO Outputs^DREAM_TURBOS_ALL_AtSpd'}
{attribute 'pytmc' := '
pv: PLC:DREAM:VAC:TURBOS_ALL_ATSPD
io: i
'}
bDREAM_TURBOS_ALL_AtSpd AT %Q* : BOOL;
{attribute 'TcLinkTo' := 'TIIB[R20_DRL_03_E14_EL6695]^IO Outputs^DREAM_MAIN_xAT_VAC'}
bDREAM_MAIN_xAT_VAC AT %Q* : BOOL;
{attribute 'TcLInkTo' := 'TIIB[R20_DRL_03_E14_EL6695]^IO Outputs^DREAM_MAIN_xPRESS_OK'}
bDREAM_MAIN_xPRESS_OK AT %Q* : BOOL;
{attribute 'TcLINKTo' := 'TIIB[R20_DRL_03_E14_EL6695]^IO Outputs^DREAM_MAIN_rPRESS'}
fDREAM_MAIN_rPRESS AT %Q* : REAL;
{attribute 'TcLinkTo' := 'TIIB[R20_DRL_03_E14_EL6695]^IO Outputs^CLOSE_TMO_MR5K4_VWC'}
bCLOSE_TMO_MR5K4_VWC AT %Q* : BOOL;
{attribute 'TcLinkTo' := 'TIIB[R20_DRL_03_E14_EL6695]^IO Outputs^CLOSE_TMO_TM2K4_VWC'}
bCLOSE_TMO_TM2K4_VWC AT %Q* : BOOL;
(*ISEG HV Crate Safety Loop*)
{attribute 'TcLInkTo' := 'TIIB[K4S8_DRL_04_E14_EL2624]^Channel 4^Output'}
{attribute 'pytmc' := '
pv: TMO:PLC:DREAM:VAC:HV_SAFETY_ENABLE
io:i
'}
bHVSafteyLoopEnable AT %Q* : BOOL := FALSE; (*When Enables the High voltage Saftey loop is closed and HV can start.*)
(*Interlock output to control COIL PS*)
{attribute 'TcLInkTo' := 'TIIB[K4S8_DRL_04_E14_EL2624]^Channel 3^Output'}
{attribute 'pytmc' := '
pv: PLC:DREAM:COIL_PS:ILK
io: i
'}
bCoilPS_ILK AT %Q* : BOOL := FALSE;
//Ethercat interface with DREAM motion PLC
(*ETHERCAT BRRIDGE COM STATUS*)
//0: Other side is in OP state, >0: Error
{attribute 'TcLinkTo' := 'TIIB[R20_DRL_03_E15_EL1122]^SYNC Inputs^TxPDO state'}
bMotEcatBridge_TxPDO_state AT %I* :BOOL;
//0: External device connectd, 1: External device not connected
{attribute 'TcLinkTo' := 'TIIB[R20_DRL_03_E14_EL6695]^SYNC Inputs^External device not connected'}
bMotEcatBridge_External_device_not_connected AT %I* : BOOL;
//0 = Data valid, 1 = Data invalid
{attribute 'TcLinkTo' := 'TIIB[R20_DRL_03_E15_EL1122]^WcState^WcStateIn'}
bMotEcatBridge_WcState AT %I* : BOOL;
(*Inputs from DREAM Motion*)
//{attribute 'TcLinkTo' := 'TIIB[R20_DRL_03_E14_EL6695]^IO Inputs^HUTCH_PLC_NAME'}
//sMOT_PLC_NAME AT %I* : STRING(8);
{attribute 'TcLinkTo' := 'TIIB[R20_DRL_03_E15_EL1122]^IO Outputs^xDREAM_GNZ_Y_OUT'}
xDREAM_GNZ_Y_OUT AT %I* : BOOL;
{attribute 'TcLinkTo' := 'TIIB[R20_DRL_03_E15_EL1122]IO Outputs^xDREAM_GNZ_Y_Ext_OUT'}
xDREAM_GNZ_Y_Ext_OUT AT %I* : BOOL;
(*Outputs to DREAM Motion*)
{attribute 'TcLinkTo' := 'TIIB[R20_DRL_03_E15_EL1122]^IO Inputs^bDREAM_VRC_DP1_OPENED_LS'}
bDREAM_VRC_DP1_OPENED_LS AT %Q* : BOOL;
END_VAR
GVL_Serial_Com
//{attribute 'qualified_only'}
VAR_GLOBAL
//COMM FUNCTION
SerialRXBuffer_DREAM_NC_PTM_01 : ComBuffer;
SerialTXBuffer_DREAM_NC_PTM_01 : ComBuffer;
SerialRXBuffer_DREAM_NC_PTM_02 : ComBuffer;
SerialTXBuffer_DREAM_NC_PTM_02 : ComBuffer;
SerialRXBuffer_DREAM_DP1_PTM_01 : ComBuffer;
SerialTXBuffer_DREAM_DP1_PTM_01 : ComBuffer;
SerialRXBuffer_DREAM_DP2_PTM_01 : ComBuffer;
SerialTXBuffer_DREAM_DP2_PTM_01 : ComBuffer;
SerialRXBuffer_DREAM_DP3_PTM_01 : ComBuffer;
SerialTXBuffer_DREAM_DP3_PTM_01 : ComBuffer;
SerialRXBuffer_DREAM_MC_PTM_01 : ComBuffer;
SerialTXBuffer_DREAM_MC_PTM_01 : ComBuffer;
SerialRXBuffer_DREAM_MC_PTM_02 : ComBuffer;
SerialTXBuffer_DREAM_MC_PTM_02 : ComBuffer;
SerialRXBuffer_DREAM_CAT1_PTM_01 : ComBuffer;
SerialTXBuffer_DREAM_CAT1_PTM_01 : ComBuffer;
SerialRXBuffer_DREAM_CAT2_PTM_01 : ComBuffer;
SerialTXBuffer_DREAM_CAT2_PTM_01 : ComBuffer;
SerialRXBuffer_DREAM_ROUGH2_PTM_01 : ComBuffer;
SerialTXBuffer_DREAM_ROUGH2_PTM_01 : ComBuffer;
SerialRXBuffer_DREAM_ROUGH2_PTM_02 : ComBuffer;
SerialTXBuffer_DREAM_ROUGH2_PTM_02 : ComBuffer;
SerialRXBuffer_DREAM_ROUGH2_PTM_03 : ComBuffer;
SerialTXBuffer_DREAM_ROUGH2_PTM_03 : ComBuffer;
//Serial Terminal
fbSerialLineControl_DREAM_NC_PTM_01 : SerialLineControl;
fbSerialLineControl_DREAM_NC_PTM_02 : SerialLineControl;
fbSerialLineControl_DREAM_DP1_PTM_01 : SerialLineControl;
fbSerialLineControl_DREAM_DP2_PTM_01 : SerialLineControl;
fbSerialLineControl_DREAM_DP3_PTM_01 : SerialLineControl;
fbSerialLineControl_DREAM_MC_PTM_01 : SerialLineControl;
fbSerialLineControl_DREAM_MC_PTM_02 : SerialLineControl;
fbSerialLineControl_DREAM_CAT1_PTM_01 : SerialLineControl;
fbSerialLineControl_DREAM_CAT2_PTM_01 : SerialLineControl;
fbSerialLineControl_DREAM_ROUGH2_PTM_01 : SerialLineControl;
fbSerialLineControl_DREAM_ROUGH2_PTM_02 : SerialLineControl;
fbSerialLineControl_DREAM_ROUGH2_PTM_03 : SerialLineControl;
//SERIAL IO
{attribute 'TcLinkTo' := '.Status:=TIIB[K4S8_DRL_03_E12_EL6021]^COM TxPDO-Map Inputs^Status;
.D[0]:=TIIB[K4S8_DRL_03_E12_EL6021]^COM TxPDO-Map Inputs^Data In 0;
.D[1]:=TIIB[K4S8_DRL_03_E12_EL6021]^COM TxPDO-Map Inputs^Data In 1;
.D[2]:=TIIB[K4S8_DRL_03_E12_EL6021]^COM TxPDO-Map Inputs^Data In 2;
.D[3]:=TIIB[K4S8_DRL_03_E12_EL6021]^COM TxPDO-Map Inputs^Data In 3;
.D[4]:=TIIB[K4S8_DRL_03_E12_EL6021]^COM TxPDO-Map Inputs^Data In 4;
.D[5]:=TIIB[K4S8_DRL_03_E12_EL6021]^COM TxPDO-Map Inputs^Data In 5;
.D[6]:=TIIB[K4S8_DRL_03_E12_EL6021]^COM TxPDO-Map Inputs^Data In 6;
.D[7]:=TIIB[K4S8_DRL_03_E12_EL6021]^COM TxPDO-Map Inputs^Data In 7;
.D[8]:=TIIB[K4S8_DRL_03_E12_EL6021]^COM TxPDO-Map Inputs^Data In 8;
.D[9]:=TIIB[K4S8_DRL_03_E12_EL6021]^COM TxPDO-Map Inputs^Data In 9;
.D[10]:=TIIB[K4S8_DRL_03_E12_EL6021]^COM TxPDO-Map Inputs^Data In 10;
.D[11]:=TIIB[K4S8_DRL_03_E12_EL6021]^COM TxPDO-Map Inputs^Data In 11;
.D[12]:=TIIB[K4S8_DRL_03_E12_EL6021]^COM TxPDO-Map Inputs^Data In 12;
.D[13]:=TIIB[K4S8_DRL_03_E12_EL6021]^COM TxPDO-Map Inputs^Data In 13;
.D[14]:=TIIB[K4S8_DRL_03_E12_EL6021]^COM TxPDO-Map Inputs^Data In 14;
.D[15]:=TIIB[K4S8_DRL_03_E12_EL6021]^COM TxPDO-Map Inputs^Data In 15;
.D[16]:=TIIB[K4S8_DRL_03_E12_EL6021]^COM TxPDO-Map Inputs^Data In 16;
.D[17]:=TIIB[K4S8_DRL_03_E12_EL6021]^COM TxPDO-Map Inputs^Data In 17;
.D[18]:=TIIB[K4S8_DRL_03_E12_EL6021]^COM TxPDO-Map Inputs^Data In 18;
.D[19]:=TIIB[K4S8_DRL_03_E12_EL6021]^COM TxPDO-Map Inputs^Data In 19;
.D[20]:=TIIB[K4S8_DRL_03_E12_EL6021]^COM TxPDO-Map Inputs^Data In 20;
.D[21]:=TIIB[K4S8_DRL_03_E12_EL6021]^COM TxPDO-Map Inputs^Data In 21
'}
stComIn_DREAM_NC_PTM_01 AT %I* : EL6inData22B;
{attribute 'TcLinkTo' := '.Ctrl:=TIIB[K4S8_DRL_03_E12_EL6021]^COM RxPDO-Map Outputs^Ctrl;
.D[0]:=TIIB[K4S8_DRL_03_E12_EL6021]^COM RxPDO-Map Outputs^Data Out 0;
.D[1]:=TIIB[K4S8_DRL_03_E12_EL6021]^COM RxPDO-Map Outputs^Data Out 1;
.D[2]:=TIIB[K4S8_DRL_03_E12_EL6021]^COM RxPDO-Map Outputs^Data Out 2;
.D[3]:=TIIB[K4S8_DRL_03_E12_EL6021]^COM RxPDO-Map Outputs^Data Out 3;
.D[4]:=TIIB[K4S8_DRL_03_E12_EL6021]^COM RxPDO-Map Outputs^Data Out 4;
.D[5]:=TIIB[K4S8_DRL_03_E12_EL6021]^COM RxPDO-Map Outputs^Data Out 5;
.D[6]:=TIIB[K4S8_DRL_03_E12_EL6021]^COM RxPDO-Map Outputs^Data Out 6;
.D[7]:=TIIB[K4S8_DRL_03_E12_EL6021]^COM RxPDO-Map Outputs^Data Out 7;
.D[8]:=TIIB[K4S8_DRL_03_E12_EL6021]^COM RxPDO-Map Outputs^Data Out 8;
.D[9]:=TIIB[K4S8_DRL_03_E12_EL6021]^COM RxPDO-Map Outputs^Data Out 9;
.D[10]:=TIIB[K4S8_DRL_03_E12_EL6021]^COM RxPDO-Map Outputs^Data Out 10;
.D[11]:=TIIB[K4S8_DRL_03_E12_EL6021]^COM RxPDO-Map Outputs^Data Out 11;
.D[12]:=TIIB[K4S8_DRL_03_E12_EL6021]^COM RxPDO-Map Outputs^Data Out 12;
.D[13]:=TIIB[K4S8_DRL_03_E12_EL6021]^COM RxPDO-Map Outputs^Data Out 13;
.D[14]:=TIIB[K4S8_DRL_03_E12_EL6021]^COM RxPDO-Map Outputs^Data Out 14;
.D[15]:=TIIB[K4S8_DRL_03_E12_EL6021]^COM RxPDO-Map Outputs^Data Out 15;
.D[16]:=TIIB[K4S8_DRL_03_E12_EL6021]^COM RxPDO-Map Outputs^Data Out 16;
.D[17]:=TIIB[K4S8_DRL_03_E12_EL6021]^COM RxPDO-Map Outputs^Data Out 17;
.D[18]:=TIIB[K4S8_DRL_03_E12_EL6021]^COM RxPDO-Map Outputs^Data Out 18;
.D[19]:=TIIB[K4S8_DRL_03_E12_EL6021]^COM RxPDO-Map Outputs^Data Out 19;
.D[20]:=TIIB[K4S8_DRL_03_E12_EL6021]^COM RxPDO-Map Outputs^Data Out 20;
.D[21]:=TIIB[K4S8_DRL_03_E12_EL6021]^COM RxPDO-Map Outputs^Data Out 21
'}
stComOut_DREAM_NC_PTM_01 AT %Q* : EL6outData22B;
{attribute 'TcLinkTo' := '.Status:=TIIB[K4S8_DRL_03_E15_EL6021]^COM TxPDO-Map Inputs^Status;
.D[0]:=TIIB[K4S8_DRL_03_E15_EL6021]^COM TxPDO-Map Inputs^Data In 0;
.D[1]:=TIIB[K4S8_DRL_03_E15_EL6021]^COM TxPDO-Map Inputs^Data In 1;
.D[2]:=TIIB[K4S8_DRL_03_E15_EL6021]^COM TxPDO-Map Inputs^Data In 2;
.D[3]:=TIIB[K4S8_DRL_03_E15_EL6021]^COM TxPDO-Map Inputs^Data In 3;
.D[4]:=TIIB[K4S8_DRL_03_E15_EL6021]^COM TxPDO-Map Inputs^Data In 4;
.D[5]:=TIIB[K4S8_DRL_03_E15_EL6021]^COM TxPDO-Map Inputs^Data In 5;
.D[6]:=TIIB[K4S8_DRL_03_E15_EL6021]^COM TxPDO-Map Inputs^Data In 6;
.D[7]:=TIIB[K4S8_DRL_03_E15_EL6021]^COM TxPDO-Map Inputs^Data In 7;
.D[8]:=TIIB[K4S8_DRL_03_E15_EL6021]^COM TxPDO-Map Inputs^Data In 8;
.D[9]:=TIIB[K4S8_DRL_03_E15_EL6021]^COM TxPDO-Map Inputs^Data In 9;
.D[10]:=TIIB[K4S8_DRL_03_E15_EL6021]^COM TxPDO-Map Inputs^Data In 10;
.D[11]:=TIIB[K4S8_DRL_03_E15_EL6021]^COM TxPDO-Map Inputs^Data In 11;
.D[12]:=TIIB[K4S8_DRL_03_E15_EL6021]^COM TxPDO-Map Inputs^Data In 12;
.D[13]:=TIIB[K4S8_DRL_03_E15_EL6021]^COM TxPDO-Map Inputs^Data In 13;
.D[14]:=TIIB[K4S8_DRL_03_E15_EL6021]^COM TxPDO-Map Inputs^Data In 14;
.D[15]:=TIIB[K4S8_DRL_03_E15_EL6021]^COM TxPDO-Map Inputs^Data In 15;
.D[16]:=TIIB[K4S8_DRL_03_E15_EL6021]^COM TxPDO-Map Inputs^Data In 16;
.D[17]:=TIIB[K4S8_DRL_03_E15_EL6021]^COM TxPDO-Map Inputs^Data In 17;
.D[18]:=TIIB[K4S8_DRL_03_E15_EL6021]^COM TxPDO-Map Inputs^Data In 18;
.D[19]:=TIIB[K4S8_DRL_03_E15_EL6021]^COM TxPDO-Map Inputs^Data In 19;
.D[20]:=TIIB[K4S8_DRL_03_E15_EL6021]^COM TxPDO-Map Inputs^Data In 20;
.D[21]:=TIIB[K4S8_DRL_03_E15_EL6021]^COM TxPDO-Map Inputs^Data In 21
'}
stComIn_DREAM_NC_PTM_02 AT %I* : EL6inData22B;
{attribute 'TcLinkTo' := '.Ctrl:=TIIB[K4S8_DRL_03_E15_EL6021]^COM RxPDO-Map Outputs^Ctrl;
.D[0]:=TIIB[K4S8_DRL_03_E15_EL6021]^COM RxPDO-Map Outputs^Data Out 0;
.D[1]:=TIIB[K4S8_DRL_03_E15_EL6021]^COM RxPDO-Map Outputs^Data Out 1;
.D[2]:=TIIB[K4S8_DRL_03_E15_EL6021]^COM RxPDO-Map Outputs^Data Out 2;
.D[3]:=TIIB[K4S8_DRL_03_E15_EL6021]^COM RxPDO-Map Outputs^Data Out 3;
.D[4]:=TIIB[K4S8_DRL_03_E15_EL6021]^COM RxPDO-Map Outputs^Data Out 4;
.D[5]:=TIIB[K4S8_DRL_03_E15_EL6021]^COM RxPDO-Map Outputs^Data Out 5;
.D[6]:=TIIB[K4S8_DRL_03_E15_EL6021]^COM RxPDO-Map Outputs^Data Out 6;
.D[7]:=TIIB[K4S8_DRL_03_E15_EL6021]^COM RxPDO-Map Outputs^Data Out 7;
.D[8]:=TIIB[K4S8_DRL_03_E15_EL6021]^COM RxPDO-Map Outputs^Data Out 8;
.D[9]:=TIIB[K4S8_DRL_03_E15_EL6021]^COM RxPDO-Map Outputs^Data Out 9;
.D[10]:=TIIB[K4S8_DRL_03_E15_EL6021]^COM RxPDO-Map Outputs^Data Out 10;
.D[11]:=TIIB[K4S8_DRL_03_E15_EL6021]^COM RxPDO-Map Outputs^Data Out 11;
.D[12]:=TIIB[K4S8_DRL_03_E15_EL6021]^COM RxPDO-Map Outputs^Data Out 12;
.D[13]:=TIIB[K4S8_DRL_03_E15_EL6021]^COM RxPDO-Map Outputs^Data Out 13;
.D[14]:=TIIB[K4S8_DRL_03_E15_EL6021]^COM RxPDO-Map Outputs^Data Out 14;
.D[15]:=TIIB[K4S8_DRL_03_E15_EL6021]^COM RxPDO-Map Outputs^Data Out 15;
.D[16]:=TIIB[K4S8_DRL_03_E15_EL6021]^COM RxPDO-Map Outputs^Data Out 16;
.D[17]:=TIIB[K4S8_DRL_03_E15_EL6021]^COM RxPDO-Map Outputs^Data Out 17;
.D[18]:=TIIB[K4S8_DRL_03_E15_EL6021]^COM RxPDO-Map Outputs^Data Out 18;
.D[19]:=TIIB[K4S8_DRL_03_E15_EL6021]^COM RxPDO-Map Outputs^Data Out 19;
.D[20]:=TIIB[K4S8_DRL_03_E15_EL6021]^COM RxPDO-Map Outputs^Data Out 20;
.D[21]:=TIIB[K4S8_DRL_03_E15_EL6021]^COM RxPDO-Map Outputs^Data Out 21
'}
stComOut_DREAM_NC_PTM_02 AT %Q* : EL6outData22B;
{attribute 'TcLinkTo' := '.Status:=TIIB[K4S8_DRL_03_E18_EL6021]^COM TxPDO-Map Inputs^Status;
.D[0]:=TIIB[K4S8_DRL_03_E18_EL6021]^COM TxPDO-Map Inputs^Data In 0;
.D[1]:=TIIB[K4S8_DRL_03_E18_EL6021]^COM TxPDO-Map Inputs^Data In 1;
.D[2]:=TIIB[K4S8_DRL_03_E18_EL6021]^COM TxPDO-Map Inputs^Data In 2;
.D[3]:=TIIB[K4S8_DRL_03_E18_EL6021]^COM TxPDO-Map Inputs^Data In 3;
.D[4]:=TIIB[K4S8_DRL_03_E18_EL6021]^COM TxPDO-Map Inputs^Data In 4;
.D[5]:=TIIB[K4S8_DRL_03_E18_EL6021]^COM TxPDO-Map Inputs^Data In 5;
.D[6]:=TIIB[K4S8_DRL_03_E18_EL6021]^COM TxPDO-Map Inputs^Data In 6;
.D[7]:=TIIB[K4S8_DRL_03_E18_EL6021]^COM TxPDO-Map Inputs^Data In 7;
.D[8]:=TIIB[K4S8_DRL_03_E18_EL6021]^COM TxPDO-Map Inputs^Data In 8;
.D[9]:=TIIB[K4S8_DRL_03_E18_EL6021]^COM TxPDO-Map Inputs^Data In 9;
.D[10]:=TIIB[K4S8_DRL_03_E18_EL6021]^COM TxPDO-Map Inputs^Data In 10;
.D[11]:=TIIB[K4S8_DRL_03_E18_EL6021]^COM TxPDO-Map Inputs^Data In 11;
.D[12]:=TIIB[K4S8_DRL_03_E18_EL6021]^COM TxPDO-Map Inputs^Data In 12;
.D[13]:=TIIB[K4S8_DRL_03_E18_EL6021]^COM TxPDO-Map Inputs^Data In 13;
.D[14]:=TIIB[K4S8_DRL_03_E18_EL6021]^COM TxPDO-Map Inputs^Data In 14;
.D[15]:=TIIB[K4S8_DRL_03_E18_EL6021]^COM TxPDO-Map Inputs^Data In 15;
.D[16]:=TIIB[K4S8_DRL_03_E18_EL6021]^COM TxPDO-Map Inputs^Data In 16;
.D[17]:=TIIB[K4S8_DRL_03_E18_EL6021]^COM TxPDO-Map Inputs^Data In 17;
.D[18]:=TIIB[K4S8_DRL_03_E18_EL6021]^COM TxPDO-Map Inputs^Data In 18;
.D[19]:=TIIB[K4S8_DRL_03_E18_EL6021]^COM TxPDO-Map Inputs^Data In 19;
.D[20]:=TIIB[K4S8_DRL_03_E18_EL6021]^COM TxPDO-Map Inputs^Data In 20;
.D[21]:=TIIB[K4S8_DRL_03_E18_EL6021]^COM TxPDO-Map Inputs^Data In 21
'}
stComIn_DREAM_DP1_PTM_01 AT %I* : EL6inData22B;
{attribute 'TcLinkTo' := '.Ctrl:=TIIB[K4S8_DRL_03_E18_EL6021]^COM RxPDO-Map Outputs^Ctrl;
.D[0]:=TIIB[K4S8_DRL_03_E18_EL6021]^COM RxPDO-Map Outputs^Data Out 0;
.D[1]:=TIIB[K4S8_DRL_03_E18_EL6021]^COM RxPDO-Map Outputs^Data Out 1;
.D[2]:=TIIB[K4S8_DRL_03_E18_EL6021]^COM RxPDO-Map Outputs^Data Out 2;
.D[3]:=TIIB[K4S8_DRL_03_E18_EL6021]^COM RxPDO-Map Outputs^Data Out 3;
.D[4]:=TIIB[K4S8_DRL_03_E18_EL6021]^COM RxPDO-Map Outputs^Data Out 4;
.D[5]:=TIIB[K4S8_DRL_03_E18_EL6021]^COM RxPDO-Map Outputs^Data Out 5;
.D[6]:=TIIB[K4S8_DRL_03_E18_EL6021]^COM RxPDO-Map Outputs^Data Out 6;
.D[7]:=TIIB[K4S8_DRL_03_E18_EL6021]^COM RxPDO-Map Outputs^Data Out 7;
.D[8]:=TIIB[K4S8_DRL_03_E18_EL6021]^COM RxPDO-Map Outputs^Data Out 8;
.D[9]:=TIIB[K4S8_DRL_03_E18_EL6021]^COM RxPDO-Map Outputs^Data Out 9;
.D[10]:=TIIB[K4S8_DRL_03_E18_EL6021]^COM RxPDO-Map Outputs^Data Out 10;
.D[11]:=TIIB[K4S8_DRL_03_E18_EL6021]^COM RxPDO-Map Outputs^Data Out 11;
.D[12]:=TIIB[K4S8_DRL_03_E18_EL6021]^COM RxPDO-Map Outputs^Data Out 12;
.D[13]:=TIIB[K4S8_DRL_03_E18_EL6021]^COM RxPDO-Map Outputs^Data Out 13;
.D[14]:=TIIB[K4S8_DRL_03_E18_EL6021]^COM RxPDO-Map Outputs^Data Out 14;
.D[15]:=TIIB[K4S8_DRL_03_E18_EL6021]^COM RxPDO-Map Outputs^Data Out 15;
.D[16]:=TIIB[K4S8_DRL_03_E18_EL6021]^COM RxPDO-Map Outputs^Data Out 16;
.D[17]:=TIIB[K4S8_DRL_03_E18_EL6021]^COM RxPDO-Map Outputs^Data Out 17;
.D[18]:=TIIB[K4S8_DRL_03_E18_EL6021]^COM RxPDO-Map Outputs^Data Out 18;
.D[19]:=TIIB[K4S8_DRL_03_E18_EL6021]^COM RxPDO-Map Outputs^Data Out 19;
.D[20]:=TIIB[K4S8_DRL_03_E18_EL6021]^COM RxPDO-Map Outputs^Data Out 20;
.D[21]:=TIIB[K4S8_DRL_03_E18_EL6021]^COM RxPDO-Map Outputs^Data Out 21
'}
stComOut_DREAM_DP1_PTM_01 AT %Q* : EL6outData22B;
{attribute 'TcLinkTo' := '.Status:=TIIB[R20_DRL_03_E9_EL6001]^COM Inputs^Status;
.D[0]:=TIIB[R20_DRL_03_E9_EL6001]^COM Inputs^Data In 0;
.D[1]:=TIIB[R20_DRL_03_E9_EL6001]^COM Inputs^Data In 1;
.D[2]:=TIIB[R20_DRL_03_E9_EL6001]^COM Inputs^Data In 2;
.D[3]:=TIIB[R20_DRL_03_E9_EL6001]^COM Inputs^Data In 3;
.D[4]:=TIIB[R20_DRL_03_E9_EL6001]^COM Inputs^Data In 4;
.D[5]:=TIIB[R20_DRL_03_E9_EL6001]^COM Inputs^Data In 5;
.D[6]:=TIIB[R20_DRL_03_E9_EL6001]^COM Inputs^Data In 6;
.D[7]:=TIIB[R20_DRL_03_E9_EL6001]^COM Inputs^Data In 7;
.D[8]:=TIIB[R20_DRL_03_E9_EL6001]^COM Inputs^Data In 8;
.D[9]:=TIIB[R20_DRL_03_E9_EL6001]^COM Inputs^Data In 9;
.D[10]:=TIIB[R20_DRL_03_E9_EL6001]^COM Inputs^Data In 10;
.D[11]:=TIIB[R20_DRL_03_E9_EL6001]^COM Inputs^Data In 11;
.D[12]:=TIIB[R20_DRL_03_E9_EL6001]^COM Inputs^Data In 12;
.D[13]:=TIIB[R20_DRL_03_E9_EL6001]^COM Inputs^Data In 13;
.D[14]:=TIIB[R20_DRL_03_E9_EL6001]^COM Inputs^Data In 14;
.D[15]:=TIIB[R20_DRL_03_E9_EL6001]^COM Inputs^Data In 15;
.D[16]:=TIIB[R20_DRL_03_E9_EL6001]^COM Inputs^Data In 16;
.D[17]:=TIIB[R20_DRL_03_E9_EL6001]^COM Inputs^Data In 17;
.D[18]:=TIIB[R20_DRL_03_E9_EL6001]^COM Inputs^Data In 18;
.D[19]:=TIIB[R20_DRL_03_E9_EL6001]^COM Inputs^Data In 19;
.D[20]:=TIIB[R20_DRL_03_E9_EL6001]^COM Inputs^Data In 20;
.D[21]:=TIIB[R20_DRL_03_E9_EL6001]^COM Inputs^Data In 21
'}
stComIn_DREAM_DP2_PTM_01 AT %I* : EL6inData22B;
{attribute 'TcLinkTo' := '.Ctrl:=TIIB[R20_DRL_03_E9_EL6001]^COM Outputs^Ctrl;
.D[0]:=TIIB[R20_DRL_03_E9_EL6001]^COM Outputs^Data Out 0;
.D[1]:=TIIB[R20_DRL_03_E9_EL6001]^COM Outputs^Data Out 1;
.D[2]:=TIIB[R20_DRL_03_E9_EL6001]^COM Outputs^Data Out 2;
.D[3]:=TIIB[R20_DRL_03_E9_EL6001]^COM Outputs^Data Out 3;
.D[4]:=TIIB[R20_DRL_03_E9_EL6001]^COM Outputs^Data Out 4;
.D[5]:=TIIB[R20_DRL_03_E9_EL6001]^COM Outputs^Data Out 5;
.D[6]:=TIIB[R20_DRL_03_E9_EL6001]^COM Outputs^Data Out 6;
.D[7]:=TIIB[R20_DRL_03_E9_EL6001]^COM Outputs^Data Out 7;
.D[8]:=TIIB[R20_DRL_03_E9_EL6001]^COM Outputs^Data Out 8;
.D[9]:=TIIB[R20_DRL_03_E9_EL6001]^COM Outputs^Data Out 9;
.D[10]:=TIIB[R20_DRL_03_E9_EL6001]^COM Outputs^Data Out 10;
.D[11]:=TIIB[R20_DRL_03_E9_EL6001]^COM Outputs^Data Out 11;
.D[12]:=TIIB[R20_DRL_03_E9_EL6001]^COM Outputs^Data Out 12;
.D[13]:=TIIB[R20_DRL_03_E9_EL6001]^COM Outputs^Data Out 13;
.D[14]:=TIIB[R20_DRL_03_E9_EL6001]^COM Outputs^Data Out 14;
.D[15]:=TIIB[R20_DRL_03_E9_EL6001]^COM Outputs^Data Out 15;
.D[16]:=TIIB[R20_DRL_03_E9_EL6001]^COM Outputs^Data Out 16;
.D[17]:=TIIB[R20_DRL_03_E9_EL6001]^COM Outputs^Data Out 17;
.D[18]:=TIIB[R20_DRL_03_E9_EL6001]^COM Outputs^Data Out 18;
.D[19]:=TIIB[R20_DRL_03_E9_EL6001]^COM Outputs^Data Out 19;
.D[20]:=TIIB[R20_DRL_03_E9_EL6001]^COM Outputs^Data Out 20;
.D[21]:=TIIB[R20_DRL_03_E9_EL6001]^COM Outputs^Data Out 21
'}
stComOut_DREAM_DP2_PTM_01 AT %Q* : EL6outData22B;
{attribute 'TcLinkTo' := '.Status:=TIIB[R20_DRL_03_E10_EL6001]^COM Inputs^Status;
.D[0]:=TIIB[R20_DRL_03_E10_EL6001]^COM Inputs^Data In 0;
.D[1]:=TIIB[R20_DRL_03_E10_EL6001]^COM Inputs^Data In 1;
.D[2]:=TIIB[R20_DRL_03_E10_EL6001]^COM Inputs^Data In 2;
.D[3]:=TIIB[R20_DRL_03_E10_EL6001]^COM Inputs^Data In 3;
.D[4]:=TIIB[R20_DRL_03_E10_EL6001]^COM Inputs^Data In 4;
.D[5]:=TIIB[R20_DRL_03_E10_EL6001]^COM Inputs^Data In 5;
.D[6]:=TIIB[R20_DRL_03_E10_EL6001]^COM Inputs^Data In 6;
.D[7]:=TIIB[R20_DRL_03_E10_EL6001]^COM Inputs^Data In 7;
.D[8]:=TIIB[R20_DRL_03_E10_EL6001]^COM Inputs^Data In 8;
.D[9]:=TIIB[R20_DRL_03_E10_EL6001]^COM Inputs^Data In 9;
.D[10]:=TIIB[R20_DRL_03_E10_EL6001]^COM Inputs^Data In 10;
.D[11]:=TIIB[R20_DRL_03_E10_EL6001]^COM Inputs^Data In 11;
.D[12]:=TIIB[R20_DRL_03_E10_EL6001]^COM Inputs^Data In 12;
.D[13]:=TIIB[R20_DRL_03_E10_EL6001]^COM Inputs^Data In 13;
.D[14]:=TIIB[R20_DRL_03_E10_EL6001]^COM Inputs^Data In 14;
.D[15]:=TIIB[R20_DRL_03_E10_EL6001]^COM Inputs^Data In 15;
.D[16]:=TIIB[R20_DRL_03_E10_EL6001]^COM Inputs^Data In 16;
.D[17]:=TIIB[R20_DRL_03_E10_EL6001]^COM Inputs^Data In 17;
.D[18]:=TIIB[R20_DRL_03_E10_EL6001]^COM Inputs^Data In 18;
.D[19]:=TIIB[R20_DRL_03_E10_EL6001]^COM Inputs^Data In 19;
.D[20]:=TIIB[R20_DRL_03_E10_EL6001]^COM Inputs^Data In 20;
.D[21]:=TIIB[R20_DRL_03_E10_EL6001]^COM Inputs^Data In 21
'}
stComIn_DREAM_DP3_PTM_01 AT %I* : EL6inData22B;
{attribute 'TcLinkTo' := '.Ctrl:=TIIB[R20_DRL_03_E10_EL6001]^COM Outputs^Ctrl;
.D[0]:=TIIB[R20_DRL_03_E10_EL6001]^COM Outputs^Data Out 0;
.D[1]:=TIIB[R20_DRL_03_E10_EL6001]^COM Outputs^Data Out 1;
.D[2]:=TIIB[R20_DRL_03_E10_EL6001]^COM Outputs^Data Out 2;
.D[3]:=TIIB[R20_DRL_03_E10_EL6001]^COM Outputs^Data Out 3;
.D[4]:=TIIB[R20_DRL_03_E10_EL6001]^COM Outputs^Data Out 4;
.D[5]:=TIIB[R20_DRL_03_E10_EL6001]^COM Outputs^Data Out 5;
.D[6]:=TIIB[R20_DRL_03_E10_EL6001]^COM Outputs^Data Out 6;
.D[7]:=TIIB[R20_DRL_03_E10_EL6001]^COM Outputs^Data Out 7;
.D[8]:=TIIB[R20_DRL_03_E10_EL6001]^COM Outputs^Data Out 8;
.D[9]:=TIIB[R20_DRL_03_E10_EL6001]^COM Outputs^Data Out 9;
.D[10]:=TIIB[R20_DRL_03_E10_EL6001]^COM Outputs^Data Out 10;
.D[11]:=TIIB[R20_DRL_03_E10_EL6001]^COM Outputs^Data Out 11;
.D[12]:=TIIB[R20_DRL_03_E10_EL6001]^COM Outputs^Data Out 12;
.D[13]:=TIIB[R20_DRL_03_E10_EL6001]^COM Outputs^Data Out 13;
.D[14]:=TIIB[R20_DRL_03_E10_EL6001]^COM Outputs^Data Out 14;
.D[15]:=TIIB[R20_DRL_03_E10_EL6001]^COM Outputs^Data Out 15;
.D[16]:=TIIB[R20_DRL_03_E10_EL6001]^COM Outputs^Data Out 16;
.D[17]:=TIIB[R20_DRL_03_E10_EL6001]^COM Outputs^Data Out 17;
.D[18]:=TIIB[R20_DRL_03_E10_EL6001]^COM Outputs^Data Out 18;
.D[19]:=TIIB[R20_DRL_03_E10_EL6001]^COM Outputs^Data Out 19;
.D[20]:=TIIB[R20_DRL_03_E10_EL6001]^COM Outputs^Data Out 20;
.D[21]:=TIIB[R20_DRL_03_E10_EL6001]^COM Outputs^Data Out 21
'}
stComOut_DREAM_DP3_PTM_01 AT %Q* : EL6outData22B;
{attribute 'TcLinkTo' := '.Status:=TIIB[R20_DRL_03_E11_EL6001]^COM Inputs^Status;
.D[0]:=TIIB[R20_DRL_03_E11_EL6001]^COM Inputs^Data In 0;
.D[1]:=TIIB[R20_DRL_03_E11_EL6001]^COM Inputs^Data In 1;
.D[2]:=TIIB[R20_DRL_03_E11_EL6001]^COM Inputs^Data In 2;
.D[3]:=TIIB[R20_DRL_03_E11_EL6001]^COM Inputs^Data In 3;
.D[4]:=TIIB[R20_DRL_03_E11_EL6001]^COM Inputs^Data In 4;
.D[5]:=TIIB[R20_DRL_03_E11_EL6001]^COM Inputs^Data In 5;
.D[6]:=TIIB[R20_DRL_03_E11_EL6001]^COM Inputs^Data In 6;
.D[7]:=TIIB[R20_DRL_03_E11_EL6001]^COM Inputs^Data In 7;
.D[8]:=TIIB[R20_DRL_03_E11_EL6001]^COM Inputs^Data In 8;
.D[9]:=TIIB[R20_DRL_03_E11_EL6001]^COM Inputs^Data In 9;
.D[10]:=TIIB[R20_DRL_03_E11_EL6001]^COM Inputs^Data In 10;
.D[11]:=TIIB[R20_DRL_03_E11_EL6001]^COM Inputs^Data In 11;
.D[12]:=TIIB[R20_DRL_03_E11_EL6001]^COM Inputs^Data In 12;
.D[13]:=TIIB[R20_DRL_03_E11_EL6001]^COM Inputs^Data In 13;
.D[14]:=TIIB[R20_DRL_03_E11_EL6001]^COM Inputs^Data In 14;
.D[15]:=TIIB[R20_DRL_03_E11_EL6001]^COM Inputs^Data In 15;
.D[16]:=TIIB[R20_DRL_03_E11_EL6001]^COM Inputs^Data In 16;
.D[17]:=TIIB[R20_DRL_03_E11_EL6001]^COM Inputs^Data In 17;
.D[18]:=TIIB[R20_DRL_03_E11_EL6001]^COM Inputs^Data In 18;
.D[19]:=TIIB[R20_DRL_03_E11_EL6001]^COM Inputs^Data In 19;
.D[20]:=TIIB[R20_DRL_03_E11_EL6001]^COM Inputs^Data In 20;
.D[21]:=TIIB[R20_DRL_03_E11_EL6001]^COM Inputs^Data In 21
'}
stComIn_DREAM_MC_PTM_01 AT %I* : EL6inData22B;
{attribute 'TcLinkTo' := '.Ctrl:=TIIB[R20_DRL_03_E11_EL6001]^COM Outputs^Ctrl;
.D[0]:=TIIB[R20_DRL_03_E11_EL6001]^COM Outputs^Data Out 0;
.D[1]:=TIIB[R20_DRL_03_E11_EL6001]^COM Outputs^Data Out 1;
.D[2]:=TIIB[R20_DRL_03_E11_EL6001]^COM Outputs^Data Out 2;
.D[3]:=TIIB[R20_DRL_03_E11_EL6001]^COM Outputs^Data Out 3;
.D[4]:=TIIB[R20_DRL_03_E11_EL6001]^COM Outputs^Data Out 4;
.D[5]:=TIIB[R20_DRL_03_E11_EL6001]^COM Outputs^Data Out 5;
.D[6]:=TIIB[R20_DRL_03_E11_EL6001]^COM Outputs^Data Out 6;
.D[7]:=TIIB[R20_DRL_03_E11_EL6001]^COM Outputs^Data Out 7;
.D[8]:=TIIB[R20_DRL_03_E11_EL6001]^COM Outputs^Data Out 8;
.D[9]:=TIIB[R20_DRL_03_E11_EL6001]^COM Outputs^Data Out 9;
.D[10]:=TIIB[R20_DRL_03_E11_EL6001]^COM Outputs^Data Out 10;
.D[11]:=TIIB[R20_DRL_03_E11_EL6001]^COM Outputs^Data Out 11;
.D[12]:=TIIB[R20_DRL_03_E11_EL6001]^COM Outputs^Data Out 12;
.D[13]:=TIIB[R20_DRL_03_E11_EL6001]^COM Outputs^Data Out 13;
.D[14]:=TIIB[R20_DRL_03_E11_EL6001]^COM Outputs^Data Out 14;
.D[15]:=TIIB[R20_DRL_03_E11_EL6001]^COM Outputs^Data Out 15;
.D[16]:=TIIB[R20_DRL_03_E11_EL6001]^COM Outputs^Data Out 16;
.D[17]:=TIIB[R20_DRL_03_E11_EL6001]^COM Outputs^Data Out 17;
.D[18]:=TIIB[R20_DRL_03_E11_EL6001]^COM Outputs^Data Out 18;
.D[19]:=TIIB[R20_DRL_03_E11_EL6001]^COM Outputs^Data Out 19;
.D[20]:=TIIB[R20_DRL_03_E11_EL6001]^COM Outputs^Data Out 20;
.D[21]:=TIIB[R20_DRL_03_E11_EL6001]^COM Outputs^Data Out 21
'}
stComOut_DREAM_MC_PTM_01 AT %Q* : EL6outData22B;
{attribute 'TcLinkTo' := '.Status:=TIIB[R20_DRL_03_E12_EL6001]^COM Inputs^Status;
.D[0]:=TIIB[R20_DRL_03_E12_EL6001]^COM Inputs^Data In 0;
.D[1]:=TIIB[R20_DRL_03_E12_EL6001]^COM Inputs^Data In 1;
.D[2]:=TIIB[R20_DRL_03_E12_EL6001]^COM Inputs^Data In 2;
.D[3]:=TIIB[R20_DRL_03_E12_EL6001]^COM Inputs^Data In 3;
.D[4]:=TIIB[R20_DRL_03_E12_EL6001]^COM Inputs^Data In 4;
.D[5]:=TIIB[R20_DRL_03_E12_EL6001]^COM Inputs^Data In 5;
.D[6]:=TIIB[R20_DRL_03_E12_EL6001]^COM Inputs^Data In 6;
.D[7]:=TIIB[R20_DRL_03_E12_EL6001]^COM Inputs^Data In 7;
.D[8]:=TIIB[R20_DRL_03_E12_EL6001]^COM Inputs^Data In 8;
.D[9]:=TIIB[R20_DRL_03_E12_EL6001]^COM Inputs^Data In 9;
.D[10]:=TIIB[R20_DRL_03_E12_EL6001]^COM Inputs^Data In 10;
.D[11]:=TIIB[R20_DRL_03_E12_EL6001]^COM Inputs^Data In 11;
.D[12]:=TIIB[R20_DRL_03_E12_EL6001]^COM Inputs^Data In 12;
.D[13]:=TIIB[R20_DRL_03_E12_EL6001]^COM Inputs^Data In 13;
.D[14]:=TIIB[R20_DRL_03_E12_EL6001]^COM Inputs^Data In 14;
.D[15]:=TIIB[R20_DRL_03_E12_EL6001]^COM Inputs^Data In 15;
.D[16]:=TIIB[R20_DRL_03_E12_EL6001]^COM Inputs^Data In 16;
.D[17]:=TIIB[R20_DRL_03_E12_EL6001]^COM Inputs^Data In 17;
.D[18]:=TIIB[R20_DRL_03_E12_EL6001]^COM Inputs^Data In 18;
.D[19]:=TIIB[R20_DRL_03_E12_EL6001]^COM Inputs^Data In 19;
.D[20]:=TIIB[R20_DRL_03_E12_EL6001]^COM Inputs^Data In 20;
.D[21]:=TIIB[R20_DRL_03_E12_EL6001]^COM Inputs^Data In 21
'}
stComIn_DREAM_MC_PTM_02 AT %I* : EL6inData22B;
{attribute 'TcLinkTo' := '.Ctrl:=TIIB[R20_DRL_03_E12_EL6001]^COM Outputs^Ctrl;
.D[0]:=TIIB[R20_DRL_03_E12_EL6001]^COM Outputs^Data Out 0;
.D[1]:=TIIB[R20_DRL_03_E12_EL6001]^COM Outputs^Data Out 1;
.D[2]:=TIIB[R20_DRL_03_E12_EL6001]^COM Outputs^Data Out 2;
.D[3]:=TIIB[R20_DRL_03_E12_EL6001]^COM Outputs^Data Out 3;
.D[4]:=TIIB[R20_DRL_03_E12_EL6001]^COM Outputs^Data Out 4;
.D[5]:=TIIB[R20_DRL_03_E12_EL6001]^COM Outputs^Data Out 5;
.D[6]:=TIIB[R20_DRL_03_E12_EL6001]^COM Outputs^Data Out 6;
.D[7]:=TIIB[R20_DRL_03_E12_EL6001]^COM Outputs^Data Out 7;
.D[8]:=TIIB[R20_DRL_03_E12_EL6001]^COM Outputs^Data Out 8;
.D[9]:=TIIB[R20_DRL_03_E12_EL6001]^COM Outputs^Data Out 9;
.D[10]:=TIIB[R20_DRL_03_E12_EL6001]^COM Outputs^Data Out 10;
.D[11]:=TIIB[R20_DRL_03_E12_EL6001]^COM Outputs^Data Out 11;
.D[12]:=TIIB[R20_DRL_03_E12_EL6001]^COM Outputs^Data Out 12;
.D[13]:=TIIB[R20_DRL_03_E12_EL6001]^COM Outputs^Data Out 13;
.D[14]:=TIIB[R20_DRL_03_E12_EL6001]^COM Outputs^Data Out 14;
.D[15]:=TIIB[R20_DRL_03_E12_EL6001]^COM Outputs^Data Out 15;
.D[16]:=TIIB[R20_DRL_03_E12_EL6001]^COM Outputs^Data Out 16;
.D[17]:=TIIB[R20_DRL_03_E12_EL6001]^COM Outputs^Data Out 17;
.D[18]:=TIIB[R20_DRL_03_E12_EL6001]^COM Outputs^Data Out 18;
.D[19]:=TIIB[R20_DRL_03_E12_EL6001]^COM Outputs^Data Out 19;
.D[20]:=TIIB[R20_DRL_03_E12_EL6001]^COM Outputs^Data Out 20;
.D[21]:=TIIB[R20_DRL_03_E12_EL6001]^COM Outputs^Data Out 21
'}
stComOut_DREAM_MC_PTM_02 AT %Q* : EL6outData22B;
{attribute 'TcLinkTo' := '.Status:=TIIB[K4S8_DRL_04_E7_EL6001]^COM Inputs^Status;
.D[0]:=TIIB[K4S8_DRL_04_E7_EL6001]^COM Inputs^Data In 0;
.D[1]:=TIIB[K4S8_DRL_04_E7_EL6001]^COM Inputs^Data In 1;
.D[2]:=TIIB[K4S8_DRL_04_E7_EL6001]^COM Inputs^Data In 2;
.D[3]:=TIIB[K4S8_DRL_04_E7_EL6001]^COM Inputs^Data In 3;
.D[4]:=TIIB[K4S8_DRL_04_E7_EL6001]^COM Inputs^Data In 4;
.D[5]:=TIIB[K4S8_DRL_04_E7_EL6001]^COM Inputs^Data In 5;
.D[6]:=TIIB[K4S8_DRL_04_E7_EL6001]^COM Inputs^Data In 6;
.D[7]:=TIIB[K4S8_DRL_04_E7_EL6001]^COM Inputs^Data In 7;
.D[8]:=TIIB[K4S8_DRL_04_E7_EL6001]^COM Inputs^Data In 8;
.D[9]:=TIIB[K4S8_DRL_04_E7_EL6001]^COM Inputs^Data In 9;
.D[10]:=TIIB[K4S8_DRL_04_E7_EL6001]^COM Inputs^Data In 10;
.D[11]:=TIIB[K4S8_DRL_04_E7_EL6001]^COM Inputs^Data In 11;
.D[12]:=TIIB[K4S8_DRL_04_E7_EL6001]^COM Inputs^Data In 12;
.D[13]:=TIIB[K4S8_DRL_04_E7_EL6001]^COM Inputs^Data In 13;
.D[14]:=TIIB[K4S8_DRL_04_E7_EL6001]^COM Inputs^Data In 14;
.D[15]:=TIIB[K4S8_DRL_04_E7_EL6001]^COM Inputs^Data In 15;
.D[16]:=TIIB[K4S8_DRL_04_E7_EL6001]^COM Inputs^Data In 16;
.D[17]:=TIIB[K4S8_DRL_04_E7_EL6001]^COM Inputs^Data In 17;
.D[18]:=TIIB[K4S8_DRL_04_E7_EL6001]^COM Inputs^Data In 18;
.D[19]:=TIIB[K4S8_DRL_04_E7_EL6001]^COM Inputs^Data In 19;
.D[20]:=TIIB[K4S8_DRL_04_E7_EL6001]^COM Inputs^Data In 20;
.D[21]:=TIIB[K4S8_DRL_04_E7_EL6001]^COM Inputs^Data In 21
'}
stComIn_DREAM_CAT1_PTM_01 AT %I* : EL6inData22B;
{attribute 'TcLinkTo' := '.Ctrl:=TIIB[K4S8_DRL_04_E7_EL6001]^COM Outputs^Ctrl;
.D[0]:=TIIB[K4S8_DRL_04_E7_EL6001]^COM Outputs^Data Out 0;
.D[1]:=TIIB[K4S8_DRL_04_E7_EL6001]^COM Outputs^Data Out 1;
.D[2]:=TIIB[K4S8_DRL_04_E7_EL6001]^COM Outputs^Data Out 2;
.D[3]:=TIIB[K4S8_DRL_04_E7_EL6001]^COM Outputs^Data Out 3;
.D[4]:=TIIB[K4S8_DRL_04_E7_EL6001]^COM Outputs^Data Out 4;
.D[5]:=TIIB[K4S8_DRL_04_E7_EL6001]^COM Outputs^Data Out 5;
.D[6]:=TIIB[K4S8_DRL_04_E7_EL6001]^COM Outputs^Data Out 6;
.D[7]:=TIIB[K4S8_DRL_04_E7_EL6001]^COM Outputs^Data Out 7;
.D[8]:=TIIB[K4S8_DRL_04_E7_EL6001]^COM Outputs^Data Out 8;
.D[9]:=TIIB[K4S8_DRL_04_E7_EL6001]^COM Outputs^Data Out 9;
.D[10]:=TIIB[K4S8_DRL_04_E7_EL6001]^COM Outputs^Data Out 10;
.D[11]:=TIIB[K4S8_DRL_04_E7_EL6001]^COM Outputs^Data Out 11;
.D[12]:=TIIB[K4S8_DRL_04_E7_EL6001]^COM Outputs^Data Out 12;
.D[13]:=TIIB[K4S8_DRL_04_E7_EL6001]^COM Outputs^Data Out 13;
.D[14]:=TIIB[K4S8_DRL_04_E7_EL6001]^COM Outputs^Data Out 14;
.D[15]:=TIIB[K4S8_DRL_04_E7_EL6001]^COM Outputs^Data Out 15;
.D[16]:=TIIB[K4S8_DRL_04_E7_EL6001]^COM Outputs^Data Out 16;
.D[17]:=TIIB[K4S8_DRL_04_E7_EL6001]^COM Outputs^Data Out 17;
.D[18]:=TIIB[K4S8_DRL_04_E7_EL6001]^COM Outputs^Data Out 18;
.D[19]:=TIIB[K4S8_DRL_04_E7_EL6001]^COM Outputs^Data Out 19;
.D[20]:=TIIB[K4S8_DRL_04_E7_EL6001]^COM Outputs^Data Out 20;
.D[21]:=TIIB[K4S8_DRL_04_E7_EL6001]^COM Outputs^Data Out 21
'}
stComOut_DREAM_CAT1_PTM_01 AT %Q* : EL6outData22B;
{attribute 'TcLinkTo' := '.Status:=TIIB[K4S8_DRL_04_E8_EL6001]^COM Inputs^Status;
.D[0]:=TIIB[K4S8_DRL_04_E8_EL6001]^COM Inputs^Data In 0;
.D[1]:=TIIB[K4S8_DRL_04_E8_EL6001]^COM Inputs^Data In 1;
.D[2]:=TIIB[K4S8_DRL_04_E8_EL6001]^COM Inputs^Data In 2;
.D[3]:=TIIB[K4S8_DRL_04_E8_EL6001]^COM Inputs^Data In 3;
.D[4]:=TIIB[K4S8_DRL_04_E8_EL6001]^COM Inputs^Data In 4;
.D[5]:=TIIB[K4S8_DRL_04_E8_EL6001]^COM Inputs^Data In 5;
.D[6]:=TIIB[K4S8_DRL_04_E8_EL6001]^COM Inputs^Data In 6;
.D[7]:=TIIB[K4S8_DRL_04_E8_EL6001]^COM Inputs^Data In 7;
.D[8]:=TIIB[K4S8_DRL_04_E8_EL6001]^COM Inputs^Data In 8;
.D[9]:=TIIB[K4S8_DRL_04_E8_EL6001]^COM Inputs^Data In 9;
.D[10]:=TIIB[K4S8_DRL_04_E8_EL6001]^COM Inputs^Data In 10;
.D[11]:=TIIB[K4S8_DRL_04_E8_EL6001]^COM Inputs^Data In 11;
.D[12]:=TIIB[K4S8_DRL_04_E8_EL6001]^COM Inputs^Data In 12;
.D[13]:=TIIB[K4S8_DRL_04_E8_EL6001]^COM Inputs^Data In 13;
.D[14]:=TIIB[K4S8_DRL_04_E8_EL6001]^COM Inputs^Data In 14;
.D[15]:=TIIB[K4S8_DRL_04_E8_EL6001]^COM Inputs^Data In 15;
.D[16]:=TIIB[K4S8_DRL_04_E8_EL6001]^COM Inputs^Data In 16;
.D[17]:=TIIB[K4S8_DRL_04_E8_EL6001]^COM Inputs^Data In 17;
.D[18]:=TIIB[K4S8_DRL_04_E8_EL6001]^COM Inputs^Data In 18;
.D[19]:=TIIB[K4S8_DRL_04_E8_EL6001]^COM Inputs^Data In 19;
.D[20]:=TIIB[K4S8_DRL_04_E8_EL6001]^COM Inputs^Data In 20;
.D[21]:=TIIB[K4S8_DRL_04_E8_EL6001]^COM Inputs^Data In 21
'}
stComIn_DREAM_CAT2_PTM_01 AT %I* : EL6inData22B;
{attribute 'TcLinkTo' := '.Ctrl:=TIIB[K4S8_DRL_04_E8_EL6001]^COM Outputs^Ctrl;
.D[0]:=TIIB[K4S8_DRL_04_E8_EL6001]^COM Outputs^Data Out 0;
.D[1]:=TIIB[K4S8_DRL_04_E8_EL6001]^COM Outputs^Data Out 1;
.D[2]:=TIIB[K4S8_DRL_04_E8_EL6001]^COM Outputs^Data Out 2;
.D[3]:=TIIB[K4S8_DRL_04_E8_EL6001]^COM Outputs^Data Out 3;
.D[4]:=TIIB[K4S8_DRL_04_E8_EL6001]^COM Outputs^Data Out 4;
.D[5]:=TIIB[K4S8_DRL_04_E8_EL6001]^COM Outputs^Data Out 5;
.D[6]:=TIIB[K4S8_DRL_04_E8_EL6001]^COM Outputs^Data Out 6;
.D[7]:=TIIB[K4S8_DRL_04_E8_EL6001]^COM Outputs^Data Out 7;
.D[8]:=TIIB[K4S8_DRL_04_E8_EL6001]^COM Outputs^Data Out 8;
.D[9]:=TIIB[K4S8_DRL_04_E8_EL6001]^COM Outputs^Data Out 9;
.D[10]:=TIIB[K4S8_DRL_04_E8_EL6001]^COM Outputs^Data Out 10;
.D[11]:=TIIB[K4S8_DRL_04_E8_EL6001]^COM Outputs^Data Out 11;
.D[12]:=TIIB[K4S8_DRL_04_E8_EL6001]^COM Outputs^Data Out 12;
.D[13]:=TIIB[K4S8_DRL_04_E8_EL6001]^COM Outputs^Data Out 13;
.D[14]:=TIIB[K4S8_DRL_04_E8_EL6001]^COM Outputs^Data Out 14;
.D[15]:=TIIB[K4S8_DRL_04_E8_EL6001]^COM Outputs^Data Out 15;
.D[16]:=TIIB[K4S8_DRL_04_E8_EL6001]^COM Outputs^Data Out 16;
.D[17]:=TIIB[K4S8_DRL_04_E8_EL6001]^COM Outputs^Data Out 17;
.D[18]:=TIIB[K4S8_DRL_04_E8_EL6001]^COM Outputs^Data Out 18;
.D[19]:=TIIB[K4S8_DRL_04_E8_EL6001]^COM Outputs^Data Out 19;
.D[20]:=TIIB[K4S8_DRL_04_E8_EL6001]^COM Outputs^Data Out 20;
.D[21]:=TIIB[K4S8_DRL_04_E8_EL6001]^COM Outputs^Data Out 21
'}
stComOut_DREAM_CAT2_PTM_01 AT %Q* : EL6outData22B;
{attribute 'TcLinkTo' := '.Status:=TIIB[K4S8_DRL_04_E6_EL6001]^COM Inputs^Status;
.D[0]:=TIIB[K4S8_DRL_04_E6_EL6001]^COM Inputs^Data In 0;
.D[1]:=TIIB[K4S8_DRL_04_E6_EL6001]^COM Inputs^Data In 1;
.D[2]:=TIIB[K4S8_DRL_04_E6_EL6001]^COM Inputs^Data In 2;
.D[3]:=TIIB[K4S8_DRL_04_E6_EL6001]^COM Inputs^Data In 3;
.D[4]:=TIIB[K4S8_DRL_04_E6_EL6001]^COM Inputs^Data In 4;
.D[5]:=TIIB[K4S8_DRL_04_E6_EL6001]^COM Inputs^Data In 5;
.D[6]:=TIIB[K4S8_DRL_04_E6_EL6001]^COM Inputs^Data In 6;
.D[7]:=TIIB[K4S8_DRL_04_E6_EL6001]^COM Inputs^Data In 7;
.D[8]:=TIIB[K4S8_DRL_04_E6_EL6001]^COM Inputs^Data In 8;
.D[9]:=TIIB[K4S8_DRL_04_E6_EL6001]^COM Inputs^Data In 9;
.D[10]:=TIIB[K4S8_DRL_04_E6_EL6001]^COM Inputs^Data In 10;
.D[11]:=TIIB[K4S8_DRL_04_E6_EL6001]^COM Inputs^Data In 11;
.D[12]:=TIIB[K4S8_DRL_04_E6_EL6001]^COM Inputs^Data In 12;
.D[13]:=TIIB[K4S8_DRL_04_E6_EL6001]^COM Inputs^Data In 13;
.D[14]:=TIIB[K4S8_DRL_04_E6_EL6001]^COM Inputs^Data In 14;
.D[15]:=TIIB[K4S8_DRL_04_E6_EL6001]^COM Inputs^Data In 15;
.D[16]:=TIIB[K4S8_DRL_04_E6_EL6001]^COM Inputs^Data In 16;
.D[17]:=TIIB[K4S8_DRL_04_E6_EL6001]^COM Inputs^Data In 17;
.D[18]:=TIIB[K4S8_DRL_04_E6_EL6001]^COM Inputs^Data In 18;
.D[19]:=TIIB[K4S8_DRL_04_E6_EL6001]^COM Inputs^Data In 19;
.D[20]:=TIIB[K4S8_DRL_04_E6_EL6001]^COM Inputs^Data In 20;
.D[21]:=TIIB[K4S8_DRL_04_E6_EL6001]^COM Inputs^Data In 21
'}
stComIn_DREAM_ROUGH2_PTM_01 AT %I* : EL6inData22B;
{attribute 'TcLinkTo' := '.Ctrl:=TIIB[K4S8_DRL_04_E6_EL6001]^COM Outputs^Ctrl;
.D[0]:=TIIB[K4S8_DRL_04_E6_EL6001]^COM Outputs^Data Out 0;
.D[1]:=TIIB[K4S8_DRL_04_E6_EL6001]^COM Outputs^Data Out 1;
.D[2]:=TIIB[K4S8_DRL_04_E6_EL6001]^COM Outputs^Data Out 2;
.D[3]:=TIIB[K4S8_DRL_04_E6_EL6001]^COM Outputs^Data Out 3;
.D[4]:=TIIB[K4S8_DRL_04_E6_EL6001]^COM Outputs^Data Out 4;
.D[5]:=TIIB[K4S8_DRL_04_E6_EL6001]^COM Outputs^Data Out 5;
.D[6]:=TIIB[K4S8_DRL_04_E6_EL6001]^COM Outputs^Data Out 6;
.D[7]:=TIIB[K4S8_DRL_04_E6_EL6001]^COM Outputs^Data Out 7;
.D[8]:=TIIB[K4S8_DRL_04_E6_EL6001]^COM Outputs^Data Out 8;
.D[9]:=TIIB[K4S8_DRL_04_E6_EL6001]^COM Outputs^Data Out 9;
.D[10]:=TIIB[K4S8_DRL_04_E6_EL6001]^COM Outputs^Data Out 10;
.D[11]:=TIIB[K4S8_DRL_04_E6_EL6001]^COM Outputs^Data Out 11;
.D[12]:=TIIB[K4S8_DRL_04_E6_EL6001]^COM Outputs^Data Out 12;
.D[13]:=TIIB[K4S8_DRL_04_E6_EL6001]^COM Outputs^Data Out 13;
.D[14]:=TIIB[K4S8_DRL_04_E6_EL6001]^COM Outputs^Data Out 14;
.D[15]:=TIIB[K4S8_DRL_04_E6_EL6001]^COM Outputs^Data Out 15;
.D[16]:=TIIB[K4S8_DRL_04_E6_EL6001]^COM Outputs^Data Out 16;
.D[17]:=TIIB[K4S8_DRL_04_E6_EL6001]^COM Outputs^Data Out 17;
.D[18]:=TIIB[K4S8_DRL_04_E6_EL6001]^COM Outputs^Data Out 18;
.D[19]:=TIIB[K4S8_DRL_04_E6_EL6001]^COM Outputs^Data Out 19;
.D[20]:=TIIB[K4S8_DRL_04_E6_EL6001]^COM Outputs^Data Out 20;
.D[21]:=TIIB[K4S8_DRL_04_E6_EL6001]^COM Outputs^Data Out 21
'}
stComOut_DREAM_ROUGH2_PTM_01 AT %Q* : EL6outData22B;
{attribute 'TcLinkTo' := '.Status:=TIIB[K4S8_DRL_04_E17_EL6001]^COM Inputs^Status;
.D[0]:=TIIB[K4S8_DRL_04_E17_EL6001]^COM Inputs^Data In 0;
.D[1]:=TIIB[K4S8_DRL_04_E17_EL6001]^COM Inputs^Data In 1;
.D[2]:=TIIB[K4S8_DRL_04_E17_EL6001]^COM Inputs^Data In 2;
.D[3]:=TIIB[K4S8_DRL_04_E17_EL6001]^COM Inputs^Data In 3;
.D[4]:=TIIB[K4S8_DRL_04_E17_EL6001]^COM Inputs^Data In 4;
.D[5]:=TIIB[K4S8_DRL_04_E17_EL6001]^COM Inputs^Data In 5;
.D[6]:=TIIB[K4S8_DRL_04_E17_EL6001]^COM Inputs^Data In 6;
.D[7]:=TIIB[K4S8_DRL_04_E17_EL6001]^COM Inputs^Data In 7;
.D[8]:=TIIB[K4S8_DRL_04_E17_EL6001]^COM Inputs^Data In 8;
.D[9]:=TIIB[K4S8_DRL_04_E17_EL6001]^COM Inputs^Data In 9;
.D[10]:=TIIB[K4S8_DRL_04_E17_EL6001]^COM Inputs^Data In 10;
.D[11]:=TIIB[K4S8_DRL_04_E17_EL6001]^COM Inputs^Data In 11;
.D[12]:=TIIB[K4S8_DRL_04_E17_EL6001]^COM Inputs^Data In 12;
.D[13]:=TIIB[K4S8_DRL_04_E17_EL6001]^COM Inputs^Data In 13;
.D[14]:=TIIB[K4S8_DRL_04_E17_EL6001]^COM Inputs^Data In 14;
.D[15]:=TIIB[K4S8_DRL_04_E17_EL6001]^COM Inputs^Data In 15;
.D[16]:=TIIB[K4S8_DRL_04_E17_EL6001]^COM Inputs^Data In 16;
.D[17]:=TIIB[K4S8_DRL_04_E17_EL6001]^COM Inputs^Data In 17;
.D[18]:=TIIB[K4S8_DRL_04_E17_EL6001]^COM Inputs^Data In 18;
.D[19]:=TIIB[K4S8_DRL_04_E17_EL6001]^COM Inputs^Data In 19;
.D[20]:=TIIB[K4S8_DRL_04_E17_EL6001]^COM Inputs^Data In 20;
.D[21]:=TIIB[K4S8_DRL_04_E17_EL6001]^COM Inputs^Data In 21
'}
stComIn_DREAM_ROUGH2_PTM_02 AT %I* : EL6inData22B;
{attribute 'TcLinkTo' := '.Ctrl:=TIIB[K4S8_DRL_04_E17_EL6001]^COM Outputs^Ctrl;
.D[0]:=TIIB[K4S8_DRL_04_E17_EL6001]^COM Outputs^Data Out 0;
.D[1]:=TIIB[K4S8_DRL_04_E17_EL6001]^COM Outputs^Data Out 1;
.D[2]:=TIIB[K4S8_DRL_04_E17_EL6001]^COM Outputs^Data Out 2;
.D[3]:=TIIB[K4S8_DRL_04_E17_EL6001]^COM Outputs^Data Out 3;
.D[4]:=TIIB[K4S8_DRL_04_E17_EL6001]^COM Outputs^Data Out 4;
.D[5]:=TIIB[K4S8_DRL_04_E17_EL6001]^COM Outputs^Data Out 5;
.D[6]:=TIIB[K4S8_DRL_04_E17_EL6001]^COM Outputs^Data Out 6;
.D[7]:=TIIB[K4S8_DRL_04_E17_EL6001]^COM Outputs^Data Out 7;
.D[8]:=TIIB[K4S8_DRL_04_E17_EL6001]^COM Outputs^Data Out 8;
.D[9]:=TIIB[K4S8_DRL_04_E17_EL6001]^COM Outputs^Data Out 9;
.D[10]:=TIIB[K4S8_DRL_04_E17_EL6001]^COM Outputs^Data Out 10;
.D[11]:=TIIB[K4S8_DRL_04_E17_EL6001]^COM Outputs^Data Out 11;
.D[12]:=TIIB[K4S8_DRL_04_E17_EL6001]^COM Outputs^Data Out 12;
.D[13]:=TIIB[K4S8_DRL_04_E17_EL6001]^COM Outputs^Data Out 13;
.D[14]:=TIIB[K4S8_DRL_04_E17_EL6001]^COM Outputs^Data Out 14;
.D[15]:=TIIB[K4S8_DRL_04_E17_EL6001]^COM Outputs^Data Out 15;
.D[16]:=TIIB[K4S8_DRL_04_E17_EL6001]^COM Outputs^Data Out 16;
.D[17]:=TIIB[K4S8_DRL_04_E17_EL6001]^COM Outputs^Data Out 17;
.D[18]:=TIIB[K4S8_DRL_04_E17_EL6001]^COM Outputs^Data Out 18;
.D[19]:=TIIB[K4S8_DRL_04_E17_EL6001]^COM Outputs^Data Out 19;
.D[20]:=TIIB[K4S8_DRL_04_E17_EL6001]^COM Outputs^Data Out 20;
.D[21]:=TIIB[K4S8_DRL_04_E17_EL6001]^COM Outputs^Data Out 21
'}
stComOut_DREAM_ROUGH2_PTM_02 AT %Q* : EL6outData22B;
{attribute 'TcLinkTo' := '.Status:=TIIB[K4S8_DRL_04_E19_EL6001]^COM Inputs^Status;
.D[0]:=TIIB[K4S8_DRL_04_E19_EL6001]^COM Inputs^Data In 0;
.D[1]:=TIIB[K4S8_DRL_04_E19_EL6001]^COM Inputs^Data In 1;
.D[2]:=TIIB[K4S8_DRL_04_E19_EL6001]^COM Inputs^Data In 2;
.D[3]:=TIIB[K4S8_DRL_04_E19_EL6001]^COM Inputs^Data In 3;
.D[4]:=TIIB[K4S8_DRL_04_E19_EL6001]^COM Inputs^Data In 4;
.D[5]:=TIIB[K4S8_DRL_04_E19_EL6001]^COM Inputs^Data In 5;
.D[6]:=TIIB[K4S8_DRL_04_E19_EL6001]^COM Inputs^Data In 6;
.D[7]:=TIIB[K4S8_DRL_04_E19_EL6001]^COM Inputs^Data In 7;
.D[8]:=TIIB[K4S8_DRL_04_E19_EL6001]^COM Inputs^Data In 8;
.D[9]:=TIIB[K4S8_DRL_04_E19_EL6001]^COM Inputs^Data In 9;
.D[10]:=TIIB[K4S8_DRL_04_E19_EL6001]^COM Inputs^Data In 10;
.D[11]:=TIIB[K4S8_DRL_04_E19_EL6001]^COM Inputs^Data In 11;
.D[12]:=TIIB[K4S8_DRL_04_E19_EL6001]^COM Inputs^Data In 12;
.D[13]:=TIIB[K4S8_DRL_04_E19_EL6001]^COM Inputs^Data In 13;
.D[14]:=TIIB[K4S8_DRL_04_E19_EL6001]^COM Inputs^Data In 14;
.D[15]:=TIIB[K4S8_DRL_04_E19_EL6001]^COM Inputs^Data In 15;
.D[16]:=TIIB[K4S8_DRL_04_E19_EL6001]^COM Inputs^Data In 16;
.D[17]:=TIIB[K4S8_DRL_04_E19_EL6001]^COM Inputs^Data In 17;
.D[18]:=TIIB[K4S8_DRL_04_E19_EL6001]^COM Inputs^Data In 18;
.D[19]:=TIIB[K4S8_DRL_04_E19_EL6001]^COM Inputs^Data In 19;
.D[20]:=TIIB[K4S8_DRL_04_E19_EL6001]^COM Inputs^Data In 20;
.D[21]:=TIIB[K4S8_DRL_04_E19_EL6001]^COM Inputs^Data In 21
'}
stComIn_DREAM_ROUGH2_PTM_03 AT %I* : EL6inData22B;
{attribute 'TcLinkTo' := '.Ctrl:=TIIB[K4S8_DRL_04_E19_EL6001]^COM Outputs^Ctrl;
.D[0]:=TIIB[K4S8_DRL_04_E19_EL6001]^COM Outputs^Data Out 0;
.D[1]:=TIIB[K4S8_DRL_04_E19_EL6001]^COM Outputs^Data Out 1;
.D[2]:=TIIB[K4S8_DRL_04_E19_EL6001]^COM Outputs^Data Out 2;
.D[3]:=TIIB[K4S8_DRL_04_E19_EL6001]^COM Outputs^Data Out 3;
.D[4]:=TIIB[K4S8_DRL_04_E19_EL6001]^COM Outputs^Data Out 4;
.D[5]:=TIIB[K4S8_DRL_04_E19_EL6001]^COM Outputs^Data Out 5;
.D[6]:=TIIB[K4S8_DRL_04_E19_EL6001]^COM Outputs^Data Out 6;
.D[7]:=TIIB[K4S8_DRL_04_E19_EL6001]^COM Outputs^Data Out 7;
.D[8]:=TIIB[K4S8_DRL_04_E19_EL6001]^COM Outputs^Data Out 8;
.D[9]:=TIIB[K4S8_DRL_04_E19_EL6001]^COM Outputs^Data Out 9;
.D[10]:=TIIB[K4S8_DRL_04_E19_EL6001]^COM Outputs^Data Out 10;
.D[11]:=TIIB[K4S8_DRL_04_E19_EL6001]^COM Outputs^Data Out 11;
.D[12]:=TIIB[K4S8_DRL_04_E19_EL6001]^COM Outputs^Data Out 12;
.D[13]:=TIIB[K4S8_DRL_04_E19_EL6001]^COM Outputs^Data Out 13;
.D[14]:=TIIB[K4S8_DRL_04_E19_EL6001]^COM Outputs^Data Out 14;
.D[15]:=TIIB[K4S8_DRL_04_E19_EL6001]^COM Outputs^Data Out 15;
.D[16]:=TIIB[K4S8_DRL_04_E19_EL6001]^COM Outputs^Data Out 16;
.D[17]:=TIIB[K4S8_DRL_04_E19_EL6001]^COM Outputs^Data Out 17;
.D[18]:=TIIB[K4S8_DRL_04_E19_EL6001]^COM Outputs^Data Out 18;
.D[19]:=TIIB[K4S8_DRL_04_E19_EL6001]^COM Outputs^Data Out 19;
.D[20]:=TIIB[K4S8_DRL_04_E19_EL6001]^COM Outputs^Data Out 20;
.D[21]:=TIIB[K4S8_DRL_04_E19_EL6001]^COM Outputs^Data Out 21
'}
stComOut_DREAM_ROUGH2_PTM_03 AT %Q* : EL6outData22B;
END_VAR
GVL_TC
VAR_GLOBAL
{attribute 'TcLinkTo' := '.iRaw := TIIB[K4S8_DRL_03_E22_EL3314]^TC Inputs Channel 1^Value;
.bError := TIIB[K4S8_DRL_03_E22_EL3314]^TC Inputs Channel 1^Error;
.bUnderrange := TIIB[K4S8_DRL_03_E22_EL3314]^TC Inputs Channel 1^Underrange;
.bOverrange := TIIB[K4S8_DRL_03_E22_EL3314]^TC Inputs Channel 1^Overrange
'}
{attribute 'pytmc' := '
pv: DREAM:STC:01
io: io
'}
TC_01 : FB_TempSensor;
{attribute 'pytmc' := '
pv: DREAM:STC:01:DESC
io: io
'}
TC_01_DESC : STRING := 'DREAM:STC:01 Desc';
{attribute 'TcLinkTo' := '.iRaw := TIIB[K4S8_DRL_03_E22_EL3314]^TC Inputs Channel 2^Value;
.bError := TIIB[K4S8_DRL_03_E22_EL3314]^TC Inputs Channel 2^Status^Error;
.bUnderrange := TIIB[K4S8_DRL_03_E22_EL3314]^TC Inputs Channel 2^Status^Underrange;
.bOverrange := TIIB[K4S8_DRL_03_E22_EL3314]^TC Inputs Channel 2^Status^Overrange
'}
{attribute 'pytmc' := '
pv: DREAM:STC:02
io: io
'}
TC_02 : FB_TempSensor;
{attribute 'pytmc' := '
pv: DREAM:STC:02:DESC
io: io
'}
TC_02_DESC : STRING := 'DREAM:STC:02 Desc';
{attribute 'TcLinkTo' := '.iRaw := TIIB[K4S8_DRL_03_E22_EL3314]^TC Inputs Channel 3^Value;
.bError := TIIB[K4S8_DRL_03_E22_EL3314]^TC Inputs Channel 3^Status^Error;
.bUnderrange := TIIB[K4S8_DRL_03_E22_EL3314]^TC Inputs Channel 3^Status^Underrange;
.bOverrange := TIIB[K4S8_DRL_03_E22_EL3314]^TC Inputs Channel 3^Status^Overrange
'}
{attribute 'pytmc' := '
pv: DREAM:STC:03
io: io
'}
TC_03 : FB_TempSensor;
{attribute 'pytmc' := '
pv: DREAM:STC:03:DESC
io: io
'}
TC_03_DESC : STRING := 'DREAM:STC:03 Desc';
{attribute 'TcLinkTo' := '.iRaw := TIIB[K4S8_DRL_03_E22_EL3314]^TC Inputs Channel 4^Value;
.bError := TIIB[K4S8_DRL_03_E22_EL3314]^TC Inputs Channel 4^Status^Error;
.bUnderrange := TIIB[K4S8_DRL_03_E22_EL3314]^TC Inputs Channel 4^Status^Underrange;
.bOverrange := TIIB[K4S8_DRL_03_E22_EL3314]^TC Inputs Channel 4^Status^Overrange
'}
{attribute 'pytmc' := '
pv: DREAM:STC:04
io: io
'}
TC_04 : FB_TempSensor;
{attribute 'pytmc' := '
pv: DREAM:STC:04:DESC
io: io
'}
TC_04_DESC : STRING := 'DREAM:STC:04 Desc';
{attribute 'TcLinkTo' := '.iRaw := TIIB[K4S8_DRL_03_E23_EL3314]^TC Inputs Channel 1^Value;
.bError := TIIB[K4S8_DRL_03_E23_EL3314]^TC Inputs Channel 1^Error;
.bUnderrange := TIIB[K4S8_DRL_03_E23_EL3314]^TC Inputs Channel 1^Underrange;
.bOverrange := TIIB[K4S8_DRL_03_E23_EL3314]^TC Inputs Channel 1^Overrange
'}
{attribute 'pytmc' := '
pv: DREAM:STC:05
io: io
'}
TC_05 : FB_TempSensor;
{attribute 'pytmc' := '
pv: DREAM:STC:05:DESC
io: io
'}
TC_05_DESC : STRING := 'DREAM:STC:05 Desc';
{attribute 'TcLinkTo' := '.iRaw := TIIB[K4S8_DRL_03_E23_EL3314]^TC Inputs Channel 2^Value;
.bError := TIIB[K4S8_DRL_03_E23_EL3314]^TC Inputs Channel 2^Status^Error;
.bUnderrange := TIIB[K4S8_DRL_03_E23_EL3314]^TC Inputs Channel 2^Status^Underrange;
.bOverrange := TIIB[K4S8_DRL_03_E23_EL3314]^TC Inputs Channel 2^Status^Overrange
'}
{attribute 'pytmc' := '
pv: DREAM:STC:06
io: io
'}
TC_06 : FB_TempSensor;
{attribute 'pytmc' := '
pv: DREAM:STC:06:DESC
io: io
'}
TC_06_DESC : STRING := 'DREAM:STC:06 Desc';
{attribute 'TcLinkTo' := '.iRaw := TIIB[K4S8_DRL_03_E23_EL3314]^TC Inputs Channel 3^Value;
.bError := TIIB[K4S8_DRL_03_E23_EL3314]^TC Inputs Channel 3^Status^Error;
.bUnderrange := TIIB[K4S8_DRL_03_E23_EL3314]^TC Inputs Channel 3^Status^Underrange;
.bOverrange := TIIB[K4S8_DRL_03_E23_EL3314]^TC Inputs Channel 3^Status^Overrange
'}
{attribute 'pytmc' := '
pv: DREAM:STC:07
io: io
'}
TC_07 : FB_TempSensor;
{attribute 'pytmc' := '
pv: DREAM:STC:07:DESC
io: io
'}
TC_07_DESC : STRING := 'DREAM:STC:07 Desc';
{attribute 'TcLinkTo' := '.iRaw := TIIB[K4S8_DRL_03_E23_EL3314]^TC Inputs Channel 4^Value;
.bError := TIIB[K4S8_DRL_03_E23_EL3314]^TC Inputs Channel 4^Status^Error;
.bUnderrange := TIIB[K4S8_DRL_03_E23_EL3314]^TC Inputs Channel 4^Status^Underrange;
.bOverrange := TIIB[K4S8_DRL_03_E23_EL3314]^TC Inputs Channel 4^Status^Overrange
'}
{attribute 'pytmc' := '
pv: DREAM:STC:08
io: io
'}
TC_08 : FB_TempSensor;
{attribute 'pytmc' := '
pv: DREAM:STC:08:DESC
io: io
'}
TC_08_DESC : STRING := 'DREAM:STC:08 Desc';
END_VAR
GVL_VAC_GAUGES
//{attribute 'qualified_only'}
VAR_GLOBAL
(*Nozzle Chamber GPI*)
{attribute 'pytmc' :=' pv: DREAM:NC:GPI:01'}
{attribute 'TcLinkTo' := '.i_iPRESS_R := TIIB[K4S8_DRL_03_E6_EL3174-0002]^AI Standard Channel 1^Value'}
DREAM_NC_GPI_01 : FB_CVM201;
{attribute 'TcLinkTo' := '.i_iPRESS_R := TIIB[K4S8_DRL_03_E5_EL3174-0002]^AI Standard Channel 1^Value;
.i_xHV_ON := TIIB[K4S8_DRL_03_E4_EL1084]^Channel 3^Input;
.q_xHV_DIS := TIIB[K4S8_DRL_03_E1_EL2624]^Channel 1^Output
'}
(*Nozzle Chamber GCC*)
{attribute 'pytmc' :=' pv: DREAM:NC:GCC:01'}
DREAM_NC_GCC_01: FB_CCM501;
{attribute 'TcLinkTo' := '.i_iPRESS_R := TIIB[K4S8_DRL_04_E16_EL3174-0002]^AI Standard Channel 4^Value;
'}
(*Nozzle Chamber GCC&GPI MKS392*)
{attribute 'pytmc' :=' pv: DREAM:NC:GCC:02'}
DREAM_NC_GCC_02: FB_MKS392;
(*DP1 GHC*)
{attribute 'TcLinkTo' := '.i_iPRESS_R := TIIB[K4S8_DRL_03_E5_EL3174-0002]^AI Standard Channel 2^Value;
.i_xHV_ON := TIIB[K4S8_DRL_03_E4_EL1084]^Channel 4^Input;
.q_xHV_DIS := TIIB[K4S8_DRL_03_E1_EL2624]^Channel 2^Output
'}
{attribute 'pytmc' :=' pv: DREAM:DP1:GHC:01'}
DREAM_DP1_GHC_01 : FB_IMG401;
(*DP1 GPI*)
{attribute 'pytmc' :=' pv: DREAM:DP1:GPI:01'}
{attribute 'TcLinkTo' := '.i_iPRESS_R := TIIB[K4S8_DRL_03_E6_EL3174-0002]^AI Standard Channel 2^Value'}
DREAM_DP1_GPI_01 : FB_CVM201;
(*DP2 GHC*)
{attribute 'TcLinkTo' := '.i_iPRESS_R := TIIB[K4S8_DRL_03_E5_EL3174-0002]^AI Standard Channel 3^Value;
.i_xHV_ON := TIIB[K4S8_DRL_03_E4_EL1084]^Channel 1^Input;
.q_xHV_DIS := TIIB[K4S8_DRL_03_E1_EL2624]^Channel 3^Output
'}
{attribute 'pytmc' :=' pv: DREAM:DP2:GHC:01'}
DREAM_DP2_GHC_01 : FB_IMG401;
(*DP3 GHC*)
{attribute 'TcLinkTo' := '.i_iPRESS_R := TIIB[K4S8_DRL_03_E5_EL3174-0002]^AI Standard Channel 4^Value;
.i_xHV_ON := TIIB[K4S8_DRL_03_E4_EL1084]^Channel 2^Input;
.q_xHV_DIS := TIIB[K4S8_DRL_03_E1_EL2624]^Channel 4^Output
'}
{attribute 'pytmc' :=' pv: DREAM:DP3:GHC:01'}
DREAM_DP3_GHC_01 : FB_IMG401;
(*MC HOT CATHODE GUAGE*)
{attribute 'TcLinkTo' := '.i_iPRESS_R_CH1 := TIIB[R03_DRL_01_E3_EL3174-0002]^AI Standard Channel 1^Value;
.i_iPRESS_R_CH2 := TIIB[R03_DRL_01_E3_EL3174-0002]^AI Standard Channel 2^Value;
.i_xHV_ON := TIIB[R03_DRL_01_E1_EL1004]^Channel 1^Input;
.i_xCH2_SEL := TIIB[R03_DRL_01_E1_EL1004]^Channel 2^Input;
.i_xERR_CH1 := TIIB[R03_DRL_01_E1_EL1004]^Channel 3^Input;
.i_xERR_CH2 := TIIB[R03_DRL_01_E1_EL1004]^Channel 4^Input;
.q_xHV_DIS_CH1 := TIIB[R03_DRL_01_E2_EL2624]^Channel 1^Output;
.q_xHV_DIS_CH2 := TIIB[R03_DRL_01_E2_EL2624]^Channel 2^Output
'}
{attribute 'pytmc' :=' pv: DREAM:MC:GHC'}
DREAM_MC_GHC : FB_IE514;
//main chamber global gauge structure - updated based on hot cahtode is selected or use pirani if both hot cathode gauges are off
{attribute 'pytmc' :=' pv: DREAM:MC:GAUGE:01'}
stDREAM_MC_GAUGE : ST_VG;
//main chamber GHC gauge structure - updated based on which channel selected in the leybold hot cathode gauge
{attribute 'pytmc' :=' pv: DREAM:MC:GHC:GAUGE:01'}
stDREAM_MC_GHC_GAUGE : ST_VG;
//CAT1 chamber global gauge structure - updated based on hot cahtode is selected or use pirani if both hot cathode gauges are off
{attribute 'pytmc' :=' pv: DREAM:CAT1:GAUGE:01'}
stDREAM_CAT1_GAUGE : ST_VG;
(*MC GPI*)
{attribute 'TcLinkTo' := '.i_iPRESS_R := TIIB[K4S8_DRL_04_E16_EL3174-0002]^AI Standard Channel 1^Value'}
{attribute 'pytmc' := 'pv: DREAM:MC:GPI:01'}
DREAM_MC_GPI_01 : FB_MKS275;
(*CATCHER 1*)
{attribute 'TcLinkTo' := ' .i_iPRESS_R := TIIB[K4S8_DRL_04_E16_EL3174-0002]^AI Standard Channel 2^Value;
.i_xHV_ON := TIIB[K4S8_DRL_04_E15_EL1084]^Channel 1^Input;
.q_xHV_DIS := TIIB[K4S8_DRL_04_E14_EL2624]^Channel 1^Output
'}
{attribute 'pytmc' :=' pv: DREAM:CAT1:GHC:01'}
DREAM_CAT1_GHC_01 : FB_IMG401;
(*CATCHER 2*)
{attribute 'TcLinkTo' := ' .i_iPRESS_R := TIIB[K4S8_DRL_04_E16_EL3174-0002]^AI Standard Channel 3^Value;
.i_xHV_ON := TIIB[K4S8_DRL_04_E15_EL1084]^Channel 2^Input;
.q_xHV_DIS := TIIB[K4S8_DRL_04_E14_EL2624]^Channel 2^Output
'}
{attribute 'pytmc' :=' pv: DREAM:CAT2:GHC:01'}
DREAM_CAT2_GHC_01 : FB_IMG401;
(*ROUGHING PIRANIs*)
//Micro piranis 925
{attribute 'TcLinkTo' := '.i_iPRESS_R := TIIB[WALL_E_PPL_01_EP1_EP4374-0002]^AI Inputs Channel 1^Value'}
{attribute 'pytmc' := 'pv: DREAM:ROUGH1:GPI:01'}
DREAM_ROUGH1_GPI_01 : FB_9XX;
{attribute 'TcLinkTo' := '.i_iPRESS_R := TIIB[K4S8_DRL_04_EP1_EP4374-0002]^AI Inputs Channel 1^Value'}
{attribute 'pytmc' := 'pv: DREAM:ROUGH1:GPI:02'}
DREAM_ROUGH1_GPI_02 : FB_9XX;
{attribute 'TcLinkTo' := '.i_iPRESS_R := TIIB[WALL_E_PPL_01_EP1_EP4374-0002]^AI Inputs Channel 2^Value'}
{attribute 'pytmc' := 'pv: DREAM:ROUGH2:GPI:01'}
DREAM_ROUGH2_GPI_01 : FB_9XX;
{attribute 'TcLinkTo' := '.i_iPRESS_R := TIIB[K4S8_DRL_04_EP1_EP4374-0002]^AI Inputs Channel 2^Value'}
{attribute 'pytmc' := 'pv: DREAM:ROUGH2:GPI:02'}
DREAM_ROUGH2_GPI_02 : FB_9XX;
{attribute 'TcLinkTo' := '.i_iPRESS_R := TIIB[K4S8_DRL_04_EP2_EP4374-0002]^AI Inputs Channel 1^Value'}
{attribute 'pytmc' := 'pv: DREAM:ROUGH2:GPI:03'}
DREAM_ROUGH2_GPI_03 : FB_9XX;
END_VAR
GVL_VAC_PUMPS
//{attribute 'qualified_only'}
VAR_GLOBAL
(*NOZZLE CHAMBER*)
{attribute 'TcLinkTo' := '.i_xAtSpd := TIIB[K4S8_DRL_03_E13_EL1004]^Channel 1^Input;
.i_xFaultNC := TIIB[K4S8_DRL_03_E13_EL1004]^Channel 3^Input;
.i_xRemote := TIIB[K4S8_DRL_03_E13_EL1004]^Channel 2^Input;
.q_RunDO := TIIB[K4S8_DRL_03_E14_EL2004]^Channel 1^Output;
.q_PumpingStation := TIIB[K4S8_DRL_03_E14_EL2004]^Channel 3^Output;
.q_xRemote := TIIB[K4S8_DRL_03_E14_EL2004]^Channel 2^Output
'}
{attribute 'pytmc' :=' pv: DREAM:NC:PTM:01'}
DREAM_NC_PTM_01 : FB_PTM_Pfeiffer;
{attribute 'TcLinkTo' := '.i_xAtSpd := TIIB[K4S8_DRL_03_E16_EL1004]^Channel 1^Input;
.i_xFaultNC := TIIB[K4S8_DRL_03_E16_EL1004]^Channel 3^Input;
.i_xRemote := TIIB[K4S8_DRL_03_E16_EL1004]^Channel 2^Input;
.q_RunDO := TIIB[K4S8_DRL_03_E17_EL2004]^Channel 1^Output;
.q_PumpingStation := TIIB[K4S8_DRL_03_E17_EL2004]^Channel 3^Output;
.q_xRemote := TIIB[K4S8_DRL_03_E17_EL2004]^Channel 2^Output
'}
{attribute 'pytmc' :=' pv: DREAM:NC:PTM:02'}
DREAM_NC_PTM_02 : FB_PTM_Pfeiffer;
(*DP1*)
{attribute 'TcLinkTo' := '.i_xAtSpd := TIIB[K4S8_DRL_03_E19_EL1004]^Channel 1^Input;
.i_xFaultNC := TIIB[K4S8_DRL_03_E19_EL1004]^Channel 3^Input;
.i_xRemote := TIIB[K4S8_DRL_03_E19_EL1004]^Channel 2^Input;
.q_RunDO := TIIB[K4S8_DRL_03_E20_EL2004]^Channel 1^Output;
.q_PumpingStation := TIIB[K4S8_DRL_03_E20_EL2004]^Channel 3^Output;
.q_xRemote := TIIB[K4S8_DRL_03_E20_EL2004]^Channel 2^Output
'}
{attribute 'pytmc' :=' pv: DREAM:DP1:PTM:01'}
DREAM_DP1_PTM_01 : FB_PTM_Pfeiffer;
(*DP2*)
{attribute 'TcLinkTo' := '.i_xAtSpd := TIIB[R20_DRL_03_E4_EL1004]^Channel 2^Input;
.i_xFaultNC := TIIB[R20_DRL_03_E4_EL1004]^Channel 1^Input;
.q_RunDO := TIIB[R20_DRL_03_E7_EL2794]^Channel 1^Output
'}
{attribute 'pytmc' :=' pv: DREAM:DP2:PTM:01'}
DREAM_DP2_PTM_01 : FB_PTM_TurboDrive;
(*DP3*)
{attribute 'TcLinkTo' := '.i_xAtSpd := TIIB[R20_DRL_03_E4_EL1004]^Channel 4^Input;
.i_xFaultNC := TIIB[R20_DRL_03_E4_EL1004]^Channel 3^Input;
.q_RunDO := TIIB[R20_DRL_03_E7_EL2794]^Channel 3^Output
'}
{attribute 'pytmc' :=' pv: DREAM:DP3:PTM:01'}
DREAM_DP3_PTM_01 : FB_PTM_TurboDrive;
(*MAIN CHAMBER*)
{attribute 'TcLinkTo' := '.i_xAtSpd := TIIB[R20_DRL_03_E5_EL1004]^Channel 2^Input;
.i_xFaultNC := TIIB[R20_DRL_03_E5_EL1004]^Channel 1^Input;
.q_RunDO := TIIB[R20_DRL_03_E7_EL2794]^Channel 2^Output
'}
{attribute 'pytmc' :=' pv: DREAM:MC:PTM:01'}
DREAM_MC_PTM_01 : FB_PTM_TurboDrive;
{attribute 'TcLinkTo' := '.i_xAtSpd := TIIB[R20_DRL_03_E5_EL1004]^Channel 4^Input;
.i_xFaultNC := TIIB[R20_DRL_03_E5_EL1004]^Channel 3^Input;
.q_RunDO := TIIB[R20_DRL_03_E7_EL2794]^Channel 4^Output
'}
{attribute 'pytmc' :=' pv: DREAM:MC:PTM:02'}
DREAM_MC_PTM_02 : FB_PTM_TurboDrive;
(*BOOSTER TURBO PUMPS ROUGHING*)
{attribute 'TcLinkTo' := '.i_xAtSpd := TIIB[K4S8_DRL_04_E3_EL1004]^Channel 2^Input;
.i_xFaultNC := TIIB[K4S8_DRL_04_E3_EL1004]^Channel 1^Input;
.q_RunDO := TIIB[K4S8_DRL_04_E5_EL2794]^Channel 1^Output
'}
{attribute 'pytmc' :=' pv: DREAM:ROUGH2:PTM:01'}
DREAM_ROUGH2_PTM_01 : FB_PTM_TurboDrive;
{attribute 'TcLinkTo' := '.i_xAtSpd := TIIB[K4S8_DRL_04_E4_EL1004]^Channel 4^Input;
.i_xFaultNC := TIIB[K4S8_DRL_04_E4_EL1004]^Channel 3^Input;
.q_RunDO := TIIB[K4S8_DRL_04_E5_EL2794]^Channel 4^Output
'}
{attribute 'pytmc' :=' pv: DREAM:ROUGH2:PTM:02'}
DREAM_ROUGH2_PTM_02 : FB_PTM_TurboDrive;
{attribute 'TcLinkTo' := '.i_xAtSpd := TIIB[K4S8_DRL_03_E13_EL1004]^Channel 4^Input;
.i_xFaultNC := TIIB[K4S8_DRL_03_E16_EL1004]^Channel 4^Input;
.q_RunDO := TIIB[K4S8_DRL_04_E18_EL2794]^Channel 1^Output
'}
{attribute 'pytmc' :=' pv: DREAM:ROUGH2:PTM:03'}
DREAM_ROUGH2_PTM_03 : FB_PTM_TurboDrive;
(*CATCHER 1*)
{attribute 'TcLinkTo' := '.i_xAtSpd := TIIB[K4S8_DRL_04_E3_EL1004]^Channel 4^Input;
.i_xFaultNC := TIIB[K4S8_DRL_04_E3_EL1004]^Channel 3^Input;
.q_RunDO := TIIB[K4S8_DRL_04_E5_EL2794]^Channel 2^Output
'}
{attribute 'pytmc' :=' pv: DREAM:CAT1:PTM:01'}
DREAM_CAT1_PTM_01 : FB_PTM_TurboDrive;
(*CATCHER 2*)
{attribute 'TcLinkTo' := '.i_xAtSpd := TIIB[K4S8_DRL_04_E4_EL1004]^Channel 2^Input;
.i_xFaultNC := TIIB[K4S8_DRL_04_E4_EL1004]^Channel 1^Input;
.q_RunDO := TIIB[K4S8_DRL_04_E5_EL2794]^Channel 3^Output
'}
{attribute 'pytmc' :=' pv: DREAM:CAT2:PTM:01'}
DREAM_CAT2_PTM_01 : FB_PTM_TurboDrive;
//Turbo Pumps Running evaluation bit
bMCPumpsRunning : BOOL;
bCATPumpsRunning : BOOL;
(*Serial Interface*)
(*Pfeiffer TC400 serial*)
stPfeiffer_CTRL_DREAM_NC_PTM_01 : ARRAY[1..gcMaxPfeifferPumps] OF ST_PfeifferControl;
stPfeiffer_RBK_DREAM_NC_PTM_01 : ARRAY[1..gcMaxPfeifferPumps] OF ST_PfeifferStatus;
fbPfeifferCom_DREAM_NC_PTM_01 : FB_PFEIFFER_COM;
stPfeiffer_CTRL_DREAM_NC_PTM_02 : ARRAY[1..gcMaxPfeifferPumps] OF ST_PfeifferControl;
stPfeiffer_RBK_DREAM_NC_PTM_02 : ARRAY[1..gcMaxPfeifferPumps] OF ST_PfeifferStatus;
fbPfeifferCom_DREAM_NC_PTM_02 : FB_PFEIFFER_COM;
stPfeiffer_CTRL_DREAM_DP1_PTM_01 : ARRAY[1..gcMaxPfeifferPumps] OF ST_PfeifferControl;
stPfeiffer_RBK_DREAM_DP1_PTM_01 : ARRAY[1..gcMaxPfeifferPumps] OF ST_PfeifferStatus;
fbPfeifferCom_DREAM_DP1_PTM_01 : FB_PFEIFFER_COM;
(*Leybold TD20 serial*)
stTD20_RBK_DREAM_DP2_PTM_01 : ST_TD20Status;
fbTD20Com_DREAM_DP2_PTM_01 : FB_OERLIKON_TD20_COM;
stTD20_RBK_DREAM_DP3_PTM_01 : ST_TD20Status;
fbTD20Com_DREAM_DP3_PTM_01 : FB_OERLIKON_TD20_COM;
stTD20_RBK_DREAM_MC_PTM_01 : ST_TD20Status;
fbTD20Com_DREAM_MC_PTM_01 : FB_OERLIKON_TD20_COM;
stTD20_RBK_DREAM_MC_PTM_02 : ST_TD20Status;
fbTD20Com_DREAM_MC_PTM_02 : FB_OERLIKON_TD20_COM;
(*Leybold TD400 serial*)
stTD400_RBK_DREAM_CAT1_PTM_01 : ST_TD400Status;
stTD400_CTRL_DREAM_CAT1_PTM_01 : ST_TD400Control;
fbTD400Com_DREAM_CAT1_PTM_01 : FB_OERLIKON_TD400_COM;
fbTD400SerialIO_DREAM_CAT1_PTM_01: FB_OERLIKON_TD400_TO_PTM;
stTD400_RBK_DREAM_CAT2_PTM_01 : ST_TD400Status;
stTD400_CTRL_DREAM_CAT2_PTM_01 : ST_TD400Control;
fbTD400Com_DREAM_CAT2_PTM_01 : FB_OERLIKON_TD400_COM;
fbTD400SerialIO_DREAM_CAT2_PTM_01: FB_OERLIKON_TD400_TO_PTM;
stTD400_RBK_DREAM_ROUGH2_PTM_01 : ST_TD400Status;
stTD400_CTRL_DREAM_ROUGH2_PTM_01 : ST_TD400Control;
fbTD400Com_DREAM_ROUGH2_PTM_01 : FB_OERLIKON_TD400_COM;
fbTD400SerialIO_DREAM_ROUGH2_PTM_01: FB_OERLIKON_TD400_TO_PTM;
stTD400_RBK_DREAM_ROUGH2_PTM_02 : ST_TD400Status;
stTD400_CTRL_DREAM_ROUGH2_PTM_02 : ST_TD400Control;
fbTD400Com_DREAM_ROUGH2_PTM_02 : FB_OERLIKON_TD400_COM;
fbTD400SerialIO_DREAM_ROUGH2_PTM_02: FB_OERLIKON_TD400_TO_PTM;
stTD400_RBK_DREAM_ROUGH2_PTM_03 : ST_TD400Status;
stTD400_CTRL_DREAM_ROUGH2_PTM_03 : ST_TD400Control;
fbTD400Com_DREAM_ROUGH2_PTM_03 : FB_OERLIKON_TD400_COM;
fbTD400SerialIO_DREAM_ROUGH2_PTM_03: FB_OERLIKON_TD400_TO_PTM;
(* Limit Switches *)
// Dummy gauge for rough line limit switches
{attribute 'TcLinkTo' := '.i_xOpnLS := TIIB[WALL_E_PPL_01_EP2_EP2338-0002]^Channel 5^Input;
.i_xClsLS := TIIB[WALL_E_PPL_01_EP2_EP2338-0002]^Channel 6^Input;
'}
{attribute 'pytmc' := ' pv: DREAM:ROUGH1:VRC:00 '};
ROUGH1_VRC_00 : FB_VRC;
{attribute 'TcLinkTo' := '.i_xOpnLS := TIIB[WALL_E_PPL_01_EP2_EP2338-0002]^Channel 7^Input;
.i_xClsLS := TIIB[WALL_E_PPL_01_EP2_EP2338-0002]^Channel 8^Input;
'}
{attribute 'pytmc' := ' pv: DREAM:ROUGH2:VRC:00'};
ROUGH2_VRC_00 : FB_VRC;
END_VAR
- Related:
GVL_VAC_VALVES
//{attribute 'qualified_only'}
VAR_GLOBAL
(*DP1 ISOLATION VALVE*)
{attribute 'TcLinkTo' := '.i_xOpnLS := TIIB[K4S8_DRL_03_E10_EL1004]^Channel 1^Input;
.i_xClsLS := TIIB[K4S8_DRL_03_E10_EL1004]^Channel 2^Input;
.q_xOPN_DO := TIIB[K4S8_DRL_03_E11_EL2004]^Channel 2^Output
'}
{attribute 'pytmc' :=' pv: DREAM:DP1:VRC:01'}
DREAM_DP1_VRC_01: FB_VGC;
{attribute 'TcLinkTo' := '.i_xOpnLS := TIIB[K4S8_DRL_03_E10_EL1004]^Channel 3^Input;
.i_xClsLS := TIIB[K4S8_DRL_03_E10_EL1004]^Channel 4^Input;
.q_xCLS_DO := TIIB[K4S8_DRL_03_E11_EL2004]^Channel 1^Output
'}
{attribute 'pytmc' :=' pv: DREAM:DP1:VRC:02'}
DREAM_DP1_VRC_02: FB_VRC_NO;
(*add a new NC vale to replace the manual one , use the same cable from the old DP1:VRC:20 Dual Valve cable on 1-16-26*)
{attribute 'TcLinkTo' := '.i_xOpnLS := TIIB[K4S8_DRL_04_E1_EL1004]^Channel 3^Input;
.i_xClsLS := TIIB[K4S8_DRL_04_E1_EL1004]^Channel 4^Input;
.q_xOPN_DO := TIIB[K4S8_DRL_04_E2_EL2004]^Channel 3^Output
'}
{attribute 'pytmc' :=' pv: DREAM:ROUGH2:VRC:03'}
DREAM_ROUGH2_VRC_03: FB_VGC;
(*CATCHER 1 ISOLATION VALVE*)
{attribute 'TcLinkTo' := '.i_xOpnLS := TIIB[K4S8_DRL_04_E1_EL1004]^Channel 1^Input;
.i_xClsLS := TIIB[K4S8_DRL_04_E1_EL1004]^Channel 2^Input;
.q_xOPN_DO := TIIB[K4S8_DRL_04_E2_EL2004]^Channel 1^Output
'}
{attribute 'pytmc' :=' pv: DREAM:CAT1:VRC:01'}
DREAM_CAT1_VRC_01: FB_VGC;
(*ANGLE VALVES ROUGHING*)
//Pneumatic valves
{attribute 'TcLinkTo' := '.i_xOpnLS := TIIB[K4S8_DRL_04_E9_EL1004]^Channel 1^Input;
.i_xClsLS := TIIB[K4S8_DRL_04_E9_EL1004]^Channel 2^Input;
.q_xOPN_DO := TIIB[K4S8_DRL_04_E11_EL2004]^Channel 1^Output
'}
{attribute 'pytmc' :=' pv: DREAM:ROUGH1:VRC:01'}
DREAM_ROUGH1_VRC_01: FB_VGC;
{attribute 'TcLinkTo' := '.i_xOpnLS := TIIB[K4S8_DRL_04_E9_EL1004]^Channel 3^Input;
.i_xClsLS := TIIB[K4S8_DRL_04_E9_EL1004]^Channel 4^Input;
.q_xOPN_DO := TIIB[K4S8_DRL_04_E11_EL2004]^Channel 2^Output
'}
{attribute 'pytmc' :=' pv: DREAM:ROUGH2:VRC:01'}
DREAM_ROUGH2_VRC_01: FB_VGC;
{attribute 'TcLinkTo' := '.i_xOpnLS := TIIB[K4S8_DRL_04_E10_EL1004]^Channel 1^Input;
.i_xClsLS := TIIB[K4S8_DRL_04_E10_EL1004]^Channel 2^Input;
.q_xOPN_DO := TIIB[K4S8_DRL_04_E11_EL2004]^Channel 3^Output
'}
{attribute 'pytmc' :=' pv: DREAM:ROUGH2:VRC:02'}
DREAM_ROUGH2_VRC_02: FB_VGC;
{attribute 'TcLinkTo' := '.i_xOpnLS := TIIB[K4S8_DRL_04_E10_EL1004]^Channel 3^Input;
.i_xClsLS := TIIB[K4S8_DRL_04_E10_EL1004]^Channel 4^Input;
.q_xOPN_DO := TIIB[K4S8_DRL_04_E11_EL2004]^Channel 4^Output
'}
//valve added tempfor testing only -becomes a real one on 1-15-26
{attribute 'pytmc' :=' pv: DREAM:ROUGH1:VRC:02'}
DREAM_ROUGH1_VRC_02: FB_VGC;
//Manifold roughing valve
{attribute 'TcLinkTo' := '.i_xOpnLS := TIIB[WALL_E_PPL_01_EP2_EP2338-0002]^Channel 1^Input;
.i_xClsLS := TIIB[WALL_E_PPL_01_EP2_EP2338-0002]^Channel 2^Input;
.q_xOPN_DO := TIIB[WALL_E_PPL_01_EP2_EP2338-0002]^Channel 11^Output
'}
{attribute 'pytmc' :=' pv: DREAM:ROUGH1:VRC:10'}
DREAM_ROUGH1_VRC_10: FB_VRC;
(*VENT VALVES ROUGHING*)
//FLow Control valves MKS248
{attribute 'TcLinkTo' := '.q_iRawPosition := TIIB[WALL_E_PPL_01_EP1_EP4374-0002]^AO Outputs Channel 3^Analog output'}
{attribute 'pytmc' := 'pv: DREAM:ROUGH1:VFV:01'}
DREAM_ROUGH1_VFV_01 : FB_MKS248;
{attribute 'TcLinkTo' := '.q_iRawPosition := TIIB[K4S8_DRL_04_EP1_EP4374-0002]^AO Outputs Channel 3^Analog output'}
{attribute 'pytmc' := 'pv: DREAM:ROUGH1:VFV:02'}
DREAM_ROUGH1_VFV_02 : FB_MKS248;
{attribute 'TcLinkTo' := '.q_iRawPosition := TIIB[WALL_E_PPL_01_EP1_EP4374-0002]^AO Outputs Channel 4^Analog output'}
{attribute 'pytmc' := 'pv: DREAM:ROUGH2:VFV:01'}
DREAM_ROUGH2_VFV_01 : FB_MKS248;
{attribute 'TcLinkTo' := '.q_iRawPosition := TIIB[K4S8_DRL_04_EP1_EP4374-0002]^AO Outputs Channel 4^Analog output'}
{attribute 'pytmc' := 'pv: DREAM:ROUGH2:VFV:02'}
DREAM_ROUGH2_VFV_02 : FB_MKS248;
{attribute 'TcLinkTo' := '.q_iRawPosition := TIIB[K4S8_DRL_04_EP2_EP4374-0002]^AO Outputs Channel 3^Analog output'}
{attribute 'pytmc' := 'pv: DREAM:ROUGH2:VFV:03'}
DREAM_ROUGH2_VFV_03 : FB_MKS248;
END_VAR
GVL_Variables
//{attribute 'qualified_only'}
VAR_GLOBAL
{attribute 'pytmc' := '
pv: PLC:DREAM:VAC:OVRDON
io: io
'}
bSystemOverrideMode : BOOL := FALSE; (* Global system override for the DREAM Vacuum System*)
{attribute 'pytmc' := '
pv: PLC:DREAM:ON_BEAMLINE
io: i
'}
bOnBeamline : BOOL := FALSE;
//HV Interlock Pressure setpoint default is 1e-5 Torr, when switched to MC pirani gauge this value will change to 5e-04 Torr.
{attribute 'pytmc' := '
pv: PLC:DREAM:HV_MAX_PRESS_SP
io: io
'}
fHighVoltageMaxPressure : REAL := 1e-05; (*inital High voltage Minimum Enable Pressure*)
{attribute 'pytmc' := '
pv: HV:GPI:SP;
io:io;
field: HOPR 1000
field: LOPR 0
field: PREC 2
field: EGU "TORR"
autosave_pass1: VAL DESC
'}
rHV_GPI_SP: REAL := 0.0005; (*inital high voltage setpoint *)
END_VAR
POUs
F_AllPumpsRunning
FUNCTION F_AllPumpsRunning : BOOL
VAR_INPUT
END_VAR
VAR
END_VAR
// Pump running state verifys that iq_stPtm.i_xAtSpd AND iq_stPtm.q_RunDO are TRUE
F_AllPumpsRunning := DREAM_DP1_PTM_01.iq_stPTM.eState = E_PumpState.pumpRUNNING AND
DREAM_DP2_PTM_01.iq_stPTM.eState = E_PumpState.pumpRUNNING AND
DREAM_DP3_PTM_01.iq_stPTM.eState = E_PumpState.pumpRUNNING AND
DREAM_MC_PTM_01.iq_stPTM.eState = E_PumpState.pumpRUNNING AND
DREAM_MC_PTM_02.iq_stPTM.eState = E_PumpState.pumpRUNNING AND
DREAM_CAT1_PTM_01.iq_stPTM.eState = E_PumpState.pumpRUNNING AND
DREAM_CAT2_PTM_01.iq_stPTM.eState = E_PumpState.pumpRUNNING AND
DREAM_ROUGH2_PTM_01.iq_stPTM.eState = E_PumpState.pumpRUNNING AND
DREAM_ROUGH2_PTM_02.iq_stPTM.eState = E_PumpState.pumpRUNNING AND
DREAM_ROUGH2_PTM_03.iq_stPTM.eState = E_PumpState.pumpRUNNING;
END_FUNCTION
F_IsValidStateTransition
FUNCTION F_IsValidStateTransition : BOOL
VAR_INPUT
eCurrentState : E_Op;
eNextState : E_Op;
END_VAR
VAR
END_VAR
CASE eCurrentState OF
E_Op.INIT:
F_IsValidStateTransition := (eNextState = E_Op.STANDBY);
E_Op.STANDBY:
F_IsValidStateTransition := (eNextState = E_Op.STANDBY) OR
//(eNextState = E_Op.PUMP_ALL) OR
//(eNextState = E_Op.PUMP_NC) OR
(eNextState = E_Op.VENT_MC_CAT); // OR
//(eNextState = E_Op.VENT_ALL) OR
//(eNextState = E_Op.VENT_NC) OR
//(eNextState = E_Op.VENT_CAT);
//uncomment after procedures implemented
E_Op.PUMP_ALL:
F_IsValidStateTransition := (eNextState = E_Op.STANDBY);
E_Op.PUMP_NC:
F_IsValidStateTransition := (eNextState = E_Op.STANDBY);
E_Op.AT_VACUUM:
F_IsValidStateTransition := (eNextState = E_Op.VENT_MC_CAT); //OR
//(eNextState = E_Op.VENT_ALL) OR
//(eNextState = E_Op.VENT_NC) OR
//(eNextState = E_Op.VENT_CAT);
//uncomment after procedures implemented
E_Op.VENT_ALL:
F_IsValidStateTransition := (eNextState = E_Op.STANDBY);
E_Op.VENT_NC:
F_IsValidStateTransition := (eNextState = E_Op.STANDBY);
E_Op.VENT_MC_CAT:
F_IsValidStateTransition := (eNextState = E_Op.STANDBY);
E_Op.VENT_CAT:
F_IsValidStateTransition := (eNextState = E_Op.STANDBY);
ELSE
F_IsValidStateTransition := FALSE;
END_CASE;
END_FUNCTION
- Related:
F_PressAtVacSP
FUNCTION F_PressAtVacSP : BOOL
VAR_INPUT
END_VAR
VAR
END_VAR
F_PressAtVacSP := //DREAM_NC_GCC_01.IG.rPRESS < ATVAC_INTERLOCK_SP AND DREAM_NC_GCC_01.IG.xPRESS_OK AND
//DREAM_DP1_GHC_01.IG.rPRESS < ATVAC_INTERLOCK_SP AND DREAM_DP1_GHC_01.IG.xPRESS_OK AND
//DREAM_DP2_GHC_01.IG.rPRESS < ATVAC_INTERLOCK_SP AND DREAM_DP2_GHC_01.IG.xPRESS_OK AND
//DREAM_DP3_GHC_01.IG.rPRESS < ATVAC_INTERLOCK_SP AND DREAM_DP3_GHC_01.IG.xPRESS_OK AND
//DREAM_CAT1_GHC_01.IG.rPRESS < ATVAC_INTERLOCK_SP AND DREAM_CAT1_GHC_01.IG.xPRESS_OK AND
//DREAM_CAT2_GHC_01.IG.rPRESS < ATVAC_INTERLOCK_SP AND DREAM_CAT2_GHC_01.IG.xPRESS_OK AND
GVL_VAC_GAUGES.stDREAM_MC_GAUGE.rPRESS < AT_VAC_SP AND GVL_VAC_GAUGES.stDREAM_MC_GAUGE.xPRESS_OK;
//GVL_VAC_GAUGES.stDREAM_MC_GHC.xAT_VAC;
//we could also be checking ST_VG.xAT_VAC flag and make this value changeable?
END_FUNCTION
- Related:
F_TurboIlkLogic
FUNCTION F_TurboIlkLogic : BOOL
VAR_INPUT
i_stTurbo : ST_PTM; //Turbo Pump
//i_stISG : ST_VG; //Gauge measuring inlet Pressure e.g Pirani
i_stBackingGauge : ST_VG; //Gauge measuring backing pressure
i_stRoughValve : ST_VGC; //Roughing Valve on the turbo pump backing line
END_VAR
VAR
END_VAR
F_TurboIlkLogic := i_stBackingGauge.rPRESS < i_stTurbo.rBackingPressureSP AND i_stBackingGauge.xPRESS_OK AND
i_stRoughValve.i_xOpnLS;
END_FUNCTION
FB_CloseRoughingValves
FUNCTION_BLOCK FB_CloseRoughingValves
VAR_INPUT
END_VAR
VAR_OUTPUT
END_VAR
VAR
END_VAR
(*Close roughing valves: ROUGH1:VRC:01, ROUGH2:VRC:01, ROUGH2:VRC:02*)
DREAM_ROUGH2_VRC_01.M_Set_OPN_SW(FALSE);
DREAM_ROUGH2_VRC_02.M_Set_OPN_SW(FALSE);
END_FUNCTION_BLOCK
FB_ConnectDP1toROUGH2
FUNCTION_BLOCK FB_ConnectDP1toROUGH2
VAR_INPUT
END_VAR
VAR_OUTPUT
END_VAR
VAR
END_VAR
(*make DP1 is connected to ROUGH2 system by Close ROUGH1:VRC:02 and Open ROUGH2:VRC:03 , if not, stay in this step and doing nothing*)
DREAM_ROUGH1_VRC_02.M_Set_OPN_SW(FALSE);
DREAM_ROUGH2_VRC_03.M_Set_OPN_SW(TRUE);
DREAM_ROUGH2_VRC_03.M_SetAtVacSP(1000);
DREAM_ROUGH2_VRC_03.M_SetAtVacSPHys(1000);
END_FUNCTION_BLOCK
FB_HoldControlForVenting
FUNCTION_BLOCK FB_HoldControlForVenting
VAR_INPUT
END_VAR
VAR_OUTPUT
END_VAR
VAR
END_VAR
fbIsolateMcCat();
fbConnectDP1toROUGH2();
fbStopMcCatTurbos();
fbCloseRoughingValves();
fbSwitchOffGHCs();
q_DREAM_MC_RGA_OFF := TRUE;
END_FUNCTION_BLOCK
FB_IsolateMcCAT
FUNCTION_BLOCK FB_IsolateMcCAT
VAR_INPUT
END_VAR
VAR_OUTPUT
END_VAR
VAR
END_VAR
GVL_PLC_Interface.bCLOSE_TMO_MR5K4_VWC := TRUE;
GVL_PLC_Interface.bCLOSE_TMO_TM2K4_VWC := TRUE;
DREAM_DP1_VRC_01.M_Set_OPN_SW(FALSE);
DREAM_CAT1_VRC_01.M_Set_OPN_SW(FALSE); // prefer to close, not required for moving to the next step
DREAM_DP1_VRC_02.M_Set_CLS_SW(FALSE); // prefer to open the bypass valve, not required for moving to the next step
END_FUNCTION_BLOCK
- Related:
FB_MC_CAT_PumpState
FUNCTION_BLOCK FB_MC_CAT_PumpState
VAR_INPUT
END_VAR
VAR_OUTPUT
xIsAllPumpsAtSpd : Bool;
xIsAnyPumpNotAtSpd : Bool;
END_VAR
VAR
END_VAR
xIsAllPumpsAtSpd := DREAM_DP1_PTM_01.iq_stPTM.eState = E_PumpState.pumpRUNNING AND
DREAM_DP2_PTM_01.iq_stPTM.eState = E_PumpState.pumpRUNNING AND
DREAM_DP3_PTM_01.iq_stPTM.eState = E_PumpState.pumpRUNNING AND
DREAM_MC_PTM_01.iq_stPTM.eState = E_PumpState.pumpRUNNING AND
DREAM_MC_PTM_02.iq_stPTM.eState = E_PumpState.pumpRUNNING AND
DREAM_CAT1_PTM_01.iq_stPTM.eState = E_PumpState.pumpRUNNING AND
DREAM_CAT2_PTM_01.iq_stPTM.eState = E_PumpState.pumpRUNNING AND
DREAM_ROUGH2_PTM_01.iq_stPTM.eState = E_PumpState.pumpRUNNING AND
DREAM_ROUGH2_PTM_02.iq_stPTM.eState = E_PumpState.pumpRUNNING AND
DREAM_ROUGH2_PTM_03.iq_stPTM.eState = E_PumpState.pumpRUNNING;
xIsAnyPumpNotAtSpd := NOT (DREAM_DP1_PTM_01.iq_stPTM.eState = E_PumpState.pumpRUNNING) OR
NOT (DREAM_DP2_PTM_01.iq_stPTM.eState = E_PumpState.pumpRUNNING) OR
NOT (DREAM_DP3_PTM_01.iq_stPTM.eState = E_PumpState.pumpRUNNING) OR
NOT (DREAM_MC_PTM_01.iq_stPTM.eState = E_PumpState.pumpRUNNING) OR
NOT (DREAM_MC_PTM_02.iq_stPTM.eState = E_PumpState.pumpRUNNING) OR
NOT (DREAM_CAT1_PTM_01.iq_stPTM.eState = E_PumpState.pumpRUNNING) OR
NOT (DREAM_CAT2_PTM_01.iq_stPTM.eState = E_PumpState.pumpRUNNING) OR
NOT (DREAM_ROUGH2_PTM_01.iq_stPTM.eState = E_PumpState.pumpRUNNING) OR
NOT (DREAM_ROUGH2_PTM_02.iq_stPTM.eState = E_PumpState.pumpRUNNING) OR
NOT (DREAM_ROUGH2_PTM_03.iq_stPTM.eState = E_PumpState.pumpRUNNING);
END_FUNCTION_BLOCK
FB_SetVFVsPositions
FUNCTION_BLOCK FB_SetVFVsPositions
VAR_INPUT
i_nReqPosition_22 : REAL;
i_nReqPosition_23 : REAL;
END_VAR
VAR_OUTPUT
END_VAR
VAR
END_VAR
IF i_nReqPosition_22 <> 0 THEN
DREAM_ROUGH2_VFV_02.M_SetControlMode(ManualControl);
ELSE
DREAM_ROUGH2_VFV_02.M_SetControlMode(CloseValve);
END_IF
DREAM_ROUGH2_VFV_02.M_SetReqPosition(i_nReqPosition_22);
IF i_nReqPosition_23 <> 0 THEN
DREAM_ROUGH2_VFV_03.M_SetControlMode(ManualControl);
ELSE
DREAM_ROUGH2_VFV_03.M_SetControlMode(CloseValve);
END_IF
DREAM_ROUGH2_VFV_03.M_SetReqPosition(i_nReqPosition_23);
END_FUNCTION_BLOCK
FB_StopMcCatTurbos
FUNCTION_BLOCK FB_StopMcCatTurbos
VAR_INPUT
END_VAR
VAR_OUTPUT
END_VAR
VAR
END_VAR
DREAM_DP1_PTM_01.M_Run(FALSE);
DREAM_DP2_PTM_01.M_Run(FALSE);
DREAM_DP3_PTM_01.M_Run(FALSE);
DREAM_MC_PTM_01.M_Run(FALSE);
DREAM_MC_PTM_02.M_Run(FALSE);
DREAM_CAT1_PTM_01.M_Run(FALSE);
DREAM_CAT2_PTM_01.M_Run(FALSE);
DREAM_ROUGH2_PTM_01.M_Run(FALSE);
DREAM_ROUGH2_PTM_02.M_Run(FALSE);
DREAM_ROUGH2_PTM_03.M_Run(FALSE);
END_FUNCTION_BLOCK
FB_SwitchOffGHCs
FUNCTION_BLOCK FB_SwitchOffGHCs
VAR_INPUT
END_VAR
VAR_OUTPUT
END_VAR
VAR
END_VAR
(* Stop gauges : DP1:GHC:01, DP2:GHC:01, DP3:GHC:01, MC:GHC:01, MC:GHC:02, CAT1:GHC:01, CAT2:GHC:02 *)
DREAM_DP1_GHC_01.M_HVE(FALSE);
DREAM_DP2_GHC_01.M_HVE(FALSE);
DREAM_DP3_GHC_01.M_HVE(FALSE);
DREAM_MC_GHC.M_HVECh1(FALSE);
DREAM_MC_GHC.M_HVECh2(FALSE);
DREAM_CAT1_GHC_01.M_HVE(FALSE);
DREAM_CAT2_GHC_01.M_HVE(FALSE);
END_FUNCTION_BLOCK
FB_TimelyOpenVFV
FUNCTION_BLOCK FB_TimelyOpenVFV
VAR_INPUT
i_reqPos_init : REAL;
i_reqPos_increase : REAL;
END_VAR
VAR_OUTPUT
END_VAR
VAR
reqPositon : INT
tonfor2minute : TON;
END_VAR
reqPosition := i_reqPos_init;
tonfor2minute(IN := TRUE,PT :=T#2m);
If tonfor2minute.Q Then
reqPosition := reqPosition + 10;
DREAM_ROUGH2_VFV_02.M_SetReqPosition();
DREAM_ROUGH2_VFV_03.M_SetReqPosition(20);
tonfor2minute(IN := FALSE);
GVL_Automation.q_sMessage := 'VENTING:Open VFV 40%';
EN
END_FUNCTION_BLOCK
FB_TurboSpdChk
FUNCTION_BLOCK FB_TurboSpdChk
VAR_INPUT
i_rDesSpd : DINT; //desired speed
END_VAR
VAR_OUTPUT
xLTDesSpd : BOOL; //less than desired speed
xError : BOOL;
END_VAR
VAR
END_VAR
IF ( fbSerialLineControl_DREAM_DP1_PTM_01.Error OR fbSerialLineControl_DREAM_DP2_PTM_01.Error OR
fbSerialLineControl_DREAM_DP3_PTM_01.Error OR fbSerialLineControl_DREAM_MC_PTM_01.Error OR
fbSerialLineControl_DREAM_MC_PTM_02.Error OR fbSerialLineControl_DREAM_CAT1_PTM_01.Error OR
fbSerialLineControl_DREAM_CAT2_PTM_01.Error OR fbSerialLineControl_DREAM_ROUGH2_PTM_01.Error OR
fbSerialLineControl_DREAM_ROUGH2_PTM_02.Error OR fbSerialLineControl_DREAM_ROUGH2_PTM_03.Error
) THEN
xError := TRUE;
END_IF
(* awoid of speed 0hz in case of PLC reading fault 0 due to serial communication issue *)
IF (DREAM_DP1_PTM_01.iq_stPTM.i_diCurSpd <= i_rDesSpd AND DREAM_DP1_PTM_01.iq_stPTM.i_rTempMon <> 0 AND
DREAM_DP2_PTM_01.iq_stPTM.i_diCurSpd <= i_rDesSpd AND DREAM_DP2_PTM_01.iq_stPTM.i_rTempMon <> 0 AND
DREAM_DP3_PTM_01.iq_stPTM.i_diCurSpd <= i_rDesSpd AND DREAM_DP3_PTM_01.iq_stPTM.i_rTempMon <> 0 AND
DREAM_MC_PTM_01.iq_stPTM.i_diCurSpd <= i_rDesSpd AND DREAM_MC_PTM_01.iq_stPTM.i_rTempMon <> 0 AND
DREAM_MC_PTM_02.iq_stPTM.i_diCurSpd <= i_rDesSpd AND DREAM_MC_PTM_02.iq_stPtm.i_rTempMon <> 0 AND
DREAM_CAT1_PTM_01.iq_stPTM.i_diCurSpd <= i_rDesSpd AND DREAM_CAT1_PTM_01.iq_stPTM.i_rTempMon <> 0 AND
DREAM_CAT2_PTM_01.iq_stPTM.i_diCurSpd <= i_rDesSpd AND DREAM_CAT2_PTM_01.iq_stPtm.i_rTempMon <> 0 AND
DREAM_ROUGH2_PTM_01.iq_stPTM.i_diCurSpd <= i_rDesSpd AND DREAM_ROUGH2_PTM_01.iq_stPtm.i_rTempMon <> 0 AND
DREAM_ROUGH2_PTM_02.iq_stPTM.i_diCurSpd <= i_rDesSpd AND DREAM_ROUGH2_PTM_02.iq_stPTM.i_rTempMon <> 0 AND
DREAM_ROUGH2_PTM_03.iq_stPTM.i_diCurSpd <= i_rDesSpd AND DREAM_ROUGH2_PTM_03.iq_stPTM.i_rTempMon <> 0) THEN
xError := FALSE;
xLTDesSpd := TRUE;
END_IF
END_FUNCTION_BLOCK
MAIN
PROGRAM MAIN
VAR
fbLogHandler : FB_LogHandler;
//nothing
END_VAR
//fbLogHandler();
PRG_ECAT_CHECK();
PRG_GAUGES();
PRG_VALVES();
PRG_TURBO_PUMPS();
PRG_HV_ILK();
PRG_COIL_PS_ILK();
PRG_TC();
PRG_AUTOMATION();
END_PROGRAM
PRG_AUTOMATION
PROGRAM PRG_AUTOMATION
VAR
// eCurrOp : E_Op; // Currently running operation
step: INT:=0;
{attribute 'pytmc' := '
pv: DREAM:PLC:AUTO:MSG
'}
sMessage : STRING;
{attribute 'pytmc' := '
pv: DREAM:PLC:AUTO:NEXT:MSG
'}
sNextMessage : STRING;
{attribute 'pytmc' := '
pv: DREAM:PLC:AUTO:ONHOLD
'}
i_bOnhold : BOOL;
{attribute 'pytmc' := '
pv: DREAM:PLC:AUTO:RESET
'}
i_reset : BOOL;
{attribute 'pytmc' := '
pv: DREAM:PLC:AUTO:CANCEL
'}
i_bCancel : BOOL;
{attribute 'pytmc' := '
pv: DREAM:PLC:AUTO:BEGIN:PROCEDURE
'}
q_bBegin_Procedure : BOOL; // Venting procedure is starting, after step 10
{attribute 'pytmc' := '
pv: DREAM:PLC:AUTO:ACTIVE:PROCEDURE
'}
q_bActive : BOOL; // Procedure is actively monitoring, in step 10
{attribute 'pytmc' := '
pv: DREAM:PLC:AUTO:ERROR
'}
q_bError : BOOL;
reqPosition : REAL;
{attribute 'pytmc' := '
pv: DREAM:PLC:AUTO:RGAOFF
'}
q_DREAM_MC_RGA_OFF: BOOL; //request RGA off/on
// Cracking positions (adjust as necessary)
rVFV2_2_Pos: REAL := 70.0;
rVFV2_3_Pos: REAL := 45.0;
// fbVentMcCat : FB_VentMcCat;
// fbAtVacuum : FB_AtVacuum;
// xFirstPass : BOOL;
// fbFSInit : R_TRIG;
fbMcCatPumpState : FB_MC_CAT_PumpState ;
(* Turbopump AtSpd time out *)
tNotAtSpd : TIME := T#600S;
tonNotAtSpd : TON;
xNotAtSpdTrigger : Bool;
fbTimeOutTimer : TON;
(* Controls device for Venting *)
fbIsolateMcCat : FB_IsolateMcCAT;
fbConnectDP1toROUGH2: FB_ConnectDP1toROUGH2;
fbCloseRoughingValves: FB_CloseRoughingValves;
fbSwitchOffGHCs : FB_SwitchOffGHCs;
fbStopMcCatTurbos : FB_StopMcCatTurbos;
fbSetVFVsPositions :FB_SetVFVsPositions;
(*Turbo speed check *)
fbTurboSpdChk : FB_TurboSpdChk;
(* Timeout turbo spin down *)
tonTurboSpdTmr : TON;
{attribute 'pytmc' := '
pv: DREAM:PLC:TIMER:ET
'}
tonTurboSpdTmrET : STRING;
{attribute 'pytmc' := '
pv: DREAM:PLC:STEP:TIMER:ET
'}
tonStepTmrET : STRING;
{attribute 'pytmc' := '
pv: DREAM:PLC:VENT:TIMER:ET
'}
tonVentTimerET : STRING;
(* Timer when moving between steps *)
twaitToContinue : TON;
(* Timer to end once VFVs are at 100% *)
tWaitForATM : TON;
(* Timer for at ATM *)
tAtATM : TON;
(*VFV open timer *)
bVentingStart : BOOL;
ton2minTmr : TON;
(*Error timer*)
bErrorTmr : TON;
//M_SetMessage: INT;
r_trig : R_TRIG;
bIsolated: BOOL;
bRoughVrcClosed: BOOL;
tonTurboSpin: INT;
END_VAR
VAR CONSTANT
TURBOS_NOT_RUNNING_TIMEOUT : TIME := T#10M; // How long to try turbo pumping before failing
TURBOS_SPINDOWN_TIMEOUT : TIME := T#25M; // How long for turbos to spin down
MC_ATM_TIMEOUT : TIME := T#80M; // How long for MC at ATM
STEP_WAIT_TIME : TIME :=T#30S; // Wait to move to the next step
ERROR_WAIT_TIME : TIME := T#1M;
AT_ATM_TIME : TIME := T#5M;
END_VAR
(*This programm vents both MC and CAT chammbers when one of MC&CAT turbos lost speed and within 10 minutes of it, PLC doesn't detect that all pumps are at speed.
Below is the venting procedure/requirement:
1. Close beamline valves: MR5K4:VWC:01 and TM2K4:VWC:01
2. Close DP1 gate valve (DP1:VRC:01) and open by-pass valves (DP1:VRC:02).
3. Close catcher valve (CAT1:VRC:01):
4. Verify DP1 is connected to ROUGH2 system
a. Close ROUGH1:VRC:02
b. Open ROUGH2:VRC:03
5. Stop all turbos: DP1:PTM:01, DP2:PTM:01, DP3:PTM:01, MC:PTM:01, MC:PTM:02, ROUGH2:PTM:01, ROUGH2:PTM:02, ROUGH2:PTM:03, CAT1:PTM:01, CAT2:PTM:01
6. Close roughing valves: ROUGH2:VRC:01, ROUGH2:VRC:02
7. Stop gauges: DP1:GHC:01, DP2:GHC:01, DP3:GHC:01, MC:GHC:01, MC:GHC:02, CAT1:GHC:01, CAT2:GHC:02
8. Stop chamber and catcher RGA [For automation, IOC will execute this step]
9. Once turbos are below 0 Hz start venting:
a. Open ROUGH2:VFV:02, ROUGH2:VFV:03 to cracking positions
b. Every 2 min increase opening by 5%
10. Once chamber is at atmosphere close vent valves
*)
fbMcCatPumpState();
IF fbMcCatPumpState.xIsAllPumpsAtSpd AND step <> 900 THEN //
step := 0;
END_IF
CASE step OF
0: //idle, when system is is <1e-10 torr, step to 10
sMessage := '0:idle';
sNextMessage := 'Monitor turbos';
// Reset status booleans and timers for GUI representation
q_bBegin_Procedure := FALSE;
q_bActive := FALSE;
q_bError := FALSE;
fbTimeoutTimer(IN:=FALSE);
tonTurboSpdTmrET := TIME_TO_STRING(TURBOS_NOT_RUNNING_TIMEOUT - fbTimeoutTimer.ET);
tonTurboSpdTmr(IN :=FALSE);
tonVentTimerET := TIME_TO_STRING(TURBOS_SPINDOWN_TIMEOUT - tonTurboSpdTmr.ET);
// Reset RGA flag
q_DREAM_MC_RGA_OFF := FALSE;
IF stDREAM_MC_GHC_GAUGE.xPRESS_OK AND stDREAM_MC_GHC_GAUGE.rPRESS < 1.0E-10 THEN
step := 10;
sMessage := '10: less than 1e-10 Monitor turbos';
q_bActive := TRUE;
sNextMessage := '';
End_IF
10: //Monitor turbors, If not all turbo at speed for 10 minutes, move to step 20
IF i_bOnhold THEN //process is cancelled by user
sMessage := '10:user pause';
ELSE
fbTimeoutTimer(IN:=NOT fbMcCatPumpState.xIsAllPumpsAtSpd, PT:=TURBOS_NOT_RUNNING_TIMEOUT); //Timer for acting
tonTurboSpdTmrET := TIME_TO_STRING(TURBOS_NOT_RUNNING_TIMEOUT - fbTimeoutTimer.ET);
IF NOT fbMcCatPumpState.xIsAllPumpsAtSpd THEN
sMessage := '10: TURBO FAULTED, 10 min until VENT';
sNextMessage := 'BEGIN VENTING PROCEDURE';
q_bBegin_Procedure := TRUE;
ELSE
sMessage := '10: less than 1e-10 Monitor turbos';
sNextMessage := '';
q_bBegin_Procedure := FALSE;
fbTimeoutTimer(IN:=FALSE);
END_IF
IF (fbTimeOutTimer.Q ) THEN
sMessage := '10:TURBO FAULTED, VENT START 30 SEC';
sNextMessage := 'Close MR5K4,TM2K4,DP1,CAT vlvs';
twaitToContinue(IN:=TRUE, PT:=STEP_WAIT_TIME);
IF twaitToContinue.Q THEN
step :=20;
twaitToContinue(IN := FALSE);
END_IF
END_IF
END_IF
20 : //Isolate MC and CAT from beamline and NC by Closing beamline, DP1 isolation valve, and optional close CAT1 isolation valve and open DP1 bypass valve
//if turbos back to running, return to step 10 and monitor turbo event
sNextMessage := 'Verify isolation';
fbTimeoutTimer(IN:=FALSE);
IF i_bOnhold THEN //process paused by user
sMessage := '20:user pause';
ELSE
sMessage := '20:Close MR5K4,TM2K4,DP1,CAT vlvs 30 SEC';
twaitToContinue(IN:=TRUE, PT:=STEP_WAIT_TIME);
IF twaitToContinue.Q THEN
fbIsolateMcCat();//isolate chambers from beamline and NC
twaitToContinue(IN := FALSE);
step :=22;
END_IF
END_IF
22 : // Verify DP1 and beamline valve closed, if not, wait.
bErrorTmr(IN:=TRUE,PT:=ERROR_WAIT_TIME);
bIsolated := (GVL_PLC_Interface.bTMO_MR5K4_VWC_CLOSED_LS AND GVL_PLC_Interface.bTMO_TM2K4_VWC_CLOSED_LS AND
NOT bTMOVacEcatBridge_COM_ERROR) AND (DREAM_DP1_VRC_01.iq_stValve.eState = CLOSED);
IF bIsolated THEN
step :=30;
sMessage := '22:McCAT Isoalted';
sNextMessage := 'Prepare DP1 to ROUGH2';
bErrorTmr(IN:=FALSE);
ELSE
//Wait for valves; and ensure PLC controls
fbIsolateMcCat();
END_IF
IF bErrorTmr.Q THEN
q_bError := TRUE;
sMessage := '22:Closing MR5K4,TM2K4,DP1,CAT vlvs - ERROR';
END_IF
30 : // Prepare venting path: connect DP1 to ROUGH2 system by Close ROUGH1:VRC:02 and Open ROUGH2:VRC:03
sNextMessage := 'Verify DP1 to ROUGH2';
q_bError := FALSE;
IF i_bOnhold THEN //process paused by user
sMessage := '30: user pause at step 30';
ELSE
sMessage := '30:connect DP1 to Rough2 IN 30 SEC';
twaitToContinue(IN:=TRUE, PT:=STEP_WAIT_TIME);
IF twaitToContinue.Q THEN
twaitToContinue(IN := FALSE);
fbConnectDP1toROUGH2();//connect DP1 to Rough2
step :=32;
END_IF
END_IF
32: //verify DP1 connecto stay in this step and doing nothing
bErrorTmr(IN:=TRUE,PT:=ERROR_WAIT_TIME);
IF (DREAM_ROUGH1_VRC_02.iq_stValve.eState = CLOSED AND DREAM_ROUGH2_VRC_03.iq_stValve.eState = OPEN) THEN
step :=40;
sMessage := '32:DP1 connected to Rough2';
sNextMessage := 'Stop turbos';
bErrorTmr(IN:=FALSE);
ELSE
//Wait for valves; and ensure PLC controls
fbIsolateMcCat();
fbConnectDP1toROUGH2();
END_IF
IF bErrorTmr.Q THEN
q_bError := TRUE;
sMessage := '32:connect DP1 to Rough2 ERROR';
END_IF
40: //STOP all turbos connecting to DP1,DP2,DP3, MC, CAT1 and CAT2
sNextMessage := 'Close rough line valves';
q_bError := FALSE;
IF i_bOnhold THEN //process paused by user
sMessage := '40: user pause at step 40';
fbIsolateMcCat();
fbConnectDP1toROUGH2();
ELSE
sMessage := '40:Switch off turbos IN 30 SEC';
twaitToContinue(IN:=TRUE, PT:=STEP_WAIT_TIME);
IF twaitToContinue.Q THEN
fbStopMcCatTurbos();
twaitToContinue(IN := FALSE);
step :=50;
END_IF
END_IF
50: //Close roughing valves: ROUGH1:VRC:01, ROUGH2:VRC:01, ROUGH2:VRC:02
sNextMessage := 'Verify rough lines are closed';
IF i_bOnhold THEN //process paused by user
sMessage := '50:user pause at step 50';
fbIsolateMcCat();
fbConnectDP1toROUGH2();
fbStopMcCatTurbos();
ELSE
sMessage := '50:close ROUGH2-VRC01,02 IN 30 SEC';
twaitToContinue(IN:=TRUE, PT:=STEP_WAIT_TIME);
IF twaitToContinue.Q THEN
fbCloseRoughingValves();
twaitToContinue(IN := FALSE);
step :=52;
END_IF
END_IF
52: //verify roughing valves: ROUGH1:VRC:01, ROUGH2:VRC:01, ROUGH2:VRC:02 closed
bErrorTmr(IN:=TRUE,PT:=ERROR_WAIT_TIME);
bRoughVrcClosed := (DREAM_ROUGH2_VRC_01.iq_stValve.eState=CLOSED
AND DREAM_ROUGH2_VRC_02.iq_stValve.eState=CLOSED);
IF bRoughVrcClosed THEN
step :=60;
sMessage := '52: rgh2-Vrc1,2, closed';
sNextMessage := 'Turn off gauges';
bErrorTmr(IN:=FALSE);
ELSE
//Wait and ensure PLC control during waiting
fbIsolateMcCat();
fbConnectDP1toROUGH2();
fbStopMcCatTurbos();
fbCloseRoughingValves();
END_IF
IF bErrorTmr.Q THEN
q_bError := TRUE;
sMessage := 'close ROUGH1-VRC-01,ROUGH2-VRC01,02, ERROR';
END_IF
60: //Switch off DP1:GHC:01, DP2:GHC:01, DP3:GHC:01, MC:GHC:01, MC:GHC:02, CAT1:GHC:01, CAT2:GHC:02 and RGAs
sNextMessage := 'Wait for turbos to stop';
q_bError := FALSE;
IF i_bOnhold THEN //process paused by user
sMessage := '60:user pause at step 60';
fbIsolateMcCat();
fbConnectDP1toROUGH2();
fbStopMcCatTurbos();
fbCloseRoughingValves();
ELSE
sMessage := '60:switch off GHCs RGAs IN 30 SEC';
twaitToContinue(IN:=TRUE, PT:=STEP_WAIT_TIME);
IF twaitToContinue.Q THEN
fbSwitchOffGHCs();
q_DREAM_MC_RGA_OFF := TRUE;
twaitToContinue(IN := FALSE);
step :=80;
END_IF
END_IF
80: //check if all turbo below than 0Hz or 20 minute timer expires
IF i_bOnhold THEN
sMessage := '80:user pause at step 80';
fbIsolateMcCat();
fbConnectDP1toROUGH2();
fbStopMcCatTurbos();
fbCloseRoughingValves();
fbSwitchOffGHCs();
q_DREAM_MC_RGA_OFF := TRUE;
ELSE
fbTurboSpdChk(i_rDesSpd := 0);//check turbo speed
tonTurboSpdTmr(IN :=TRUE, PT :=TURBOS_SPINDOWN_TIMEOUT); // spindown timeout 25 min
tonVentTimerET := TIME_TO_STRING(TURBOS_SPINDOWN_TIMEOUT - tonTurboSpdTmr.ET);
IF tonTurboSpdTmr.Q OR fbTurboSpdChk.xLTDesSpd THEN
IF tonTurboSpdTmr.Q THEN
sMessage := '80: Spindown wait time out, continuing';
ELSE
sMessage := '80: Turbo below than 0 Hz';
END_IF
step := 90;
tonTurboSpdTmr(IN := FALSE);
ELSE
step :=82; // go to wait step
END_IF
END_IF
82: // wait till from 80 move to 90, and ensure PLC controls while waiting
fbIsolateMcCat();
fbConnectDP1toROUGH2();
fbStopMcCatTurbos();
fbCloseRoughingValves();
fbSwitchOffGHCs();
q_DREAM_MC_RGA_OFF := TRUE;
step := 80;
sMessage := '82:wait for turbo spindown';
sNextMessage := 'Open VFVs';
90: // open ROUGH2:VFV:02, ROUGH2:VFV:03 to 10%
sNextMessage := 'Wait 2 minutes between VFV position changes';
IF rVFV2_2_Pos > 100 THEN
rVFV2_2_Pos := 100;
END_IF
IF rVFV2_3_Pos > 100 THEN
rVFV2_3_Pos := 100;
END_IF
fbSetVFVsPositions(
i_nReqPosition_22 :=rVFV2_2_Pos,
i_nReqPosition_23 :=rVFV2_3_Pos);
sMessage := CONCAT(CONCAT(CONCAT('90:set VFV 2-2 AND 2-3 to ', REAL_TO_STRING(DREAM_ROUGH2_VFV_02.iq_stVFN.rReqPosition)), ' ,'), REAL_TO_STRING(DREAM_ROUGH2_VFV_03.iq_stVFN.rReqPosition));
IF rVFV2_2_Pos = 100 AND rVFV2_3_Pos = 100 THEN
step := 200;
ELSE
step :=92;
END_IF
92: //Wait for 2min and increment by 10
ton2minTmr(IN:=TRUE,PT:=T#2M);
IF ton2minTmr.q THEN
rVFV2_2_Pos := rVFV2_2_Pos + 10.0;
rVFV2_3_Pos := rVFV2_3_Pos + 10.0;
step := 90;
ton2minTmr(IN:=FALSE);
ELSE
sMessage := '92:wait 2min before incrementing VFVs';
sNextMessage := CONCAT(CONCAT(CONCAT('Set VFV 2-2 AND 2-3 to ', REAL_TO_STRING(DREAM_ROUGH2_VFV_02.iq_stVFN.rReqPosition)), ' ,'), REAL_TO_STRING(DREAM_ROUGH2_VFV_03.iq_stVFN.rReqPosition));
// hold VFVs
fbSetVFVsPositions(
i_nReqPosition_22 :=rVFV2_2_Pos,
i_nReqPosition_23 :=rVFV2_3_Pos);
fbIsolateMcCat();
fbConnectDP1toROUGH2();
fbStopMcCatTurbos();
fbCloseRoughingValves();
fbSwitchOffGHCs();
q_DREAM_MC_RGA_OFF := TRUE;
END_IF
200: // Once VFVs are all at fully open, close vent valves, timeout 40min
rVFV2_2_Pos := 70.0;
rVFV2_3_Pos := 45.0;
fbIsolateMcCat();
fbConnectDP1toROUGH2();
fbStopMcCatTurbos();
fbCloseRoughingValves();
fbSwitchOffGHCs();
q_DREAM_MC_RGA_OFF := TRUE;
sMessage := '200:wait for vent SP then set VFVs to close';
sNextMessage := 'Complete venting procedure';
tWaitForATM(IN:=TRUE, PT:=MC_ATM_TIMEOUT);
IF tWaitForATM.Q THEN
fbSetVFVsPositions(
i_nReqPosition_22 :=0,
i_nReqPosition_23 :=0); //close vfvs
step := 300;
tWaitForATM(IN := FALSE);
END_IF
IF (DREAM_MC_GPI_01.PG.rPRESS >= 700 AND DREAM_MC_GPI_01.PG.xPRESS_OK AND DREAM_ROUGH2_GPI_03.PG.rPRESS >= 650 AND DREAM_ROUGH2_GPI_03.PG.xPRESS_OK
AND DREAM_DP1_GPI_01.PG.rPRESS >= 700 AND DREAM_DP1_GPI_01.PG.xPRESS_OK) THEN
tAtATM(IN := TRUE, PT:=AT_ATM_TIME);
IF tAtATM.Q THEN
fbSetVFVsPositions(
i_nReqPosition_22 :=0,
i_nReqPosition_23 :=0); //close vfvs
step := 300;
tAtATM(IN := FALSE);
END_IF
END_IF
300: //Venting complete, wait for user acknowlege to restart the process
sNextMessage := '';
IF i_reset THEN
step :=0;
sMessage := '300:User did reset';
tonTurboSpdTmr(IN := FALSE);
bErrorTmr(IN:=FALSE);
tWaitForATM(IN := FALSE);
fbTimeoutTimer(IN:=FALSE);
tAtATM(IN := FALSE);
tonVentTimerET := TIME_TO_STRING(tonTurboSpdTmr.ET);
tonTurboSpdTmrET := TIME_TO_STRING(fbTimeoutTimer.ET);
ELSE
q_bBegin_Procedure := FALSE;
q_bActive := FALSE;
// Reset RGA flag
q_DREAM_MC_RGA_OFF := FALSE;
sMessage := '300:Complete, wait for reset';
END_IF
900: // move to this step when have error or process is canceled by user, close VFVs
sNextMessage := '';
q_bBegin_Procedure := FALSE;
q_bActive := FALSE;
rVFV2_2_Pos := 70.0;
rVFV2_3_Pos := 45.0;
fbSetVFVsPositions(
i_nReqPosition_22 :=0,
i_nReqPosition_23 :=0); //close vfvs
sMessage := '900:Cancelled by user OR error, closing VFVs';
IF i_reset AND NOT i_bCancel AND NOT q_bError THEN
step :=0;
sMessage := 'User did reset';
END_IF
// If user cancels, make sure to restart all timers and set timers back to 0
tonTurboSpdTmr(IN := FALSE);
bErrorTmr(IN:=FALSE);
tWaitForATM(IN := FALSE);
fbTimeoutTimer(IN:=FALSE);
tAtATM(IN := FALSE);
// Reset RGA flag
q_DREAM_MC_RGA_OFF := FALSE;
tonVentTimerET := TIME_TO_STRING(tonTurboSpdTmr.ET);
tonTurboSpdTmrET := TIME_TO_STRING(fbTimeoutTimer.ET);
END_CASE
IF i_bCancel THEN
step := 900;
END_IF
tonStepTmrET := TIME_TO_STRING(STEP_WAIT_TIME - twaitToContinue.ET);
END_PROGRAM
PRG_COIL_PS_ILK
PROGRAM PRG_COIL_PS_ILK
VAR
END_VAR
(*Interlock logic for Coil PS based on reading from Flow meter*)
fbCoilFlowMeter();
fCoilCoolantFlowMeterRBV := fbCoilFlowMeter.fReal;
//evaluate flow meter readback to Interlock interlock Coil PS
bCoilPS_ILK := fbCoilFlowMeter.fReal > 3.0; //If flow meter reading is above XX is ok to turn ON output of the Coil PS. Units are lpm
//fbDreamCoilFlowMeter();
//bCoilPS_ILK := fbDreamCoilFlowMeter.fbFlowMeter.fReal > 3; //If flow meter reading is above XX is ok to turn ON output of the Coil PS. Units are lpm
(*DREAM Coil PS Current Monitoring*)
fbCoilCurrentMonitoring();
fCoilCurrentRBV := fbCoilCurrentMonitoring.fReal;
END_PROGRAM
PRG_COM
PROGRAM PRG_COM
VAR
END_VAR
(*Instanitate Serial port com function *)
fbSerialLineControl_DREAM_NC_PTM_01(
Mode:= SERIALLINEMODE_EL6_22B,
pComIn:= ADR(stComIn_DREAM_NC_PTM_01),
pComOut:= ADR(stComOut_DREAM_NC_PTM_01),
SizeComIn:= UINT_TO_INT(SIZEOF(stComIn_DREAM_NC_PTM_01)),
TxBuffer:= SerialTXBuffer_DREAM_NC_PTM_01,
RxBuffer:= SerialRXBuffer_DREAM_NC_PTM_01,
Error=> ,
ErrorID=> );
fbSerialLineControl_DREAM_NC_PTM_02(
Mode:= SERIALLINEMODE_EL6_22B,
pComIn:= ADR(stComIn_DREAM_NC_PTM_02),
pComOut:= ADR(stComOut_DREAM_NC_PTM_02),
SizeComIn:= UINT_TO_INT(SIZEOF(stComIn_DREAM_NC_PTM_02)),
TxBuffer:= SerialTXBuffer_DREAM_NC_PTM_02,
RxBuffer:= SerialRXBuffer_DREAM_NC_PTM_02,
Error=> ,
ErrorID=> );
fbSerialLineControl_DREAM_DP1_PTM_01(
Mode:= SERIALLINEMODE_EL6_22B,
pComIn:= ADR(stComIn_DREAM_DP1_PTM_01),
pComOut:= ADR(stComOut_DREAM_DP1_PTM_01),
SizeComIn:= UINT_TO_INT(SIZEOF(stComIn_DREAM_DP1_PTM_01)),
TxBuffer:= SerialTXBuffer_DREAM_DP1_PTM_01,
RxBuffer:= SerialRXBuffer_DREAM_DP1_PTM_01,
Error=> ,
ErrorID=> );
fbSerialLineControl_DREAM_DP2_PTM_01(
Mode:= SERIALLINEMODE_EL6_22B,
pComIn:= ADR(stComIn_DREAM_DP2_PTM_01),
pComOut:= ADR(stComOut_DREAM_DP2_PTM_01),
SizeComIn:= UINT_TO_INT(SIZEOF(stComIn_DREAM_DP2_PTM_01)),
TxBuffer:= SerialTXBuffer_DREAM_DP2_PTM_01,
RxBuffer:= SerialRXBuffer_DREAM_DP2_PTM_01,
Error=> ,
ErrorID=> );
fbSerialLineControl_DREAM_DP3_PTM_01(
Mode:= SERIALLINEMODE_EL6_22B,
pComIn:= ADR(stComIn_DREAM_DP3_PTM_01),
pComOut:= ADR(stComOut_DREAM_DP3_PTM_01),
SizeComIn:= UINT_TO_INT(SIZEOF(stComIn_DREAM_DP3_PTM_01)),
TxBuffer:= SerialTXBuffer_DREAM_DP3_PTM_01,
RxBuffer:= SerialRXBuffer_DREAM_DP3_PTM_01,
Error=> ,
ErrorID=> );
fbSerialLineControl_DREAM_MC_PTM_01(
Mode:= SERIALLINEMODE_EL6_22B,
pComIn:= ADR(stComIn_DREAM_MC_PTM_01),
pComOut:= ADR(stComOut_DREAM_MC_PTM_01),
SizeComIn:= UINT_TO_INT(SIZEOF(stComIn_DREAM_MC_PTM_01)),
TxBuffer:= SerialTXBuffer_DREAM_MC_PTM_01,
RxBuffer:= SerialRXBuffer_DREAM_MC_PTM_01,
Error=> ,
ErrorID=> );
fbSerialLineControl_DREAM_MC_PTM_02(
Mode:= SERIALLINEMODE_EL6_22B,
pComIn:= ADR(stComIn_DREAM_MC_PTM_02),
pComOut:= ADR(stComOut_DREAM_MC_PTM_02),
SizeComIn:= UINT_TO_INT(SIZEOF(stComIn_DREAM_MC_PTM_02)),
TxBuffer:= SerialTXBuffer_DREAM_MC_PTM_02,
RxBuffer:= SerialRXBuffer_DREAM_MC_PTM_02,
Error=> ,
ErrorID=> );
fbSerialLineControl_DREAM_CAT1_PTM_01(
Mode:= SERIALLINEMODE_EL6_22B,
pComIn:= ADR(stComIn_DREAM_CAT1_PTM_01),
pComOut:= ADR(stComOut_DREAM_CAT1_PTM_01),
SizeComIn:= UINT_TO_INT(SIZEOF(stComIn_DREAM_CAT1_PTM_01)),
TxBuffer:= SerialTXBuffer_DREAM_CAT1_PTM_01,
RxBuffer:= SerialRXBuffer_DREAM_CAT1_PTM_01,
Error=> ,
ErrorID=> );
fbSerialLineControl_DREAM_CAT2_PTM_01(
Mode:= SERIALLINEMODE_EL6_22B,
pComIn:= ADR(stComIn_DREAM_CAT2_PTM_01),
pComOut:= ADR(stComOut_DREAM_CAT2_PTM_01),
SizeComIn:= UINT_TO_INT(SIZEOF(stComIn_DREAM_CAT2_PTM_01)),
TxBuffer:= SerialTXBuffer_DREAM_CAT2_PTM_01,
RxBuffer:= SerialRXBuffer_DREAM_CAT2_PTM_01,
Error=> ,
ErrorID=> );
fbSerialLineControl_DREAM_ROUGH2_PTM_01(
Mode:= SERIALLINEMODE_EL6_22B,
pComIn:= ADR(stComIn_DREAM_ROUGH2_PTM_01),
pComOut:= ADR(stComOut_DREAM_ROUGH2_PTM_01),
SizeComIn:= UINT_TO_INT(SIZEOF(stComIn_DREAM_ROUGH2_PTM_01)),
TxBuffer:= SerialTXBuffer_DREAM_ROUGH2_PTM_01,
RxBuffer:= SerialRXBuffer_DREAM_ROUGH2_PTM_01,
Error=> ,
ErrorID=> );
fbSerialLineControl_DREAM_ROUGH2_PTM_02(
Mode:= SERIALLINEMODE_EL6_22B,
pComIn:= ADR(stComIn_DREAM_ROUGH2_PTM_02),
pComOut:= ADR(stComOut_DREAM_ROUGH2_PTM_02),
SizeComIn:= UINT_TO_INT(SIZEOF(stComIn_DREAM_ROUGH2_PTM_02)),
TxBuffer:= SerialTXBuffer_DREAM_ROUGH2_PTM_02,
RxBuffer:= SerialRXBuffer_DREAM_ROUGH2_PTM_02,
Error=> ,
ErrorID=> );
fbSerialLineControl_DREAM_ROUGH2_PTM_03(
Mode:= SERIALLINEMODE_EL6_22B,
pComIn:= ADR(stComIn_DREAM_ROUGH2_PTM_03),
pComOut:= ADR(stComOut_DREAM_ROUGH2_PTM_03),
SizeComIn:= UINT_TO_INT(SIZEOF(stComIn_DREAM_ROUGH2_PTM_03)),
TxBuffer:= SerialTXBuffer_DREAM_ROUGH2_PTM_03,
RxBuffer:= SerialRXBuffer_DREAM_ROUGH2_PTM_03,
Error=> ,
ErrorID=> );
END_PROGRAM
PRG_ECAT_CHECK
PROGRAM PRG_ECAT_CHECK
VAR
//Ethercat bridge error for DREAM Motion
bMotEcatBridge_COM_ERROR : BOOL;
END_VAR
(*EtherCAT Bridge Status*)
//bEcatBridge_COM_ERROR = TRUE means that there is an EtherCAT Bridge Communication Error.
//TMO beamline vacuum EtherCAT communication check
bTMOVacEcatBridge_COM_ERROR := (bEcatBridge_TxPDO_state OR bEcatBridge_External_device_not_connected OR bEcatBridge_WcState);
bOnBeamline := (bTMOVacEcatBridge_COM_ERROR = FALSE) AND (sHUTCH_PLC_NAME = 'TMO');
bMotEcatBridge_COM_ERROR := (bMotEcatBridge_TxPDO_state OR bMotEcatBridge_External_device_not_connected OR bMotEcatBridge_WcState);
END_PROGRAM
PRG_GAUGES
PROGRAM PRG_GAUGES
VAR
END_VAR
(**Gas Injection Gauges**)
//Pirani MKS 275 Gauges
DREAM_NC_GPI_01.M_SetBits(30518);
DREAM_NC_GPI_01(PG=>);
DREAM_DP1_GPI_01.M_SetBits(30518);
DREAM_DP1_GPI_01(PG=>);
//Cold Cathode Guages
DREAM_NC_GCC_01.M_SetBits(30518);
DREAM_NC_GCC_01(PG:= DREAM_NC_GPI_01.PG);
Dream_NC_GCC_02(PG=>);
DREAM_NC_GCC_02.M_SetBits(30518);
//Hot Cathode Guages
DREAM_DP1_GHC_01.M_SetBits(30518);
DREAM_DP1_GHC_01(PG:= DREAM_DP1_GPI_01.PG, IG=>);
DREAM_DP2_GHC_01.M_SetBits(30518);
DREAM_DP2_GHC_01(PG:= DREAM_DP1_GPI_01.PG, IG=>);
DREAM_DP3_GHC_01.M_SetBits(30518);
DREAM_DP3_GHC_01(PG:= DREAM_DP1_GPI_01.PG, IG=>);
(**Main Chmamber Gauges**)
//Pirani Gauges
DREAM_MC_GPI_01.M_SetBits(30518);
DREAM_MC_GPI_01();
//Hot Cathode gauge IE514
DREAM_MC_GHC.M_SetBits(30518);
//Using DP3:GHC to interlock main chamber gauge because protetion setpoint for the gauge has to be set to 1e-6 - 1E-5
//Changing back to interlock MC HC gauge with MC pirani gauge, becasue when coil is ON it can turn OFF DP3 gauge which then affect interlocks for the beamline valves and catcher valve
DREAM_MC_GHC(PG:= DREAM_MC_GPI_01.PG); //This fb reads statuses and control two gauges DREAM:MC:GHC:01 and DREAM:MC:GHC:02
//Update stDREAM_MC_GHC_GAUGE structure based on CH selected by controller and data to TMO Beamline Vacuum PLC
IF DREAM_MC_GHC.M_IsCh1Selected() THEN
stDREAM_MC_GHC_GAUGE := DREAM_MC_GHC.IG_CH1;
GVL_PLC_Interface.bDREAM_MAIN_xAT_VAC := DREAM_MC_GHC.IG_CH1.xAT_VAC;
GVL_PLC_Interface.bDREAM_MAIN_xPRESS_OK := DREAM_MC_GHC.IG_CH1.xPRESS_OK;
GVL_PLC_Interface.fDREAM_MAIN_rPRESS := DREAM_MC_GHC.IG_CH1.rPRESS;
ELSIF DREAM_MC_GHC.M_IsCh2Selected() THEN
stDREAM_MC_GHC_GAUGE := DREAM_MC_GHC.IG_CH2;
GVL_PLC_Interface.bDREAM_MAIN_xAT_VAC := DREAM_MC_GHC.IG_CH2.xAT_VAC;
GVL_PLC_Interface.bDREAM_MAIN_xPRESS_OK := DREAM_MC_GHC.IG_CH2.xPRESS_OK;
GVL_PLC_Interface.fDREAM_MAIN_rPRESS := DREAM_MC_GHC.IG_CH2.rPRESS;
END_IF
//Switch to Pirani gauge, when High vacuum gauge is not available, check pumps running when using Pirani
IF NOT stDREAM_MC_GHC_GAUGE.xPRESS_OK THEN
//This interlock pseudo MC gauge is also assigned in the PRG_Valves, it is redanduncy and make sure change the PRG_Valves as well if change here
stDREAM_MC_GAUGE := DREAM_MC_GPI_01.PG;
GVL_PLC_Interface.bDREAM_MAIN_xAT_VAC := DREAM_MC_GPI_01.PG.xAT_VAC;
GVL_PLC_Interface.bDREAM_MAIN_xPRESS_OK := DREAM_MC_GPI_01.PG.xPRESS_OK AND bMCPumpsRunning;
GVL_PLC_Interface.fDREAM_MAIN_rPRESS := DREAM_MC_GPI_01.PG.rPRESS;
ElSE
//This interlock pseudo MC gauge is also assigned in the PRG_Valves, it is redanduncy and make sure change the PRG_Valves as well if change here
stDREAM_MC_GAUGE := stDREAM_MC_GHC_GAUGE;
GVL_PLC_Interface.bDREAM_MAIN_xAT_VAC := stDREAM_MC_GHC_GAUGE.xAT_VAC;
GVL_PLC_Interface.bDREAM_MAIN_xPRESS_OK := stDREAM_MC_GHC_GAUGE.xPRESS_OK;
GVL_PLC_Interface.fDREAM_MAIN_rPRESS := stDREAM_MC_GHC_GAUGE.rPRESS;
END_IF
(**Catcher Gauges**)
//Hot Cathode Guages
DREAM_CAT1_GHC_01.M_SetBits(30518);
DREAM_CAT1_GHC_01(PG:= DREAM_ROUGH2_GPI_03.PG);
DREAM_CAT2_GHC_01.M_SetBits(30518);
DREAM_CAT2_GHC_01(PG:= DREAM_ROUGH2_GPI_03.PG);
(**Roughing Section Gauges**)
DREAM_ROUGH1_GPI_01.M_SetBits(32767);
DREAM_ROUGH1_GPI_01();
DREAM_ROUGH1_GPI_02.M_SetBits(32767);
DREAM_ROUGH1_GPI_02();
DREAM_ROUGH2_GPI_01.M_SetBits(32767);
DREAM_ROUGH2_GPI_01();
DREAM_ROUGH2_GPI_02.M_SetBits(32767);
DREAM_ROUGH2_GPI_02();
DREAM_ROUGH2_GPI_03.M_SetBits(32767);
DREAM_ROUGH2_GPI_03();
END_PROGRAM
- Related:
PRG_HV_ILK
PROGRAM PRG_HV_ILK
VAR
END_VAR
(*High Voltage Saftey Loop*)
IF GVL_VAC_GAUGES.stDREAM_MC_GHC_GAUGE.xPRESS_OK THEN
// fHighVoltageMaxPressure := 1e-05;
GVL_PLC_Interface.bHVSafteyLoopEnable := GVL_VAC_GAUGES.stDREAM_MC_GHC_GAUGE.rPRESS <= fHighVoltageMaxPressure;
ELSIF DREAM_MC_GPI_01.PG.xPRESS_OK AND bMCPumpsRunning THEN
// fHighVoltageMaxPressure := 5e-04;
GVL_PLC_Interface.bHVSafteyLoopEnable := DREAM_MC_GPI_01.PG.rPRESS <= rHV_GPI_SP;
ELSE
GVL_PLC_Interface.bHVSafteyLoopEnable := FALSE;
END_IF
END_PROGRAM
- Related:
PRG_TC
PROGRAM PRG_TC
VAR
END_VAR
//Measure Thercmocouples
TC_01();
TC_02();
TC_03();
TC_04();
TC_05();
TC_06();
TC_07();
TC_08();
END_PROGRAM
PRG_TURBO_PUMPS
PROGRAM PRG_TURBO_PUMPS
VAR
bAllTurboPumpRunning : BOOL;
tAllTurboPumpDelayTime : TIME := T#30s;
tAllTurboPumpTOF : TOF;
bMainTurboPumpRunning : BOOL;
tMainTurboPumpDelayTime : TIME := T#15m;
tMainTurboPumpTOF : TOF;
ftPumpsFailed : F_TRIG;
END_VAR
(**Gas Injection Turbo pumps**)
DREAM_NC_PTM_01(i_xExtIlkOK := DREAM_ROUGH1_GPI_02.PG.rPRESS < DREAM_NC_PTM_01.iq_stPTM.rBackingPressureSP AND DREAM_ROUGH1_GPI_02.PG.xPRESS_OK AND
DREAM_ROUGH1_VRC_01.iq_stValve.i_xOpnLS);
DREAM_NC_PTM_02(i_xExtIlkOK := DREAM_ROUGH1_GPI_02.PG.rPRESS < DREAM_NC_PTM_02.iq_stPTM.rBackingPressureSP AND DREAM_ROUGH1_GPI_02.PG.xPRESS_OK AND
DREAM_ROUGH1_VRC_01.iq_stValve.i_xOpnLS);
(**Differential pumping stations Turbo pumps**)
DREAM_DP1_PTM_01(i_xExtIlkOK := (DREAM_ROUGH2_GPI_02.PG.rPRESS < DREAM_DP1_PTM_01.iq_stPTM.rBackingPressureSP AND DREAM_ROUGH2_GPI_02.PG.xPRESS_OK AND
DREAM_ROUGH2_VRC_03.iq_stValve.i_xOpnLS AND DREAM_ROUGH2_VRC_01.iq_stValve.i_xOpnLS) OR
(DREAM_ROUGH1_GPI_02.PG.rPRESS < DREAM_DP1_PTM_01.iq_stPTM.rBackingPressureSP AND DREAM_ROUGH1_GPI_02.PG.xPRESS_OK AND
DREAM_ROUGH1_VRC_02.iq_stValve.i_xOpnLS AND DREAM_ROUGH1_VRC_01.iq_stValve.i_xOpnLS));
DREAM_DP2_PTM_01(i_xExtIlkOK := DREAM_ROUGH2_GPI_02.PG.rPRESS < DREAM_DP2_PTM_01.iq_stPTM.rBackingPressureSP AND DREAM_ROUGH2_GPI_02.PG.xPRESS_OK AND
DREAM_ROUGH2_VRC_01.iq_stValve.i_xOpnLS);
DREAM_DP3_PTM_01(i_xExtIlkOK := DREAM_ROUGH2_GPI_02.PG.rPRESS < DREAM_DP3_PTM_01.iq_stPTM.rBackingPressureSP AND DREAM_ROUGH2_GPI_02.PG.xPRESS_OK AND
DREAM_ROUGH2_VRC_01.iq_stValve.i_xOpnLS);
(**Main Chamber Turbo pumps**)
DREAM_MC_PTM_01(i_xExtIlkOK := DREAM_ROUGH2_GPI_02.PG.rPRESS < DREAM_MC_PTM_01.iq_stPTM.rBackingPressureSP AND DREAM_ROUGH2_GPI_02.PG.xPRESS_OK AND
DREAM_ROUGH2_VRC_01.iq_stValve.i_xOpnLS);
DREAM_MC_PTM_02(i_xExtIlkOK := DREAM_ROUGH2_GPI_02.PG.rPRESS < DREAM_MC_PTM_02.iq_stPTM.rBackingPressureSP AND DREAM_ROUGH2_GPI_02.PG.xPRESS_OK AND
DREAM_ROUGH2_VRC_01.iq_stValve.i_xOpnLS);
(**Catcher Turbo pumps**)
//Special interlock due to manual valve between turbo pump and ROUGH2_GPI2
DREAM_CAT1_PTM_01(i_xExtIlkOK := DREAM_ROUGH2_GPI_02.PG.rPRESS < DREAM_CAT1_PTM_01.iq_stPTM.rBackingPressureSP AND DREAM_ROUGH2_GPI_02.PG.xPRESS_OK AND
DREAM_ROUGH2_GPI_03.PG.rPRESS < DREAM_CAT1_PTM_01.iq_stPTM.rBackingPressureSP AND DREAM_ROUGH2_GPI_03.PG.xPRESS_OK AND
DREAM_ROUGH2_VRC_02.i_xOpnLS);
DREAM_CAT2_PTM_01(i_xExtIlkOK := DREAM_ROUGH2_GPI_03.PG.rPRESS < DREAM_CAT2_PTM_01.iq_stPTM.rBackingPressureSP AND DREAM_ROUGH2_GPI_03.PG.xPRESS_OK AND
DREAM_ROUGH2_VRC_02.iq_stValve.i_xOpnLS);
(**ROUGHING SECTION TURBO BOOSTER PUMPS**)
DREAM_ROUGH2_PTM_01(i_xExtIlkOK := DREAM_ROUGH2_GPI_02.PG.rPRESS < DREAM_ROUGH2_PTM_01.iq_stPTM.rBackingPressureSP AND DREAM_ROUGH2_GPI_02.PG.xPRESS_OK AND
DREAM_ROUGH2_VRC_01.iq_stValve.i_xOpnLS);
DREAM_ROUGH2_PTM_02(i_xExtIlkOK := DREAM_ROUGH2_GPI_02.PG.rPRESS < DREAM_ROUGH2_PTM_02.iq_stPTM.rBackingPressureSP AND DREAM_ROUGH2_GPI_02.PG.xPRESS_OK AND
DREAM_ROUGH2_VRC_02.iq_stValve.i_xOpnLS);
DREAM_ROUGH2_PTM_03(i_xExtIlkOK := DREAM_ROUGH2_GPI_02.PG.rPRESS < DREAM_ROUGH2_PTM_03.iq_stPTM.rBackingPressureSP AND DREAM_ROUGH2_GPI_02.PG.xPRESS_OK AND
DREAM_ROUGH2_VRC_01.iq_stValve.i_xOpnLS);
bAllTurboPumpRunning := DREAM_NC_PTM_01.iq_stPTM.eState = E_PumpState.pumpRUNNING AND
DREAM_NC_PTM_02.iq_stPTM.eState = E_PumpState.pumpRUNNING AND
DREAM_DP1_PTM_01.iq_stPTM.eState = E_PumpState.pumpRUNNING AND
DREAM_DP2_PTM_01.iq_stPTM.eState = E_PumpState.pumpRUNNING AND
DREAM_DP3_PTM_01.iq_stPTM.eState = E_PumpState.pumpRUNNING AND
DREAM_MC_PTM_01.iq_stPTM.eState = E_PumpState.pumpRUNNING AND
DREAM_MC_PTM_02.iq_stPTM.eState = E_PumpState.pumpRUNNING AND
DREAM_CAT1_PTM_01.iq_stPTM.eState = E_PumpState.pumpRUNNING AND
DREAM_CAT2_PTM_01.iq_stPTM.eState = E_PumpState.pumpRUNNING AND
DREAM_ROUGH2_PTM_01.iq_stPTM.eState = E_PumpState.pumpRUNNING AND
DREAM_ROUGH2_PTM_02.iq_stPTM.eState = E_PumpState.pumpRUNNING;
tAllTurboPumpTOF(IN := bAllTurboPumpRunning, PT := tAllTurboPumpDelayTime);
bDREAM_TURBOS_ALL_AtSpd := tAllTurboPumpTOF.Q;
bMCPumpsRunning := DREAM_DP1_PTM_01.iq_stPTM.eState = E_PumpState.pumpRUNNING AND
DREAM_DP2_PTM_01.iq_stPTM.eState = E_PumpState.pumpRUNNING AND
DREAM_DP3_PTM_01.iq_stPTM.eState = E_PumpState.pumpRUNNING AND
DREAM_MC_PTM_01.iq_stPTM.eState = E_PumpState.pumpRUNNING AND
DREAM_MC_PTM_02.iq_stPTM.eState = E_PumpState.pumpRUNNING AND
DREAM_ROUGH2_PTM_01.iq_stPTM.eState = E_PumpState.pumpRUNNING AND
DREAM_ROUGH2_PTM_02.iq_stPTM.eState = E_PumpState.pumpRUNNING;
bCATPumpsRunning := DREAM_CAT1_PTM_01.iq_stPTM.eState = E_PumpState.pumpRUNNING AND
DREAM_CAT2_PTM_01.iq_stPTM.eState = E_PumpState.pumpRUNNING;
(*********SERIAL COMMUNICATION**********)
(*Pfeiffer pumps at Gas Injection*)
//DREAM_NC_PTM_01
(*Assign adresses to the pfeiffer controllers connected to this serial terminal*)
stPfeiffer_CTRL_DREAM_NC_PTM_01[1].iSerialAddress:= 1;
stPfeiffer_CTRL_DREAM_NC_PTM_01[1].xEnableComm:= TRUE;
(*Instanitate the Function block for serial communication with Pfeiffer*)
fbPfeifferCom_DREAM_NC_PTM_01(astPfeifferControl:= stPfeiffer_CTRL_DREAM_NC_PTM_01,
astPfeifferStatus:= stPfeiffer_RBK_DREAM_NC_PTM_01,
SerialRXBuffer:= SerialRXBuffer_DREAM_NC_PTM_01,
SerialTXBuffer:= SerialTXBuffer_DREAM_NC_PTM_01);
(*Copy Status Pv's into the PTM structure*)
DREAM_NC_PTM_01.M_Serial_IO(st_Pfeiffer_RBK:= stPfeiffer_RBK_DREAM_NC_PTM_01[1],
st_Pfeiffer_CTRL:= stPfeiffer_CTRL_DREAM_NC_PTM_01[1]);
//DREAM_NC_PTM_02
stPfeiffer_CTRL_DREAM_NC_PTM_02[1].iSerialAddress:= 1;
stPfeiffer_CTRL_DREAM_NC_PTM_02[1].xEnableComm:= TRUE;
fbPfeifferCom_DREAM_NC_PTM_02(astPfeifferControl:= stPfeiffer_CTRL_DREAM_NC_PTM_02,
astPfeifferStatus:= stPfeiffer_RBK_DREAM_NC_PTM_02,
SerialRXBuffer:= SerialRXBuffer_DREAM_NC_PTM_02,
SerialTXBuffer:= SerialTXBuffer_DREAM_NC_PTM_02);
DREAM_NC_PTM_02.M_Serial_IO(st_Pfeiffer_RBK:= stPfeiffer_RBK_DREAM_NC_PTM_02[1],
st_Pfeiffer_CTRL:= stPfeiffer_CTRL_DREAM_NC_PTM_02[1]);
//DREAM_DP1_PTM_01
stPfeiffer_CTRL_DREAM_DP1_PTM_01[1].iSerialAddress:= 1;
stPfeiffer_CTRL_DREAM_DP1_PTM_01[1].xEnableComm:= TRUE;
fbPfeifferCom_DREAM_DP1_PTM_01(astPfeifferControl:= stPfeiffer_CTRL_DREAM_DP1_PTM_01,
astPfeifferStatus:= stPfeiffer_RBK_DREAM_DP1_PTM_01,
SerialRXBuffer:= SerialRXBuffer_DREAM_DP1_PTM_01,
SerialTXBuffer:= SerialTXBuffer_DREAM_DP1_PTM_01);
DREAM_DP1_PTM_01.M_Serial_IO(st_Pfeiffer_RBK:= stPfeiffer_RBK_DREAM_DP1_PTM_01[1],
st_Pfeiffer_CTRL:= stPfeiffer_CTRL_DREAM_DP1_PTM_01[1]);
(*Leybold pumps at Gas Injection*)
//DREAM_DP2_PTM_01
(*Instanitate the Function block for serial communication with TD20 controller*)
fbTD20Com_DREAM_DP2_PTM_01(SerialRXBuffer:= SerialRXBuffer_DREAM_DP2_PTM_01,
SerialTXBuffer:= SerialTXBuffer_DREAM_DP2_PTM_01,
astTD20Status=> stTD20_RBK_DREAM_DP2_PTM_01);
(*Copy Status Pv's into the PTM structure*)
DREAM_DP2_PTM_01.M_Serial_IO(i_st_TD20_RBK:= stTD20_RBK_DREAM_DP2_PTM_01);
//DREAM_DP3_PTM_01
fbTD20Com_DREAM_DP3_PTM_01(SerialRXBuffer:= SerialRXBuffer_DREAM_DP3_PTM_01,
SerialTXBuffer:= SerialTXBuffer_DREAM_DP3_PTM_01,
astTD20Status=> stTD20_RBK_DREAM_DP3_PTM_01);
DREAM_DP3_PTM_01.M_Serial_IO(i_st_TD20_RBK:= stTD20_RBK_DREAM_DP3_PTM_01);
(*Leybold pumps at Main Chamber*)
//DREAM_MC_PTM_01
fbTD20Com_DREAM_MC_PTM_01(SerialRXBuffer:= SerialRXBuffer_DREAM_MC_PTM_01,
SerialTXBuffer:= SerialTXBuffer_DREAM_MC_PTM_01,
astTD20Status=> stTD20_RBK_DREAM_MC_PTM_01);
DREAM_MC_PTM_01.M_Serial_IO(stTD20_RBK_DREAM_MC_PTM_01);
//DREAM_MC_PTM_02
fbTD20Com_DREAM_MC_PTM_02(SerialRXBuffer:= SerialRXBuffer_DREAM_MC_PTM_02,
SerialTXBuffer:= SerialTXBuffer_DREAM_MC_PTM_02,
astTD20Status=> stTD20_RBK_DREAM_MC_PTM_02);
DREAM_MC_PTM_02.M_Serial_IO(stTD20_RBK_DREAM_MC_PTM_02);
(*Leybold pumps at Catcher*)
//DREAM_CAT1_PTM_01 (TD400)
fbTD400SerialIO_DREAM_CAT1_PTM_01(iq_stPTM := DREAM_CAT1_PTM_01.iq_stPtm,
iq_stTD400Control := stTD400_CTRL_DREAM_CAT1_PTM_01,
iq_stTD400Status := stTD400_RBK_DREAM_CAT1_PTM_01);
fbTD400Com_DREAM_CAT1_PTM_01(SerialRXBuffer := SerialRXBuffer_DREAM_CAT1_PTM_01,
SerialTXBuffer := SerialTXBuffer_DREAM_CAT1_PTM_01,
stTD400Control := stTD400_CTRL_DREAM_CAT1_PTM_01,
stTD400Status => stTD400_RBK_DREAM_CAT1_PTM_01);
//DREAM_CAT1_PTM_01.M_Serial_IO(stTD400_RBK_DREAM_CAT1_PTM_01);
//DREAM_CAT2_PTM_01 (TD400)
fbTD400SerialIO_DREAM_CAT2_PTM_01(iq_stPTM := DREAM_CAT2_PTM_01.iq_stPtm,
iq_stTD400Control := stTD400_CTRL_DREAM_CAT2_PTM_01,
iq_stTD400Status := stTD400_RBK_DREAM_CAT2_PTM_01);
fbTD400Com_DREAM_CAT2_PTM_01(SerialRXBuffer := SerialRXBuffer_DREAM_CAT2_PTM_01,
SerialTXBuffer := SerialTXBuffer_DREAM_CAT2_PTM_01,
stTD400Control := stTD400_CTRL_DREAM_CAT2_PTM_01,
stTD400Status => stTD400_RBK_DREAM_CAT2_PTM_01);
//DREAM_CAT2_PTM_01.M_Serial_IO(stTD400_RBK_DREAM_CAT2_PTM_01);
(*Leybold pump-roughing section-booster pump*)
//DREAM_ROUGH2_PTM_01 (TD400)
fbTD400SerialIO_DREAM_ROUGH2_PTM_01(iq_stPTM := DREAM_ROUGH2_PTM_01.iq_stPtm,
iq_stTD400Control := stTD400_CTRL_DREAM_ROUGH2_PTM_01,
iq_stTD400Status := stTD400_RBK_DREAM_ROUGH2_PTM_01);
fbTD400Com_DREAM_ROUGH2_PTM_01(SerialRXBuffer := SerialRXBuffer_DREAM_ROUGH2_PTM_01,
SerialTXBuffer := SerialTXBuffer_DREAM_ROUGH2_PTM_01,
stTD400Control := stTD400_CTRL_DREAM_ROUGH2_PTM_01,
stTD400Status => stTD400_RBK_DREAM_ROUGH2_PTM_01);
//DREAM_ROUGH2_PTM_01.M_Serial_IO(stTD400_RBK_DREAM_ROUGH2_PTM_01);
//DREAM_ROUGH2_PTM_02 (TD400)
fbTD400SerialIO_DREAM_ROUGH2_PTM_02(iq_stPTM := DREAM_ROUGH2_PTM_02.iq_stPtm,
iq_stTD400Control := stTD400_CTRL_DREAM_ROUGH2_PTM_02,
iq_stTD400Status := stTD400_RBK_DREAM_ROUGH2_PTM_02);
fbTD400Com_DREAM_ROUGH2_PTM_02(SerialRXBuffer := SerialRXBuffer_DREAM_ROUGH2_PTM_02,
SerialTXBuffer := SerialTXBuffer_DREAM_ROUGH2_PTM_02,
stTD400Control := stTD400_CTRL_DREAM_ROUGH2_PTM_02,
stTD400Status => stTD400_RBK_DREAM_ROUGH2_PTM_02);
//DREAM_ROUGH2_PTM_02.M_Serial_IO(stTD400_RBK_DREAM_ROUGH2_PTM_02);
//DREAM_ROUGH2_PTM_03 (TD400)
fbTD400SerialIO_DREAM_ROUGH2_PTM_03(iq_stPTM := DREAM_ROUGH2_PTM_03.iq_stPtm,
iq_stTD400Control := stTD400_CTRL_DREAM_ROUGH2_PTM_03,
iq_stTD400Status := stTD400_RBK_DREAM_ROUGH2_PTM_03);
fbTD400Com_DREAM_ROUGH2_PTM_03(SerialRXBuffer := SerialRXBuffer_DREAM_ROUGH2_PTM_03,
SerialTXBuffer := SerialTXBuffer_DREAM_ROUGH2_PTM_03,
stTD400Control := stTD400_CTRL_DREAM_ROUGH2_PTM_03,
stTD400Status => stTD400_RBK_DREAM_ROUGH2_PTM_03);
//DREAM_ROUGH2_PTM_02.M_Serial_IO(stTD400_RBK_DREAM_ROUGH2_PTM_03);
END_PROGRAM
PRG_VALVES
PROGRAM PRG_VALVES
VAR
//Rough lines VRC external interlocks
bROUGH1_VRC_01_ILK : BOOL;
bROUGH2_VRC_01_ILK : BOOL;
bROUGH2_VRC_02_ILK : BOOL;
bROUGH1_VRC_01_Override : BOOL;
bROUGH2_VRC_01_Override : BOOL;
bROUGH2_VRC_02_Override : BOOL;
bCAT1_VRC_01_ExtILK : BOOL;
bDP1_VRC_01_ILK : BOOL;
bDP1_VRC_02_ILK : BOOL;
bCAT1_VRC_01_ExtILK_US:BOOL;
bCAT1_VRC_01_ExtILK_DS:BOOL;
bCAT1_DisableDiffIlk : BOOL;
DREAM_ROUGH1_VRC_02_ILK: BOOL;
DREAM_ROUGH2_VRC_03_ILK: BOOL;
//dummy FF output to use in VGC_2S function
dummy_FFFO : FB_HardwareFFOutput;
dummy_fbArbiter1 : FB_Arbiter(1);
bROUGH1_VRC_02_Override: BOOL;
bROUGH1_VRC_02_ILK: BOOL;
bROUGH2_VRC_03_ILK: BOOL;
bROUGH2_VRC_03_Override: BOOL;
END_VAR
(**Gas Injection Valves**)
DREAM_DP1_VRC_01(i_stUSG := DREAM_NC_GPI_01.PG,
i_stDSG := DREAM_DP1_GPI_01.PG,
i_xDis_DPIlk := FALSE,
i_xEPS_OK := TRUE,
i_xPMPS_OK := TRUE,
i_xReset := FALSE,
i_xExt_OK := TRUE,
i_xOverrideMode := bSystemOverrideMode,
io_fbFFHWO := dummy_FFFO,
fbArbiter := dummy_fbArbiter1,
i_sDevName := 'DREAM-DP1-VRC-01');
//DP1_VRC_02 Interlock evaluation NOTE: Normally OPEN Valve!!
bDP1_VRC_02_ILK := DREAM_DP1_VRC_01.iq_stValve.i_xOpnLS; //Interlock changed for this valve to only gets interlocked by DREAM_DP1_VRC_01 valve
DREAM_DP1_VRC_02(i_xExtILK_OK := bDP1_VRC_02_ILK, i_xOverrideMode := bSystemOverrideMode); //Normally open valve
(**Catcher valve**)
//CAT1_VRC_01 Interlock evaluation
//Select US interlock gauge and adding pump running interlock when use Pirani
IF NOT stDREAM_MC_GHC_GAUGE.xPRESS_OK THEN
bCAT1_VRC_01_ExtILK_US := bMCPumpsRunning;
//This interlock pseudo gauge is also assigned in the PRG_Gauge, it is redanduncy and make sure change the PRG_Gauge as well if change here
stDREAM_MC_GAUGE := DREAM_MC_GPI_01.PG;
stDREAM_MC_GAUGE.sPath := 'DREAM_MC_GPI_01';
ELSE
bCAT1_VRC_01_ExtILK_US := True;
//This interlock pseudo MC gauge is also assigned in the PRG_Gauge, it is redanduncy and make sure change the PRG_Gauge as well if change here
stDREAM_MC_GAUGE := stDREAM_MC_GHC_GAUGE;
stDREAM_MC_GAUGE.sPath := 'DREAM_MC_GHC_GAUGE';
END_IF
//Select DS interlock gauge
IF NOT DREAM_CAT1_GHC_01.IG.xPRESS_OK THEN
stDREAM_CAT1_GAUGE := DREAM_ROUGH2_GPI_03.PG;
stDREAM_CAT1_GAUGE.sPath := 'DREAM_ROUGH2_GPI_03';
ELSE
stDREAM_CAT1_GAUGE := DREAM_CAT1_GHC_01.IG;
stDREAM_CAT1_GAUGE.sPath := 'DREAM_CAT1_GHC_01';
END_IF
bCAT1_VRC_01_ExtILK := bCAT1_VRC_01_ExtILK_US AND bCATPumpsRunning;
//DREAM_CAT1_VRC_01(i_xExtILK_OK := bCAT1_VRC_01_ILK, i_xOverrideMode := bSystemOverrideMode);
DREAM_CAT1_VRC_01(i_stUSG := stDREAM_MC_GAUGE,
i_stDSG := stDREAM_CAT1_GAUGE,
i_xDis_DPIlk := FALSE,
i_xEPS_OK := TRUE,
i_xPMPS_OK := TRUE,
i_xReset := FALSE,
i_xExt_OK := bCAT1_VRC_01_ExtILK,
i_xOverrideMode := bSystemOverrideMode,
io_fbFFHWO := dummy_FFFO,
fbArbiter := dummy_fbArbiter1,
i_sDevName := 'DREAM-CAT1-VRC-01');
(**Roughing Valves**)
// Dummy Valves with only limit switch feedback
ROUGH1_VRC_00(i_xExtILK_OK := TRUE);
ROUGH1_VRC_00.M_Set_OPN_SW(TRUE);
ROUGH2_VRC_00(i_xExtILK_OK := TRUE);
ROUGH2_VRC_00.M_Set_OPN_SW(TRUE);
//Interlock evaluation
// Added VRC-00 condition 1/21/26
bROUGH1_VRC_01_ILK := //DREAM_ROUGH1_GPI_01.PG.rPRESS < 5E-3 AND DREAM_ROUGH1_GPI_01.PG.xPRESS_OK AND
ROUGH1_VRC_00.M_IsOpen() AND
DREAM_ROUGH1_VFV_01.iq_stVFN.rReqPosition = 0.0 AND
DREAM_ROUGH1_VFV_02.iq_stVFN.rReqPosition = 0.0 AND
DREAM_ROUGH1_VRC_10.iq_stValve.i_xClsLS; //Interlocked with manifold roughing valve as well
bROUGH2_VRC_01_ILK := //DREAM_ROUGH2_GPI_01.PG.rPRESS < 5E-3 AND DREAM_ROUGH2_GPI_01.PG.xPRESS_OK AND
NOT ROUGH2_VRC_00.M_IsClosed() AND ROUGH2_VRC_00.M_IsOpen() AND
DREAM_ROUGH2_VFV_01.iq_stVFN.rReqPosition = 0.0 AND
DREAM_ROUGH2_VFV_02.iq_stVFN.rReqPosition = 0.0;
bROUGH2_VRC_02_ILK := //DREAM_ROUGH2_GPI_01.PG.rPRESS < 5E-3 AND DREAM_ROUGH2_GPI_01.PG.xPRESS_OK AND
NOT ROUGH2_VRC_00.M_IsClosed() AND ROUGH2_VRC_00.M_IsOpen() AND
DREAM_ROUGH2_VFV_01.iq_stVFN.rReqPosition = 0.0 AND
DREAM_ROUGH2_VFV_03.iq_stVFN.rReqPosition = 0.0;
bROUGH1_VRC_01_Override := bSystemOverrideMode AND
DREAM_ROUGH1_VFV_01.iq_stVFN.rReqPosition = 0.0 AND
DREAM_ROUGH1_VFV_02.iq_stVFN.rReqPosition = 0.0;
bROUGH2_VRC_01_Override := bSystemOverrideMode AND
DREAM_ROUGH2_VFV_01.iq_stVFN.rReqPosition = 0.0 AND
DREAM_ROUGH2_VFV_02.iq_stVFN.rReqPosition = 0.0;
bROUGH2_VRC_02_Override := bSystemOverrideMode AND
DREAM_ROUGH2_VFV_01.iq_stVFN.rReqPosition = 0.0 AND
DREAM_ROUGH2_VFV_03.iq_stVFN.rReqPosition = 0.0;
DREAM_ROUGH1_VRC_01(i_stUSG := DREAM_ROUGH1_GPI_01.PG,
i_stDSG := DREAM_ROUGH1_GPI_02.PG,
i_xDis_DPIlk := FALSE,
i_xEPS_OK := TRUE,
i_xPMPS_OK := TRUE,
i_xReset := FALSE,
i_xExt_OK := bROUGH1_VRC_01_ILK,
i_xOverrideMode := bROUGH1_VRC_01_Override,
io_fbFFHWO := dummy_FFFO,
fbArbiter := dummy_fbArbiter1,
i_sDevName := 'DREAM-ROUGH1-VRC-01');
DREAM_ROUGH2_VRC_01(i_stUSG := DREAM_ROUGH2_GPI_01.PG,
i_stDSG := DREAM_ROUGH2_GPI_02.PG,
i_xDis_DPIlk := FALSE,
i_xEPS_OK := TRUE,
i_xPMPS_OK := TRUE,
i_xReset := FALSE,
i_xExt_OK := bROUGH2_VRC_01_ILK,
i_xOverrideMode := bROUGH2_VRC_01_Override,
io_fbFFHWO := dummy_FFFO,
fbArbiter := dummy_fbArbiter1,
i_sDevName := 'DREAM-ROUGH2-VRC-01');
DREAM_ROUGH2_VRC_02(i_stUSG := DREAM_ROUGH2_GPI_01.PG,
i_stDSG := DREAM_ROUGH2_GPI_03.PG,
i_xDis_DPIlk := FALSE,
i_xEPS_OK := TRUE,
i_xPMPS_OK := TRUE,
i_xReset := FALSE,
i_xExt_OK := bROUGH2_VRC_02_ILK,
i_xOverrideMode := bROUGH2_VRC_02_Override,
io_fbFFHWO := dummy_FFFO,
fbArbiter := dummy_fbArbiter1,
i_sDevName := 'DREAM-ROUGH2-VRC-02');
(*// Added interlocks at TMO's request 1/21/2026
DREAM_ROUGH1_VRC_02_ILK := DREAM_ROUGH1_GPI_02.PG.rPRESS < 5e-3 AND DREAM_DP1_GPI_01.PG.rPRESS < 5e-3
AND DREAM_ROUGH2_VRC_03.M_IsClosed() AND DREAM_ROUGH1_VRC_01.M_IsOpen();
//DREAM_ROUGH1_VRC_02(i_xExtILK_OK := DREAM_ROUGH1_VRC_02_ILK, i_xOverrideMode := bSystemOverrideMode);
*)
// add interlock for rough1:vrc:02 request 2-26/2026
DREAM_ROUGH1_VRC_02(i_stUSG := DREAM_ROUGH1_GPI_02.PG,
i_stDSG := DREAM_DP1_GPI_01.PG,
i_xDis_DPIlk := FALSE,
i_xEPS_OK := TRUE,
i_xPMPS_OK := TRUE,
i_xReset := FALSE,
i_xExt_OK :=bROUGH1_VRC_02_ILK,
i_xOverrideMode := bROUGH1_VRC_02_Override,
io_fbFFHWO := dummy_FFFO,
fbArbiter := dummy_fbArbiter1,
i_sDevName := 'DREAM-ROUGH1-VRC-02');
bROUGH1_VRC_02_ILK := DREAM_ROUGH2_VRC_03.M_IsClosed()AND DREAM_ROUGH1_VRC_01.M_IsOpen();
//Manifold roughing valve
DREAM_ROUGH1_VRC_10(i_xExtILK_OK := DREAM_ROUGH1_VRC_01.iq_stValve.i_xClsLS, i_xOverrideMode := bSystemOverrideMode);
//Flow control valves
DREAM_ROUGH1_VFV_01(i_xExtIlkOK := DREAM_ROUGH1_VRC_01.iq_stValve.i_xClsLS);
DREAM_ROUGH1_VFV_02(i_xExtIlkOK := DREAM_ROUGH1_VRC_01.iq_stValve.i_xClsLS AND DREAM_DP1_VRC_01.iq_stValve.i_xClsLS AND
NOT DREAM_NC_PTM_01.iq_stPTM.i_xAtSpd AND
NOT DREAM_NC_PTM_02.iq_stPTM.i_xAtSpd);
DREAM_ROUGH2_VFV_01(i_xExtIlkOK := DREAM_ROUGH2_VRC_01.iq_stValve.i_xClsLS AND DREAM_ROUGH2_VRC_02.iq_stValve.i_xClsLS);
DREAM_ROUGH2_VFV_02(i_xExtIlkOK := DREAM_ROUGH2_VRC_01.iq_stValve.i_xClsLS AND
NOT DREAM_DP1_PTM_01.iq_stPTM.i_xAtSpd AND
NOT DREAM_DP2_PTM_01.iq_stPTM.i_xAtSpd AND
NOT DREAM_DP3_PTM_01.iq_stPTM.i_xAtSpd AND
NOT DREAM_MC_PTM_01.iq_stPTM.i_xAtSpd AND
NOT DREAM_MC_PTM_02.iq_stPTM.i_xAtSpd AND
NOT DREAM_ROUGH2_PTM_01.iq_stPTM.i_xAtSpd AND
NOT DREAM_ROUGH2_PTM_02.iq_stPTM.i_xAtSpd AND
NOT DREAM_CAT1_PTM_01.iq_stPTM.i_xAtSpd);
DREAM_ROUGH2_VFV_03(i_xExtIlkOK := DREAM_ROUGH2_VRC_02.iq_stValve.i_xClsLS AND DREAM_CAT1_VRC_01.iq_stValve.i_xClsLS AND
NOT DREAM_CAT2_PTM_01.iq_stPtm.i_xAtSpd);
(*// Replaced dual acting valve and added interlocks at TMO's request 1/21/2026
DREAM_ROUGH2_VRC_03_ILK := DREAM_ROUGH2_GPI_02.PG.rPRESS < 5e-3 AND DREAM_DP1_GPI_01.PG.rPRESS < 5e-3
AND DREAM_ROUGH1_VRC_02.M_IsClosed();
DREAM_ROUGH2_VRC_03(i_xExtILK_OK := DREAM_ROUGH2_VRC_03_ILK, i_xOverrideMode := bSystemOverrideMode);
*)
DREAM_ROUGH2_VRC_03(i_stUSG := DREAM_ROUGH2_GPI_01.PG,
i_stDSG := DREAM_DP1_GPI_01.PG,
i_xDis_DPIlk := FALSE,
i_xEPS_OK := TRUE,
i_xPMPS_OK := TRUE,
i_xReset := FALSE,
i_xExt_OK := bROUGH2_VRC_03_ILK,
i_xOverrideMode := bROUGH2_VRC_03_Override,
io_fbFFHWO := dummy_FFFO,
fbArbiter := dummy_fbArbiter1,
i_sDevName := 'DREAM-ROUGH2-VRC-03');
bROUGH2_VRC_03_ILK := DREAM_ROUGH1_VRC_02.M_IsClosed();
END_PROGRAM