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
Related:

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
Related:

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
Related:

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
Related:

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: