DUTs
E_Op
TYPE E_Op :
(
INIT := 0, //Initialize system
//IDLE := 1, //State Machine IDLE, no operation
STANDBY := 1, //Monitoring IF full system under vacuum
PUMP_ALL := 2, //Full system pump down
PUMP_NC := 3, //Only Nozzle chamber pump down
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,
START := 1,
(* 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
VAR_GLOBAL
// Execute flags for vacuum system operations
{attribute 'pytmc' := '
pv: PLC:DREAM:OPERATION
io: io
'}
iq_eOperation : E_Op;
{attribute 'pytmc' := '
pv: PLC:DREAM:OPERATION:CANCEL
io: io
'}
i_bCancel : BOOL;
{attribute 'pytmc' := '
pv: PLC:DREAM:OPERATION:RESET_ERROR
io: io
'}
i_bResetError : BOOL;
{attribute 'pytmc' := '
pv: PLC:DREAM:OPERATION:BUSY
io: i
field: ZNAM NOT_BUSY
field: ONAM BUSY
'}
q_bBusy : BOOL;
{attribute 'pytmc' := '
pv: PLC:DREAM:OPERATION:ERROR
io: i
field: ZNAM OK
field: ONAM ERROR
field: ZSV NO_ALARM
field: OSV MAJOR
'}
q_bError : BOOL;
{attribute 'pytmc' := '
pv: PLC:DREAM:OPERATION:MESSAGE
io: i
'}
q_sMessage : STRING(EPICS_STRING_SIZE);
END_VAR
- Related:
GVL_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#60M; // 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;
END_VAR
GVL_PLC_Interface
//{attribute 'qualified_only'}
VAR_GLOBAL
(*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;
(*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;
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;
//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;
//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;
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'}
TC_01 : FB_TempSensor;
{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'}
TC_02 : FB_TempSensor;
{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'}
TC_03 : FB_TempSensor;
{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'}
TC_04 : FB_TempSensor;
{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'}
TC_05 : FB_TempSensor;
{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'}
TC_06 : FB_TempSensor;
{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'}
TC_07 : FB_TempSensor;
{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'}
TC_08 : FB_TempSensor;
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;
(*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 hot cathode gauge structure - updated based on which channel selected
stDREAM_MC_GHC : 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;
(*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;
(*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;
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;
(*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;
//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;
{attribute 'pytmc' := '
pv: PLC:DREAM:HV_MIN_PRESS
io: i
'}
fHighVoltageMinPressure : REAL := 1e-05; (*Hard coded High voltage Minimum Enable Pressure*)
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_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;
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_GHC.rPRESS < AT_VAC_SP AND GVL_VAC_GAUGES.stDREAM_MC_GHC.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_AtVacuum
FUNCTION_BLOCK FB_AtVacuum EXTENDS FB_Operation
VAR_INPUT
END_VAR
VAR_OUTPUT
END_VAR
VAR
END_VAR
SUPER^(iq_sMessageBuffer := iq_sMessageBuffer);
CASE eStep OF
E_OpStep.IDLE: // Do nothing
E_OpStep.START: // Start monitoring main chamber vacuum
IF NOT (F_AllPumpsRunning() AND F_PressAtVacSP()) THEN // add case if already vented to just cancel operation
M_RunTimeoutTimer(TURBOS_NOT_RUNNING_TIMEOUT);
M_SetMessage('Vacuum lost, 10 min timer started');
IF M_TimeoutExpired() THEN
M_FatalError('Vacuum not restored, venting started');
END_IF
ELSE
M_ResetTimeoutTimer(); //reset timer if pump restarted or gauge restarted and vaccum ok
M_SetMessage('MC Vacuum OK');
END_IF
ELSE
M_FatalError('Operation is in invalid state');
END_CASE
END_FUNCTION_BLOCK
FB_Operation
FUNCTION_BLOCK FB_Operation
VAR_INPUT
i_bExecute : BOOL; // Flag that indicates the operation should be ran
i_bCancel : BOOL; // Cancel operation input signal
END_VAR
VAR_IN_OUT
iq_sMessageBuffer : STRING(EPICS_STRING_SIZE); // Human readable description of the current step
END_VAR
VAR_OUTPUT
q_bError : BOOL; // Whether a fatal error was encountered
q_bBusy : BOOL; // Whether the current operation is executing
END_VAR
VAR
bCancel : BOOL; // Saved cancel operation signal
bDeferCancel : BOOL; // Setting to True prevents operation from being immediatly cancelled with i_bCancel. Resets to FALSE after operation finishes
eStep : E_OpStep := E_OpStep.IDLE; // The current operation step
fbTimeoutTimer : TON; // Timer used for tracking operation timeouts
END_VAR
IF eStep = E_OpStep.IDLE AND i_bExecute = TRUE THEN
// Start operation
eStep := E_OpStep.START;
q_bBusy := TRUE;
M_ResetError();
END_IF
(* Save the input i_bCancel signal since cancelling can take multiple cycles *)
IF i_bCancel THEN
bCancel := TRUE;
END_IF
(* Allow operation to be cancelled from an input signal.
The cancel input signal can be deferred by the operation if the
operation is not at a good point to finish cancelling. *)
IF eStep <> E_OpStep.IDLE AND NOT bDeferCancel AND bCancel THEN
M_Cancel();
END_IF
IF M_TimeoutExpired() THEN // If a timeout has expired, trigger a fatal error
M_FatalError('Timeout expired');
END_IF
END_FUNCTION_BLOCK
METHOD PROTECTED M_Cancel
VAR_INPUT
END_VAR
M_ResetTimeoutTimer();
M_SetMessage('Operation canceled');
eStep := E_OpStep.IDLE;
q_bBusy := FALSE;
bCancel := FALSE;
M_DeferCancel(FALSE);
END_METHOD
// Defer cancel signals until a later time
METHOD PROTECTED M_DeferCancel
VAR_INPUT
i_bDefer : BOOL;
END_VAR
bDeferCancel := i_bDefer;
END_METHOD
METHOD PROTECTED M_FatalError
VAR_INPUT
i_ErrorMessage : STRING;
END_VAR
M_ResetTimeoutTimer();
M_SetMessage(i_ErrorMessage);
eStep := E_OpStep.IDLE;
q_bError := TRUE;
q_bBusy := FALSE;
bCancel := FALSE;
M_DeferCancel(FALSE);
END_METHOD
METHOD PROTECTED M_Finish
VAR_INPUT
END_VAR
M_ResetTimeoutTimer();
M_SetMessage('Operation finished');
eStep := E_OpStep.IDLE;
q_bBusy := FALSE;
bCancel := FALSE;
M_DeferCancel(FALSE);
END_METHOD
METHOD PROTECTED M_ResetError
VAR_INPUT
END_VAR
q_bError := FALSE;
END_METHOD
METHOD PROTECTED M_ResetTimeoutTimer
VAR_INPUT
END_VAR
fbTimeoutTimer(IN := FALSE);
END_METHOD
METHOD PROTECTED M_RunTimeoutTimer
VAR_INPUT
i_tTime : TIME; // How long the timer should run before signalling a timeout
END_VAR
fbTimeoutTimer(IN := TRUE, PT := i_tTime);
END_METHOD
METHOD PROTECTED M_SetMessage
VAR_INPUT
i_sMessage : STRING(EPICS_STRING_SIZE);
END_VAR
iq_sMessageBuffer := i_sMessage;
END_METHOD
METHOD PROTECTED M_TimeoutExpired : BOOL
VAR_INPUT
END_VAR
fbTimeoutTimer(); // Advance timer
M_TimeoutExpired := fbTimeoutTimer.Q;
END_METHOD
- Related:
FB_VentMcCat
FUNCTION_BLOCK FB_VentMcCat EXTENDS FB_Operation
VAR_INPUT
END_VAR
VAR_OUTPUT
END_VAR
VAR
fRough2VFV2Position : REAL;
fRough2VFV3Position : REAL;
END_VAR
VAR CONSTANT
VFV_MAX_POSITION : INT := 100;
END_VAR
SUPER^(iq_sMessageBuffer := iq_sMessageBuffer);
// Think which steps should not be permitted to cancel, figure out during testing
CASE eStep OF
E_OpStep.IDLE: // Do nothing
E_OpStep.START: // Close beamline window valves //Defer cancel if this procedure should not be cancelled from user!
// Close window beamline valves
GVL_PLC_Interface.bCLOSE_TMO_MR5K4_VWC := TRUE;
GVL_PLC_Interface.bCLOSE_TMO_TM2K4_VWC := TRUE;
M_SetMessage('Closing TMO window valves');
M_RunTimeoutTimer(VALVE_TIMEOUT);
IF (GVL_PLC_Interface.bTMO_MR5K4_VWC_CLOSED_LS AND GVL_PLC_Interface.bTMO_TM2K4_VWC_CLOSED_LS) THEN
M_SetMessage('Window valves closed');
M_ResetTimeoutTimer();
eStep := E_OpStep.VMCAS_CLOSE_ISOLATION_VALVES;
ELSIF M_TimeoutExpired() THEN
M_SetMessage('Closing window valve - timeout');
M_ResetTimeoutTimer();
eStep := E_OpStep.VMCAS_CLOSE_ISOLATION_VALVES;
END_IF
E_OpStep.VMCAS_CLOSE_ISOLATION_VALVES: // Close isolation valves (DP1:VRC:01, CAT1:VRC:01), Bypas valve DP1:VRC:01 shall open
DREAM_DP1_VRC_01.M_Set_OPN_SW(FALSE);
DREAM_CAT1_VRC_01.M_Set_OPN_SW(FALSE);
M_SetMessage('Close Isolation valves');
M_RunTimeoutTimer(VALVE_TIMEOUT);
IF DREAM_DP1_VRC_01.iq_stValve.i_xClsLS AND DREAM_CAT1_VRC_01.iq_stValve.i_xClsLS AND DREAM_DP1_VRC_02.iq_stValve.i_xOpnLS THEN
M_SetMessage('Isolation valves closed, bypass open');
M_ResetTimeoutTimer();
eStep := E_OpStep.VMCAS_STOP_TURBO_PUMPS;
ELSIF M_TimeoutExpired() THEN
M_FatalError('Moving isolation,bypass valves-timeout'); // Raise the error, don't move forward with stopping pumps etc.
END_IF
E_OpStep.VMCAS_STOP_TURBO_PUMPS: // Stop MC and CAT Turbo pumps
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);
M_SetMessage('Stopping MC and CAT turbos');
eStep := E_OpStep.VMCAS_CLOSE_ROUGH_VALVES;
E_OpStep.VMCAS_CLOSE_ROUGH_VALVES: // Close roughing valves
DREAM_ROUGH2_VRC_01.M_Set_OPN_SW(FALSE);
DREAM_ROUGH2_VRC_02.M_Set_OPN_SW(FALSE);
M_SetMessage('Close Roughing valves');
M_RunTimeoutTimer(VALVE_TIMEOUT);
IF DREAM_ROUGH2_VRC_01.iq_stValve.i_xClsLS AND DREAM_ROUGH2_VRC_02.iq_stValve.i_xClsLS THEN
M_SetMessage('Roughing valves closed');
M_ResetTimeoutTimer();
eStep := E_OpStep.VMCAS_STOP_GAUGES;
ELSIF M_TimeoutExpired() THEN
M_FatalError('Moving roughing valves-timeout'); // Raise the error, don't move forward with stopping gauges etc.
END_IF
E_OpStep.VMCAS_STOP_GAUGES: // Turn off gauges // I'm thinking to move this state to before closing rough valves becasue in previos state if error is raised gauges will remain ON while pumps already stopped
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);
M_SetMessage('Turning OFF MC and CAT Gauges');
eStep := E_OpStep.VMCAS_WAIT_FOR_TURBO_PUMPS_SPIN_DOWN;
E_OpStep.VMCAS_WAIT_FOR_TURBO_PUMPS_SPIN_DOWN: // Turbos need to spin down to below 100 Hz before start venting procedure
M_RunTimeoutTimer(TURBOS_SPINDOWN_TIMEOUT); // Timeout is 60 min for now. With testing verify that 30 min is long enough to spin down or increase if needed.
M_SetMessage('Waiting for pumps to spindown');
//How should we verify if serial communication work?
IF DREAM_DP1_PTM_01.iq_stPTM.i_diCurSpd < 100 AND NOT fbSerialLineControl_DREAM_DP1_PTM_01.Error
AND DREAM_DP2_PTM_01.iq_stPTM.i_diCurSpd < 100 AND NOT fbSerialLineControl_DREAM_DP2_PTM_01.Error
AND DREAM_DP3_PTM_01.iq_stPTM.i_diCurSpd < 100 AND NOT fbSerialLineControl_DREAM_DP3_PTM_01.Error
AND DREAM_MC_PTM_01.iq_stPTM.i_diCurSpd < 100 AND NOT fbSerialLineControl_DREAM_MC_PTM_01.Error
AND DREAM_MC_PTM_02.iq_stPTM.i_diCurSpd < 100 AND NOT fbSerialLineControl_DREAM_MC_PTM_02.Error
AND DREAM_CAT1_PTM_01.iq_stPTM.i_diCurSpd < 100 AND NOT fbSerialLineControl_DREAM_CAT1_PTM_01.Error
AND DREAM_CAT2_PTM_01.iq_stPTM.i_diCurSpd < 100 AND NOT fbSerialLineControl_DREAM_CAT2_PTM_01.Error
AND DREAM_ROUGH2_PTM_01.iq_stPTM.i_diCurSpd < 100 AND NOT fbSerialLineControl_DREAM_ROUGH2_PTM_01.Error
AND DREAM_ROUGH2_PTM_02.iq_stPTM.i_diCurSpd < 100 AND NOT fbSerialLineControl_DREAM_ROUGH2_PTM_02.Error
THEN
M_SetMessage('Pumps below 100 Hz, start venting');
M_ResetTimeoutTimer();
eStep := E_OpStep.VMCAS_VENTING;
ELSIF M_TimeoutExpired()
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_CAT1_PTM_01.iq_stPTM.i_xAtSpd
AND NOT DREAM_CAT2_PTM_01.iq_stPTM.i_xAtSpd
AND NOT DREAM_ROUGH2_PTM_01.iq_stPTM.i_xAtSpd
AND NOT DREAM_ROUGH2_PTM_02.iq_stPTM.i_xAtSpd
THEN (*if serial communication doesn't work and not at speed*)
M_SetMessage('Pumps spindown-timeout, start venting');
M_ResetTimeoutTimer();
eStep := E_OpStep.VMCAS_VENTING;
ELSE
M_FatalError('Turbo pumps failed to spin down'); //should I add that state machine goes to error if the pumps didn't start spinning down?
END_IF
// Reset vent valve postions
fRough2VFV2Position := GVL_Constants.ROUGH2_VFV_02_INITIAL_POSITION;
fRough2VFV3Position := GVL_Constants.ROUGH2_VFV_03_INITIAL_POSITION;
E_OpStep.VMCAS_VENTING: // Venting, increase opening by X% every 2 miniutes, until at atmosphere
DREAM_ROUGH2_VFV_02.M_SetControlMode(E_VCN.ManualControl); // set manual mode for VFV valve
DREAM_ROUGH2_VFV_03.M_SetControlMode(E_VCN.ManualControl); // set manual mode for VFV valve
// Verify ATM_PRESS_ERR_RNG value with testing
IF NOT (ABS(ATM_PRESS - DREAM_DP1_GPI_01.PG.rPRESS) <= ATM_PRESS_ERR_RNG)
AND NOT (ABS(ATM_PRESS - DREAM_MC_GPI_01.PG.rPRESS) <= ATM_PRESS_ERR_RNG)
AND NOT (ABS(ATM_PRESS - DREAM_ROUGH2_GPI_02.PG.rPRESS) <= ATM_PRESS_ERR_RNG)
AND NOT (ABS(ATM_PRESS - DREAM_ROUGH2_GPI_03.PG.rPRESS) <= ATM_PRESS_ERR_RNG)
THEN
M_RunTimeoutTimer(VENTING_CYCLE);
M_SetMessage('Venting Started');
// Add check if serial communication is ok. If not ok we should only stick to change open position by 1% until venting completed?
// I think we should add range here for the speed 1-5 Hz? I think sometimes speed doesn't go all the way to 0 Hz, verify with testing
IF M_TimeoutExpired() THEN
M_ResetTimeoutTimer(); // Reset timer for next 2 min venting cycle
IF (NOT (DREAM_DP1_PTM_01.iq_stPTM.i_diCurSpd < 1) OR fbSerialLineControl_DREAM_DP1_PTM_01.Error)
AND (NOT (DREAM_DP2_PTM_01.iq_stPTM.i_diCurSpd < 1) OR fbSerialLineControl_DREAM_DP2_PTM_01.Error)
AND (NOT (DREAM_DP3_PTM_01.iq_stPTM.i_diCurSpd < 1) OR fbSerialLineControl_DREAM_DP3_PTM_01.Error)
AND (NOT (DREAM_MC_PTM_01.iq_stPTM.i_diCurSpd < 1) OR fbSerialLineControl_DREAM_MC_PTM_01.Error)
AND (NOT (DREAM_MC_PTM_02.iq_stPTM.i_diCurSpd < 1) OR fbSerialLineControl_DREAM_MC_PTM_01.Error)
AND (NOT (DREAM_CAT1_PTM_01.iq_stPTM.i_diCurSpd < 1) OR fbSerialLineControl_DREAM_CAT1_PTM_01.Error)
AND (NOT (DREAM_CAT2_PTM_01.iq_stPTM.i_diCurSpd < 1) OR fbSerialLineControl_DREAM_CAT2_PTM_01.Error)
AND (NOT (DREAM_ROUGH2_PTM_01.iq_stPTM.i_diCurSpd < 1) OR fbSerialLineControl_DREAM_ROUGH2_PTM_01.Error)
AND (NOT (DREAM_ROUGH2_PTM_02.iq_stPTM.i_diCurSpd < 1) OR fbSerialLineControl_DREAM_ROUGH2_PTM_02.Error)
THEN
IF fRough2VFV2Position < VFV_MAX_POSITION THEN
fRough2VFV2Position := fRough2VFV2Position + VFV_POSITION_STEP; // every 2 min increase open positon for 1% while pumps above 1 HZ
ELSE
fRough2VFV2Position := VFV_MAX_POSITION;
END_IF
IF fRough2VFV3Position < VFV_MAX_POSITION THEN
fRough2VFV3Position := fRough2VFV3Position + VFV_POSITION_STEP; // every 2 min increase open positon for 1% while pumps above 1 HZ
ELSE
fRough2VFV3Position := VFV_MAX_POSITION;
END_IF
ELSE
fRough2VFV2Position := VFV_MAX_POSITION; // open venting valve to max postion when pump speed reached below 1Hz
fRough2VFV3Position := VFV_MAX_POSITION; // open venting valve to max postion when pump speed reached below 1Hz
END_IF
END_IF
ELSE
M_SetMessage('Venting completed');
M_ResetTimeoutTimer();
eStep := E_OpStep.VMCAS_FINISH;
END_IF
DREAM_ROUGH2_VFV_02.M_SetReqPosition(fRough2VFV2Position); // set venting valve position
DREAM_ROUGH2_VFV_03.M_SetReqPosition(fRough2VFV3Position); // set venting valve position
E_OpStep.VMCAS_FINISH: // Finish procedure, close venting valves, reset set points for all valves, pumps etc.
DREAM_ROUGH2_VFV_02.M_SetControlMode(E_VCN.CloseValve);
DREAM_ROUGH2_VFV_03.M_SetControlMode(E_VCN.CloseValve);
// Reset vent valve postions
fRough2VFV2Position := 0;
fRough2VFV3Position := 0;
// Set the at vacuum interlocks so user can't just start opening the valves
DREAM_ROUGH2_VRC_01.M_SetAtVacSP(VALVE_INTERLOCK_SP);
DREAM_ROUGH2_VRC_02.M_SetAtVacSP(VALVE_INTERLOCK_SP);
// Set the at vacuum interlocks so user can't just start turning on pumps
DREAM_DP1_PTM_01.M_SetBackingSP(PTM_INTERLOCK_SP);
DREAM_DP2_PTM_01.M_SetBackingSP(PTM_INTERLOCK_SP);
DREAM_DP3_PTM_01.M_SetBackingSP(PTM_INTERLOCK_SP);
DREAM_MC_PTM_01.M_SetBackingSP(PTM_INTERLOCK_SP);
DREAM_MC_PTM_02.M_SetBackingSP(PTM_INTERLOCK_SP);
DREAM_CAT1_PTM_01.M_SetBackingSP(PTM_INTERLOCK_SP);
DREAM_CAT2_PTM_01.M_SetBackingSP(PTM_INTERLOCK_SP);
DREAM_ROUGH2_PTM_01.M_SetBackingSP(PTM_INTERLOCK_SP);
DREAM_ROUGH2_PTM_02.M_SetBackingSP(PTM_INTERLOCK_SP);
// Remove command to close beamline window valves
GVL_PLC_Interface.bCLOSE_TMO_MR5K4_VWC := FALSE;
GVL_PLC_Interface.bCLOSE_TMO_TM2K4_VWC := FALSE;
M_Finish();
ELSE
M_FatalError('Operation is in invalid state');
END_CASE
END_FUNCTION_BLOCK
MAIN
PROGRAM MAIN
VAR
fbLogHandler : FB_LogHandler;
END_VAR
fbLogHandler();
PRG_ECAT_CHECK();
PRG_GAUGES();
PRG_VALVES();
PRG_TURBO_PUMPS();
PRG_HV_ILK();
PRG_COIL_PS_ILK();
PRG_TC();
END_PROGRAM
PRG_AUTOMATION
PROGRAM PRG_AUTOMATION
VAR
eCurrOp : E_Op; // Currently running operation
fbVentMcCat : FB_VentMcCat;
fbAtVacuum : FB_AtVacuum;
END_VAR
(* Run operations, but don't start any new operations if another operation is still running or error is present *)
// Reset error
IF GVL_Automation.i_bResetError THEN
GVL_Automation.q_bError := FALSE;
GVL_Automation.i_bResetError := FALSE;
END_IF
// Only start new operations if the system is NOT busy with another operation and transtion to new state is valid and no error present
IF NOT GVL_Automation.q_bBusy AND NOT GVL_Automation.q_bError THEN
IF F_IsValidStateTransition(eCurrOp, GVL_Automation.iq_eOperation) THEN
eCurrOp := GVL_Automation.iq_eOperation;
ELSE
GVL_Automation.q_sMessage := 'Invalid state transition';
//GVL_Automation.q_bError := TRUE;
END_IF
END_IF
// Execute selected operation
CASE eCurrOp OF
E_Op.INIT: // State Machine INIT // do nothing for now, can be used in the future if needed
eCurrOp := E_Op.STANDBY;
GVL_Automation.q_sMessage := 'Initialization completed';
E_Op.STANDBY: // Monitoring IF full system under vacuum
GVL_Automation.q_bBusy := FALSE;
(*IF F_AllPumpsRunning() AND F_PressAtVacSP() AND NOT GVL_Automation.q_bError THEN // clear the error before start monitoring again
eCurrOp := E_Op.AT_VACUUM;
GVL_Automation.q_bBusy := TRUE; // Extend for one cycle so the state doesn't get overrired
GVL_Automation.q_sMessage := 'MC At Vacuum';
END_IF*)
E_Op.PUMP_ALL: // Full system pump down
GVL_Automation.q_bBusy := FALSE; //do nothing for now, will be implemented later. When pumping down procedure ends go to xxxxxx state
E_Op.PUMP_NC: // Only Nozzle chamber pump down
GVL_Automation.q_bBusy := FALSE; // do nothing for now, will be implemented later. When pumping down procedure of NC only ends go back to Standby state
E_Op.AT_VACUUM: // Monitor if system is At Vacuum (pumps running and pressure below SP), if vaccum event occurs vent full system
fbAtVacuum(
i_bExecute := TRUE,
i_bCancel := GVL_Automation.i_bCancel,
iq_sMessageBuffer := GVL_Automation.q_sMessage,
q_bBusy => GVL_Automation.q_bBusy,
q_bError => GVL_Automation.q_bError
);
IF GVL_Automation.q_bError THEN // Vent MC and CAT IF Vacuum fault on main chamber detected
eCurrOp := E_Op.VENT_MC_CAT;
GVL_Automation.q_bBusy := TRUE; // Extend for one cycle so the eCurrOp doesn't get overried
END_IF
E_Op.VENT_ALL: // Vent full system
GVL_Automation.q_bBusy := FALSE; // do nothing for now, will be implemented later
E_Op.VENT_NC: // Vent nozzle chamber only
GVL_Automation.q_bBusy := FALSE; // do nothing for now, will be implemented later
E_Op.VENT_MC_CAT: // Vent Main Chamber + Catcher
(*fbVentMcCat(
i_bExecute := TRUE,
i_bCancel := GVL_Automation.i_bCancel,
iq_sMessageBuffer := GVL_Automation.q_sMessage,
q_bBusy => GVL_Automation.q_bBusy,
q_bError => GVL_Automation.q_bError
);*)
GVL_Automation.q_bBusy := FALSE; //temporary before enabling code above
E_Op.VENT_CAT: // Vent catcher only
GVL_Automation.q_bBusy := FALSE; // do nothing for now, will be implemented later
ELSE // Selected unimplemented operation
GVL_Automation.q_sMessage := 'Unimplemented operation';
GVL_Automation.q_bBusy := FALSE;
GVL_Automation.q_bError := TRUE;
END_CASE
// If all operation have finished then go back to standby
IF NOT GVL_Automation.q_bBusy THEN
eCurrOp := E_Op.STANDBY;
END_IF
// Set output operation to whatever is ACTAULLY currently running
GVL_Automation.iq_eOperation := eCurrOp;
GVL_Automation.i_bCancel := FALSE; // Reset cancel flag
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
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=> );
END_PROGRAM
PRG_ECAT_CHECK
PROGRAM PRG_ECAT_CHECK
VAR
//EtherCAT bridge error
bEcatBridge_COM_ERROR : BOOL;
END_VAR
(*EtherCAT Bridge Status*)
//bEcatBridge_COM_ERROR = TRUE means that there is an EtherCAT Bridge Communication Error.
bEcatBridge_COM_ERROR := (bEcatBridge_TxPDO_state OR bEcatBridge_External_device_not_connected OR bEcatBridge_WcState);
bOnBeamline := (bEcatBridge_COM_ERROR = FALSE) AND (sHUTCH_PLC_NAME = 'TMO');
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);
//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 structure based on CH selected by controller and data to TMO Beamline Vacuum PLC
IF DREAM_MC_GHC.M_IsCh1Selected() THEN
GVL_VAC_GAUGES.stDREAM_MC_GHC := 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
GVL_VAC_GAUGES.stDREAM_MC_GHC := 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
(**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*)
GVL_PLC_Interface.bHVSafteyLoopEnable := (GVL_VAC_GAUGES.stDREAM_MC_GHC.rPRESS <= fHighVoltageMinPressure AND GVL_VAC_GAUGES.stDREAM_MC_GHC.xPRESS_OK);
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_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_01.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_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;
(*********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_01 (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);
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_ILK : BOOL;
bDP1_VRC_01_ILK : BOOL;
bDP1_VRC_02_ILK : BOOL;
//dummy FF output to use in VGC_2S function
dummy_FFFO : FB_HardwareFFOutput;
dummy_fbArbiter1 : FB_Arbiter(1);
END_VAR
(**Gas Injection Valves**)
//DP1_VRC_02 Interlock evaluation
//bDP1_VRC_01_ILK := DREAM_NC_GCC_01.IG.xPRESS_OK AND DREAM_NC_GCC_01.IG.rPRESS < 1.0E-5 AND
// DREAM_DP1_GHC_01.IG.xPRESS_OK AND DREAM_DP1_GHC_01.IG.rPRESS < 1.0E-5;
//DREAM_DP1_VRC_01(i_xExtILK_OK := bDP1_VRC_01_ILK, i_xOverrideMode := bSystemOverrideMode);
DREAM_DP1_VRC_01(i_stUSG := DREAM_NC_GCC_01.IG,
i_stDSG := DREAM_DP1_GHC_01.IG,
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 AND
DREAM_NC_GCC_01.IG.xPRESS_OK AND DREAM_DP1_GHC_01.IG.xPRESS_OK AND
ABS(DREAM_NC_GCC_01.IG.rPRESS - DREAM_DP1_GHC_01.IG.rPRESS) < 1.0E-4; //temporary changed to 1e-4
DREAM_DP1_VRC_02(i_xExtILK_OK := bDP1_VRC_02_ILK, i_xOverrideMode := bSystemOverrideMode); //Normally open valve
(**Catcher valve**)
//CAT1_VRC_01 Interlock evaluation
bCAT1_VRC_01_ILK := //((DREAM_MC_GHC.IG_CH1.xPRESS_OK AND DREAM_MC_GHC.IG_CH1.rPRESS < 1.0E-8) OR (DREAM_MC_GHC.IG_CH2.xPRESS_OK AND DREAM_MC_GHC.IG_CH2.rPRESS < 1.0E-8)) AND
//DREAM_CAT1_GHC_01.IG.xPRESS_OK AND DREAM_CAT1_GHC_01.IG.rPRESS < 1.0E-8 AND
DREAM_CAT1_PTM_01.iq_stPTM.eState = E_PumpState.pumpRUNNING AND
DREAM_CAT2_PTM_01.iq_stPTM.eState = E_PumpState.pumpRUNNING;
//DREAM_CAT1_VRC_01(i_xExtILK_OK := bCAT1_VRC_01_ILK, i_xOverrideMode := bSystemOverrideMode);
DREAM_CAT1_VRC_01(i_stUSG := GVL_VAC_GAUGES.stDREAM_MC_GHC,
i_stDSG := DREAM_CAT1_GHC_01.IG,
i_xDis_DPIlk := FALSE,
i_xEPS_OK := TRUE,
i_xPMPS_OK := TRUE,
i_xReset := FALSE,
i_xExt_OK := bCAT1_VRC_01_ILK,
i_xOverrideMode := bSystemOverrideMode,
io_fbFFHWO := dummy_FFFO,
fbArbiter := dummy_fbArbiter1,
i_sDevName := 'DREAM-CAT1-VRC-01');
(**Roughing Valves**)
//Interlock evaluation
bROUGH1_VRC_01_ILK := //DREAM_ROUGH1_GPI_01.PG.rPRESS < 5E-3 AND DREAM_ROUGH1_GPI_01.PG.xPRESS_OK 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
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
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');
//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);
END_PROGRAM
- Related: