DUTs

E_STATES

{attribute 'qualified_only'}
{attribute 'strict'}
TYPE E_STATES :
(
    INIT := 0,
    SETUP,
    OVERRIDE,
    READY,
    NOT_SAFE
);
END_TYPE
Related:

GVLs

Global_Version

{attribute 'TcGenerated'}
{attribute 'no-analysis'}
{attribute 'linkalways'}
// This function has been automatically generated from the project information.
VAR_GLOBAL CONSTANT
    {attribute 'const_non_replaced'}
    stLibVersion_plc_qrix_vac : ST_LibVersion := (iMajor := 1, iMinor := 0, iBuild := 0, iRevision := 0, nFlags := 1, sVersion := '1.0.0');
END_VAR

GVL_COM

VAR_GLOBAL
        // Define COM Ports/Buffers incl. library Tc2_SerialCom
        //Pfeiffers on the sample chamber
    SerialRXBuffer : ComBuffer;
    SerialTXBuffer : ComBuffer;

    // Serial Terminal
    E14_fbSerialLineControl: SerialLineControl;

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


    // Define COM Ports/Buffers incl. library Tc2_SerialCom
    E2_SerialRXBuffer : ComBuffer;
    E2_SerialTXBuffer : ComBuffer;

    // Serial Terminal
    E2_fbSerialLineControl: SerialLineControl;

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

    // They share the same serial port on the sample chamber
    st_Pfeiffer_CTRL                        : ARRAY[1..20] OF ST_PfeifferControl;
    st_Pfeiffer_RBK                         : ARRAY[1..20] OF ST_PfeifferStatus;
    fb_PfeifferCom : FB_PFEIFFER_COM;
END_VAR

GVL_Devices

//{attribute 'qualified_only'}
VAR_GLOBAL

// Gauges
{attribute 'pytmc' := ' pv: QRIXS:ROUGH:GPI:02 '}
{attribute 'TcLinkTo' :=    '.i_iPRESS_R    :=      TIIB[EL3174_00_09]^AI Standard Channel 1^Value'}
qRIXS_ROUGH_GPI_02 : FB_MKS275;

{attribute 'pytmc' := ' pv: QRIXS:ROUGH:GPI:11 '}
{attribute 'TcLinkTo' :=    '.i_iPRESS_R    :=      TIIB[qRIXS_PNL1_E9_EL3174-0002]^AI Standard Channel 1^Value'}
qRIXS_ROUGH_GPI_11 : FB_MKS275;
{attribute 'pytmc' := ' pv: QRIXS:ROUGH:GPI:12 '}
{attribute 'TcLinkTo' :=    '.i_iPRESS_R    :=      TIIB[qRIXS_PNL1_E7_EL3174-0002]^AI Standard Channel 2^Value'}
qRIXS_ROUGH_GPI_12 : FB_MKS275;
{attribute 'pytmc' := ' pv: QRIXS:ROUGH:GPI:21 '}
{attribute 'TcLinkTo' :=    '.i_iPRESS_R    :=      TIIB[qRIXS_PNL1_E7_EL3174-0002]^AI Standard Channel 3^Value'}
qRIXS_ROUGH_GPI_21 : FB_MKS275;

