DUTs

GVLs

GVL_COM

//{attribute 'qualified_only'}
VAR_GLOBAL
    // Define COM Ports/Buffers incl. library Tc2_SerialCom
    SerialRXBuffer_MRCO_MAIN_PTM_01 : ComBuffer;
    SerialTXBuffer_MRCO_MAIN_PTM_01 : ComBuffer;
    SerialRXBuffer_MRCO_MAIN_PTM_02 : ComBuffer;
    SerialTXBuffer_MRCO_MAIN_PTM_02 : ComBuffer;
    SerialRXBuffer_MRCO_MAIN_PTM_03 : ComBuffer;
    SerialTXBuffer_MRCO_MAIN_PTM_03 : ComBuffer;
    SerialRXBuffer_MRCO_MAIN_PTM_04 : ComBuffer;
    SerialTXBuffer_MRCO_MAIN_PTM_04 : ComBuffer;
    SerialRXBuffer_MRCO_ROUGH_PTM_01 : ComBuffer;
    SerialTXBuffer_MRCO_ROUGH_PTM_01 : ComBuffer;

    // Serial Terminal
    fbSerialLineControl_MRCO_MAIN_PTM_01 : SerialLineControl;
    fbSerialLineControl_MRCO_MAIN_PTM_02 : SerialLineControl;
    fbSerialLineControl_MRCO_MAIN_PTM_03 : SerialLineControl;
    fbSerialLineControl_MRCO_MAIN_PTM_04 : SerialLineControl;
    fbSerialLineControl_MRCO_ROUGH_PTM_01 : SerialLineControl;

    //SERIAL IO
    {attribute      'TcLinkTo'      :=      '.Status:=TIIB[MRCO_PLC_E11_EL6002]^COM TxPDO-Map Inputs Channel 1^Status;
                                                            .D[0]:=TIIB[MRCO_PLC_E11_EL6002]^COM TxPDO-Map Inputs Channel 1^Data In 0;
                                                            .D[1]:=TIIB[MRCO_PLC_E11_EL6002]^COM TxPDO-Map Inputs Channel 1^Data In 1;
                                                            .D[2]:=TIIB[MRCO_PLC_E11_EL6002]^COM TxPDO-Map Inputs Channel 1^Data In 2;
                                                            .D[3]:=TIIB[MRCO_PLC_E11_EL6002]^COM TxPDO-Map Inputs Channel 1^Data In 3;
                                                            .D[4]:=TIIB[MRCO_PLC_E11_EL6002]^COM TxPDO-Map Inputs Channel 1^Data In 4;
                                                            .D[5]:=TIIB[MRCO_PLC_E11_EL6002]^COM TxPDO-Map Inputs Channel 1^Data In 5;
                                                            .D[6]:=TIIB[MRCO_PLC_E11_EL6002]^COM TxPDO-Map Inputs Channel 1^Data In 6;
                                                            .D[7]:=TIIB[MRCO_PLC_E11_EL6002]^COM TxPDO-Map Inputs Channel 1^Data In 7;
                                                            .D[8]:=TIIB[MRCO_PLC_E11_EL6002]^COM TxPDO-Map Inputs Channel 1^Data In 8;
                                                            .D[9]:=TIIB[MRCO_PLC_E11_EL6002]^COM TxPDO-Map Inputs Channel 1^Data In 9;
                                                            .D[10]:=TIIB[MRCO_PLC_E11_EL6002]^COM TxPDO-Map Inputs Channel 1^Data In 10;
                                                            .D[11]:=TIIB[MRCO_PLC_E11_EL6002]^COM TxPDO-Map Inputs Channel 1^Data In 11;
                                                            .D[12]:=TIIB[MRCO_PLC_E11_EL6002]^COM TxPDO-Map Inputs Channel 1^Data In 12;
                                                            .D[13]:=TIIB[MRCO_PLC_E11_EL6002]^COM TxPDO-Map Inputs Channel 1^Data In 13;
                                                            .D[14]:=TIIB[MRCO_PLC_E11_EL6002]^COM TxPDO-Map Inputs Channel 1^Data In 14;
                                                            .D[15]:=TIIB[MRCO_PLC_E11_EL6002]^COM TxPDO-Map Inputs Channel 1^Data In 15;
                                                            .D[16]:=TIIB[MRCO_PLC_E11_EL6002]^COM TxPDO-Map Inputs Channel 1^Data In 16;
                                                            .D[17]:=TIIB[MRCO_PLC_E11_EL6002]^COM TxPDO-Map Inputs Channel 1^Data In 17;
                                                            .D[18]:=TIIB[MRCO_PLC_E11_EL6002]^COM TxPDO-Map Inputs Channel 1^Data In 18;
                                                            .D[19]:=TIIB[MRCO_PLC_E11_EL6002]^COM TxPDO-Map Inputs Channel 1^Data In 19;
                                                            .D[20]:=TIIB[MRCO_PLC_E11_EL6002]^COM TxPDO-Map Inputs Channel 1^Data In 20;
                                                            .D[21]:=TIIB[MRCO_PLC_E11_EL6002]^COM TxPDO-Map Inputs Channel 1^Data In 21
    '}
    stComIn_MRCO_MAIN_PTM_01        AT %I*  :       EL6inData22B;

    {attribute      'TcLinkTo'      :=      '.Ctrl:=TIIB[MRCO_PLC_E11_EL6002]^COM RxPDO-Map Outputs Channel 1^Ctrl;
                                                            .D[0]:=TIIB[MRCO_PLC_E11_EL6002]^COM RxPDO-Map Outputs Channel 1^Data Out 0;
                                                            .D[1]:=TIIB[MRCO_PLC_E11_EL6002]^COM RxPDO-Map Outputs Channel 1^Data Out 1;
                                                            .D[2]:=TIIB[MRCO_PLC_E11_EL6002]^COM RxPDO-Map Outputs Channel 1^Data Out 2;
                                                            .D[3]:=TIIB[MRCO_PLC_E11_EL6002]^COM RxPDO-Map Outputs Channel 1^Data Out 3;
                                                            .D[4]:=TIIB[MRCO_PLC_E11_EL6002]^COM RxPDO-Map Outputs Channel 1^Data Out 4;
                                                            .D[5]:=TIIB[MRCO_PLC_E11_EL6002]^COM RxPDO-Map Outputs Channel 1^Data Out 5;
                                                            .D[6]:=TIIB[MRCO_PLC_E11_EL6002]^COM RxPDO-Map Outputs Channel 1^Data Out 6;
                                                            .D[7]:=TIIB[MRCO_PLC_E11_EL6002]^COM RxPDO-Map Outputs Channel 1^Data Out 7;
                                                            .D[8]:=TIIB[MRCO_PLC_E11_EL6002]^COM RxPDO-Map Outputs Channel 1^Data Out 8;
                                                            .D[9]:=TIIB[MRCO_PLC_E11_EL6002]^COM RxPDO-Map Outputs Channel 1^Data Out 9;
                                                            .D[10]:=TIIB[MRCO_PLC_E11_EL6002]^COM RxPDO-Map Outputs Channel 1^Data Out 10;
                                                            .D[11]:=TIIB[MRCO_PLC_E11_EL6002]^COM RxPDO-Map Outputs Channel 1^Data Out 11;
                                                            .D[12]:=TIIB[MRCO_PLC_E11_EL6002]^COM RxPDO-Map Outputs Channel 1^Data Out 12;
                                                            .D[13]:=TIIB[MRCO_PLC_E11_EL6002]^COM RxPDO-Map Outputs Channel 1^Data Out 13;
                                                            .D[14]:=TIIB[MRCO_PLC_E11_EL6002]^COM RxPDO-Map Outputs Channel 1^Data Out 14;
                                                            .D[15]:=TIIB[MRCO_PLC_E11_EL6002]^COM RxPDO-Map Outputs Channel 1^Data Out 15;
                                                            .D[16]:=TIIB[MRCO_PLC_E11_EL6002]^COM RxPDO-Map Outputs Channel 1^Data Out 16;
                                                            .D[17]:=TIIB[MRCO_PLC_E11_EL6002]^COM RxPDO-Map Outputs Channel 1^Data Out 17;
                                                            .D[18]:=TIIB[MRCO_PLC_E11_EL6002]^COM RxPDO-Map Outputs Channel 1^Data Out 18;
                                                            .D[19]:=TIIB[MRCO_PLC_E11_EL6002]^COM RxPDO-Map Outputs Channel 1^Data Out 19;
                                                            .D[20]:=TIIB[MRCO_PLC_E11_EL6002]^COM RxPDO-Map Outputs Channel 1^Data Out 20;
                                                            .D[21]:=TIIB[MRCO_PLC_E11_EL6002]^COM RxPDO-Map Outputs Channel 1^Data Out 21
    '}
    stComOut_MRCO_MAIN_PTM_01        AT %Q*  :       EL6outData22B;

    {attribute      'TcLinkTo'      :=      '.Status:=TIIB[MRCO_PLC_E11_EL6002]^COM TxPDO-Map Inputs Channel 2^Status;
                                                            .D[0]:=TIIB[MRCO_PLC_E11_EL6002]^COM TxPDO-Map Inputs Channel 2^Data In 0;
                                                            .D[1]:=TIIB[MRCO_PLC_E11_EL6002]^COM TxPDO-Map Inputs Channel 2^Data In 1;
                                                            .D[2]:=TIIB[MRCO_PLC_E11_EL6002]^COM TxPDO-Map Inputs Channel 2^Data In 2;
                                                            .D[3]:=TIIB[MRCO_PLC_E11_EL6002]^COM TxPDO-Map Inputs Channel 2^Data In 3;
                                                            .D[4]:=TIIB[MRCO_PLC_E11_EL6002]^COM TxPDO-Map Inputs Channel 2^Data In 4;
                                                            .D[5]:=TIIB[MRCO_PLC_E11_EL6002]^COM TxPDO-Map Inputs Channel 2^Data In 5;
                                                            .D[6]:=TIIB[MRCO_PLC_E11_EL6002]^COM TxPDO-Map Inputs Channel 2^Data In 6;
                                                            .D[7]:=TIIB[MRCO_PLC_E11_EL6002]^COM TxPDO-Map Inputs Channel 2^Data In 7;
                                                            .D[8]:=TIIB[MRCO_PLC_E11_EL6002]^COM TxPDO-Map Inputs Channel 2^Data In 8;
                                                            .D[9]:=TIIB[MRCO_PLC_E11_EL6002]^COM TxPDO-Map Inputs Channel 2^Data In 9;
                                                            .D[10]:=TIIB[MRCO_PLC_E11_EL6002]^COM TxPDO-Map Inputs Channel 2^Data In 10;
                                                            .D[11]:=TIIB[MRCO_PLC_E11_EL6002]^COM TxPDO-Map Inputs Channel 2^Data In 11;
                                                            .D[12]:=TIIB[MRCO_PLC_E11_EL6002]^COM TxPDO-Map Inputs Channel 2^Data In 12;
                                                            .D[13]:=TIIB[MRCO_PLC_E11_EL6002]^COM TxPDO-Map Inputs Channel 2^Data In 13;
                                                            .D[14]:=TIIB[MRCO_PLC_E11_EL6002]^COM TxPDO-Map Inputs Channel 2^Data In 14;
                                                            .D[15]:=TIIB[MRCO_PLC_E11_EL6002]^COM TxPDO-Map Inputs Channel 2^Data In 15;
                                                            .D[16]:=TIIB[MRCO_PLC_E11_EL6002]^COM TxPDO-Map Inputs Channel 2^Data In 16;
                                                            .D[17]:=TIIB[MRCO_PLC_E11_EL6002]^COM TxPDO-Map Inputs Channel 2^Data In 17;
                                                            .D[18]:=TIIB[MRCO_PLC_E11_EL6002]^COM TxPDO-Map Inputs Channel 2^Data In 18;
                                                            .D[19]:=TIIB[MRCO_PLC_E11_EL6002]^COM TxPDO-Map Inputs Channel 2^Data In 19;
                                                            .D[20]:=TIIB[MRCO_PLC_E11_EL6002]^COM TxPDO-Map Inputs Channel 2^Data In 20;
                                                            .D[21]:=TIIB[MRCO_PLC_E11_EL6002]^COM TxPDO-Map Inputs Channel 2^Data In 21
    '}
    stComIn_MRCO_MAIN_PTM_03        AT %I*  :       EL6inData22B;

    {attribute      'TcLinkTo'      :=      '.Ctrl:=TIIB[MRCO_PLC_E11_EL6002]^COM RxPDO-Map Outputs Channel 2^Ctrl;
                                                            .D[0]:=TIIB[MRCO_PLC_E11_EL6002]^COM RxPDO-Map Outputs Channel 2^Data Out 0;
                                                            .D[1]:=TIIB[MRCO_PLC_E11_EL6002]^COM RxPDO-Map Outputs Channel 2^Data Out 1;
                                                            .D[2]:=TIIB[MRCO_PLC_E11_EL6002]^COM RxPDO-Map Outputs Channel 2^Data Out 2;
                                                            .D[3]:=TIIB[MRCO_PLC_E11_EL6002]^COM RxPDO-Map Outputs Channel 2^Data Out 3;
                                                            .D[4]:=TIIB[MRCO_PLC_E11_EL6002]^COM RxPDO-Map Outputs Channel 2^Data Out 4;
                                                            .D[5]:=TIIB[MRCO_PLC_E11_EL6002]^COM RxPDO-Map Outputs Channel 2^Data Out 5;
                                                            .D[6]:=TIIB[MRCO_PLC_E11_EL6002]^COM RxPDO-Map Outputs Channel 2^Data Out 6;
                                                            .D[7]:=TIIB[MRCO_PLC_E11_EL6002]^COM RxPDO-Map Outputs Channel 2^Data Out 7;
                                                            .D[8]:=TIIB[MRCO_PLC_E11_EL6002]^COM RxPDO-Map Outputs Channel 2^Data Out 8;
                                                            .D[9]:=TIIB[MRCO_PLC_E11_EL6002]^COM RxPDO-Map Outputs Channel 2^Data Out 9;
                                                            .D[10]:=TIIB[MRCO_PLC_E11_EL6002]^COM RxPDO-Map Outputs Channel 2^Data Out 10;
                                                            .D[11]:=TIIB[MRCO_PLC_E11_EL6002]^COM RxPDO-Map Outputs Channel 2^Data Out 11;
                                                            .D[12]:=TIIB[MRCO_PLC_E11_EL6002]^COM RxPDO-Map Outputs Channel 2^Data Out 12;
                                                            .D[13]:=TIIB[MRCO_PLC_E11_EL6002]^COM RxPDO-Map Outputs Channel 2^Data Out 13;
                                                            .D[14]:=TIIB[MRCO_PLC_E11_EL6002]^COM RxPDO-Map Outputs Channel 2^Data Out 14;
                                                            .D[15]:=TIIB[MRCO_PLC_E11_EL6002]^COM RxPDO-Map Outputs Channel 2^Data Out 15;
                                                            .D[16]:=TIIB[MRCO_PLC_E11_EL6002]^COM RxPDO-Map Outputs Channel 2^Data Out 16;
                                                            .D[17]:=TIIB[MRCO_PLC_E11_EL6002]^COM RxPDO-Map Outputs Channel 2^Data Out 17;
                                                            .D[18]:=TIIB[MRCO_PLC_E11_EL6002]^COM RxPDO-Map Outputs Channel 2^Data Out 18;
                                                            .D[19]:=TIIB[MRCO_PLC_E11_EL6002]^COM RxPDO-Map Outputs Channel 2^Data Out 19;
                                                            .D[20]:=TIIB[MRCO_PLC_E11_EL6002]^COM RxPDO-Map Outputs Channel 2^Data Out 20;
                                                            .D[21]:=TIIB[MRCO_PLC_E11_EL6002]^COM RxPDO-Map Outputs Channel 2^Data Out 21
    '}
    stComOut_MRCO_MAIN_PTM_03        AT %Q*  :       EL6outData22B;

    {attribute      'TcLinkTo'      :=      '.Status:=TIIB[MRCO_PLC_E12_EL6002]^COM TxPDO-Map Inputs Channel 1^Status;
                                                            .D[0]:=TIIB[MRCO_PLC_E12_EL6002]^COM TxPDO-Map Inputs Channel 1^Data In 0;
                                                            .D[1]:=TIIB[MRCO_PLC_E12_EL6002]^COM TxPDO-Map Inputs Channel 1^Data In 1;
                                                            .D[2]:=TIIB[MRCO_PLC_E12_EL6002]^COM TxPDO-Map Inputs Channel 1^Data In 2;
                                                            .D[3]:=TIIB[MRCO_PLC_E12_EL6002]^COM TxPDO-Map Inputs Channel 1^Data In 3;
                                                            .D[4]:=TIIB[MRCO_PLC_E12_EL6002]^COM TxPDO-Map Inputs Channel 1^Data In 4;
                                                            .D[5]:=TIIB[MRCO_PLC_E12_EL6002]^COM TxPDO-Map Inputs Channel 1^Data In 5;
                                                            .D[6]:=TIIB[MRCO_PLC_E12_EL6002]^COM TxPDO-Map Inputs Channel 1^Data In 6;
                                                            .D[7]:=TIIB[MRCO_PLC_E12_EL6002]^COM TxPDO-Map Inputs Channel 1^Data In 7;
                                                            .D[8]:=TIIB[MRCO_PLC_E12_EL6002]^COM TxPDO-Map Inputs Channel 1^Data In 8;
                                                            .D[9]:=TIIB[MRCO_PLC_E12_EL6002]^COM TxPDO-Map Inputs Channel 1^Data In 9;
                                                            .D[10]:=TIIB[MRCO_PLC_E12_EL6002]^COM TxPDO-Map Inputs Channel 1^Data In 10;
                                                            .D[11]:=TIIB[MRCO_PLC_E12_EL6002]^COM TxPDO-Map Inputs Channel 1^Data In 11;
                                                            .D[12]:=TIIB[MRCO_PLC_E12_EL6002]^COM TxPDO-Map Inputs Channel 1^Data In 12;
                                                            .D[13]:=TIIB[MRCO_PLC_E12_EL6002]^COM TxPDO-Map Inputs Channel 1^Data In 13;
                                                            .D[14]:=TIIB[MRCO_PLC_E12_EL6002]^COM TxPDO-Map Inputs Channel 1^Data In 14;
                                                            .D[15]:=TIIB[MRCO_PLC_E12_EL6002]^COM TxPDO-Map Inputs Channel 1^Data In 15;
                                                            .D[16]:=TIIB[MRCO_PLC_E12_EL6002]^COM TxPDO-Map Inputs Channel 1^Data In 16;
                                                            .D[17]:=TIIB[MRCO_PLC_E12_EL6002]^COM TxPDO-Map Inputs Channel 1^Data In 17;
                                                            .D[18]:=TIIB[MRCO_PLC_E12_EL6002]^COM TxPDO-Map Inputs Channel 1^Data In 18;
                                                            .D[19]:=TIIB[MRCO_PLC_E12_EL6002]^COM TxPDO-Map Inputs Channel 1^Data In 19;
                                                            .D[20]:=TIIB[MRCO_PLC_E12_EL6002]^COM TxPDO-Map Inputs Channel 1^Data In 20;
                                                            .D[21]:=TIIB[MRCO_PLC_E12_EL6002]^COM TxPDO-Map Inputs Channel 1^Data In 21
    '}
    stComIn_MRCO_MAIN_PTM_02        AT %I*  :       EL6inData22B;

    {attribute      'TcLinkTo'      :=      '.Ctrl:=TIIB[MRCO_PLC_E12_EL6002]^COM RxPDO-Map Outputs Channel 1^Ctrl;=
                                                            .D[0]:=TIIB[MRCO_PLC_E12_EL6002]^COM RxPDO-Map Outputs Channel 1^Data Out 0;
                                                            .D[1]:=TIIB[MRCO_PLC_E12_EL6002]^COM RxPDO-Map Outputs Channel 1^Data Out 1;
                                                            .D[2]:=TIIB[MRCO_PLC_E12_EL6002]^COM RxPDO-Map Outputs Channel 1^Data Out 2;
                                                            .D[3]:=TIIB[MRCO_PLC_E12_EL6002]^COM RxPDO-Map Outputs Channel 1^Data Out 3;
                                                            .D[4]:=TIIB[MRCO_PLC_E12_EL6002]^COM RxPDO-Map Outputs Channel 1^Data Out 4;
                                                            .D[5]:=TIIB[MRCO_PLC_E12_EL6002]^COM RxPDO-Map Outputs Channel 1^Data Out 5;
                                                            .D[6]:=TIIB[MRCO_PLC_E12_EL6002]^COM RxPDO-Map Outputs Channel 1^Data Out 6;
                                                            .D[7]:=TIIB[MRCO_PLC_E12_EL6002]^COM RxPDO-Map Outputs Channel 1^Data Out 7;
                                                            .D[8]:=TIIB[MRCO_PLC_E12_EL6002]^COM RxPDO-Map Outputs Channel 1^Data Out 8;
                                                            .D[9]:=TIIB[MRCO_PLC_E12_EL6002]^COM RxPDO-Map Outputs Channel 1^Data Out 9;
                                                            .D[10]:=TIIB[MRCO_PLC_E12_EL6002]^COM RxPDO-Map Outputs Channel 1^Data Out 10;
                                                            .D[11]:=TIIB[MRCO_PLC_E12_EL6002]^COM RxPDO-Map Outputs Channel 1^Data Out 11;
                                                            .D[12]:=TIIB[MRCO_PLC_E12_EL6002]^COM RxPDO-Map Outputs Channel 1^Data Out 12;
                                                            .D[13]:=TIIB[MRCO_PLC_E12_EL6002]^COM RxPDO-Map Outputs Channel 1^Data Out 13;
                                                            .D[14]:=TIIB[MRCO_PLC_E12_EL6002]^COM RxPDO-Map Outputs Channel 1^Data Out 14;
                                                            .D[15]:=TIIB[MRCO_PLC_E12_EL6002]^COM RxPDO-Map Outputs Channel 1^Data Out 15;
                                                            .D[16]:=TIIB[MRCO_PLC_E12_EL6002]^COM RxPDO-Map Outputs Channel 1^Data Out 16;
                                                            .D[17]:=TIIB[MRCO_PLC_E12_EL6002]^COM RxPDO-Map Outputs Channel 1^Data Out 17;
                                                            .D[18]:=TIIB[MRCO_PLC_E12_EL6002]^COM RxPDO-Map Outputs Channel 1^Data Out 18;
                                                            .D[19]:=TIIB[MRCO_PLC_E12_EL6002]^COM RxPDO-Map Outputs Channel 1^Data Out 19;
                                                            .D[20]:=TIIB[MRCO_PLC_E12_EL6002]^COM RxPDO-Map Outputs Channel 1^Data Out 20;
                                                            .D[21]:=TIIB[MRCO_PLC_E12_EL6002]^COM RxPDO-Map Outputs Channel 1^Data Out 21
    '}
    stComOut_MRCO_MAIN_PTM_02        AT %Q*  :       EL6outData22B;

    {attribute      'TcLinkTo'      :=      '.Status:=TIIB[MRCO_PLC_E12_EL6002]^COM TxPDO-Map Inputs Channel 2^Status;
                                                            .D[0]:=TIIB[MRCO_PLC_E12_EL6002]^COM TxPDO-Map Inputs Channel 2^Data In 0;
                                                            .D[1]:=TIIB[MRCO_PLC_E12_EL6002]^COM TxPDO-Map Inputs Channel 2^Data In 1;
                                                            .D[2]:=TIIB[MRCO_PLC_E12_EL6002]^COM TxPDO-Map Inputs Channel 2^Data In 2;
                                                            .D[3]:=TIIB[MRCO_PLC_E12_EL6002]^COM TxPDO-Map Inputs Channel 2^Data In 3;
                                                            .D[4]:=TIIB[MRCO_PLC_E12_EL6002]^COM TxPDO-Map Inputs Channel 2^Data In 4;
                                                            .D[5]:=TIIB[MRCO_PLC_E12_EL6002]^COM TxPDO-Map Inputs Channel 2^Data In 5;
                                                            .D[6]:=TIIB[MRCO_PLC_E12_EL6002]^COM TxPDO-Map Inputs Channel 2^Data In 6;
                                                            .D[7]:=TIIB[MRCO_PLC_E12_EL6002]^COM TxPDO-Map Inputs Channel 2^Data In 7;
                                                            .D[8]:=TIIB[MRCO_PLC_E12_EL6002]^COM TxPDO-Map Inputs Channel 2^Data In 8;
                                                            .D[9]:=TIIB[MRCO_PLC_E12_EL6002]^COM TxPDO-Map Inputs Channel 2^Data In 9;
                                                            .D[10]:=TIIB[MRCO_PLC_E12_EL6002]^COM TxPDO-Map Inputs Channel 2^Data In 10;
                                                            .D[11]:=TIIB[MRCO_PLC_E12_EL6002]^COM TxPDO-Map Inputs Channel 2^Data In 11;
                                                            .D[12]:=TIIB[MRCO_PLC_E12_EL6002]^COM TxPDO-Map Inputs Channel 2^Data In 12;
                                                            .D[13]:=TIIB[MRCO_PLC_E12_EL6002]^COM TxPDO-Map Inputs Channel 2^Data In 13;
                                                            .D[14]:=TIIB[MRCO_PLC_E12_EL6002]^COM TxPDO-Map Inputs Channel 2^Data In 14;
                                                            .D[15]:=TIIB[MRCO_PLC_E12_EL6002]^COM TxPDO-Map Inputs Channel 2^Data In 15;
                                                            .D[16]:=TIIB[MRCO_PLC_E12_EL6002]^COM TxPDO-Map Inputs Channel 2^Data In 16;
                                                            .D[17]:=TIIB[MRCO_PLC_E12_EL6002]^COM TxPDO-Map Inputs Channel 2^Data In 17;
                                                            .D[18]:=TIIB[MRCO_PLC_E12_EL6002]^COM TxPDO-Map Inputs Channel 2^Data In 18;
                                                            .D[19]:=TIIB[MRCO_PLC_E12_EL6002]^COM TxPDO-Map Inputs Channel 2^Data In 19;
                                                            .D[20]:=TIIB[MRCO_PLC_E12_EL6002]^COM TxPDO-Map Inputs Channel 2^Data In 20;
                                                            .D[21]:=TIIB[MRCO_PLC_E12_EL6002]^COM TxPDO-Map Inputs Channel 2^Data In 21
    '}
    stComIn_MRCO_MAIN_PTM_04        AT %I*  :       EL6inData22B;

    {attribute      'TcLinkTo'      :=      '.Ctrl:=TIIB[MRCO_PLC_E12_EL6002]^COM RxPDO-Map Outputs Channel 2^Ctrl;
                                                            .D[0]:=TIIB[MRCO_PLC_E12_EL6002]^COM RxPDO-Map Outputs Channel 2^Data Out 0;
                                                            .D[1]:=TIIB[MRCO_PLC_E12_EL6002]^COM RxPDO-Map Outputs Channel 2^Data Out 1;
                                                            .D[2]:=TIIB[MRCO_PLC_E12_EL6002]^COM RxPDO-Map Outputs Channel 2^Data Out 2;
                                                            .D[3]:=TIIB[MRCO_PLC_E12_EL6002]^COM RxPDO-Map Outputs Channel 2^Data Out 3;
                                                            .D[4]:=TIIB[MRCO_PLC_E12_EL6002]^COM RxPDO-Map Outputs Channel 2^Data Out 4;
                                                            .D[5]:=TIIB[MRCO_PLC_E12_EL6002]^COM RxPDO-Map Outputs Channel 2^Data Out 5;
                                                            .D[6]:=TIIB[MRCO_PLC_E12_EL6002]^COM RxPDO-Map Outputs Channel 2^Data Out 6;
                                                            .D[7]:=TIIB[MRCO_PLC_E12_EL6002]^COM RxPDO-Map Outputs Channel 2^Data Out 7;
                                                            .D[8]:=TIIB[MRCO_PLC_E12_EL6002]^COM RxPDO-Map Outputs Channel 2^Data Out 8;
                                                            .D[9]:=TIIB[MRCO_PLC_E12_EL6002]^COM RxPDO-Map Outputs Channel 2^Data Out 9;
                                                            .D[10]:=TIIB[MRCO_PLC_E12_EL6002]^COM RxPDO-Map Outputs Channel 2^Data Out 10;
                                                            .D[11]:=TIIB[MRCO_PLC_E12_EL6002]^COM RxPDO-Map Outputs Channel 2^Data Out 11;
                                                            .D[12]:=TIIB[MRCO_PLC_E12_EL6002]^COM RxPDO-Map Outputs Channel 2^Data Out 12;
                                                            .D[13]:=TIIB[MRCO_PLC_E12_EL6002]^COM RxPDO-Map Outputs Channel 2^Data Out 13;
                                                            .D[14]:=TIIB[MRCO_PLC_E12_EL6002]^COM RxPDO-Map Outputs Channel 2^Data Out 14;
                                                            .D[15]:=TIIB[MRCO_PLC_E12_EL6002]^COM RxPDO-Map Outputs Channel 2^Data Out 15;
                                                            .D[16]:=TIIB[MRCO_PLC_E12_EL6002]^COM RxPDO-Map Outputs Channel 2^Data Out 16;
                                                            .D[17]:=TIIB[MRCO_PLC_E12_EL6002]^COM RxPDO-Map Outputs Channel 2^Data Out 17;
                                                            .D[18]:=TIIB[MRCO_PLC_E12_EL6002]^COM RxPDO-Map Outputs Channel 2^Data Out 18;
                                                            .D[19]:=TIIB[MRCO_PLC_E12_EL6002]^COM RxPDO-Map Outputs Channel 2^Data Out 19;
                                                            .D[20]:=TIIB[MRCO_PLC_E12_EL6002]^COM RxPDO-Map Outputs Channel 2^Data Out 20;
                                                            .D[21]:=TIIB[MRCO_PLC_E12_EL6002]^COM RxPDO-Map Outputs Channel 2^Data Out 21
    '}
    stComOut_MRCO_MAIN_PTM_04        AT %Q*  :       EL6outData22B;

    {attribute      'TcLinkTo'      :=      '.Status:=TIIB[MRCO_PNL1_EP03_EP6002-0002]^COM TxPDO-Map Inputs Channel 1^Status;
                                                            .D[0]:=TIIB[MRCO_PNL1_EP03_EP6002-0002]^COM TxPDO-Map Inputs Channel 1^Data In 0;
                                                            .D[1]:=TIIB[MRCO_PNL1_EP03_EP6002-0002]^COM TxPDO-Map Inputs Channel 1^Data In 1;
                                                            .D[2]:=TIIB[MRCO_PNL1_EP03_EP6002-0002]^COM TxPDO-Map Inputs Channel 1^Data In 2;
                                                            .D[3]:=TIIB[MRCO_PNL1_EP03_EP6002-0002]^COM TxPDO-Map Inputs Channel 1^Data In 3;
                                                            .D[4]:=TIIB[MRCO_PNL1_EP03_EP6002-0002]^COM TxPDO-Map Inputs Channel 1^Data In 4;
                                                            .D[5]:=TIIB[MRCO_PNL1_EP03_EP6002-0002]^COM TxPDO-Map Inputs Channel 1^Data In 5;
                                                            .D[6]:=TIIB[MRCO_PNL1_EP03_EP6002-0002]^COM TxPDO-Map Inputs Channel 1^Data In 6;
                                                            .D[7]:=TIIB[MRCO_PNL1_EP03_EP6002-0002]^COM TxPDO-Map Inputs Channel 1^Data In 7;
                                                            .D[8]:=TIIB[MRCO_PNL1_EP03_EP6002-0002]^COM TxPDO-Map Inputs Channel 1^Data In 8;
                                                            .D[9]:=TIIB[MRCO_PNL1_EP03_EP6002-0002]^COM TxPDO-Map Inputs Channel 1^Data In 9;
                                                            .D[10]:=TIIB[MRCO_PNL1_EP03_EP6002-0002]^COM TxPDO-Map Inputs Channel 1^Data In 10;
                                                            .D[11]:=TIIB[MRCO_PNL1_EP03_EP6002-0002]^COM TxPDO-Map Inputs Channel 1^Data In 11;
                                                            .D[12]:=TIIB[MRCO_PNL1_EP03_EP6002-0002]^COM TxPDO-Map Inputs Channel 1^Data In 12;
                                                            .D[13]:=TIIB[MRCO_PNL1_EP03_EP6002-0002]^COM TxPDO-Map Inputs Channel 1^Data In 13;
                                                            .D[14]:=TIIB[MRCO_PNL1_EP03_EP6002-0002]^COM TxPDO-Map Inputs Channel 1^Data In 14;
                                                            .D[15]:=TIIB[MRCO_PNL1_EP03_EP6002-0002]^COM TxPDO-Map Inputs Channel 1^Data In 15;
                                                            .D[16]:=TIIB[MRCO_PNL1_EP03_EP6002-0002]^COM TxPDO-Map Inputs Channel 1^Data In 16;
                                                            .D[17]:=TIIB[MRCO_PNL1_EP03_EP6002-0002]^COM TxPDO-Map Inputs Channel 1^Data In 17;
                                                            .D[18]:=TIIB[MRCO_PNL1_EP03_EP6002-0002]^COM TxPDO-Map Inputs Channel 1^Data In 18;
                                                            .D[19]:=TIIB[MRCO_PNL1_EP03_EP6002-0002]^COM TxPDO-Map Inputs Channel 1^Data In 19;
                                                            .D[20]:=TIIB[MRCO_PNL1_EP03_EP6002-0002]^COM TxPDO-Map Inputs Channel 1^Data In 20;
                                                            .D[21]:=TIIB[MRCO_PNL1_EP03_EP6002-0002]^COM TxPDO-Map Inputs Channel 1^Data In 21
    '}
    stComIn_MRCO_ROUGH_PTM_01        AT %I*  :       EL6inData22B;

    {attribute      'TcLinkTo'      :=      '.Ctrl:=TIIB[MRCO_PNL1_EP03_EP6002-0002]^COM RxPDO-Map Outputs Channel 1^Ctrl;
                                                            .D[0]:=TIIB[MRCO_PNL1_EP03_EP6002-0002]^COM RxPDO-Map Outputs Channel 1^Data Out 0;
                                                            .D[1]:=TIIB[MRCO_PNL1_EP03_EP6002-0002]^COM RxPDO-Map Outputs Channel 1^Data Out 1;
                                                            .D[2]:=TIIB[MRCO_PNL1_EP03_EP6002-0002]^COM RxPDO-Map Outputs Channel 1^Data Out 2;
                                                            .D[3]:=TIIB[MRCO_PNL1_EP03_EP6002-0002]^COM RxPDO-Map Outputs Channel 1^Data Out 3;
                                                            .D[4]:=TIIB[MRCO_PNL1_EP03_EP6002-0002]^COM RxPDO-Map Outputs Channel 1^Data Out 4;
                                                            .D[5]:=TIIB[MRCO_PNL1_EP03_EP6002-0002]^COM RxPDO-Map Outputs Channel 1^Data Out 5;
                                                            .D[6]:=TIIB[MRCO_PNL1_EP03_EP6002-0002]^COM RxPDO-Map Outputs Channel 1^Data Out 6;
                                                            .D[7]:=TIIB[MRCO_PNL1_EP03_EP6002-0002]^COM RxPDO-Map Outputs Channel 1^Data Out 7;
                                                            .D[8]:=TIIB[MRCO_PNL1_EP03_EP6002-0002]^COM RxPDO-Map Outputs Channel 1^Data Out 8;
                                                            .D[9]:=TIIB[MRCO_PNL1_EP03_EP6002-0002]^COM RxPDO-Map Outputs Channel 1^Data Out 9;
                                                            .D[10]:=TIIB[MRCO_PNL1_EP03_EP6002-0002]^COM RxPDO-Map Outputs Channel 1^Data Out 10;
                                                            .D[11]:=TIIB[MRCO_PNL1_EP03_EP6002-0002]^COM RxPDO-Map Outputs Channel 1^Data Out 11;
                                                            .D[12]:=TIIB[MRCO_PNL1_EP03_EP6002-0002]^COM RxPDO-Map Outputs Channel 1^Data Out 12;
                                                            .D[13]:=TIIB[MRCO_PNL1_EP03_EP6002-0002]^COM RxPDO-Map Outputs Channel 1^Data Out 13;
                                                            .D[14]:=TIIB[MRCO_PNL1_EP03_EP6002-0002]^COM RxPDO-Map Outputs Channel 1^Data Out 14;
                                                            .D[15]:=TIIB[MRCO_PNL1_EP03_EP6002-0002]^COM RxPDO-Map Outputs Channel 1^Data Out 15;
                                                            .D[16]:=TIIB[MRCO_PNL1_EP03_EP6002-0002]^COM RxPDO-Map Outputs Channel 1^Data Out 16;
                                                            .D[17]:=TIIB[MRCO_PNL1_EP03_EP6002-0002]^COM RxPDO-Map Outputs Channel 1^Data Out 17;
                                                            .D[18]:=TIIB[MRCO_PNL1_EP03_EP6002-0002]^COM RxPDO-Map Outputs Channel 1^Data Out 18;
                                                            .D[19]:=TIIB[MRCO_PNL1_EP03_EP6002-0002]^COM RxPDO-Map Outputs Channel 1^Data Out 19;
                                                            .D[20]:=TIIB[MRCO_PNL1_EP03_EP6002-0002]^COM RxPDO-Map Outputs Channel 1^Data Out 20;
                                                            .D[21]:=TIIB[MRCO_PNL1_EP03_EP6002-0002]^COM RxPDO-Map Outputs Channel 1^Data Out 21
    '}
    stComOut_MRCO_ROUGH_PTM_01        AT %Q*  :       EL6outData22B;

END_VAR

GVL_Devices

//{attribute 'qualified_only'}
VAR_GLOBAL
    (*Rack Mounted Turbo Pumps*)
    {attribute 'TcLinkTo' :=        '.i_xFaultNC            :=      TIIB[MRCO_PLC_E06_EL1004]^Channel 1^Input;
                                 .i_xAtSpd                  :=      TIIB[MRCO_PLC_E06_EL1004]^Channel 2^Input;
                                 .q_RunDO                   :=      TIIB[MRCO_PLC_E07_EL2794]^Channel 1^Output
    '}
    {attribute 'pytmc' := '
        pv: MRCO:MAIN:PTM:01
        io: io
    '}
    MRCO_MAIN_PTM_01 : FB_PTM_TurboDrive;

    {attribute 'TcLinkTo' :=        '.i_xFaultNC            :=      TIIB[MRCO_PLC_E06_EL1004]^Channel 3^Input;
                                 .i_xAtSpd                  :=      TIIB[MRCO_PLC_E06_EL1004]^Channel 4^Input;
                                 .q_RunDO                   :=      TIIB[MRCO_PLC_E07_EL2794]^Channel 3^Output
    '}
    {attribute 'pytmc' := '
        pv: MRCO:MAIN:PTM:02
        io: io
    '}
    MRCO_MAIN_PTM_02 : FB_PTM_TurboDrive;

    {attribute 'TcLinkTo' :=        '.i_xFaultNC            :=      TIIB[MRCO_PLC_E08_EL1004]^Channel 1^Input;
                                 .i_xAtSpd                  :=      TIIB[MRCO_PLC_E08_EL1004]^Channel 2^Input;
                                 .q_RunDO                   :=      TIIB[MRCO_PLC_E07_EL2794]^Channel 2^Output
    '}
    {attribute 'pytmc' := '
        pv: MRCO:MAIN:PTM:03
        io: io
    '}
    MRCO_MAIN_PTM_03 : FB_PTM_TurboDrive;

    {attribute 'TcLinkTo' :=        '.i_xFaultNC            :=      TIIB[MRCO_PLC_E08_EL1004]^Channel 3^Input;
                                 .i_xAtSpd                  :=      TIIB[MRCO_PLC_E08_EL1004]^Channel 4^Input;
                                 .q_RunDO                   :=      TIIB[MRCO_PLC_E07_EL2794]^Channel 4^Output
    '}
    {attribute 'pytmc' := '
        pv: MRCO:MAIN:PTM:04
        io: io
    '}
    MRCO_MAIN_PTM_04 : FB_PTM_TurboDrive;

    (*Onboard Turbo Pumps*)

    {attribute 'TcLinkTo' :=        '.q_xReset                      :=      TIIB[MRCO_PNL1_EP02_EP2624-0002]^Channel 2^Output;
                                 .q_RunDO                   :=      TIIB[MRCO_PNL1_EP02_EP2624-0002]^Channel 1^Output;
                                 .i_xAtSpd                  :=      TIIB[MRCO_PNL1_EP01_EP2338-0002]^Channel 1^Input;
                                 .i_xFaultNC                :=      TIIB[MRCO_PNL1_EP01_EP2338-0002]^Channel 2^Input
    '}
    {attribute 'pytmc' := '
        pv: MRCO:ROUGH:PTM:01
        io: io
    '}
    MRCO_ROUGH_PTM_01 : FB_PTM_Pfeiffer;


(*Pirani MKS 275 Gauges*)
    {attribute 'TcLinkTo' :=        '.i_iPRESS_R    :=      TIIB[MRCO_PNL1_EP05_EP3174-0002]^AI Standard Channel 1^Value
    '}
    {attribute 'pytmc' := '
        pv: MRCO:MAIN:GPI:01
        io: io
    '}
    MRCO_MAIN_GPI_01 : FB_CVM201;


(*MicroPirani MKS 925 Gauges*)
    {attribute 'TcLinkTo' :=        '.i_iPRESS_R    :=      TIIB[MRCO_PNL1_EP04_EP3174-0002]^AI Standard Channel 1^Value
    '}
    {attribute 'pytmc' := '
        pv: MRCO:ROUGH:GPI:01
        io: io
    '}
    MRCO_ROUGH_GPI_01 : FB_9XX;

    {attribute 'TcLinkTo' :=        '.i_iPRESS_R    :=      TIIB[MRCO_PNL1_EP04_EP3174-0002]^AI Standard Channel 2^Value
    '}
    {attribute 'pytmc' := '
        pv: MRCO:ROUGH:GPI:02
        io: io
    '}
    MRCO_ROUGH_GPI_02 : FB_9XX;

    {attribute 'TcLinkTo' :=        '.i_iPRESS_R    :=      TIIB[MRCO_PNL1_EP04_EP3174-0002]^AI Standard Channel 3^Value
    '}
    {attribute 'pytmc' := '
        pv: MRCO:ROUGH:GPI:03
        io: io
    '}
    MRCO_ROUGH_GPI_03 : FB_9XX;
    {attribute 'TcLinkTo' :=        '.i_iPRESS_R    :=      TIIB[MRCO_PNL1_EP04_EP3174-0002]^AI Standard Channel 4^Value
    '}
    {attribute 'pytmc' := '
        pv: MRCO:ROUGH:GPI:04
        io: io
    '}
    MRCO_ROUGH_GPI_04 : FB_9XX;

(*Hot Cathode MKS 909 Gauges*)
    {attribute 'TcLinkTo' :=        '.i_iPRESS_R    :=      TIIB[MRCO_PNL1_EP05_EP3174-0002]^AI Standard Channel 2^Value;
                                 .q_xHV_DIS         :=      TIIB[MRCO_PNL1_EP06_EP2624-0002]^Channel 2^Output
    '}
    {attribute 'pytmc' := '
        pv: MRCO:MAIN:GHC:01
        io: io
    '}
    MRCO_MAIN_GHC_01 : FB_MKS909;

(*Variable Leak Valve*)
    {attribute 'TcLinkTo' :=        '.i_nRawPosition        :=      TIIB[VCN_1_VAT590]^DI TxPDO-Map^Position;
                                 .i_nRawPressure    :=      TIIB[VCN_1_VAT590]^DI TxPDO-Map^Pressure;
                                 .i_eControlMode    :=      TIIB[VCN_1_VAT590]^DI TxPDO-Map^Control mode;
                                 .i_eFatalError             :=      TIIB[VCN_1_VAT590]^DI TxPDO-Map^Fatal error;
                                 .i_stGenStatus     :=      TIIB[VCN_1_VAT590]^DI TxPDO-Map^General status;
                                 .i_stGenWarnings   :=      TIIB[VCN_1_VAT590]^DI TxPDO-Map^General warnings;
                                 .i_stExtnWarnings  :=      TIIB[VCN_1_VAT590]^DI TxPDO-Map^Extended warnings;
                                 .o_nRawPositionSP  :=      TIIB[VCN_1_VAT590]^DO RxPDO-Map^Position setpoint;
                                 .o_nRawPressureSP  :=      TIIB[VCN_1_VAT590]^DO RxPDO-Map^Pressure setpoint;
                                 .o_nRawPressure    :=      TIIB[VCN_1_VAT590]^DO RxPDO-Map^External digital pressure sensor 1;
                                 .o_eCtrlModeSP     :=      TIIB[VCN_1_VAT590]^DO RxPDO-Map^Control mode setpoint;
                                 .o_stGenCtrlSP     :=      TIIB[VCN_1_VAT590]^DO RxPDO-Map^General control setpoint;
                                 .i_stVat590PlcDriveRef.aNetId     := TIIB[VCN_1_VAT590]^InfoData^AdsAddr^netId;
                                 .i_stVat590PlcDriveRef.nSlaveAddr := TIIB[VCN_1_VAT590]^InfoData^AdsAddr^port;
                                 .i_bValveEthCatStatus             := TIIB[VCN_1_VAT590]^WcState^WcState
    '}
    {attribute 'pytmc' := 'pv: MRCO:VCN:01'}
    MRCO_VCN_01 : FB_VCN_VAT590;

(*Normally Closed Valve with Readback*)//ALL VALVES CURRENTLY NO
    {attribute 'TcLinkTo' :=        '.i_xOpnLS      :=      TIIB[MRCO_PNL1_EP07_EP2338-0002]^Channel 1^Input;
                                 .i_xClsLS  :=      TIIB[MRCO_PNL1_EP07_EP2338-0002]^Channel 2^Input;
                                 .q_xOPN_DO :=      TIIB[MRCO_PNL1_EP07_EP2338-0002]^Channel 11^Output
    '}
    {attribute 'pytmc' := '
        pv: MRCO:ROUGH:VRC:01
        io: io
    '}
    MRCO_ROUGH_VRC_01 : FB_VRC;

    {attribute 'TcLinkTo' :=        '.i_xOpnLS      :=      TIIB[MRCO_PNL1_EP08_EP2338-0002]^Channel 1^Input;
                                 .i_xClsLS  :=      TIIB[MRCO_PNL1_EP08_EP2338-0002]^Channel 2^Input;
                                 .q_xOPN_DO :=      TIIB[MRCO_PNL1_EP08_EP2338-0002]^Channel 11^Output
    '}
    {attribute 'pytmc' := '
        pv: MRCO:ROUGH:VRC:03
        io: io
    '}
    MRCO_ROUGH_VRC_03 : FB_VRC;

    (*Normally Open Valve with Readback*)

    {attribute 'TcLinkTo' :=        '.i_xOpnLS      :=      TIIB[MRCO_PNL1_EP07_EP2338-0002]^Channel 5^Input;
                                 .i_xClsLS  :=      TIIB[MRCO_PNL1_EP07_EP2338-0002]^Channel 6^Input;
                                 .q_xCLS_DO :=      TIIB[MRCO_PNL1_EP07_EP2338-0002]^Channel 15^Output
    '}
    {attribute 'pytmc' := '
        pv: MRCO:ROUGH:VRC:02
        io: io
    '}
    MRCO_ROUGH_VRC_02 : FB_VRC_NO;

(*Pfeiffer*)
    // They share the same serial port
    st_Pfeiffer_CTRL_MRCO_ROUGH_PTM_01              : ARRAY[1..20] OF ST_PfeifferControl;
    st_Pfeiffer_RBK_MRCO_ROUGH_PTM_01                       : ARRAY[1..20] OF ST_PfeifferStatus;
    fb_PfeifferCom_MRCO_ROUGH_PTM_01                        : FB_PFEIFFER_COM;

(*Leybold*)
    st_TD20_RBK_MRCO_MAIN_PTM_01                : ST_TD20Status;
    fb_TD20Com_MRCO_MAIN_PTM_01                 : FB_OERLIKON_TD20_COM;

    st_TD20_RBK_MRCO_MAIN_PTM_02                : ST_TD20Status;
    fb_TD20Com_MRCO_MAIN_PTM_02                 : FB_OERLIKON_TD20_COM;

    st_TD20_RBK_MRCO_MAIN_PTM_03                : ST_TD20Status;
    fb_TD20Com_MRCO_MAIN_PTM_03                 : FB_OERLIKON_TD20_COM;

    st_TD20_RBK_MRCO_MAIN_PTM_04                : ST_TD20Status;
    fb_TD20Com_MRCO_MAIN_PTM_04                 : FB_OERLIKON_TD20_COM;

END_VAR
Related:

GVL_PLC_Interfaces

//{attribute 'qualified_only'}
VAR_GLOBAL

    //Outputs
    fb_ADS_WATCHDOG_VAC_MRCO_TMO:FB_ADS_WATCHDOG;
    (*ETHERCAT BRIDGE COM STATUS*)
    //0: Other side is in OP state, >0: Error
    {attribute 'TcLinkTo' :=        'TIIB[MRCO_PLC_E04_EL6692]^SYNC Inputs^TxPDO state
    '}
    xEcatBridge_TxPDO_state AT %I* : BOOL;

    //0: External device connected, 1: External device not connected
    {attribute 'TcLinkTo' :=        'TIIB[MRCO_PLC_E04_EL6692]^SYNC Inputs^External device not connected
    '}
    xEcatBridge_External_device_not_connected AT %I* : BOOL;

    //0 = Data valid, 1 = Data invalid
    {attribute 'TcLinkTo' :=        'TIIB[MRCO_PLC_E04_EL6692]^WcState^WcState
    '}
    xEcatBridge_WcState AT %I* : BOOL;

    (*I/O Inputs from TMO Beamline*)
    {attribute 'TcLinkTo' :=        'TIIB[MRCO_PLC_E04_EL6692]^IO Inputs^HUTCH_PLC_NAME
    '}
    sHUTCH_PLC_NAME AT %I* : STRING(8);

    {attribute 'TcLinkTo' :=        'TIIB[MRCO_PLC_E04_EL6692]^IO Inputs^TMO_ROUGH1_VRC_01_OPEN_LS
    '}
    xTMO_ROUGH1_VRC_01_OPEN_LS AT %I* : BOOL;

    {attribute 'TcLinkTo' :=        'TIIB[MRCO_PLC_E04_EL6692]^IO Inputs^TMO_ROUGH2_VRC_01_OPEN_LS
    '}
    xTMO_ROUGH2_VRC_01_OPEN_LS AT %I* : BOOL;


    (*I/O Outputs to TMO Beamline*)
    {attribute 'TcLinkTo' :=        'TIIB[MRCO_PLC_E04_EL6692]^IO Outputs^ENDSTATION_PLC_NAME
    '}
    sENDSTATION_PLC_NAME AT %Q* : STRING(8):= 'MRCO';

    {attribute 'TcLinkTo' :=        'TIIB[MRCO_PLC_E04_EL6692]^IO Outputs^IP1_ROUGH_VRC_01_OPEN_LS
    '}
    xIP1_ROUGH_VRC_01_OPEN_LS AT %Q* : BOOL;

    {attribute 'TcLinkTo' :=        'TIIB[MRCO_PLC_E04_EL6692]^IO Outputs^IP1_ROUGH_VRC_02_OPEN_LS
    '}
    xIP1_ROUGH_VRC_02_OPEN_LS AT %Q* : BOOL;

    {attribute 'TcLinkTo' :=        'TIIB[MRCO_PLC_E04_EL6692]^IO Outputs^IP1_ROUGH_VRC_03_OPEN_LS
    '}
    xIP1_ROUGH_VRC_03_OPEN_LS AT %Q* : BOOL;

    {attribute 'TcLinkTo' :=        'TIIB[MRCO_PLC_E04_EL6692]^IO Outputs^IP1_TURBOS_ALL_AtSpd
    '}
    {attribute 'pytmc' := '
        pv: PLC:MRCO:VAC:IP1_TURBOS_ALL_ATSPD
        io:i
    '}
    xIP1_TURBOS_ALL_AtSpd AT %Q* : BOOL;

    {attribute 'TcLinkTo' :=        'TIIB[MRCO_PLC_E04_EL6692]^IO Outputs^IP1_MAIN_xAT_VAC
    '}
    xIP1_MAIN_xAT_VAC AT %Q* : BOOL;

    {attribute 'TcLinkTo' :=        'TIIB[MRCO_PLC_E04_EL6692]^IO Outputs^IP1_MAIN_xPRESS_OK
    '}
    xIP1_MAIN_xPRESS_OK AT %Q* : BOOL;

    {attribute 'TcLinkTo' :=        'TIIB[MRCO_PLC_E04_EL6692]^IO Outputs^IP1_MAIN_rPRESS
    '}
    rIP1_MAIN_rPRESS AT %Q* : REAL;

    {attribute 'TcLinkTo' :=        'TIIB[MRCO_PLC_E04_EL6692]^IO Outputs^IP1_HV_SAFETY_ENABLE
    '}
    xIP1_HV_SAFETY_ENABLE AT %Q* : BOOL;


    (*ISEG HV Crate Safety Loop*)
    {attribute 'TcLinkTo' :=        'TIIB[MRCO_PLC_E09_EL2794]^Channel 1^Output
    '}
    {attribute 'pytmc' := '
        pv: PLC:MRCO:VAC:HV_SAFETY_ENABLE
        io:i
    '}
    xHighVoltageSafteyLoopEnable AT %Q* : BOOL := FALSE; (*When Enables the High voltage Saftey loop is closed and HV can start.*)
END_VAR

GVL_TC

//{attribute 'qualified_only'}
VAR_GLOBAL
    {attribute 'TcLinkTo' :=        '.iRaw                  :=      TIIB[MRCO_PLC_E10_EL3318]^TC Channel 1^Value;
                                 .bError            :=      TIIB[MRCO_PLC_E10_EL3318]^TC Channel 1^Status^Error;
                                 .bUnderrange       :=      TIIB[MRCO_PLC_E10_EL3318]^TC Channel 1^Status^Underrange;
                                 .bOverrange        :=      TIIB[MRCO_PLC_E10_EL3318]^TC Channel 1^Status^Overrange
    '}
    {attribute 'pytmc' := '
        pv: MRCO:STC:01
        io: io
    '}
    TC_01 : FB_TempSensor;
    {attribute 'TcLinkTo' :=        '.iRaw                  :=      TIIB[MRCO_PLC_E10_EL3318]^TC Channel 2^Value;
                                 .bError            :=      TIIB[MRCO_PLC_E10_EL3318]^TC Channel 2^Status^Error;
                                 .bUnderrange       :=      TIIB[MRCO_PLC_E10_EL3318]^TC Channel 2^Status^Underrange;
                                 .bOverrange        :=      TIIB[MRCO_PLC_E10_EL3318]^TC Channel 2^Status^Overrange
    '}
    {attribute 'pytmc' := '
        pv: MRCO:STC:02
        io: io
    '}
    TC_02 : FB_TempSensor;
    {attribute 'TcLinkTo' :=        '.iRaw                  :=      TIIB[MRCO_PLC_E10_EL3318]^TC Channel 3^Value;
                                 .bError            :=      TIIB[MRCO_PLC_E10_EL3318]^TC Channel 3^Status^Error;
                                 .bUnderrange       :=      TIIB[MRCO_PLC_E10_EL3318]^TC Channel 3^Status^Underrange;
                                 .bOverrange        :=      TIIB[MRCO_PLC_E10_EL3318]^TC Channel 3^Status^Overrange
    '}
    {attribute 'pytmc' := '
        pv: MRCO:STC:03
        io: io
    '}
    TC_03 : FB_TempSensor;
    {attribute 'TcLinkTo' :=        '.iRaw                  :=      TIIB[MRCO_PLC_E10_EL3318]^TC Channel 4^Value;
                                 .bError            :=      TIIB[MRCO_PLC_E10_EL3318]^TC Channel 4^Status^Error;
                                 .bUnderrange       :=      TIIB[MRCO_PLC_E10_EL3318]^TC Channel 4^Status^Underrange;
                                 .bOverrange        :=      TIIB[MRCO_PLC_E10_EL3318]^TC Channel 4^Status^Overrange
    '}
    {attribute 'pytmc' := '
        pv: MRCO:STC:04
        io: io
    '}
    TC_04 : FB_TempSensor;
    {attribute 'TcLinkTo' :=        '.iRaw                  :=      TIIB[MRCO_PLC_E10_EL3318]^TC Channel 5^Value;
                                 .bError            :=      TIIB[MRCO_PLC_E10_EL3318]^TC Channel 5^Status^Error;
                                 .bUnderrange       :=      TIIB[MRCO_PLC_E10_EL3318]^TC Channel 5^Status^Underrange;
                                 .bOverrange        :=      TIIB[MRCO_PLC_E10_EL3318]^TC Channel 5^Status^Overrange
    '}
    {attribute 'pytmc' := '
        pv: MRCO:STC:05
        io: io
    '}
    TC_05 : FB_TempSensor;
    {attribute 'TcLinkTo' :=        '.iRaw                  :=      TIIB[MRCO_PLC_E10_EL3318]^TC Channel 6^Value;
                                 .bError            :=      TIIB[MRCO_PLC_E10_EL3318]^TC Channel 6^Status^Error;
                                 .bUnderrange       :=      TIIB[MRCO_PLC_E10_EL3318]^TC Channel 6^Status^Underrange;
                                 .bOverrange        :=      TIIB[MRCO_PLC_E10_EL3318]^TC Channel 6^Status^Overrange
    '}
    {attribute 'pytmc' := '
        pv: MRCO:STC:06
        io: io
    '}
    TC_06 : FB_TempSensor;
    {attribute 'TcLinkTo' :=        '.iRaw                  :=      TIIB[MRCO_PLC_E10_EL3318]^TC Channel 7^Value;
                                 .bError            :=      TIIB[MRCO_PLC_E10_EL3318]^TC Channel 7^Status^Error;
                                 .bUnderrange       :=      TIIB[MRCO_PLC_E10_EL3318]^TC Channel 7^Status^Underrange;
                                 .bOverrange        :=      TIIB[MRCO_PLC_E10_EL3318]^TC Channel 7^Status^Overrange
    '}
    {attribute 'pytmc' := '
        pv: MRCO:STC:07
        io: io
    '}
    TC_07 : FB_TempSensor;
    {attribute 'TcLinkTo' :=        '.iRaw                  :=      TIIB[MRCO_PLC_E10_EL3318]^TC Channel 8^Value;
                                 .bError            :=      TIIB[MRCO_PLC_E10_EL3318]^TC Channel 8^Status^Error;
                                 .bUnderrange       :=      TIIB[MRCO_PLC_E10_EL3318]^TC Channel 8^Status^Underrange;
                                 .bOverrange        :=      TIIB[MRCO_PLC_E10_EL3318]^TC Channel 8^Status^Overrange
    '}
    {attribute 'pytmc' := '
        pv: MRCO:STC:08
        io: io
    '}
    TC_08 : FB_TempSensor;
END_VAR

GVL_Variables

//{attribute 'qualified_only'}
VAR_GLOBAL
    {attribute 'pytmc' := '
        pv: PLC:MRCO:VAC:OVRDON
        io: io
    '}
    xSystemOverrideMode_MRCO        : BOOL := FALSE;

    {attribute 'pytmc' := '
        pv: PLC:MRCO:ON:BEAMLINE
        io:i
    '}
    xOnBeamline :   BOOL := FALSE;

    rHighVoltageMinPressure : REAL := 1e-05; (*Hard coded High voltage Minimum Enable Pressure*)

END_VAR

POUs

DIAGNOSTICS

PROGRAM DIAGNOSTICS
VAR
    //Change the PLC String Name to the actual PLC NAME
    sPLCName :STRING := 'PLC-MRCO-VAC-01';
    //Link the sAMSNetID to the Etherat Master netID
    i_sAMSNetID AT %I*: AMSNETID;
    // DO NOT CHANGE
    sAMSNetID : STRING; //used for EPICS PV
    sLibVersion_LCLS_General : STRING;(* := stLibVersion_LCLS_General.sVersion*) ;
    fbEcatDiag:FB_EcatDiag;
    bAllSlaveStateGood : BOOL;
    bMasterStateGood :BOOL;
    iMasterState: WORD;
    sMasterState:STRING;
    nSlaveNumber : UINT;
    aiSlaveStates: ARRAY[1..256] OF BYTE;
    aEcSlaveInfo :  ARRAY[1..256] OF ST_EcDevice;
END_VAR
// Instaniating a call to the fbEcatDiag
fbEcatDiag(
    I_AMSNetId:=i_sAMSNetID ,
    i_xFirstPass:= _TaskInfo[1].FirstCycle,
    q_xAllSlaveStatesGood=> bAllSlaveStateGood ,
    q_anTermStates=> aiSlaveStates,
    q_xMasterStateGood=>bMasterStateGood ,
    q_nMasterState=> iMasterState,
    q_sMasterState=> sMasterState ,
    q_astEcConfSlaveInfo=> aEcSlaveInfo ,
    q_nSlaves=> nSlaveNumber);

END_PROGRAM

F_Turbo_NC_NO_Valve_Logic

FUNCTION F_Turbo_NC_NO_Valve_Logic : BOOL
VAR_INPUT
    i_stTurbo : ST_PTM; // Turbo Pump
    i_stISG : ST_VG; //Gauge measuring inlet Pressure e.g Pirani
    i_stBSG : ST_VG; //Gauge measureing backing pressure
    iq_stValve_NO : ST_VRC_NO; //Normally Open Valve directly sharing turbo pump vaccum volume.
    iq_stValve_NC : ST_VRC; //Normally Closed Valve directly sharing turbo pump vaccum volume.
    iq_stValve_NC_second :  ST_VRC; //Normally Closed Valve on the other side of NO valve that also connects to roughing line.
    EcatBridge_Error_Present        :       BOOL; // ADS Communication: Watchdog and ADS Read Error Bit
    iq_stRoughRoughValve_NC_xOpnLS: BOOL; //Normally Closed Valve Downstream of iq_stValve_NC in Beamline Roughing Line, Open Limit Switch.
    iq_stRoughRoughValve_NC_second_xOpenLS: BOOL; //Normally Closed Valve Downstream of iq_stValve_NC_second in Beamline Roughing Line, Open Limit Switch.
    x_onBeamline :  BOOL; //Whether the  Turbopump/Endstation is mounted on the beamline or not.
END_VAR
VAR
END_VAR
IF (x_onBeamline) THEN
    F_Turbo_NC_NO_Valve_Logic := (i_stISG.xPRESS_OK AND i_stISG.rPRESS < i_stTurbo.rInletPressureSP) AND
                                    (i_stBSG.xPRESS_OK AND i_stBSG.rPRESS < i_stTurbo.rBackingPressureSP) AND
                                 ((iq_stValve_NC.i_xOpnLS AND iq_stRoughRoughValve_NC_xOpnLS) OR
                                 (iq_stValve_NO.i_xOpnLS AND (iq_stValve_NC_second.i_xOpnLS AND
                                 iq_stRoughRoughValve_NC_second_xOpenLS)))AND (NOT EcatBridge_Error_Present);
ELSE
    F_Turbo_NC_NO_Valve_Logic := (i_stISG.xPRESS_OK AND i_stISG.rPRESS < i_stTurbo.rInletPressureSP) AND
                           (i_stBSG.xPRESS_OK AND i_stBSG.rPRESS < i_stTurbo.rBackingPressureSP) AND
                            (iq_stValve_NC.i_xOpnLS OR (iq_stValve_NO.i_xOpnLS AND iq_stValve_NC_second.i_xOpnLS));
END_IF

END_FUNCTION

MAIN

PROGRAM MAIN
VAR
    fbLogHandler : FB_LogHandler;

    //TMO Interface
    xEcatBridge_COM_ERROR : BOOL;
    b_TurboPumpRunningFlag : BOOL;
    TurboPumpTOF : TOF;
    TurboPumpDelayTime : TIME := T#30s;

    fbGetCurTaskIndex : GETCURTASKINDEX;

    F_Turbo_TESTY: BOOL;
END_VAR
IF (xOnBeamline) THEN
    F_Turbo_TESTY := (MRCO_MAIN_GPI_01.PG.xPRESS_OK AND MRCO_MAIN_GPI_01.PG.rPRESS < MRCO_ROUGH_PTM_01.iq_stPtm.rInletPressureSP) AND
                                    (MRCO_ROUGH_GPI_02.PG.xPRESS_OK AND MRCO_ROUGH_GPI_02.PG.rPRESS < MRCO_ROUGH_PTM_01.iq_stPtm.rBackingPressureSP) AND
                                 ((MRCO_ROUGH_VRC_01.iq_stValve.i_xOpnLS AND xTMO_ROUGH2_VRC_01_OPEN_LS) OR
                                 (MRCO_ROUGH_VRC_02.iq_stValve.i_xOpnLS AND (MRCO_ROUGH_VRC_03.iq_stValve.i_xOpnLS AND
                                 xTMO_ROUGH1_VRC_01_OPEN_LS)))AND (NOT xEcatBridge_COM_ERROR);
ELSE
    F_Turbo_TESTY := (MRCO_MAIN_GPI_01.PG.xPRESS_OK AND MRCO_MAIN_GPI_01.PG.rPRESS < MRCO_ROUGH_PTM_01.iq_stPtm.rInletPressureSP) AND
                                    (MRCO_ROUGH_GPI_02.PG.xPRESS_OK AND MRCO_ROUGH_GPI_02.PG.rPRESS < MRCO_ROUGH_PTM_01.iq_stPtm.rBackingPressureSP) AND
                                 (MRCO_ROUGH_VRC_01.iq_stValve.i_xOpnLS OR MRCO_ROUGH_VRC_02.iq_stValve.i_xOpnLS OR MRCO_ROUGH_VRC_03.iq_stValve.i_xOpnLS);
END_IF

///
fbLogHandler();
// Run the Diagnostics PRG
DIAGNOSTICS();

(*EtherCAT Bridge Status*)
//xEcatBridge_COM_ERROR := TRUE means that there is an EtherCAT Bridge Communication error.
xEcatBridge_COM_ERROR := (xEcatBridge_TxPDO_state OR xEcatBridge_External_device_not_connected OR xEcatBridge_WcState);

xOnBeamline := (xEcatBridge_COM_ERROR = FALSE) AND (sHUTCH_PLC_NAME = 'TMO');

(*TurboPump running Flag with 30 second Turn Off delay.*)
b_TurboPumpRunningFlag :=
    (MRCO_MAIN_PTM_01.iq_stPtm.eState = E_PumpState.pumpRUNNING)  AND
    (MRCO_MAIN_PTM_02.iq_stPtm.eState = E_PumpState.pumpRUNNING) AND
    (MRCO_MAIN_PTM_03.iq_stPtm.eState = E_PumpState.pumpRUNNING) AND
    (MRCO_MAIN_PTM_04.iq_stPtm.eState = E_PumpState.pumpRUNNING) AND
    (MRCO_ROUGH_PTM_01.iq_stPtm.eState = E_PumpState.pumpRUNNING);
TurboPumpTOF(IN:= b_TurboPumpRunningFlag, PT := TurboPumpDelayTime);
xIP1_TURBOS_ALL_AtSpd:= TurboPumpTOF.Q;
(*High Voltage Saftey Loop*)// rHighVoltageMinPressure = 1e-05; (*Hard coded High voltage Minimum Enable Pressure*)
xHighVoltageSafteyLoopEnable:= (MRCO_MAIN_GHC_01.IG.rPRESS <= rHighVoltageMinPressure) AND (MRCO_MAIN_GHC_01.IG.xPRESS_OK = TRUE);

(*PIRANI Gauges*)
    MRCO_MAIN_GPI_01.M_SetBits(32767);
    MRCO_MAIN_GPI_01(PG=>);

(*uPIRANI Gauges*)
    MRCO_ROUGH_GPI_01.M_SetBits(32767);
    MRCO_ROUGH_GPI_01(PG=>);
    MRCO_ROUGH_GPI_02.M_SetBits(32767);
    MRCO_ROUGH_GPI_02(PG=>);
    MRCO_ROUGH_GPI_03.M_SetBits(32767);
    MRCO_ROUGH_GPI_03(PG=>);
    MRCO_ROUGH_GPI_04.M_SetBits(32767);
    MRCO_ROUGH_GPI_04(PG=>);

(*Cold Cathode Gauges*)

(*Hot Cathode Gauges*)
    MRCO_MAIN_GHC_01.M_SetBits(32767);
    MRCO_MAIN_GHC_01(PG:=MRCO_MAIN_GPI_01.PG,IG=>);

(*Variable Leak Valve*)
    MRCO_VCN_01(bExtIlkOK:= TRUE, IG := MRCO_MAIN_GHC_01.IG);

(*TURBO Pumps
*In general, if turbo pump setpoints are above the pirani guage readings or there is no downstream open path to a roughing pump, the turbo pump will close.
*
*)
    MRCO_MAIN_PTM_01(i_xExtILKOk:= F_Turbo_NC_NO_Valve_Logic(
                        i_stTurbo:= MRCO_MAIN_PTM_01.iq_stPtm,
                        i_stISG:= MRCO_MAIN_GPI_01.PG,
                        i_stBSG:= MRCO_ROUGH_GPI_02.PG,
                        iq_stValve_NO:= MRCO_ROUGH_VRC_02.iq_stValve,
                        iq_stValve_NC:= MRCO_ROUGH_VRC_01.iq_stValve,
                        iq_stValve_NC_second:= MRCO_ROUGH_VRC_03.iq_stValve,
                        EcatBridge_Error_Present:= xEcatBridge_COM_ERROR,
                        iq_stRoughRoughValve_NC_xOpnLS:= xTMO_ROUGH2_VRC_01_OPEN_LS,
                        iq_stRoughRoughValve_NC_second_xOpenLS:=xTMO_ROUGH1_VRC_01_OPEN_LS,
                        x_onBeamline:= xOnBeamline),
                    iq_stPtm=> );

    MRCO_MAIN_PTM_02(i_xExtILKOk:= F_Turbo_NC_NO_Valve_Logic(
                        i_stTurbo:= MRCO_MAIN_PTM_02.iq_stPtm,
                        i_stISG:= MRCO_MAIN_GPI_01.PG,
                        i_stBSG:= MRCO_ROUGH_GPI_02.PG,
                        iq_stValve_NO:= MRCO_ROUGH_VRC_02.iq_stValve,
                        iq_stValve_NC:= MRCO_ROUGH_VRC_01.iq_stValve,
                        iq_stValve_NC_second:= MRCO_ROUGH_VRC_03.iq_stValve,
                        EcatBridge_Error_Present:= xEcatBridge_COM_ERROR,
                        iq_stRoughRoughValve_NC_xOpnLS:= xTMO_ROUGH2_VRC_01_OPEN_LS,
                        iq_stRoughRoughValve_NC_second_xOpenLS:=xTMO_ROUGH1_VRC_01_OPEN_LS,
                        x_onBeamline:= xOnBeamline),
                    iq_stPtm=> );

    MRCO_MAIN_PTM_03(i_xExtILKOk:= F_Turbo_NC_NO_Valve_Logic(
                        i_stTurbo:= MRCO_MAIN_PTM_03.iq_stPtm,
                        i_stISG:= MRCO_MAIN_GPI_01.PG,
                        i_stBSG:= MRCO_ROUGH_GPI_02.PG,
                        iq_stValve_NO:= MRCO_ROUGH_VRC_02.iq_stValve,
                        iq_stValve_NC:= MRCO_ROUGH_VRC_01.iq_stValve,
                        iq_stValve_NC_second:= MRCO_ROUGH_VRC_03.iq_stValve,
                        EcatBridge_Error_Present:= xEcatBridge_COM_ERROR,
                        iq_stRoughRoughValve_NC_xOpnLS:= xTMO_ROUGH2_VRC_01_OPEN_LS,
                        iq_stRoughRoughValve_NC_second_xOpenLS:=xTMO_ROUGH1_VRC_01_OPEN_LS,
                        x_onBeamline:= xOnBeamline),
                    iq_stPtm=> );

    MRCO_MAIN_PTM_04(i_xExtILKOk:= F_Turbo_NC_NO_Valve_Logic(
                        i_stTurbo:= MRCO_MAIN_PTM_04.iq_stPtm,
                        i_stISG:= MRCO_MAIN_GPI_01.PG,
                        i_stBSG:= MRCO_ROUGH_GPI_02.PG,
                        iq_stValve_NO:= MRCO_ROUGH_VRC_02.iq_stValve,
                        iq_stValve_NC:= MRCO_ROUGH_VRC_01.iq_stValve,
                        iq_stValve_NC_second:= MRCO_ROUGH_VRC_03.iq_stValve,
                        EcatBridge_Error_Present:= xEcatBridge_COM_ERROR,
                        iq_stRoughRoughValve_NC_xOpnLS:= xTMO_ROUGH2_VRC_01_OPEN_LS,
                        iq_stRoughRoughValve_NC_second_xOpenLS:=xTMO_ROUGH1_VRC_01_OPEN_LS,
                        x_onBeamline:= xOnBeamline),
                    iq_stPtm=> );

    MRCO_ROUGH_PTM_01(i_xExtILKOk:= F_Turbo_NC_NO_Valve_Logic(
                        i_stTurbo:= MRCO_ROUGH_PTM_01.iq_stPtm,
                        i_stISG:= MRCO_MAIN_GPI_01.PG,
                        i_stBSG:= MRCO_ROUGH_GPI_02.PG,
                        iq_stValve_NO:= MRCO_ROUGH_VRC_02.iq_stValve,
                        iq_stValve_NC:= MRCO_ROUGH_VRC_01.iq_stValve,
                        iq_stValve_NC_second:= MRCO_ROUGH_VRC_03.iq_stValve,
                        EcatBridge_Error_Present:= xEcatBridge_COM_ERROR,
                        iq_stRoughRoughValve_NC_xOpnLS:= xTMO_ROUGH2_VRC_01_OPEN_LS,
                        iq_stRoughRoughValve_NC_second_xOpenLS:=xTMO_ROUGH1_VRC_01_OPEN_LS,
                        x_onBeamline:= xOnBeamline),
                    iq_stPtm=> );

(*Serial Communication*)
(*Assign adresses to the pfeiffer controllers connected to this serial terminal*)
st_Pfeiffer_CTRL_MRCO_ROUGH_PTM_01[1].iSerialAddress :=1;
st_Pfeiffer_CTRL_MRCO_ROUGH_PTM_01[1].xEnableComm := TRUE;
(* Instanitate the Function block for serial communication with Pfeiffer*)
fb_PfeifferCom_MRCO_ROUGH_PTM_01(astPfeifferControl := st_Pfeiffer_CTRL_MRCO_ROUGH_PTM_01,
                                 astPfeifferStatus:= st_Pfeiffer_RBK_MRCO_ROUGH_PTM_01,
                              SerialRXBuffer:= SerialRXBuffer_MRCO_ROUGH_PTM_01,
                              SerialTXBuffer:= SerialTXBuffer_MRCO_ROUGH_PTM_01);
(* Copy Status Pv's into the PTM structure*)
MRCO_ROUGH_PTM_01.M_Serial_IO(st_Pfeiffer_RBK:= st_Pfeiffer_RBK_MRCO_ROUGH_PTM_01[1], st_Pfeiffer_CTRL:= st_Pfeiffer_CTRL_MRCO_ROUGH_PTM_01[1]);

//Leybolds
fb_TD20Com_MRCO_MAIN_PTM_01(SerialRXBuffer:= SerialRXBuffer_MRCO_MAIN_PTM_01,
                                                    SerialTXBuffer:= SerialTXBuffer_MRCO_MAIN_PTM_01,
                                                    astTD20Status=> st_TD20_RBK_MRCO_MAIN_PTM_01);
MRCO_MAIN_PTM_01.M_Serial_IO(i_st_TD20_RBK:= st_TD20_RBK_MRCO_MAIN_PTM_01);

fb_TD20Com_MRCO_MAIN_PTM_02(SerialRXBuffer:= SerialRXBuffer_MRCO_MAIN_PTM_02,
                                                    SerialTXBuffer:= SerialTXBuffer_MRCO_MAIN_PTM_02,
                                                    astTD20Status=> st_TD20_RBK_MRCO_MAIN_PTM_02);
MRCO_MAIN_PTM_02.M_Serial_IO(i_st_TD20_RBK:= st_TD20_RBK_MRCO_MAIN_PTM_02);

fb_TD20Com_MRCO_MAIN_PTM_03(SerialRXBuffer:= SerialRXBuffer_MRCO_MAIN_PTM_03,
                                                    SerialTXBuffer:= SerialTXBuffer_MRCO_MAIN_PTM_03,
                                                    astTD20Status=> st_TD20_RBK_MRCO_MAIN_PTM_03);
MRCO_MAIN_PTM_03.M_Serial_IO(i_st_TD20_RBK:= st_TD20_RBK_MRCO_MAIN_PTM_03);

fb_TD20Com_MRCO_MAIN_PTM_04(SerialRXBuffer:= SerialRXBuffer_MRCO_MAIN_PTM_04,
                                                    SerialTXBuffer:= SerialTXBuffer_MRCO_MAIN_PTM_04,
                                                    astTD20Status=> st_TD20_RBK_MRCO_MAIN_PTM_04);
MRCO_MAIN_PTM_04.M_Serial_IO(i_st_TD20_RBK:= st_TD20_RBK_MRCO_MAIN_PTM_04);

(*Vacuum Gate Valve*)
    fbGetCurTaskIndex();//getting index for first cycle of PLC operation

    //VRC-Normally Closed
    //If OnBeamline then stay open.
    IF(xOnBeamline) THEN
        MRCO_ROUGH_VRC_01.M_Set_OPN_SW(TRUE);
        MRCO_ROUGH_VRC_01(
        i_xExtILK_OK:= TRUE,
        i_xOverrideMode:= xSystemOverrideMode_MRCO,
        iq_stValve=> );
    ELSE
        //MRCO:ROUGH:VRC:01 can open when the pressure across the valve is below 10 torr //add the beamline
        MRCO_ROUGH_VRC_01(
        i_xExtILK_OK:= (ABS(MRCO_ROUGH_GPI_01.PG.rPRESS - MRCO_ROUGH_GPI_02.PG.rPRESS)<150.0), // change back after setuplab testing
        i_xOverrideMode:= xSystemOverrideMode_MRCO,
        iq_stValve=> );
    END_IF


    //Normally Open Bypass Valve
    IF(xOnBeamline) THEN
        MRCO_ROUGH_VRC_02.M_Set_CLS_SW(FALSE);
    ELSIF (NOT xOnBeamline AND _TaskInfo[fbGetCurTaskIndex.index].FirstCycle OR (ABS(MRCO_ROUGH_GPI_02.PG.rPRESS - MRCO_ROUGH_GPI_04.PG.rPRESS)>1000.0) ) THEN
        MRCO_ROUGH_VRC_02.M_Set_CLS_SW(TRUE);
    END_IF

    MRCO_ROUGH_VRC_02(
    i_xExtILK_OK:= TRUE,
    i_xOverrideMode:= xSystemOverrideMode_MRCO,
    iq_stValve=> );


    //VRC-Normally Closed
    //If OnBeamline then stay open.
    IF(xOnBeamline) THEN
        MRCO_ROUGH_VRC_03.M_Set_OPN_SW(TRUE);
        MRCO_ROUGH_VRC_03(
        i_xExtILK_OK:= TRUE,
        i_xOverrideMode:= xSystemOverrideMode_MRCO,
        iq_stValve=> );
    ELSE
        MRCO_ROUGH_VRC_03(//CVMI:ROUGH:VRC:03 can open when the pressure across the valve is below 10 torr //add the beamline
        i_xExtILK_OK:= (ABS(MRCO_ROUGH_GPI_03.PG.rPRESS - MRCO_ROUGH_GPI_04.PG.rPRESS)<1000.0), // Change back after setup lab testing
        i_xOverrideMode:= xSystemOverrideMode_MRCO,
        iq_stValve=> );
    END_IF

(*Update EtherCAT Bridge Outputs*)

xIP1_ROUGH_VRC_01_OPEN_LS   :=      MRCO_ROUGH_VRC_01.M_IsOpen();
xIP1_ROUGH_VRC_02_OPEN_LS   :=      MRCO_ROUGH_VRC_02.M_IsOpen();
xIP1_ROUGH_VRC_03_OPEN_LS   :=      MRCO_ROUGH_VRC_03.M_IsOpen();
//xIP1_TURBO_FAULT AT %Q* : BOOL; already updated at turbo pump logic.
xIP1_MAIN_xAT_VAC                   :=      MRCO_MAIN_GHC_01.IG.xAT_VAC;
xIP1_MAIN_xPRESS_OK                 :=      MRCO_MAIN_GHC_01.IG.xPRESS_OK;
rIP1_MAIN_rPRESS                    :=      MRCO_MAIN_GHC_01.IG.rPRESS;
xIP1_HV_SAFETY_ENABLE               :=      xHighVoltageSafteyLoopEnable;

(*Update Thermocouple Readings*)
PRG_TC();

END_PROGRAM
Related:

PRG_COM

PROGRAM PRG_COM
VAR
END_VAR
(*Instanitate Serial port com function *)
fbSerialLineControl_MRCO_MAIN_PTM_01(
    Mode:= SERIALLINEMODE_EL6_22B,
    pComIn:= ADR(stComIn_MRCO_MAIN_PTM_01),
    pComOut:=ADR(stComOut_MRCO_MAIN_PTM_01),
    SizeComIn:= UINT_TO_INT(SIZEOF(stComIn_MRCO_MAIN_PTM_01)),
    TxBuffer:= SerialTXBuffer_MRCO_MAIN_PTM_01,
    RxBuffer:= SerialRXBuffer_MRCO_MAIN_PTM_01,
    Error=> ,
    ErrorID=> );

fbSerialLineControl_MRCO_MAIN_PTM_02(
    Mode:= SERIALLINEMODE_EL6_22B,
    pComIn:= ADR(stComIn_MRCO_MAIN_PTM_02),
    pComOut:=ADR(stComOut_MRCO_MAIN_PTM_02),
    SizeComIn:= UINT_TO_INT(SIZEOF(stComIn_MRCO_MAIN_PTM_02)),
    TxBuffer:= SerialTXBuffer_MRCO_MAIN_PTM_02,
    RxBuffer:= SerialRXBuffer_MRCO_MAIN_PTM_02,
    Error=> ,
    ErrorID=> );

fbSerialLineControl_MRCO_MAIN_PTM_03(
    Mode:= SERIALLINEMODE_EL6_22B,
    pComIn:= ADR(stComIn_MRCO_MAIN_PTM_03),
    pComOut:=ADR(stComOut_MRCO_MAIN_PTM_03),
    SizeComIn:= UINT_TO_INT(SIZEOF(stComIn_MRCO_MAIN_PTM_03)),
    TxBuffer:= SerialTXBuffer_MRCO_MAIN_PTM_03,
    RxBuffer:= SerialRXBuffer_MRCO_MAIN_PTM_03,
    Error=> ,
    ErrorID=> );

fbSerialLineControl_MRCO_MAIN_PTM_04(
    Mode:= SERIALLINEMODE_EL6_22B,
    pComIn:= ADR(stComIn_MRCO_MAIN_PTM_04),
    pComOut:=ADR(stComOut_MRCO_MAIN_PTM_04),
    SizeComIn:= UINT_TO_INT(SIZEOF(stComIn_MRCO_MAIN_PTM_04)),
    TxBuffer:= SerialTXBuffer_MRCO_MAIN_PTM_04,
    RxBuffer:= SerialRXBuffer_MRCO_MAIN_PTM_04,
    Error=> ,
    ErrorID=> );

fbSerialLineControl_MRCO_ROUGH_PTM_01(
    Mode:= SERIALLINEMODE_EL6_22B,
    pComIn:= ADR(stComIn_MRCO_ROUGH_PTM_01),
    pComOut:=ADR(stComOut_MRCO_ROUGH_PTM_01),
    SizeComIn:= UINT_TO_INT(SIZEOF(stComIn_MRCO_ROUGH_PTM_01)),
    TxBuffer:= SerialTXBuffer_MRCO_ROUGH_PTM_01,
    RxBuffer:= SerialRXBuffer_MRCO_ROUGH_PTM_01,
    Error=> ,
    ErrorID=> );

END_PROGRAM

PRG_TC

PROGRAM PRG_TC
VAR
END_VAR
TC_01(
    fResolution:= ,
    fTemp=> ,
    bConnected=> ,
    bError=> ,
    bUnderrange=> ,
    bOverrange=> );
TC_02(
    fResolution:= ,
    fTemp=> ,
    bConnected=> ,
    bError=> ,
    bUnderrange=> ,
    bOverrange=> );
TC_03(
    fResolution:= ,
    fTemp=> ,
    bConnected=> ,
    bError=> ,
    bUnderrange=> ,
    bOverrange=> );
TC_04(
    fResolution:= ,
    fTemp=> ,
    bConnected=> ,
    bError=> ,
    bUnderrange=> ,
    bOverrange=> );
TC_05(
    fResolution:= ,
    fTemp=> ,
    bConnected=> ,
    bError=> ,
    bUnderrange=> ,
    bOverrange=> );
TC_06(
    fResolution:= ,
    fTemp=> ,
    bConnected=> ,
    bError=> ,
    bUnderrange=> ,
    bOverrange=> );
TC_07(
    fResolution:= ,
    fTemp=> ,
    bConnected=> ,
    bError=> ,
    bUnderrange=> ,
    bOverrange=> );
TC_08(
    fResolution:= ,
    fTemp=> ,
    bConnected=> ,
    bError=> ,
    bUnderrange=> ,
    bOverrange=> );

END_PROGRAM