// Gauges
//GCC
{attribute 'TcLinkTo' :=    '    .i_iPRESS_R                :=      TIIB[EL3174-0002_01_23]^AI Standard Channel 1^Value;
                                 .i_xHV_ON                  :=      TIIB[EL1124_01_22]^Channel 1^Input;
                                 .i_xDisc_Active    :=      TIIB[EL1124_01_22]^Channel 2^Input;
                                 .q_xHV_DIS                 :=      TIIB[EL2624_01_18]^Channel 1^Output
    '}
    {attribute 'pytmc' := '
        pv: QRIXS:SC:GCC:01 '}
qRIXS_SC_GCC_01: FB_MKS500;
//GPI
{attribute 'pytmc' := ' pv: QRIXS:SC:GPI:01 '}
{attribute 'TcLinkTo' :=    '.i_iPRESS_R    :=      TIIB[EL3174-0002_01_23]^AI Standard Channel 2^Value'}
qRIXS_SC_GPI_01 : FB_MKS275;
{attribute 'pytmc' := ' pv: QRIXS:ROUGH:GPI:31 '}
{attribute 'TcLinkTo' :=    '.i_iPRESS_R    :=      TIIB[EL3174-0002_01_23]^AI Standard Channel 3^Value'}
qRIXS_ROUGH_GPI_31 : FB_MKS275;

(* MKS972 - Full range guage *)
{attribute 'TcLinkTo' :=    '.i_iPRESS_R    :=              TIIB[EL3174-0002_02_13]^AI Standard Channel 2^Value'}
{attribute 'pytmc' := '
    pv: QRIXS:SA:GCP:02
    io: io
'}
qRIXS_SA_GCP_02: FB_972;

{attribute 'pytmc' := '
    pv: QRIXS:SSL:GCP:20
    io: io
'}
{attribute 'TcLinkTo' :=    '.i_iPRESS_R    :=      TIIB[EL3174-0002_01_24]^AI Standard Channel 1^Value'}
qRIXS_SSL_GCP_20: FB_972;

{attribute 'pytmc' := '
    pv: QRIXS:SSL:GCP:30
    io: io
'}
{attribute 'TcLinkTo' :=    '.i_iPRESS_R    :=      TIIB[EL3174-0002_01_24]^AI Standard Channel 2^Value'}
qRIXS_SSL_GCP_30: FB_972;

{attribute 'pytmc' := ' pv: QRIXS:SDS:GCP:01 '}
{attribute 'TcLinkTo' :=    '.i_iPRESS_R    :=      TIIB[EL3174-0002_02_13]^AI Standard Channel 1^Value'}
qRIXS_SDS_GCP_01 : FB_972;

//MKS-275

{attribute 'pytmc' := ' pv: QRIXS:ROUGH:GPI:04 '}
{attribute 'TcLinkTo' :=    '.i_iPRESS_R    :=      TIIB[EL3174-0002_02_13]^AI Standard Channel 3^Value'}
qRIXS_ROUGH_GPI_04 : FB_MKS275;




//Valves
{attribute 'TcLinkTo' :=    '.i_xOpnLS      :=      TIIB[EL1004_00_12]^Channel 1^Input;
                             .i_xClsLS      :=      TIIB[EL1004_00_12]^Channel 2^Input;
                             .q_xOPN_DO     :=      TIIB[EL2004_00_13]^Channel 1^Output
    '}
{attribute 'pytmc' := '
        pv: QRIXS:ROUGH:VRC:01
        io: io
    '}
qRIXS_ROUGH_VRC_01: FB_VRC;
{attribute 'TcLinkTo' :=    '.i_xOpnLS      :=      TIIB[EL1004_00_12]^Channel 3^Input;
                             .i_xClsLS      :=      TIIB[EL1004_00_12]^Channel 4^Input;
                             .q_xOPN_DO     :=      TIIB[EL2004_00_13]^Channel 2^Output
    '}
{attribute 'pytmc' := '
        pv: QRIXS:ROUGH:VRC:02
        io: io
    '}
qRIXS_ROUGH_VRC_02: FB_VRC;
(*{attribute 'pytmc' := '
    pv: QRIXS:SA:VRC:01
'}
qRIXS_SA_VRC_01 : FB_VRC_NO_FFO; // Is the Window valve NO
*)
(* MOved to PAX
//// Connected to B950-310-WALL-W-DRL-02 (Mechanical Room )
{attribute 'pytmc' := ' pv: QRIXS:PRO:01 '}
{attribute 'TcLinkTo' := '.q_xMPStart := TIIB[EL2794_03_03]^Channel 1^Output;
                          .q_xBPStart := TIIB[EL2794_03_03]^Channel 2^Output;
                          .i_xMPStatus := TIIB[EL1088_03_01]^Channel 1^Input;
                          .i_xBPStatus := TIIB[EL1088_03_01]^Channel 2^Input;
                          .i_xWarning := TIIB[EL1088_03_01]^Channel 3^Input;
                          .i_xAlarmOK := TIIB[EL1088_03_01]^Channel 4^Input;
                          .i_xRemote := TIIB (EL1088_03_01]^Channel 5^Input
'}
qRIXS_PRO_01 : FB_EbaraDryPump;
{attribute 'pytmc' := ' pv: QRIXS:ROUGH:GPI:01 '}
{attribute 'TcLinkTo' :=    '.i_iPRESS_R    :=      TIIB[EL3174-0002_03_07]^AI Standard Channel 4^Value'}
qRIXS_ROUGH_GPI_01 : FB_MKS275;

//VRO
{attribute 'pytmc' := ' pv: QRIXS:ROUGH:VRO:01 '}
{attribute 'TcLinkTo' :=    '.q_xOPN_DO     :=      TIIB[EL2212_03_04]^DOX Control Channel 1^Control^Output'}
QRIX_ROUGH_VRO_01 : FB_VVC;
*)

qRIXS_ROUGH_GPI_01:FB_TGPI_ADS;
qRIXS_PRO_01:FB_PRO_ADS;

//VRC
{attribute 'TcLinkTo' :=    '.i_xOpnLS      :=      TIIB[EL1004_01_01]^Channel 1^Input;
                            .i_xClsLS       :=      TIIB[EL1004_01_01]^Channel 2^Input;
                            .q_xOPN_DO      :=      TIIB[EL2004_01_02]^Channel 1^Output
'}
{attribute 'pytmc' := ' pv: QRIXS:SC:VRC:10 '}
qRIXS_SC_VRC_10 : FB_VRC;

{attribute 'TcLinkTo' :=    '.i_xOpnLS      :=      TIIB[EL1004_01_01]^Channel 3^Input;
                            .i_xClsLS       :=      TIIB[EL1004_01_01]^Channel 4^Input;
                            .q_xOPN_DO      :=      TIIB[EL2004_01_02]^Channel 2^Output
'}
{attribute 'pytmc' := ' pv: QRIXS:SC:VRC:20 '}
qRIXS_SC_VRC_20 : FB_VRC;
{attribute 'TcLinkTo' :=    '.i_xOpnLS      :=      TIIB[EL1004_01_03]^Channel 1^Input;
                            .i_xClsLS       :=      TIIB[EL1004_01_03]^Channel 2^Input;
                            .q_xOPN_DO      :=      TIIB[EL2004_01_04]^Channel 4^Output
'}
{attribute 'pytmc' := ' pv: QRIX:SC:VRC:30 '}
qRIXS_SC_VRC_30 : FB_VRC;

//VGC
{attribute 'TcLinkTo' :=    '.i_xOpnLS      :=      TIIB[EL1004_01_07]^Channel 3^Input;
                             .i_xClsLS      :=      TIIB[EL1004_01_07]^Channel 4^Input;
                             .q_xOPN_DO     :=      TIIB[EL2004_01_08]^Channel 1^Output
    '}
{attribute 'pytmc' := '
        pv: QRIX:SC:VGC:01
        io: io
    '}
qRIXS_SC_VGC_01 : FB_VGC;
{attribute 'TcLinkTo' :=    '.i_xOpnLS      :=      TIIB[EL1004_01_09]^Channel 3^Input;
                             .i_xClsLS      :=      TIIB[EL1004_01_09]^Channel 4^Input;
                             .q_xOPN_DO     :=      TIIB[EL2004_01_08]^Channel 2^Output
    '}
{attribute 'pytmc' := '
        pv: QRIX:SC:VGC:02
        io: io
    '}
qRIXS_SC_VGC_02 : FB_VGC;
{attribute 'TcLinkTo' :=    '.i_xOpnLS      :=      TIIB[EL1004_01_03]^Channel 3^Input;
                             .i_xClsLS      :=      TIIB[EL1004_01_03]^Channel 4^Input;
                             .q_xOPN_DO     :=      TIIB[EL2004_01_02]^Channel 4^Output;
                             .q_xCls_DO     :=      TIIB[EL2004_01_10]^Channel 1^Output
    '}
{attribute 'pytmc' := '
        pv: QRIX:SC:VGC:03
        io: io
    '}
qRIXS_SC_VGC_03 : FB_VRC_DA;

{attribute 'TcLinkTo' :=    '.i_xOpnLS      :=      TIIB[EL1004_01_05]^Channel 1^Input;
                             .i_xClsLS      :=      TIIB[EL1004_01_05]^Channel 2^Input;
                             .q_xOPN_DO     :=      TIIB[EL2004_01_04]^Channel 1^Output
    '}
{attribute 'pytmc' := ' pv: QRIXS:SC:VGC:04 '}
qRIXS_SC_VGC_04 : FB_VGC;
{attribute 'pytmc' := ' pv: QRIXS:SC:VGC:05 '}
{attribute 'TcLinkTo' :=    '.i_xOpnLS      :=      TIIB[EL1004_01_05]^Channel 3^Input;
                             .i_xClsLS      :=      TIIB[EL1004_01_05]^Channel 4^Input;
                             .q_xCLS_DO     :=      TIIB[EL2004_01_04]^Channel 2^Output
    '}
qRIXS_SC_VGC_05 : FB_VRC_NO; // AL foil valve

//PTM
{attribute 'TcLinkTo' :=    '.i_xAtSpd                      :=      TIIB[EL1004_01_13]^Channel 1^Input;
                             .i_xFaultNC            :=      TIIB[EL1004_01_13]^Channel 3^Input;
                             .i_xRemote                     :=      TIIB[EL1004_01_13]^Channel 2^Input;
                             .q_RunDO                       :=      TIIB[EL2004_01_12]^Channel 1^Output;
                             .q_xRemote                     :=      TIIB[EL2004_01_12]^Channel 2^Output;
                             .q_PumpingStation      :=      TIIB[EL2004_01_12]^Channel 3^Output;
'}


//VRC
{attribute 'TcLinkTo' :=    '.i_xOpnLS      :=      TIIB[EL1004_02_01]^Channel 1^Input;
                            .i_xClsLS       :=      TIIB[EL1004_02_01]^Channel 2^Input;
                            .q_xCLS_DO      :=      TIIB[EL2004_02_02]^Channel 1^Output
'}
{attribute 'pytmc' := ' pv: QRIXS:SDS:VRC:01 '}
qRIXS_SDS_VRC_01 : FB_VRC;
//VVC
{attribute 'pytmc' := ' pv: QRIXS:SDS:VVC:01 '}
qRIXS_SDS_VVC_01 : FB_VVC;
{attribute 'pytmc' := ' pv: QRIXS:SDS:VVC:02 '}
qRIXS_SDS_VVC_02 : FB_VVC;






//VRC

{attribute 'pytmc' := '
        pv: QRIXS:SC:VRC:01
        io: io
    '}
qRIXS_SC_VRC_01: FB_VRC;


{attribute 'pytmc' := '
        pv: QRIXS:SDS:VRC:31
        io: io
    '}
qRIXS_SDS_VRC_31: FB_VRC;



//Turbo Pumps
{attribute 'pytmc' := '
        pv: QRIXS:SC:PTM:10
        io: io
'}
{attribute 'TcLinkTo' :=    '.i_xAtSpd                      :=      TIIB[EL1004_01_13]^Channel 1^Input;
                             .i_xRemote                 :=  TIIB[EL1004_01_13]^Channel 2^Input;
                             .i_xFaultNC            :=      TIIB[EL1004_01_13]^Channel 3^Input;
                             .q_RunDO                       :=      TIIB[EL2004_01_12]^Channel 1^Output;
                             .q_xRemote                     :=      TIIB[EL2004_01_12]^Channel 2^Output;
                            .q_PumpingStation       :=      TIIB[EL2004_01_12]^Channel 3^Output
'}
qRIXS_SC_PTM_10 : FB_PTM_Pfeiffer;
{attribute 'TcLinkTo' :=    '.i_xAtSpd                      :=      TIIB[EL1004_01_16]^Channel 2^Input;
                             .i_xFaultNC            :=      TIIB[EL1004_01_16]^Channel 1^Input;
                             .q_RunDO                       :=      TIIB[EL2794_01_15]^Channel 1^Output;
                             .q_xReset                      :=      TIIB[EL2794_01_15]^Channel 2^Output
'}
{attribute 'pytmc' := '
        pv: QRIXS:SC:PTM:20
        io: io
'}
qRIXS_SC_PTM_20 : FB_PTM_Pfeiffer;
{attribute 'pytmc' := '
        pv: QRIXS:SC:PTM:30
        io: io
'}
{attribute 'TcLinkTo' :=    '.i_xAtSpd                      :=      TIIB[EL1004_01_16]^Channel 4^Input;
                             .i_xFaultNC            :=      TIIB[EL1004_01_16]^Channel 3^Input;
                             .q_RunDO                       :=      TIIB[EL2794_01_15]^Channel 3^Output;
                             .q_xReset                      :=      TIIB[EL2794_01_15]^Channel 4^Output
'}
qRIXS_SC_PTM_30 : FB_PTM_Pfeiffer;
//PTM- Turbo Pump
{attribute 'TcLinkTo' :=    '.i_xAtSpd                      :=      TIIB[EL1004_02_08]^Channel 2^Input;
                             .i_xFaultNC            :=      TIIB[EL1004_02_08]^Channel 1^Input;
                             .q_RunDO                       :=      TIIB[EL2794_02_09]^Channel 1^Output;
                             .q_xReset                      :=      TIIB[EL2794_02_09]^Channel 2^Output
'}
{attribute 'pytmc' := '
        pv: QRIXS:SDS:PTM:10
        io: io
'}
qRIXS_SDS_PTM_10 : FB_PTM_Pfeiffer;





//Ion Pump Controller
{attribute 'pytmc' := '
    pv: QRIXS:SC:PIP:01
    io: io
'}
{attribute 'TcLinkTo' :=    '.q_xHVEna_DO   :=      TIIB[EL2794_00_04]^Channel 1^Output;
                             .i_iPRESS              :=      TIIB[EL3064_00_03]^AI Standard Channel 1^Value;
                             .i_xSP_DI              :=      TIIB[EL1004_00_05]^Channel 1^Input
'}
qRIXS_SC_PIP_01: FB_PIP_Gamma;
{attribute 'pytmc' := '
    pv: QRIXS:SC:PIP:02
    io: io
'}
{attribute 'TcLinkTo' :=    '.q_xHVEna_DO   :=      TIIB[EL2794_00_04]^Channel 2^Output;
                             .i_iPRESS              :=      TIIB[EL3064_00_03]^AI Standard Channel 2^Value;
                             .i_xSP_DI              :=      TIIB[EL1004_00_05]^Channel 2^Input
'}
qRIXS_SC_PIP_02: FB_PIP_Gamma;

{attribute 'pytmc' := '
    pv: QRIXS:OPT:PIP:01
    io: io
'}
{attribute 'TcLinkTo' :=    '.q_xHVEna_DO   :=      TIIB[EL2794_00_04]^Channel 3^Output;
                             .i_iPRESS              :=      TIIB[EL3064_00_03]^AI Standard Channel 3^Value;
                             .i_xSP_DI              :=      TIIB[EL1004_00_05]^Channel 3^Input
'}

qRIXS_OPT_PIP_01: FB_PIP_Gamma;

{attribute 'pytmc' := '
    pv: QRIXS:DET:PIP:01
    io: io
'}
{attribute 'TcLinkTo' :=    '.q_xHVEna_DO   :=      TIIB[EL2794_00_04]^Channel 4^Output;
                             .i_iPRESS              :=      TIIB[EL3064_00_03]^AI Standard Channel 4^Value;
                             .i_xSP_DI              :=      TIIB[EL1004_00_05]^Channel 4^Input
'}
qRIXS_DET_PIP_01: FB_PIP_Gamma;


{attribute 'pytmc' := '
    pv: QRIXS:CRYO:PIP:01
    io: io
'}
{attribute 'TcLinkTo' :=    '.q_xHVEna_DO   :=      TIIB[EL2794_00_07]^Channel 3^Output;
                             .i_iPRESS              :=      TIIB[EL3064_00_06]^AI Standard Channel 3^Value;
                             .i_xSP_DI              :=      TIIB[EL1004_00_08]^Channel 3^Input
'}

qRIXS_CRYO_PIP_01: FB_PIP_Gamma;

{attribute 'pytmc' := '
    pv: QRIXS:DET:PIP:03
    io: io
'}
{attribute 'TcLinkTo' :=    '.q_xHVEna_DO   :=      TIIB[EL2794_00_07]^Channel 4^Output;
                             .i_iPRESS              :=      TIIB[EL3064_00_06]^AI Standard Channel 4^Value;
                             .i_xSP_DI              :=      TIIB[EL1004_00_08]^Channel 4^Input
'}
qRIXS_DET_PIP_03: FB_PIP_Gamma;



END_VAR
Related:

GVL_Interface

{attribute 'qualified_only'}
VAR_GLOBAL

    (*I/O Inputs to QRIX Motion PLC*)

    {attribute 'TcLinkTo' :=  'TIID^Device 1 (EtherCAT)^B950_233_R03_DRL_01^EK1122_00_16^QRIX_MOT_INT (EL6692)^IO Inputs^QRIX_MOT_SDS_MMS_H_RAW_ENC_CNTS
    '}
    QRIX_MOT_SDS_MMS_H_RAW_ENC_CNTS AT %I* : UINT;

    {attribute 'TcLinkTo' :=  'TIID^Device 1 (EtherCAT)^B950_233_R03_DRL_01^EK1122_00_16^QRIX_MOT_INT (EL6692)^IO Inputs^QRIX_MOT_SDS_MMS_H_FORWARD_EN
    '}
    QRIX_MOT_SDS_MMS_H_FORWARD_EN AT %I* : BOOL;

    {attribute 'TcLinkTo' :=  'TIID^Device 1 (EtherCAT)^B950_233_R03_DRL_01^EK1122_00_16^QRIX_MOT_INT (EL6692)^IO Inputs^QRIX_MOT_SDS_MMS_H_BACKWARD_EN
    '}
    QRIX_MOT_SDS_MMS_H_BACKWARD_EN AT %I* : BOOL;

    (*I/O Outputs to QRIX Motion PLC*)

    {attribute 'TcLinkTo' :=  'TIID^Device 1 (EtherCAT)^B950_233_R03_DRL_01^EK1122_00_16^QRIX_MOT_INT (EL6692)^IO Outputs^QRIX_VAC_VGC_03_OP_CMD
    '}
    QRIX_VAC_VGC_03_OP_CMD AT %Q* : BOOL;

    {attribute 'TcLinkTo' :=  'TIID^Device 1 (EtherCAT)^B950_233_R03_DRL_01^EK1122_00_16^QRIX_MOT_INT (EL6692)^IO Outputs^QRIX_VAC_VGC_03_CL_CMD
    '}
    QRIX_VAC_VGC_03_CL_CMD AT %Q* : BOOL;
END_VAR

GVL_PMPS

VAR_GLOBAL
    {attribute 'pytmc' := 'pv: PLC:QRIX:VAC:ARB:01'}
    fbArbiter: FB_Arbiter(1);
    fbArbiter2: FB_Arbiter(2);// no pytmc pv because it is not used
    {attribute 'pytmc' := 'pv: PLC:QRIX:VAC:FFO:01'}
    {attribute 'TcLinkTo' := '.q_xFastFaultOut:=TIIB[PMPS_FFO]^Channel 1^Output'}
    {attribute 'TcLinkTo' := '.q_xFastFaultOut:=TIIB[PMPS_PRE]^IO Outputs^FFO'}
    fbFastFaultOutput1: FB_HardwareFFOutput := (bAutoReset := TRUE, i_sNetID:='172.21.92.73.1.1');
    {attribute 'TcLinkTo' := '.q_xFastFaultOut:=TIIB[PMPS_FFO]^Channel 2^Output'}
    fbFastFaultOutput2: FB_HardwareFFOutput := (bAutoReset := TRUE, i_sNetID:='172.21.92.73.1.1');//no pytmc pv because it is not needed for P/MPS
END_VAR

GVL_SA

//{attribute 'qualified_only'}
VAR_GLOBAL


    (* -- Normally Closed Valve with Readback -- *)
    {attribute 'TcLinkTo' :=        '.i_xOpnLS      :=      TIIB[qRIXS_PNL1_E1_EL1004]^Channel 1^Input;
                                 .i_xClsLS  :=      TIIB[qRIXS_PNL1_E1_EL1004]^Channel 2^Input;
                                 .q_xOPN_DO :=      TIIB[qRIXS_PNL1_E3_EL2004]^Channel 1^Output
    '}
    {attribute 'pytmc' := '
        pv: QRIXS:OPT:VGC:01
        io: io
    '}
    qRIXS_OPT_VGC_01: FB_VGC;

    {attribute 'TcLinkTo' :=        '.i_xOpnLS      :=      TIIB[qRIXS_PNL1_E1_EL1004]^Channel 3^Input;
                                 .i_xClsLS  :=      TIIB[qRIXS_PNL1_E1_EL1004]^Channel 4^Input;
                                 .q_xOPN_DO :=      TIIB[qRIXS_PNL1_E3_EL2004]^Channel 2^Output
    '}
    {attribute 'pytmc' := '
        pv: QRIXS:BLW:VRC:01
        io: io
    '}
    qRIXS_SA_VWC_01: FB_VGC;

    {attribute 'TcLinkTo' :=        '.i_xOpnLS      :=      TIIB[qRIXS_PNL1_E2_EL1004]^Channel 1^Input;
                                 .i_xClsLS  :=      TIIB[qRIXS_PNL1_E2_EL1004]^Channel 2^Input;
                                 .q_xOPN_DO :=      TIIB[qRIXS_PNL1_E3_EL2004]^Channel 3^Output
    '}
    {attribute 'pytmc' := '
        pv: QRIXS:DET:VGC:01
        io: io
    '}
    qRIXS_DET_VGC_01: FB_VGC;


    (* MKS275 - Pirani *)
    {attribute 'TcLinkTo' :=        '.i_iPRESS_R    :=      TIIB[qRIXS_PNL1_E5_EL3174-0002]^AI Standard Channel 1^Value'}
    {attribute 'pytmc' := '
        pv: QRIXS:OPT:GPI:01
        io: io
    '}
    qRIXS_OPT_GPI_01: FB_MKS275;

    {attribute 'TcLinkTo' :=        '.i_iPRESS_R    :=      TIIB[qRIXS_PNL1_E5_EL3174-0002]^AI Standard Channel 2^Value'}
    {attribute 'pytmc' := '
        pv: QRIXS:DET:GPI:01
        io: io
    '}
    qRIXS_DET_GPI_01: FB_MKS275;


    (* MKS972 - Full range guage *)
    {attribute 'TcLinkTo' :=        '.i_iPRESS_R    :=      TIIB[qRIXS_PNL1_E5_EL3174-0002]^AI Standard Channel 3^Value'}
    {attribute 'pytmc' := '
        pv: QRIXS:SA:GCP:01
        io: io
    '}
    qRIXS_SA_GCP_01: FB_972;


    (* MKS500 - Cold cathode gauge *)
    {attribute 'TcLinkTo' :=        '.i_iPRESS_R            :=      TIIB[qRIXS_PNL1_E6_EL3174-0002]^AI Standard Channel 1^Value;
                                 .i_xHV_ON                  :=      TIIB[qRIXS_PNL1_E8_EL1124]^Channel 1^Input;
                                 .i_xDisc_Active    :=      TIIB[qRIXS_PNL1_E8_EL1124]^Channel 2^Input;
                                 .q_xHV_DIS                 :=      TIIB[qRIXS_PNL1_E4_EL2624]^Channel 1^Output
    '}
    {attribute 'pytmc' := '
        pv: QRIXS:OPT:GCC:01
        io: io
    '}
    qRIXS_OPT_GCC_01: FB_MKS500;


    {attribute 'TcLinkTo' :=        '.i_iPRESS_R            :=      TIIB[qRIXS_PNL1_E6_EL3174-0002]^AI Standard Channel 2^Value;
                                 .i_xHV_ON                  :=      TIIB[qRIXS_PNL1_E8_EL1124]^Channel 3^Input;
                                 .i_xDisc_Active    :=      TIIB[qRIXS_PNL1_E8_EL1124]^Channel 4^Input;
                                 .q_xHV_DIS                 :=      TIIB[qRIXS_PNL1_E4_EL2624]^Channel 2^Output
    '}
    {attribute 'pytmc' := '
        pv: QRIXS:DET:GCC:01
        io: io
    '}
    qRIXS_DET_GCC_01: FB_MKS500;
END_VAR

GVL_Variables

VAR_GLOBAL

{attribute 'pytmc' := '
    pv: PLC:QRIXS:VAC:OVRDON
    io: io
'}
xSystemOverrideMode : BOOL := FALSE; (* Global system override for the qRIXS Vacuum System*)


{attribute 'pytmc' := '
    pv: QRIXS:SA:OVRDON
    io: io
'}
xSAOverrideMode     : BOOL := FALSE;

{attribute 'pytmc' := ' pv: QRIXS:SA:SETUP_MODE'}
SetupMode   : BOOL := FALSE;




END_VAR

POUs

FB_ChemRIXS_Turbo_ILK

FUNCTION_BLOCK FB_ChemRIXS_Turbo_ILK
VAR_INPUT
    i_stValve : ST_ValveBase;
    i_stPump : ST_PTM;
    tDelay : TIME;
END_VAR
VAR_OUTPUT
    bILK : BOOL;
END_VAR
VAR
    tofDelay : TOF;
END_VAR
tofDelay.IN := i_stValve.i_xOpnLS OR (i_stPump.eState = pumpSTOPPED); // Start timer when valve closes (IN goes low)
tofDelay.PT := tDelay;
tofDelay();
bILK := tofDelay.Q; // Assign turbopump output to timer output. When the valve is closed the turbo pump ILK will go False after time elapses.
                    // Intended to be connected to pump OK to run bit.

END_FUNCTION_BLOCK

FB_PRO_ADS

(* This function block is created for interface devices between different PLC*)
(* Not all the Variables in the original structure is required, just few signals *)
(* The variable values are read via ADS using the symbol name*)
FUNCTION_BLOCK FB_PRO_ADS Extends FB_ADS
VAR_INPUT
    sNetId : String; //NetID of the Destination PLC controller
    nPort : uint; // port number
    sVarName : string;// the variable name of the declared gauge function block.
    iWatchdog:UDINT;//The watchdog variable name written to by the remote plc
END_VAR
VAR_OUTPUT
    {attribute 'pytmc' := 'pv:'}
    stPump : ST_EbaraDryPump;
    bError: BOOL;
END_VAR
VAR
    fb_CheckWatchdog: FB_CheckWatchdog;
    fb_Read_PRO: FB_ReadAdsSymByName;
    ftReset: F_TRIG;
    xFirstPass: BOOL:= true;
END_VAR
ftReset(CLK:= fb_Read_PRO.bBusy OR xFirstPass);
xFirstPass := false;
(*calling ADS read function*)

//IG.xPRESS_OK := false;

fb_Read_PRO(
    bRead:=ftReset.Q ,
    sNetId:= sNetId,
    nPort:= nPort,
    sVarName:= CONCAT(sVarName,'.stPump'),
    nDestAddr:= ADR(stPump),
    nLen:= SIZEOF(ST_EbaraDryPump),
    tTimeout:= ,
    eComMode:=eAdsComModeFastCom ,
    bBusy=> ,
    bError=> ,
    nErrorId=> );


(*Error*)
fb_CheckWatchdog(
    bEnable:= TRUE,
    tWatchdogTime:= T#900ms,
    nCnt:= iWatchdog ,
    bWatchdog=> ,
    nLastCnt=> );

bError:= fb_Read_PRO.bError OR fb_CheckWatchdog.bWatchdog;
tErrorPresent(CLK:=bError);

IF (fb_Read_PRO.bError OR fb_CheckWatchdog.bWatchdog) THEN
stPump.i_xAlarm:= TRUE;
END_IF;

END_FUNCTION_BLOCK

MAIN

PROGRAM MAIN
VAR
END_VAR
///Calling programs
PRG_Roughing();
PRG_SampleChamber();
PRG_SA_WINDOW();
PRG_SDS();
PRG_SPA();
PRG_2_PMPS();
PRG_3_LOG();

END_PROGRAM
Related:

PRG_2_PMPS

PROGRAM PRG_2_PMPS
VAR
    fbArbiterIO: FB_SubSysToArbiter_IO;
END_VAR
GVL_PMPS.fbFastFaultOutput1.Execute(i_xVeto := (PMPS_GVL.stCurrentBeamParameters.aVetoDevices[PMPS.K_Stopper.MR1K1_OUT]
                                      AND NOT PMPS_GVL.stCurrentBeamParameters.aVetoDevices[PMPS.K_Stopper.MR1K1_IN])
                                       OR PMPS_GVL.stCurrentBeamParameters.aVetoDevices[PMPS.K_Stopper.ST1K2]);
GVL_PMPS.fbFastFaultOutput2.Execute(i_xVeto := (PMPS_GVL.stCurrentBeamParameters.aVetoDevices[PMPS.K_Stopper.MR1K1_OUT]
                                      AND NOT PMPS_GVL.stCurrentBeamParameters.aVetoDevices[PMPS.K_Stopper.MR1K1_IN])
                                       OR PMPS_GVL.stCurrentBeamParameters.aVetoDevices[PMPS.K_Stopper.ST1K2]
                                        OR TRUE); // Currenlty these valves are permenantly vetoed

//Code for Requesting full beam arbitration
fbArbiter.AddRequest(nReqID := 16#FAFA, stReqBp := PMPS_GVL.cstFullBeam, sDevName := 'plc-qrix-vac');
fbArbiterIO(
    i_bVeto := (PMPS_GVL.stCurrentBeamParameters.aVetoDevices[PMPS.K_Stopper.MR1K1_OUT]
                                      AND NOT PMPS_GVL.stCurrentBeamParameters.aVetoDevices[PMPS.K_Stopper.MR1K1_IN])
                                       OR PMPS_GVL.stCurrentBeamParameters.aVetoDevices[PMPS.K_Stopper.ST1K2],
    Arbiter:=GVL_PMPS.fbArbiter,
    fbFFHWO:=GVL_PMPS.fbFastFaultOutput1);

END_PROGRAM
Related:

PRG_3_LOG

PROGRAM PRG_3_LOG
VAR
      fbLogHandler: FB_LogHandler;
END_VAR
fbLogHandler();

END_PROGRAM

PRG_COM

PROGRAM PRG_COM
VAR
END_VAR
//PTM_10, PTM_20 and PTM_30
(*Instanitate Serial port com function *)
E14_fbSerialLineControl(
    Mode:= SERIALLINEMODE_EL6_22B,
    pComIn:= ADR(E2_stComIn),
    pComOut:=ADR(E2_stComOut),
    SizeComIn:= SIZEOF(E2_stComIn),
    TxBuffer:= E2_SerialTXBuffer,
    RxBuffer:= E2_SerialRXBuffer,
    Error=> ,
    ErrorID=> );

END_PROGRAM

PRG_Roughing

PROGRAM PRG_Roughing
VAR

END_VAR
// Roughing devices
//MKS 275 Gauges
//qRIXS_ROUGH_GPI_01.M_SetBits(30518); moved to pax
//qRIXS_ROUGH_GPI_01();                     // Roughing guage near pro moved to pax
//qRIXS_PRO_01(i_stBPGauge := qRIXS_ROUGH_GPI_01.PG, i_xVlvOpn := TRUE, i_xExtIlkOK := TRUE); //moved to pax

//Reading the roughing valve, gauge and pump from RIX beamline vac plc
qRIXS_ROUGH_GPI_01(
    sNetId:= '172.21.140.69.1.1',
    nPort:= 851,
    sVarName:= 'GVL_KFE_RIX_VAC.RIXS_ROUGH_GPI_01',
    iWatchdog:= PRG_SampleChamber.iWatchdog ,
    IG=> ,
    bError=> );
qRIXS_PRO_01(
    sNetId:= '172.21.140.69.1.1',
    nPort:= 851,
    sVarName:= 'GVL_KFE_RIX_VAC.RIXS_PRO_01',
    iWatchdog:= PRG_SampleChamber.iWatchdog ,
    stPump=> ,
    bError=> );



// roughing gauge and valves in the hutch
qRIXS_ROUGH_GPI_02.M_SetBits(30518);
qRIXS_ROUGH_GPI_02();                       // Roughing guage near BL
//VRC 02    backing Main Sample Chamber
qRIXS_ROUGH_VRC_02(i_xExtILK_OK :=  qRIXS_PRO_01.stPump.eState = E_PumpState.pumpRUNNING, i_xOverrideMode := xSystemOverrideMode, iq_stValve => );

//VRC 01 backing Sample Delivery Chamber
qRIXS_ROUGH_VRC_01(i_xExtILK_OK := qRIXS_PRO_01.stPump.eState = E_PumpState.pumpRUNNING, i_xOverrideMode := xSystemOverrideMode, iq_stValve => );

END_PROGRAM
Related:

PRG_SA_WINDOW

PROGRAM PRG_SA_WINDOW
VAR
    xFirstPass              : BOOL;
    fbFSInit                : R_TRIG;

    state                   : E_STATES;

    bExtPress : BOOL;

    xExtILK_OK_BLW: INT;

    g_FastFaultOutputNA: FB_HardwareFFOutput;
    g_fbArbiterNA: FB_Arbiter(3);
END_VAR
fbFSInit( CLK := TRUE, Q => xFirstPass);
(* On first PLC pass, put valve into init state*)
IF xFirstPass THEN
    state:= E_STATES.INIT;
    xSAOverrideMode := FALSE;
    SetupMode := FALSE;
END_IF
bExtPress:= qRIXS_SA_GCP_01.PG.xAT_VAC;


//STATE ACTIONS
CASE state OF

 E_STATES.INIT:
        qRIXS_SC_VGC_04.M_Set_OPN_SW(FALSE); //Isolation Valve closed
        qRIXS_SC_VGC_05.M_Set_CLS_SW(FALSE); // Window valve OPEN
        qRIXS_SC_VGC_04.i_xOverrideMode := qRIXS_SC_VGC_05.i_xOverrideMode := FALSE;
        //Transition
        if (qRIXS_SC_VGC_04.M_IsClosed() AND qRIXS_SC_VGC_05.M_IsOpen()) THEN
            state:= E_STATES.NOT_SAFE;
        END_IF

E_STATES.NOT_SAFE: // System is not allowed to actuate, i.e all interlocks are in effect
    qRIXS_SC_VGC_04.M_Set_OPN_SW(qRIXS_SC_VGC_04.iq_stValve.q_xOPN_DO );
     //C_1.i_xExt_OK := VGC_1.i_xEPS_OPN_OK := VGC_1.i_xEPS_CLS_OK:= FALSE;
    qRIXS_SC_VGC_05.i_xExtILK_OK:= FALSE;
    qRIXS_SC_VGC_04.i_xOverrideMode := qRIXS_SC_VGC_05.i_xOverrideMode := FALSE;

    //Transition
    //IF (US_GCC.IG.xAT_VAC AND DS_GCC.IG.xAT_VAC) THEN state:= E_STATES.READY; END_IF
    IF (bExtPress AND qRIXS_SC_GCC_01.IG.xAT_VAC) THEN state:= E_STATES.READY; END_IF



 E_STATES.READY: // OK to MOVE
     // Release the external interlock so the differential pressure inlk is in effect
     qRIXS_SC_VGC_04.i_xExt_OK:= qRIXS_SC_VGC_04.i_xEPS_OK :=TRUE;
    //permission to insert window valve only when US vacuum is good??
    qRIXS_SC_VGC_05.i_xExtILK_OK:= bExtPress;
    // Valves  alternate positions.
    If (qRIXS_SC_VGC_05.M_IsClosed()) THEN  qRIXS_SC_VGC_04.M_Set_OPN_SW(TRUE);
    ELSIF (qRIXS_SC_VGC_05.M_IsOpen()) THEN qRIXS_SC_VGC_04.M_Set_OPN_SW(FALSE);
    END_IF

// bOverride := TRUE;
 E_STATES.OVERRIDE:
    // Override Mode is enabled for all valves
     qRIXS_SC_VGC_04.i_xOverrideMode :=qRIXS_SC_VGC_05.i_xOverrideMode := TRUE;
    // Exit of Override mode always goes back to init
     IF NOT(xSAOverrideMode) THEN state:= E_STATES.INIT; END_IF


 E_STATES.SETUP:
    // Window valve remains retracted
     qRIXS_SC_VGC_05.i_xExtILK_OK := FALSE;
    // Isolation valves operates like standard gate valves
    qRIXS_SC_VGC_04.i_xExt_OK := TRUE;
    // exit to init just to be safe?
    IF NOT(SetupMode) THEN state:= E_STATES.INIT; END_IF
END_CASE


// STATE TRANSITIONS
// the system can go to setup state from any other state except override
IF (SetupMode) AND (state<>E_STATES.OVERRIDE) THEN state:= E_STATES.SETUP;
// the system can go to override state from any other state except setup
ELSIF (xSAOverrideMode) AND (state<>E_STATES.SETUP) THEN state:= E_STATES.OVERRIDE;
//Loss of at vac signal makes the system go to init/not safe to move state
ELSIF (NOT bExtPress) OR (NOT qRIXS_SC_GCC_01.IG.xAT_VAC) THEN state:= E_STATES.INIT;
//ELSIF (NOT US_GCC.IG.xAT_VAC) OR (NOT DS_GCC.IG.xAT_VAC) THEN state:= E_STATES.INIT;
END_IF




qRIXS_SC_VGC_04(
    i_stUSG:= qRIXS_SC_GCC_01.IG ,
    i_stDSG:= qRIXS_SA_GCP_02.PG ,
    i_xDis_DPIlk:= FALSE ,
    i_xPMPS_OK:= TRUE ,
    i_xEPS_OK:= ,
    i_xExt_OK:= ,
    i_xOverrideMode:= ,
    i_xReset:= ,
    i_xIsAperture:= TRUE,
    i_sDevName:= ,
    i_nTransitionRootID:= ,
    iq_stValve=> ,
    xMPS_OK=> ,
    io_fbFFHWO:=g_FastFaultOutputNA,
    fbArbiter:= g_fbArbiterNA
);


qRIXS_SC_VGC_05(
    i_xExtILK_OK:= ,
    i_xOverrideMode:= ,
    iq_stValve=>  );

END_PROGRAM
Related:

PRG_SampleChamber

PROGRAM PRG_SampleChamber
VAR
    QRIX: T_MaxString;
    iWatchdog: UDINT;
    RIX_TV4K2_GFS_1:FB_TGCC_ADS;
    RIX_IM5K2_PPM_GCC_1:FB_TGCC_ADS;
    RIX_VAC_WD: FB_ADS_WATCHDOG;

    //PTM interlocks
    qRIXS_SC_PTM_10_ILK : FB_ChemRIXS_Turbo_ILK;
    qRIXS_SC_PTM_20_ILK : FB_ChemRIXS_Turbo_ILK;
    qRIXS_SC_PTM_30_ILK : FB_ChemRIXS_Turbo_ILK;
END_VAR
//ADS interfaces
RIX_TV4K2_GFS_1(
    sNetId:= '172.21.140.69.1.1',
    nPort:= 851,
    sVarName:= 'GVL_KFE_RIX_VAC.fb_TV4K2_GFS_1',
    iWatchdog:= iWatchdog ,
    IG=> ,
    bError=> );
RIX_IM5K2_PPM_GCC_1(
    sNetId:= '172.21.140.69.1.1',
    nPort:= 851,
    sVarName:= 'GVL_KFE_RIX_VAC.fb_IM5K2_PPM_GCC_1',
    iWatchdog:= iWatchdog ,
    IG=> ,
    bError=> );

RIX_VAC_WD(sNetId:= '172.21.140.69.1.1', nPort:=851 , sVarName:= 'PRG_KFE_RIX_VAC.iWatchdog', bError=> );


//MKS 275 Gauges
qRIXS_SC_GPI_01.M_SetBits(30518);
qRIXS_SC_GPI_01(PG=>);
qRIXS_ROUGH_GPI_11(PG=>);
qRIXS_ROUGH_GPI_12(PG=>);
qRIXS_ROUGH_GPI_21(PG=>);
qRIXS_ROUGH_GPI_31.M_SetBits(30518);
qRIXS_ROUGH_GPI_31(PG=>);
//fb_QRIX_ROUGH_GPI_22(PG=>);
qRIXS_SC_GCC_01.M_SetBits(30518);
qRIXS_SC_GCC_01(PG := qRIXS_SC_GPI_01.PG);
qRIXS_SSL_GCP_20.M_SetBits(30518);
qRIXS_SSL_GCP_20();
qRIXS_SSL_GCP_30.M_SetBits(30518);
qRIXS_SSL_GCP_30();
qRIXS_SA_GCP_02.M_SetBits(30518);
qRIXS_SA_GCP_02();

//ION Pumps
qRIXS_SC_PIP_01(i_stGauge:=qRIXS_SC_GPI_01.PG, i_xOverrideMode:= xSystemOverrideMode);
qRIXS_SC_PIP_02(i_stGauge:=qRIXS_SC_GPI_01.PG, i_xOverrideMode:= xSystemOverrideMode);
qRIXS_CRYO_PIP_01(i_stGauge:=qRIXS_SC_GPI_01.PG, i_xOverrideMode:= xSystemOverrideMode);





//VGC Valves
///VGC on Beamline
qRIXS_SC_VGC_01(
    i_stUSG:= RIX_TV4K2_GFS_1.IG,
    i_stDSG:= qRIXS_SC_GCC_01.IG,
    i_xDis_DPIlk:= FALSE ,
    i_xPMPS_OK:= TRUE ,
    i_xEPS_OK:= TRUE,
    i_xExt_OK:= TRUE,
    i_xOverrideMode:= xSystemOverrideMode ,
    i_xReset:= ,
    i_xIsAperture:= FALSE,
    i_sDevName:= 'QRIX:SC:VGC:01',
    i_nTransitionRootID:= ,
    iq_stValve=> ,
    xMPS_OK=> ,
    io_fbFFHWO:= GVL_PMPS.fbFastFaultOutput1 ,
    fbArbiter:= GVL_PMPS.fbArbiter );

qRIXS_SC_VGC_02(
    i_stUSG:= qRIXS_SC_GCC_01.IG,
    i_stDSG:= RIX_IM5K2_PPM_GCC_1.IG,
    i_xDis_DPIlk:= FALSE ,
    i_xPMPS_OK:= TRUE ,
    i_xEPS_OK:= TRUE,
    i_xExt_OK:= TRUE,
    i_xOverrideMode:= xSystemOverrideMode ,
    i_xReset:= ,
    i_xIsAperture:= FALSE,
    i_sDevName:= 'QRIX:SC:VGC:02',
    i_nTransitionRootID:= ,
    iq_stValve=> ,
    xMPS_OK=> ,
    io_fbFFHWO:= GVL_PMPS.fbFastFaultOutput1 ,
    fbArbiter:= GVL_PMPS.fbArbiter );

//VRC 10
qRIXS_SC_VRC_10.i_xExtILK_OK := qRIXS_SC_PTM_10.iq_stPTM.eState = E_PumpState.pumpRUNNING;
(*F_TurboGateValve_Protection_ILK( i_Turbo := qRIXS_SC_PTM_10.iq_stPTM ,
                                                                   i_stISG := qRIXS_SC_GPI_01.PG, i_stBSG := qRIXS_ROUGH_GPI_11.PG,
                                                                    ScrollPump := qRIXS_PRO_01.stPump );
*)
qRIXS_SC_VRC_10(i_xOverrideMode:=xSystemOverrideMode , iq_stValve=> );

//VRC 20
qRIXS_SC_VRC_20.i_xExtILK_OK :=  qRIXS_SC_PTM_20.iq_stPTM.eState = E_PumpState.pumpRUNNING;
(*F_TurboGateValve_Protection_ILK( i_Turbo := qRIXS_SC_PTM_20.iq_stPTM ,
                                                                   i_stISG := qRIXS_SSL_GCP_20.PG, i_stBSG := qRIXS_ROUGH_GPI_11.PG,
                                                                    ScrollPump := qRIXS_PRO_01.stPump );*)

qRIXS_SC_VRC_20(i_xOverrideMode:=xSystemOverrideMode , iq_stValve=> );


//VRC 30
qRIXS_SC_VRC_30.i_xExtILK_OK :=  qRIXS_SC_PTM_30.iq_stPTM.eState = E_PumpState.pumpRUNNING;
(*F_TurboGateValve_Protection_ILK( i_Turbo := qRIXS_SC_PTM_30.iq_stPTM ,
                                                                   i_stISG := qRIXS_SSL_GCP_30.PG, i_stBSG := qRIXS_ROUGH_GPI_11.PG,
                                                                    ScrollPump := qRIXS_PRO_01.stPump );*)

qRIXS_SC_VRC_30(i_xOverrideMode:=xSystemOverrideMode , iq_stValve=> );


//Pfiffer Turbo
//PTM ILK
//qRIXS_SC_PTM_10_ILK(i_stValve:=qRIXS_ROUGH_VRC_02.iq_stValve, i_stPump:=qRIXS_SC_PTM_10.iq_stPTM, tDelay:=T#200S, bILK=>);
qRIXS_SC_PTM_10(i_xExtIlkOK:= qRIXS_ROUGH_VRC_02.M_IsOpen()
                AND F_TurboExtILKLogic_2(Turbo:=qRIXS_SC_PTM_10.iq_stPTM,BackingGauge:=qRIXS_ROUGH_GPI_02.PG, InletGauge:=qRIXS_SC_GPI_01.PG, ScrollPump:= qRIXS_PRO_01.stPump) );

//qRIXS_SC_PTM_20_ILK(i_stValve:=qRIXS_ROUGH_VRC_02.iq_stValve, i_stPump:=qRIXS_SC_PTM_20.iq_stPTM, tDelay:=T#200S, bILK=>);
qRIXS_SC_PTM_20(i_xExtIlkOK:= qRIXS_ROUGH_VRC_02.M_IsOpen()
                AND F_TurboExtILKLogic_2(Turbo:=qRIXS_SC_PTM_20.iq_stPTM,BackingGauge:=qRIXS_ROUGH_GPI_02.PG, InletGauge:=qRIXS_SSL_GCP_20.PG, ScrollPump:= qRIXS_PRO_01.stPump) );

//qRIXS_SC_PTM_30_ILK(i_stValve:=qRIXS_ROUGH_VRC_02.iq_stValve, i_stPump:=qRIXS_SC_PTM_30.iq_stPTM, tDelay:=T#200S, bILK=>);
qRIXS_SC_PTM_30(i_xExtIlkOK:= qRIXS_ROUGH_VRC_02.M_IsOpen()
            AND F_TurboExtILKLogic_2(Turbo:=qRIXS_SC_PTM_30.iq_stPTM,BackingGauge:=qRIXS_ROUGH_GPI_02.PG, InletGauge:=qRIXS_SSL_GCP_30.PG, ScrollPump:= qRIXS_PRO_01.stPump) );


//Pfeiffer Turbo Serial


(*Assign adresses to the pfeiffer controllers connected to this serial terminal*)
st_Pfeiffer_CTRL[1].iSerialAddress :=1;
st_Pfeiffer_CTRL[1].xEnableComm := TRUE;
st_Pfeiffer_CTRL[2].iSerialAddress :=2;
st_Pfeiffer_CTRL[2].xEnableComm := TRUE;

(* Instanitate the Function block for serial communication with Pfeiffer*)
fb_PfeifferCom(astPfeifferControl := st_Pfeiffer_CTRL,
               astPfeifferStatus:= st_Pfeiffer_RBK,
                SerialRXBuffer:= E2_SerialRXBuffer,
                SerialTXBuffer:= E2_SerialTXBuffer);


(* Copy Status Pv's into the PTM structure*)
qRIXS_SC_PTM_10.M_Serial_IO(st_Pfeiffer_CTRL:=st_Pfeiffer_CTRL[1],st_Pfeiffer_RBK:=st_Pfeiffer_RBK[1]);
qRIXS_SC_PTM_20.M_Serial_IO(st_Pfeiffer_CTRL:=st_Pfeiffer_CTRL[2],st_Pfeiffer_RBK:=st_Pfeiffer_RBK[2]);
qRIXS_SC_PTM_30.M_Serial_IO(st_Pfeiffer_CTRL:=st_Pfeiffer_CTRL[3],st_Pfeiffer_RBK:=st_Pfeiffer_RBK[3]);

END_PROGRAM
Related:

PRG_SDS

PROGRAM PRG_SDS
VAR
    QRIX_MOT_SDS_MMS_H_BACKWARD_EN: INT;
    rPressSP : REAL :=  0.0001;
END_VAR
//MKS  Gauges
qRIXS_SDS_GCP_01(PG=>);


//VRC
(*fb_QRIX_SDS_VRC_01(i_xOverrideMode := xSystemOverrideMode, iq_stValve =>);
fb_QRIX_SDS_VRC_01.i_xExtILK_OK := F_TurboGateValve_Protection_ILK( i_Turbo := QRIX_SD_PTM_01.iq_stPTM ,
                                                                   i_stISG := fb_QRIX_SDS_GPI_01.PG, i_stBSG := fb_QRIX_SC_GPI_01.PG,
                                                                    ScrollPump := fb_QRIX_PRO_01 );

*)

qRIXS_SDS_PTM_10(i_xExtIlkOK:= qRIXS_ROUGH_VRC_01.M_IsOpen()
    AND F_TurboExtILKLogic_2(Turbo:=qRIXS_SDS_PTM_10.iq_stPTM,BackingGauge:=qRIXS_ROUGH_GPI_02.PG, InletGauge:=qRIXS_SDS_GCP_01.PG, ScrollPump:= qRIXS_PRO_01.stPump) );



qRIXS_SC_VGC_03(
    i_OPN_OK:= qRIXS_SDS_GCP_01.PG.rPRESS < rPressSP, // need to get requirements on this interlock
    i_CLS_OK:= NOT GVL_Interface.QRIX_MOT_SDS_MMS_H_BACKWARD_EN AND (GVL_Interface.QRIX_MOT_SDS_MMS_H_FORWARD_EN ),
    ibCntrlHold:= ,
    i_xOverrideMode:= ,
    iq_stValve=> );

END_PROGRAM
Related:

PRG_SPA

PROGRAM PRG_SPA
VAR
    xExtILK_OK_OPT : BOOL := True;
    xExtILK_OK_BLW : BOOL;
    xExtILK_OK_DET : BOOL;
    iPressTorrerance : REAL := 1.0; // Torr
    stUSG_dummy : ST_VG;
END_VAR
(* Gamma Ion Pump *)
    qRIXS_OPT_PIP_01(i_stGauge:=qRIXS_OPT_GCC_01.IG, i_xOverrideMode:= xSystemOverrideMode);
    qRIXS_DET_PIP_01(i_stGauge:=qRIXS_DET_GPI_01.PG, i_xOverrideMode:= xSystemOverrideMode);
    qRIXS_DET_PIP_03(i_stGauge:=qRIXS_DET_GPI_01.PG, i_xOverrideMode:= xSystemOverrideMode);

(* Pirani MKS 275 Gauges *)
    qRIXS_OPT_GPI_01(PG=>);
    qRIXS_DET_GPI_01(PG=>);

(* Full Range Gauges *)
    qRIXS_SA_GCP_01(PG=>);

(* Cold Cathode Gauges *)
    qRIXS_OPT_GCC_01.M_SetBits(30518);
    qRIXS_OPT_GCC_01(PG:=qRIXS_OPT_GPI_01.PG, IG=>, bEP:=TRUE);
    qRIXS_DET_GCC_01.M_SetBits(30518);
    qRIXS_DET_GCC_01(PG:=qRIXS_DET_GPI_01.PG, IG=>, bEP:=TRUE);

(* Normally Closed Vate Valve *)
    qRIXS_OPT_VGC_01(
        i_stUSG := qRIXS_SA_GCP_02.PG,
        i_stDSG := qRIXS_OPT_GCC_01.IG,
        i_xExt_OK := xExtILK_OK_OPT,
        i_xPMPS_OK:= TRUE ,
        i_xOverrideMode:=xSystemOverrideMode,
        io_fbFFHWO := GVL_PMPS.fbFastFaultOutput2,
        fbArbiter := GVL_PMPS.fbArbiter2,
        iq_stValve =>,
    );


// Calc pressure Difference

qRIXS_SA_VWC_01(
    i_stUSG:= qRIXS_SA_GCP_01.PG ,
    i_stDSG:= qRIXS_OPT_GCC_01.IG ,
    i_xDis_DPIlk:= FALSE ,
    i_xPMPS_OK:= TRUE ,
    i_xEPS_OK:= ,
    i_xExt_OK:= TRUE ,
    i_xOverrideMode:= ,
    i_xReset:= ,
    i_xIsAperture:= TRUE,
    i_sDevName:= ,
    i_nTransitionRootID:= ,
    iq_stValve=> ,
    xMPS_OK=> ,
    io_fbFFHWO:=GVL_PMPS.fbFastFaultOutput2 ,
    fbArbiter:= GVL_PMPS.fbArbiter2
    );


qRIXS_DET_VGC_01(
        i_stUSG := qRIXS_SA_GCP_01.PG,
        i_stDSG := qRIXS_DET_PIP_01.q_IG,
        i_xExt_OK := xExtILK_OK_OPT,
        i_xPMPS_OK:= TRUE ,
        i_xOverrideMode:=xSystemOverrideMode,
        io_fbFFHWO := GVL_PMPS.fbFastFaultOutput2,
        fbArbiter := GVL_PMPS.fbArbiter2,
        iq_stValve =>,
 );

END_PROGRAM
Related: