PLC Project (1): plc_kfe_gmd_vac ================================ Project root: /home/travis/build/pcdshub/lcls-plc-kfe-gmd-vac/plc/plc-kfe-gmd-vac Project path: plc_kfe_gmd_vac/plc_kfe_gmd_vac.plcproj TMC path: plc_kfe_gmd_vac/plc_kfe_gmd_vac.tmc AMS ID: 172.21.92.59.1.1 IP Address: 172.21.92.59 (* based on AMS ID) Port: 851 Source files: 1.) plc_kfe_gmd_vac/DUTs/E_GasType.TcDUT 2.) plc_kfe_gmd_vac/DUTs/E_HomeState.TcDUT 3.) plc_kfe_gmd_vac/DUTs/E_MoveState.TcDUT 4.) plc_kfe_gmd_vac/DUTs/ST_HV.TcDUT 5.) plc_kfe_gmd_vac/DUTs/ST_PressureSensor.TcDUT 6.) plc_kfe_gmd_vac/DUTs/ST_VGP.TcDUT 7.) plc_kfe_gmd_vac/GVLs/GVL_INJ.TcGVL 8.) plc_kfe_gmd_vac/GVLs/GVL_GMD.TcGVL 9.) plc_kfe_gmd_vac/GVLs/GVL_VAC_INTF.TcGVL 10.) plc_kfe_gmd_vac/GVLs/GVL_VARIABLES.TcGVL 11.) plc_kfe_gmd_vac/PlcTask.TcTTO 12.) plc_kfe_gmd_vac/POUs/FB_HighVoltage.TcPOU 13.) plc_kfe_gmd_vac/POUs/FB_PressureTransducer.TcPOU 14.) plc_kfe_gmd_vac/POUs/FB_RTD.TcPOU 15.) plc_kfe_gmd_vac/POUs/FB_VGP.TcPOU 16.) plc_kfe_gmd_vac/POUs/F_HV_ILK.TcPOU 17.) plc_kfe_gmd_vac/POUs/F_TurboGateValve_Protection_ILK_local.TcPOU 18.) plc_kfe_gmd_vac/POUs/F_TURBO_PROT_SLND_ILK.TcPOU 19.) plc_kfe_gmd_vac/POUs/MAIN.TcPOU 20.) plc_kfe_gmd_vac/POUs/PRG_DIAGNOSTIC.TcPOU 21.) plc_kfe_gmd_vac/POUs/PRG_Gas_Selection.TcPOU 22.) plc_kfe_gmd_vac/POUs/PRG_GMD.TcPOU 23.) plc_kfe_gmd_vac/POUs/PRG_HV_ILK.TcPOU 24.) plc_kfe_gmd_vac/POUs/PRG_INJ.TcPOU 25.) plc_kfe_gmd_vac/POUs/PRG_PressureControl.TcPOU 26.) plc_kfe_gmd_vac/POUs/PRG_Purge.TcPOU 27.) plc_kfe_gmd_vac/POUs/PRG_VAC_INTF.TcPOU 28.) plc_kfe_gmd_vac/POUs/PRG_VGP.TcPOU POUs: 1.) FB_HighVoltage 2.) FB_PressureTransducer 3.) FB_RTD 4.) FB_VGP 5.) F_HV_ILK 6.) F_TURBO_PROT_SLND_ILK 7.) F_TurboGateValve_Protection_ILK_local 8.) MAIN 9.) PRG_DIAGNOSTIC 10.) PRG_GMD 11.) PRG_Gas_Selection 12.) PRG_HV_ILK 13.) PRG_INJ 14.) PRG_PressureControl 15.) PRG_Purge 16.) PRG_VAC_INTF 17.) PRG_VGP GVLs: 1.) GVL_GMD 2.) GVL_INJ 3.) GVL_VAC_INTF 4.) GVL_VARIABLES DUT: E_GasType -------------- File: plc_kfe_gmd_vac/DUTs/E_GasType.TcDUT ```vhdl TYPE E_GasType : ( none := 0, Neon, Argon, Krypton, Xenon ); END_TYPE ``` DUT: E_HomeState ---------------- File: plc_kfe_gmd_vac/DUTs/E_HomeState.TcDUT ```vhdl TYPE E_HomeState : ( H_READY, H_INIT, H_RESET_LL, H_RESET_HL, H_ENABLE, H_MOVING, H_MOVING2, H_CHECK, H_RESET, H_SET_POS, H_ERROR, H_WRITE_LL, H_WRITE_HL, H_DONE ) UDINT; END_TYPE ``` DUT: E_MoveState ---------------- File: plc_kfe_gmd_vac/DUTs/E_MoveState.TcDUT ```vhdl TYPE E_MoveState : ( ABORT, INIT, ENABLE, FORWARD, BACKWARDS, READY, MOVING, NEWTARGETPOSITION, NEWTARGETPOSITION2, ERROR, RESET, HALT, HOME ) UDINT; END_TYPE ``` DUT: ST_HV ---------- File: plc_kfe_gmd_vac/DUTs/ST_HV.TcDUT ```vhdl TYPE ST_HV : STRUCT {attribute 'pytmc' := ' pv: HV_SW; io: io; '} HV_sw: BOOL:=True; // EPICS control for switching the HV on or off. {attribute 'pytmc' := ' pv: HV_DO; io: i; '} q_HV_DO: BOOL; // Readout of the HV's ouput value {attribute 'pytmc' := ' pv: ILK_OK; io: i; '} xIlkOK : BOOL := FALSE; // Interlock Bit {attribute 'pytmc' := ' pv: PRO_SP; io: io; '} rPRO_SP: REAL := 0.0001; // Pressure below which the HV signal may turn o END_STRUCT END_TYPE ``` DUT: ST_PressureSensor ---------------------- File: plc_kfe_gmd_vac/DUTs/ST_PressureSensor.TcDUT ```vhdl TYPE ST_PressureSensor : STRUCT {attribute 'pytmc' := ' pv: PRESS; io: i; '} rPRESS: REAL; //This is the human-readable pressure {attribute 'pytmc' := ' pv: iPRESS; io: i; '} iPRESS_R : INT ; //input pressure in machine form {attribute 'pytmc' := ' pv: PRESS_SP; io: io; '} rPressSP: REAL ; // EPICS Pressure setpoint {attribute 'pytmc' := ' pv: MIN_SP; io: io; '} rMinPressSP : REAL; // Low limit of pressure setpoint {attribute 'pytmc' := ' pv: MAX_SP; io: io; '} rMaxPressSP : REAL; // High limit of pressure setpoint {attribute 'pytmc' := ' pv: SCALE; io: io; '} rFULL_SCALE: REAL; // Full scale {attribute 'pytmc' := ' pv: ALARM; field: ZNAM Normal; field: ONAM Alarm; io: i; '} xPstateAlarm : BOOL; // 0:Normal, 1:Alarm END_STRUCT END_TYPE ``` DUT: ST_VGP ----------- File: plc_kfe_gmd_vac/DUTs/ST_VGP.TcDUT ```vhdl TYPE ST_VGP : STRUCT {attribute 'pytmc' := ' pv: POS_RBV; io: i; '} // Inputs i_iPosition : REAL; //Encoder position readback (if it exists) {attribute 'pytmc' := ' pv: ENC_RBV; io: i; '} // Inputs rEnoder_Position : REAL; //Encoder position readback (if it exists) {attribute 'pytmc' := ' pv: ERROR; field: ZNAM FALSE; field: ONAM TRUE; io: i; '} // Inputs pv_xError : BOOL; {attribute 'pytmc' := ' pv: IS_HOMED; field: ZNAM FALSE; field: ONAM TRUE; io: i; '} // Inputs pv_xHomed : BOOL :=false; //Softvariables {attribute 'pytmc' := ' pv: ILK_OK; field: ZNAM FALSE; field: ONAM TRUE; io: i; '} xIlkOK : BOOL := FALSE; // Interlock Bit //Manually Pressing valve "Open/Close" on EDM {attribute 'pytmc' := ' pv: OPN_SW; field: ZNAM FALSE; field: ONAM TRUE; io: io; '} pv_xOPN_SW : BOOL; {attribute 'pytmc' := ' pv: GO_SW; field: ZNAM FALSE; field: ONAM TRUE; io: io; '} pv_xGo_SW : BOOL; {attribute 'pytmc' := ' pv: HOME_SW; field: ZNAM FALSE; field: ONAM TRUE; io: io; '} pv_xHome_SW : BOOL; {attribute 'pytmc' := ' pv: Reset_SW; field: ZNAM FALSE; field: ONAM TRUE; io: io; '} pv_xReset_SW : BOOL; {attribute 'pytmc' := ' pv: Busy; field: ZNAM FALSE; field: ONAM TRUE; io: io; '} xBusy : BOOL; {attribute 'pytmc' := ' pv: ABORT; field: ZNAM FALSE; field: ONAM TRUE; io: io; '} pv_xABORT_SW : BOOL; {attribute 'pytmc' := ' pv: POS_CTRL; io: io; '} rReqPosition : REAL; // Outputs {attribute 'pytmc' := ' pv: POS_DES; io: io; '} q_iRawPosition : INT; //Position control {attribute 'pytmc' := ' pv: STATE; type: mbbi ; field: ZRST CLOSE ; field: ONST OPEN; field: TWST PRESS CNTRL ; field: THST MANUAL CNTRL ; io: io; '} eValveControl : E_VCN := CloseValve; // Valve control state /// state machine state {attribute 'pytmc' := ' pv: Axis_STATE; io: io; '} eState: E_MoveState; //Axis Move state ftIlk : F_TRIG; {attribute 'pytmc' := ' pv: ERR_ID; io: i; '} nErrorID: UDINT; {attribute 'pytmc' := ' pv: ERR_MSG; io: i; '} sErrorMessage : STRING; END_STRUCT END_TYPE ``` GVL: GVL_GMD ------------ File: plc_kfe_gmd_vac/GVLs/GVL_GMD.TcGVL ```vhdl VAR_GLOBAL // To Remove: // Includes 'fake' elements for satisfying interlocks. Delete these after creating better interlock functions // Defaults to the closed position. No command required. fake_always_closed_vent_valve : ST_VVC; // FB_MKS317 {attribute 'pytmc' := ' pv: EM1K0:GMD:GPI:10 '} fb_EM1K0_GMD_GPI_10 : FB_MKS317; {attribute 'pytmc' := ' pv: EM1K0:GMD:GPI:40 '} fb_EM1K0_GMD_GPI_40 : FB_MKS317; {attribute 'pytmc' := ' pv: EM1K0:GMD:GPI:70 '} fb_EM1K0_GMD_GPI_70 : FB_MKS317; // FB_PTM_TwisTorr {attribute 'pytmc' := ' pv: EM1K0:GMD:PTM:10 '} fb_EM1K0_GMD_PTM_10 : FB_PTM_TwisTorr; {attribute 'pytmc' := ' pv: EM1K0:GMD:PTM:20 '} fb_EM1K0_GMD_PTM_20 : FB_PTM_TwisTorr; {attribute 'pytmc' := ' pv: EM1K0:GMD:PTM:30 '} fb_EM1K0_GMD_PTM_30 : FB_PTM_TwisTorr; {attribute 'pytmc' := ' pv: EM1K0:GMD:PTM:40 '} fb_EM1K0_GMD_PTM_40 : FB_PTM_TwisTorr; {attribute 'pytmc' := ' pv: EM1K0:GMD:PTM:50 '} fb_EM1K0_GMD_PTM_50 : FB_PTM_TwisTorr; {attribute 'pytmc' := ' pv: EM1K0:GMD:PTM:60 '} fb_EM1K0_GMD_PTM_60 : FB_PTM_TwisTorr; {attribute 'pytmc' := ' pv: EM1K0:GMD:PTM:70 '} fb_EM1K0_GMD_PTM_70 : FB_PTM_TwisTorr; // FB_VRC {attribute 'pytmc' := ' pv: EM1K0:GMD:VRC:10 '} fb_EM1K0_GMD_VRC_10 : FB_VRC; {attribute 'pytmc' := ' pv: EM1K0:GMD:VRC:20 '} fb_EM1K0_GMD_VRC_20 : FB_VRC; {attribute 'pytmc' := ' pv: EM1K0:GMD:VRC:30 '} fb_EM1K0_GMD_VRC_30 : FB_VRC; {attribute 'pytmc' := ' pv: EM1K0:GMD:VRC:50 '} fb_EM1K0_GMD_VRC_50 : FB_VRC; {attribute 'pytmc' := ' pv: EM1K0:GMD:VRC:60 '} fb_EM1K0_GMD_VRC_60 : FB_VRC; {attribute 'pytmc' := ' pv: EM1K0:GMD:VRC:70 '} fb_EM1K0_GMD_VRC_70 : FB_VRC; // FB_MKS422 {attribute 'pytmc' := ' pv: EM1K0:GMD:GCC:10 '} fb_EM1K0_GMD_GCC_10 : FB_MKS422; {attribute 'pytmc' := ' pv: EM1K0:GMD:GCC:20 '} fb_EM1K0_GMD_GCC_20 : FB_MKS422; {attribute 'pytmc' := ' pv: EM1K0:GMD:GCC:30 '} fb_EM1K0_GMD_GCC_30 : FB_MKS422; {attribute 'pytmc' := ' pv: EM1K0:GMD:GCC:40 '} fb_EM1K0_GMD_GCC_40 : FB_MKS422; {attribute 'pytmc' := ' pv: EM1K0:GMD:GCC:50 '} fb_EM1K0_GMD_GCC_50 : FB_MKS422; {attribute 'pytmc' := ' pv: EM1K0:GMD:GCC:60 '} fb_EM1K0_GMD_GCC_60 : FB_MKS422; {attribute 'pytmc' := ' pv: EM1K0:GMD:GCC:70 '} fb_EM1K0_GMD_GCC_70 : FB_MKS422; // FB_EbaraEVA {attribute 'pytmc' := ' pv: EM1K0:GMD:PRT:40 '} fb_EM1K0_GMD_PRT_40 : FB_EbaraEVA; // FB_VVC {attribute 'pytmc' := ' pv: EM1K0:GMD:VVC:40 '} fb_EM1K0_GMD_VVC_40 : FB_VVC; END_VAR ``` GVL: GVL_INJ ------------ File: plc_kfe_gmd_vac/GVLs/GVL_INJ.TcGVL ```vhdl VAR_GLOBAL //GVL_Devices {attribute 'pytmc' :=' pv: EM1K0:GMD:VCN:40 '} VCN_40 : FB_VCN; {attribute 'pytmc' :=' pv: EM1K0:GMD:VGP:40 '} VGP_40 : FB_VGP; {attribute 'pytmc' :=' pv: EM1K0:GMD:VVC:80 '} VVC_80:FB_VVC; {attribute 'pytmc' :=' pv: EM1K0:GMD:VVC:81 '} VVC_81:FB_VVC; {attribute 'pytmc' :=' pv: EM1K0:GMD:VVC:82 '} VVC_82:FB_VVC; {attribute 'pytmc' :=' pv: EM1K0:GMD:VVC:83 '} VVC_83 : FB_VVC; {attribute 'pytmc' :=' pv: EM1K0:GMD:VVC:84 '} VVC_84 : FB_VVC; {attribute 'pytmc' :=' pv: EM1K0:GMD:VVC:85 '} VVC_85 : FB_VVC; {attribute 'pytmc' :=' pv: EM1K0:GMD:VVC:86 '} VVC_86 : FB_VVC; {attribute 'pytmc' :=' pv: EM1K0:GMD:GCM:80 '} GCM_80: FB_GCM; {attribute 'pytmc' :=' pv: EM1K0:GMD:INJ_Override '} xOverrideMode : BOOL:= false; //GVL_Sensors (*Pressure Meter*) {attribute 'pytmc' :=' pv: EM1K0:GMD:GFM:86 '} GFM_86 :FB_PressureTransducer; {attribute 'pytmc' :=' pv: EM1K0:GMD:GFM:85 '} GFM_85 :FB_PressureTransducer; {attribute 'pytmc' :=' pv: EM1K0:GMD:GFM:84 '} GFM_84 :FB_PressureTransducer; {attribute 'pytmc' :=' pv: EM1K0:GMD:GFM:83 '} GFM_83 :FB_PressureTransducer; (*HV*) {attribute 'pytmc' :=' pv: EM1K0:GMD:PSV:1 '} hv1 : FB_HighVoltage; // {attribute 'pytmc' :=' pv: EM1K0:GMD:HV:2 '} // hv2 : FB_HighVoltage; {attribute 'pytmc' :=' pv: EM1K0:GMD:RTD:1 '} RTD : FB_RTD; END_VAR ``` GVL: GVL_VAC_INTF ----------------- File: plc_kfe_gmd_vac/GVLs/GVL_VAC_INTF.TcGVL ```vhdl VAR_GLOBAL ads_watch_dog : FB_ADS_WATCHDOG; END_VAR ``` GVL: GVL_VARIABLES ------------------ File: plc_kfe_gmd_vac/GVLs/GVL_VARIABLES.TcGVL ```vhdl VAR_GLOBAL {attribute 'pytmc' :=' pv: EM1K0:GMD:OVERRIDE_VAC '} xSystemOverrideMode : BOOL; (* Global system override for the prototype section*) {attribute 'pytmc' :=' pv: EM1K0:GMD:AUTO_VVC_40 '} bAutoVVC40 : BOOL := False; // Purge COMMANDS FROM epics //pragma {attribute 'pytmc' :=' pv: EM1K0:GMD:Purge_SW'} bStartPurge_sw : BOOL :=false; {attribute 'pytmc' :=' pv: EM1K0:GMD:Purge_Active'} bPurgeActive : BOOL:=false; {attribute 'pytmc' :=' pv: EM1K0:GMD:PurgeDone'} bPurgeDone : BOOL :=false; fbLogHandler : FB_LogHandler; END_VAR ``` POU: FB_HighVoltage ------------------- File: plc_kfe_gmd_vac/POUs/FB_HighVoltage.TcPOU ```vhdl FUNCTION_BLOCK FB_HighVoltage VAR_INPUT i_xExtIlkOK : BOOL; //External Interlock, SET to TRUE if not used END_VAR VAR_OUTPUT {attribute 'pytmc' := ' pv: '} hv:ST_HV; END_VAR VAR (*outputs*) q_HV_DO AT %Q*: BOOL; END_VAR hv.xIlkOK := i_xExtIlkOK; q_HV_DO := hv.HV_sw AND hv.xIlkOK; (*soft io mapping*) hv.q_HV_DO := q_HV_DO; END_FUNCTION_BLOCK ``` POU: FB_PressureTransducer -------------------------- File: plc_kfe_gmd_vac/POUs/FB_PressureTransducer.TcPOU ```vhdl FUNCTION_BLOCK FB_PressureTransducer VAR_OUTPUT {attribute 'pytmc' := 'pv:'} Sensor : ST_PressureSensor; END_VAR VAR_INPUT rDefaultSP : REAL; (* Must assign a default value at instantiation*) i_rFULL_SCALE: REAL; END_VAR VAR iCurrent : REAL; AlarmTOF : TOF; (*IOs to be linked*) iError AT %I* : BOOL; // Link to terminal diagnostics i_iPRESS_R AT %I* :INT; // input Pressure // Link to analog Input END_VAR // for SETRA 4-20mA outout (* Real-value calculation *) Sensor.rFull_Scale:=i_rFULL_SCALE; iCurrent := 20*INT_TO_REAL(Sensor.iPRESS_R)/32767; IF iError THEN; //reading less than 4mA Sensor.rPRESS := -1; Sensor.xPStateAlarm:= TRUE; ELSE Sensor.rPRESS := LREAL_TO_REAL(iCurrent*Sensor.rFull_Scale); //FULL scale in Psi for pressure transducer ??? END_IF (* Validate setpoint *) IF (Sensor.rPressSP < Sensor.rMinPressSP OR Sensor.rPressSP > Sensor.rMaxPressSP) THEN; Sensor.rPressSP := rDefaultSP; END_IF (* Set alarm bit when pressure lower and equal to setpoint, delay off for 60s*) AlarmTOF (IN := Sensor.rPRESS <= Sensor.rPressSP, PT := T#60S, Q => Sensor.xPstateAlarm); (*Soft IO Mapping*) ACT_IO(); END_FUNCTION_BLOCK ACTION ACT_IO: Sensor.iPRESS_R := i_iPRESS_R; END_ACTION ``` POU: FB_RTD ----------- File: plc_kfe_gmd_vac/POUs/FB_RTD.TcPOU ```vhdl FUNCTION_BLOCK FB_RTD VAR_INPUT iScale: INT := 10; END_VAR VAR_OUTPUT {attribute 'pytmc' := ' pv: TEMP io: input '} fTemp: LREAL; {attribute 'pytmc' := ' pv: CONN io: input ONAM: Connected ZNAM: Disconnected '} bConnected: BOOL; {attribute 'pytmc' := ' pv: ERR io: input '} bError AT %I*: BOOL; bUnderrange AT %I*: BOOL; bOverrange AT %I*: BOOL; END_VAR VAR iRaw AT %I*: INT; END_VAR bConnected := NOT (bOverrange AND bError); fTemp := iRaw / iScale; END_FUNCTION_BLOCK ``` POU: FB_VGP ----------- File: plc_kfe_gmd_vac/POUs/FB_VGP.TcPOU ```vhdl (* This function implements the Basic functions for the Vat Motorized valve*) {attribute 'no_check'} FUNCTION_BLOCK FB_VGP VAR_INPUT i_xExtIlkOK : BOOL; //External Interlock, SET to TRUE if not used i_xOpenIlkOK: BOOL; //Interlock Bit that allows the valve to open i_xCloseIlkOK: BOOL; //Interlock Bit that allows the valve to Close i_ReqPos : REAL; //Requested position arrTable : ARRAY[1..14,1..2] OF FLOAT; END_VAR VAR_OUTPUT {attribute 'pytmc' := ' pv: '} q_stVGP : ST_VGP; // valve structure END_VAR VAR_IN_OUT END_VAR VAR CONSTANT rUpperLimit : REAL:=100; //Percentage Upper limit on valve open rClosePosition : REAL:=0; // Encoder Min. Fully Closed rMaxDiffPressure: REAL:= 22.5; //Torr END_VAR VAR rOpenPosition: REAL:=1645; // Encoder MAX. Fully Open rTargetPosition : REAL; rTargetVelocity: REAL:=30; rHomingVelocity: REAL:=10; rHomingDistance: REAL:=-20;//every 150 is 10% , 1% is 14.975 rOldTargetPosition: REAL; rHyst:REAL :=10; // /// axis reference data structure Axis: AXIS_REF; // InfoData_State AT %I*: UINT ; // Axis MC functions fbPowerAxis: MC_Power; /// debug function block output data PowerAxisOut: ST_McOutputs; fbMoveAxisABS: MC_MoveAbsolute; /// debug function block output data MoveAbsoluteOut: ST_McOutputs; fbMoveAxisABS2: MC_MoveAbsolute; /// debug function block output data MoveAbsoluteOut2: ST_McOutputs; fbReset: MC_Reset; /// debug function block output data ResetOut: ST_McOutputs; MoveAxisREL: MC_MoveAbsolute; MoveRelativeOut: ST_McOutputs; rOverride: LREAL := 100; fbHalt: MC_Halt; // Homing Functions bGo:BOOL := FALSE; //to execute motion bHome:BOOL :=FALSE; // should be set to true bEnable:Bool; //to be removed fbMoveRel: MC_MoveRelative; fbSetPosition: MC_SetPosition; fbWriteParameter: MC_WriteBoolParameter; HomeState: E_HomeState; // For Monitoring while Axis moving rPrevEncoderPosition : REAL; // interpolation bInit : BOOL := TRUE; eMode : E_CTRL_MODE; iCounter:INT; //CONTROL stCTRL_LIN_INTERPOLATION_PARAMS : ST_CTRL_LIN_INTERPOLATION_PARAMS; fbCTRL_LIN_INTERPOLATION : FB_CTRL_LIN_INTERPOLATION; arrTable_ENC : ARRAY[1..14,1..2] OF FLOAT; //Readdback stCTRL_LIN_INTERPOLATION_PARAMS_ENC : ST_CTRL_LIN_INTERPOLATION_PARAMS; fbCTRL_LIN_INTERPOLATION_ENC : FB_CTRL_LIN_INTERPOLATION; // Logger // For logging fbLogger : FB_LogMessage := (eSubsystem:=E_SubSystem.VACUUM); ePrevState : E_VCN; tErrorPresent : R_TRIG; tAction : R_TRIG; // Primary action of this device (OPN_DO, PUMP_RUN, etc.) END_VAR /// Interpolation function initialization ACT_INIT(); // Interlocking q_stVGP.xIlkOK := i_xExtIlkOK; (*Checking which Control mode is selected*) IF q_stVGP.xIlkOK AND NOT (q_stVGP.pv_xError) THEN IF q_stVGP.eValveControl = OpenValve THEN q_stVGP.rReqPosition := rUpperLimit; ELSIF q_stVGP.eValveControl = CloseValve THEN q_stVGP.rReqPosition := 0; ELSIF q_stVGP.eValveControl = ManualControl THEN q_stVGP.rReqPosition := LIMIT(0, q_stVGP.rReqPosition, rUpperLimit); ELSIF q_stVGP.eValveControl = PressureControl THEN q_stVGP.rReqPosition := LIMIT(0, i_ReqPos, rUpperLimit); END_IF ELSE q_stVGP.rReqPosition := 0; q_stVGP.eValveControl := CloseValve;//CloseValve; bGo:=FALSE; END_IF //Check the Drive State IF (*(InfoData_State<>16#8) OR*) (q_stVGP.eState = ERROR) THEN q_stVGP.pv_xError:=TRUE; ELSE q_stVGP.pv_xError:=FALSE; // Call function to execute move // call motion function blocks??? END_IF IF (q_stVGP.pv_xABORT_SW ) THEN q_stVGP.pv_xABORT_SW := FALSE; q_stVGP.eState:= ABORT; HomeState:= H_READY; END_IF ACT_LIN_INTERPOLATION(); ACT_AXIS(); ACT_HOME(); ACT_MONITOR(); END_FUNCTION_BLOCK ACTION ACT_AXIS: //update the axis status AXIS(); q_stVGP.rEnoder_Position := LREAL_TO_REAL(Axis.NcToPlc.ActPos); // encoder position IF NOT (i_xExtIlkOK) THEN q_stVGP.eState := NEWTARGETPOSITION; END_IF //Homing STATE is missing // state machine for axis motion (* move axis using a state machine *) CASE q_stVGP.eState OF INIT : (* initialisation *) (* initialize all function blocks *) fbMoveAxisABS.Execute := FALSE; fbMoveAxisABS2.Execute := FALSE; fbReset.Execute := FALSE; fbHALT.Execute :=FALSE;// q_stVGP.eState := ENABLE; // Check homing first HomeState:= H_READY; ENABLE : fbPowerAxis.Enable := TRUE; fbPowerAxis.Enable_Positive := TRUE; fbPowerAxis.Enable_Negative := TRUE; IF fbPowerAxis.Status THEN q_stVGP.eState := READY; ELSIF fbPowerAxis.Error THEN q_stVGP.eState := ERROR; END_IF READY: // waiting for move command IF NOT fbPowerAxis.Status THEN q_stVGP.eState := ENABLE; ELSIF fbPowerAxis.Error THEN q_stVGP.eState := ERROR; END_IF IF (HomeState = H_READY) AND (q_stVGP.pv_xHome_SW) THEN HomeState:= H_INIT; q_stVGP.pv_xHome_SW:=false; q_stVGP.eState := HOME; ELSE q_stVGP.eState := READY; END_IF IF (q_stVGP.pv_xGo_SW) AND i_xExtIlkOK(* AND( rOldTargetPosition <> rTargetPosition) *) THEN q_stVGP.pv_xGo_SW := false; q_stVGP.eState := NEWTARGETPOSITION; END_IF HOME: if (HomeState = H_DONE) THEN q_stVGP.eState := INIT; q_stVGP.pv_xHomed := TRUE; HomeState := H_READY; END_IF if (HomeState = H_ERROR) THEN q_stVGP.eState := ERROR; q_stVGP.pv_xHomed := FALSE; END_IF NEWTARGETPOSITION: fbMoveAxisABS.Position := rTargetPosition; fbMoveAxisABS.Velocity := rTargetVelocity; //fbMoveAxisABS.BufferMode := MC_BlendingNext; fbMoveAxisABS.Execute := TRUE; IF fbMoveAxisABS.Active THEN (* axis is executing job but is not yet finished *) fbMoveAxisABS.Execute := FALSE; (* leave this state and buffer a second command *) q_stVGP.eState := MOVING; ElSIF fbMoveAxisABS.Done THEN fbMoveAxisABS.Execute := FALSE; q_stVGP.eState := READY; ELSIF fbMoveAxisABS.CommandAborted OR fbMoveAxisABS.Error THEN q_stVGP.eState := ERROR; END_IF MOVING:// IF fbMoveAxisABS.CommandAborted OR fbMoveAxisABS.Error THEN q_stVGP.eState := ERROR; END_IF IF NOT ( Axis.Status.Moving) OR (fbMoveAxisABS.Done) THEN //(fbMoveAxisABS.Done) AND (fbMoveAxisABS2.Done) THEN q_stVGP.eState := READY; END_IF HALT: fbHALT.Execute :=TRUE; IF Axis.Status.Error THEN q_stVGP.eState := RESET; (* axis error requires reset *) ELSE q_stVGP.eState := INIT; (* function block errors don't need a reset *) END_IF ERROR : IF HomeState = H_READY THEN q_stVGP.eState := RESET; ELSE q_stVGP.eState := HOME; END_IF RESET : //fbReset.Execute := TRUE; IF fbReset.Done THEN q_stVGP.eState :=INIT; // HomeState := H_READY; ELSIF fbReset.Error THEN q_stVGP.eState := ERROR; (* keep trying to reset*) END_IF ABORT: fbMoveAxisABS.Execute := FALSE; fbMoveAxisABS2.Execute := FALSE; fbReset.Execute := FALSE; (* save target position*) rOldTargetPosition := q_stVGP.i_iPosition; fbHALT.Execute :=FALSE; fbPowerAxis.Enable := FALSE; fbPowerAxis.Enable_Positive := FALSE; fbPowerAxis.Enable_Negative := FALSE; q_stVGP.eState := ENABLE; // Check homing first END_CASE /// Motion Function Blocks (* AXIS POWER*) fbPowerAxis( Axis:= Axis, Enable:= , Enable_Positive:= i_xOpenIlkOK, Enable_Negative:= , Override:= rOverride, BufferMode:= , Options:= , Status=> , Busy=> PowerAxisOut.Busy , Active=> PowerAxisOut.Active , Error=> PowerAxisOut.Error, ErrorID=> PowerAxisOut.ErrorID); (* AXIS MOVE ABSOLUTE*) fbMoveAxisABS( Axis:= Axis , Execute:= , Position:= , Velocity:= , Acceleration:= , Deceleration:= , Jerk:= , BufferMode:= MC_BlendingNext , Options:= , Done=>MoveAbsoluteOut.Done, Busy=> MoveAbsoluteOut.Busy, Active=> MoveAbsoluteOut.Active, CommandAborted=> MoveAbsoluteOut.CommandAborted , Error=> MoveAbsoluteOut.Error, ErrorID=> MoveAbsoluteOut.ErrorID); (* AXIS MOVE ABSOLUTE*) fbMoveAxisABS2( Axis:= Axis , Execute:= , Position:= , Velocity:= , Acceleration:= , Deceleration:= , Jerk:= , BufferMode:= MC_BlendingNext , Options:= , Done=>MoveAbsoluteOut2.Done, Busy=> MoveAbsoluteOut2.Busy, Active=> MoveAbsoluteOut2.Active, CommandAborted=> MoveAbsoluteOut2.CommandAborted , Error=> MoveAbsoluteOut2.Error, ErrorID=> MoveAbsoluteOut2.ErrorID); (*AXIS RESET*) fbReset( Axis:= Axis, Execute:= This^.q_stVGP.pv_xReset_SW , Done=>ResetOut.Done , Busy=>ResetOut.Busy , Error=> ResetOut.Error, ErrorID=> ResetOut.ErrorID); (*HALT*) fbHalt( Axis:= Axis, Execute:= , Deceleration:= , Jerk:= , BufferMode:= MC_BlendingNext , Options:= , Done=> , Busy=> , Active=> , CommandAborted=> , Error=> , ErrorID=> ); /// ERROR IF Axis.Status.Error THEN q_stVGP.eState := ERROR; END_IF; // Error Handling if( fbPowerAxis.Error and fbPowerAxis.Active ) then This^.q_stVGP.pv_xError:= fbPowerAxis.Error; This^.q_stVGP.nErrorID:= fbPowerAxis.ErrorID; END_IF if( fbMoveAxisABS.Error and fbMoveAxisABS.Active ) then This^.q_stVGP.pv_xError:= fbMoveAxisABS.Error; This^.q_stVGP.nErrorID:= fbMoveAxisABS.ErrorID; END_IF IF This^.q_stVGP.pv_xReset_SW THEN This^.q_stVGP.pv_xReset_SW:=FALSE; END_IF (*Convert nErrorID to string*) This^.q_stVGP.sErrorMessage:=WORD_TO_HEXSTR(in:=TO_WORD(This^.q_stVGP.nErrorID) , iPrecision:= 4, bLoCase:=0 ); This^.q_stVGP.xBusy := (NOT(q_stVGP.eState = READY) AND (HomeState = H_READY)); END_ACTION ACTION ACT_HOME: CASE HomeState OF H_READY: fbSetPosition.Execute := FALSE; fbWriteParameter.Execute := FALSE; fbMoveRel.Execute := FALSE; H_INIT: HomeState:=H_RESET_LL; H_RESET_LL: // disable soft limits in order to be able to move the drive fbWriteParameter.ParameterNumber := MC_AxisParameter.EnableLimitNeg;//EnableLimitPos;// .EnableLimitNeg; fbWriteParameter.Value := FALSE; fbWriteParameter.Execute := TRUE; if (fbWriteParameter.Done) THEN fbWriteParameter.Execute := FALSE; HomeState:= H_RESET_HL; END_IF H_RESET_HL: // disable soft limits in order to be able to move the drive fbWriteParameter.ParameterNumber := MC_AxisParameter.EnableLimitPos; fbWriteParameter.Value := FALSE; fbWriteParameter.Execute := TRUE; if (fbWriteParameter.Done) THEN fbWriteParameter.Execute := FALSE; HomeState:= H_ENABLE; END_IF H_ENABLE: // Make Sure drive is enabled fbPowerAxis.Enable := TRUE; fbPowerAxis.Enable_Positive := TRUE; fbPowerAxis.Enable_Negative := TRUE; IF fbPowerAxis.Status THEN HomeState:= H_MOVING; ELSIF fbPowerAxis.Error THEN HomeState := H_ERROR; END_IF H_MOVING: fbMoveRel.Execute := TRUE; IF fbMoveRel.Active THEN (* axis is executing job but is not yet finished *) fbMoveRel.Execute := FALSE; (* leave this state and buffer a second command *) HomeState := H_MOVING2; ElSIF fbMoveRel.Done THEN fbMoveRel.Execute := FALSE; HomeState := H_MOVING;//2? ELSIF fbMoveRel.CommandAborted OR fbMoveRel.Error THEN fbMoveRel.Execute := FALSE; HomeState := H_CHECK; END_IF H_MOVING2: IF fbMoveRel.CommandAborted OR fbMoveRel.Error THEN HomeState := H_CHECK; END_IF IF NOT ( Axis.Status.Moving) OR (fbMoveRel.Done) THEN //(fbMoveAxisABS.Done) AND (fbMoveAxisABS2.Done) THEN HomeState := H_MOVING; fbMoveRel.Execute := FALSE; END_IF H_CHECK: //Check position lag monitoring error if (Axis.Status.ErrorID = 16#00004550)THEN This^.q_stVGP.pv_xReset_SW := TRUE; HomeState := H_RESET; ELSE HomeState := H_ERROR; END_IF H_RESET: IF fbReset.Done THEN This^.q_stVGP.pv_xReset_SW := FALSE; HomeState := H_SET_POS; END_IF H_SET_POS: // Set Current Position fbSetPosition.Position := 0; fbSetPosition.Execute := TRUE; IF ( fbSetPosition.Done ) THEN fbSetPosition.Execute := FALSE; HomeState:= H_WRITE_LL; ELSIF (fbSetPosition.Error) THEN HomeState := H_ERROR; END_IF H_WRITE_LL: // Re Enable the Soft limits fbWriteParameter.ParameterNumber := MC_AxisParameter.AxisEnMinSoftPosLimit;//AxisEnMaxSoftPosLimit;// .AxisEnMinSoftPosLimit; fbWriteParameter.Value := TRUE; fbWriteParameter.Execute := TRUE; if (fbWriteParameter.Done) THEN fbWriteParameter.Execute := FALSE; HomeState:= H_WRITE_HL; END_IF H_WRITE_HL: // Re Enable the Soft limits fbWriteParameter.ParameterNumber := MC_AxisParameter.AxisEnMaxSoftPosLimit; fbWriteParameter.Value := TRUE; fbWriteParameter.Execute := TRUE; if (fbWriteParameter.Done) THEN fbWriteParameter.Execute := FALSE; HomeState:= H_DONE; END_IF H_ERROR: //taken care of in the axis motion state machine H_DONE: //taken care of in the axis motion state machine END_CASE // Move backward to fully closed fbMoveRel( Axis:= Axis , Execute:= , Distance:= rHomingDistance , Velocity:= rHomingVelocity, Acceleration:= , Deceleration:= , Jerk:= , BufferMode:= MC_BlendingNext, Options:= , Done=> , Busy=> , Active=> , CommandAborted=> , Error=> , ErrorID=> ); // Set Encoder Position fbSetPosition( Axis:= Axis , Execute:= , Position:= 0 , Mode:= FALSE, //Absolute Options:= , Done=> , Busy=> , Error=> , ErrorID=> ); // Write Parameters fbWriteParameter( Axis:= Axis , Execute:= , ParameterNumber:= , Value:= , Done=> , Busy=> , Error=> , ErrorID=> ); If ( fbWriteParameter.Error) OR (fbSetPosition.Error)(* OR (fbMoveRel.Error) *)THEN HomeState:= H_ERROR; q_stVGP.eState := ERROR; END_IF END_ACTION ACTION ACT_INIT: {attribute no_check} IF bInit THEN (* (* init array with the interpolation points *) (* fIn | fOut *) arrTable[1,1] := 0; arrTable[1,2] := 0; arrTable[2,1] := 5; arrTable[2,2] := 135; arrTable[3,1] := 10; arrTable[3,2] := 245; arrTable[4,1] := 20; arrTable[4,2] := 405; arrTable[5,1] := 30; arrTable[5,2] := 535; arrTable[6,1] := 40; arrTable[6,2] := 689; arrTable[7,1] := 50; arrTable[7,2] := 830; arrTable[8,1] := 60; arrTable[8,2] := 960; arrTable[9,1] := 70; arrTable[9,2] := 1095; arrTable[10,1] := 80; arrTable[10,2] := 1225; arrTable[11,1] := 90; arrTable[11,2] := 1415; arrTable[12,1] := 95; arrTable[12,2] := 1495; arrTable[13,1] := 98; arrTable[13,2] := 1559; arrTable[14,1] := 100; arrTable[14,2] := 1645; *) (* init parameter struct *) stCTRL_LIN_INTERPOLATION_PARAMS.tCtrlCycleTime := T#10ms; stCTRL_LIN_INTERPOLATION_PARAMS.tTaskCycleTime := T#10ms; stCTRL_LIN_INTERPOLATION_PARAMS.nDataTable_NumberOfRows := INT_TO_UINT(14); (* set the addresses *) stCTRL_LIN_INTERPOLATION_PARAMS.pDataTable_ADR := ADR(arrTable); stCTRL_LIN_INTERPOLATION_PARAMS.nDataTable_SIZEOF := SIZEOF(arrTable); (* set the mode to ACTIVE --> normal operation *) eMode := eCTRL_MODE_ACTIVE; (* init array with the interpolation points *) (* fIn | fOut *) FOR iCounter:=1 TO 14 BY 1 DO arrTable_ENC[iCounter,1] := arrTable[iCounter,2]; arrTable_ENC[iCounter,2] := arrTable[iCounter,1]; END_FOR; (* arrTable_ENC[1,1] := 0; arrTable_ENC[1,2] := 0; arrTable_ENC[2,1] := 135; arrTable_ENC[2,2] := 5; arrTable_ENC[3,1] := 245; arrTable_ENC[3,2] := 10; arrTable_ENC[4,1] := 405; arrTable_ENC[4,2] := 20; arrTable_ENC[5,1] := 535; arrTable_ENC[5,2] := 30; arrTable_ENC[6,1] := 689; arrTable_ENC[6,2] := 40; arrTable_ENC[7,1] := 830; arrTable_ENC[7,2] := 50; arrTable_ENC[8,1] := 960; arrTable_ENC[8,2] := 60; arrTable_ENC[9,1] := 1095; arrTable_ENC[9,2] := 70; arrTable_ENC[10,1] := 1225; arrTable_ENC[10,2] := 80; arrTable_ENC[11,1] := 1415; arrTable_ENC[11,2] := 90; arrTable_ENC[12,1] := 1495; arrTable_ENC[12,2] := 95; arrTable_ENC[13,1] := 1559; arrTable_ENC[13,2] := 98; arrTable_ENC[14,1] := 1645; arrTable_ENC[14,2] := 100;*) (* init parameter struct *) stCTRL_LIN_INTERPOLATION_PARAMS_ENC.tCtrlCycleTime := T#10ms; stCTRL_LIN_INTERPOLATION_PARAMS_ENC.tTaskCycleTime := T#10ms; stCTRL_LIN_INTERPOLATION_PARAMS_ENC.nDataTable_NumberOfRows := INT_TO_UINT(14); (* set the addresses *) stCTRL_LIN_INTERPOLATION_PARAMS_ENC.pDataTable_ADR := ADR(arrTable_ENC); stCTRL_LIN_INTERPOLATION_PARAMS_ENC.nDataTable_SIZEOF := SIZEOF(arrTable_ENC); (* reset the init flag *) bInit := FALSE; END_IF; END_ACTION ACTION ACT_LIN_INTERPOLATION: {attribute 'no_check'} fbCTRL_LIN_INTERPOLATION( fIn:= q_stVGP.rReqPosition , fManValue:= 0, bExtrapolate:= , eMode:= eMode, fOut=> , bInIsGreaterThanMaxElement=> , bInIsLessThanMinElement=> , eState=> , eErrorId=> , bError=> , stParams:= stCTRL_LIN_INTERPOLATION_PARAMS ); // Target position Calculation rTargetPosition := LREAL_TO_REAL(fbCTRL_LIN_INTERPOLATION.fOut); //rTargetPosition := LIMIT(rClosePosition, rTargetPosition, rOpenPosition); fbCTRL_LIN_INTERPOLATION_ENC( fIn:= Axis.NcToPlc.ActPos , fManValue:= 0, bExtrapolate:= , eMode:= eMode, fOut=> , bInIsGreaterThanMaxElement=> , bInIsLessThanMinElement=> , eState=> , eErrorId=> , bError=> , stParams:= stCTRL_LIN_INTERPOLATION_PARAMS_ENC ); q_stVGP.i_iPosition := LREAL_TO_REAL(fbCTRL_LIN_INTERPOLATION_ENC.fOut); END_ACTION ACTION ACT_MONITOR: IF (This^.q_stVGP.xBusy) THEN rPrevEncoderPosition:= This^.q_stVGP.rEnoder_Position; ELSIF NOT((rPrevEncoderPosition < This^.q_stVGP.rEnoder_Position +rHyst) AND (rPrevEncoderPosition > This^.q_stVGP.rEnoder_Position -rHyst)) AND NOT( q_stVGP.eState =HOME) AND NOT( q_stVGP.eState =ERROR) THEN q_stVGP.eState := ERROR; q_stVGP.pv_xHomed := FALSE; This^.q_stVGP.pv_xError := TRUE; This^.q_stVGP.sErrorMessage := 'Encoder Position Error'; END_IF tErrorPresent(CLK:=q_stVGP.pv_xError); IF tErrorPresent.Q THEN fbLogger(sMsg:=q_stVGP.sErrorMessage, eSevr:=TcEventSeverity.Error); END_IF // Log valve motion tAction(CLK:= q_stVGP.pv_xGo_SW); IF tAction.Q THEN fbLogger(sMsg:='Valve commanded to move', eSevr:=TcEventSeverity.Info); END_IF IF ePrevState <> q_stVGP.eValveControl THEN CASE q_stVGP.eValveControl OF CloseValve: fbLogger(sMsg:='Valve set to Close.', eSevr:=TcEventSeverity.Info); OpenValve: fbLogger(sMsg:='Valve set to Open.', eSevr:=TcEventSeverity.Info); PressureControl: fbLogger(sMsg:='Valve set to pressure control mode.', eSevr:=TcEventSeverity.Info); ManualControl: fbLogger(sMsg:='Valve set to manual control mode.', eSevr:=TcEventSeverity.Info); END_CASE ePrevState := q_stVGP.eValveControl; END_IF END_ACTION ``` POU: F_HV_ILK ------------- File: plc_kfe_gmd_vac/POUs/F_HV_ILK.TcPOU ```vhdl FUNCTION F_HV_ILK : BOOL VAR_INPUT IG : ST_VG; // Gauge used for interlocking the high voltage supply HV : ST_HV; // Structure representing HV control END_VAR VAR END_VAR F_HV_ILK := ((IG.xPRESS_OK = TRUE) AND (IG.rPRESS < HV.rPRO_SP)); END_FUNCTION ``` POU: F_TURBO_PROT_SLND_ILK -------------------------- File: plc_kfe_gmd_vac/POUs/F_TURBO_PROT_SLND_ILK.TcPOU ```vhdl FUNCTION F_TURBO_PROT_SLND_ILK : BOOL VAR_INPUT i_Turbo : ST_PTM; // Turbo Pump i_stISG : ST_VG; //Gauge measuring inlet Pressure e.g Pirani i_stBSG : ST_VG; //Gauge measuring backing Pressure e.g Pirani ScrollPump : ST_RoughPump; // Roughing pump END_VAR VAR END_VAR F_TURBO_PROT_SLND_ILK := (i_stISG.xPRESS_OK AND i_stISG.rPRESS < i_Turbo.rInletPressureSP) AND (i_stBSG.xPRESS_OK AND i_stBSG.rPRESS < i_Turbo.rBackingPressureSP) AND (ScrollPump.eState = pumpRUNNING) AND (i_Turbo.eState = pumpRUNNING); END_FUNCTION ``` POU: F_TurboGateValve_Protection_ILK_local ------------------------------------------ File: plc_kfe_gmd_vac/POUs/F_TurboGateValve_Protection_ILK_local.TcPOU ```vhdl (* This Function Block evaluates the ILK condition of the Turbo Gate valve *) (* The logic Protects the Turbo pump from inlet pressure above the SP*) (* And Protects the Turbo pump from backing pressure above the SP*) (* And Protects the Turbo pump in the case of backing pump not running*) (* This is to be used whle the vacuum library has not yet updated to watch for the pumpRUNNING state. Switch to the vacuum library's version at earliest convenience. *) FUNCTION F_TurboGateValve_Protection_ILK_local : BOOL(* function return TRUE when ILK is OK*) VAR_INPUT i_Turbo : ST_PTM; // Turbo Pump i_stISG : ST_VG; //Gauge measuring inlet Pressure e.g Pirani i_stBSG : ST_VG; //Gauge measuring backing Pressure e.g Pirani ScrollPump : ST_RoughPump; // Roughing pump END_VAR VAR END_VAR (* This Function Block evaluates the ILK condition of the Turbo Gate valve *) (* The logic Protects the Turbo pump from inlet pressure above the SP*) F_TurboGateValve_Protection_ILK_local := (i_Turbo.eState = pumpRUNNING) AND (i_stISG.xPRESS_OK AND i_stISG.rPRESS < i_Turbo.rInletPressureSP) AND (i_stBSG.xPRESS_OK AND i_stBSG.rPRESS < i_Turbo.rBackingPressureSP) AND (ScrollPump.eState = pumpRUNNING); END_FUNCTION ``` POU: MAIN --------- File: plc_kfe_gmd_vac/POUs/MAIN.TcPOU ```vhdl PROGRAM MAIN VAR vgp_debug_mode :BOOL := False; END_VAR PRG_DIAGNOSTIC(); PRG_GMD(); PRG_VAC_INTF(); (*INJ*) PRG_INJ(); IF NOT vgp_debug_mode THEN PRG_VGP(); END_IF PRG_PressureControl(); //PRG_Purge(); //call orther PRG // instaniate the RTD and HV PRG_HV_ILK(); fbLogHandler(); END_PROGRAM ``` POU: PRG_DIAGNOSTIC ------------------- File: plc_kfe_gmd_vac/POUs/PRG_DIAGNOSTIC.TcPOU ```vhdl PROGRAM PRG_DIAGNOSTIC VAR fbTime : FB_LocalSystemTime := ( bEnable := TRUE, dwCycle := 1 ); logTimer : TON := ( IN := TRUE, PT := T#1000ms ); plcName : STRING[15]; {attribute 'pytmc' := ' pv: simHeartbeat '} simHeartbeat AT %I* : UINT := 0; {attribute 'pytmc' := ' pv: plcHeartbeat '} plcHeartbeat : UDINT := 0; {attribute 'pytmc' := ' pv: plcInfo '} plcInfo : STRING[40]; {attribute 'pytmc' := ' pv: plcLocalTime '} plcLocalTime : STRING[25]; END_VAR plcHeartbeat := plcHeartbeat + 1; IF plcHeartbeat > 4294967000 THEN plcHeartbeat := 0; END_IF // get timestamp as string every second fbTime(); logTimer( IN := fbTime.bValid ); IF logTimer.Q THEN logTimer( IN := FALSE ); logTimer( IN := fbTime.bValid ); plcLocalTime := SYSTEMTIME_TO_STRING(fbTime.systemTime); END_IF // make an info string plcName := 'Prototype PLC: '; plcInfo := CONCAT(plcName, plcLocalTime); END_PROGRAM ``` POU: PRG_GMD ------------ File: plc_kfe_gmd_vac/POUs/PRG_GMD.TcPOU ```vhdl PROGRAM PRG_GMD VAR f_: INT; fb_EM1K0_GMD_PTM_10i_xExtILKOk: BOOL; END_VAR // FB_MKS317 fb_EM1K0_GMD_GPI_10(PG=>); fb_EM1K0_GMD_GPI_40(PG=>); fb_EM1K0_GMD_GPI_70(PG=>); // FB_PTM_TwisTorr fb_EM1K0_GMD_PTM_10(i_xExtILKOk := F_TurboExtILKLogic_2( Turbo:= fb_EM1K0_GMD_PTM_10.iq_stPtm, BackingGauge:= fb_EM1K0_GMD_GPI_10.PG, InletGauge:= fb_EM1K0_GMD_GCC_10.IG, ScrollPump:= fb_EM1K0_GMD_PRT_40.stPump)); fb_EM1K0_GMD_PTM_20(i_xExtILKOk := F_TurboExtILKLogic_2( Turbo:= fb_EM1K0_GMD_PTM_20.iq_stPtm, BackingGauge:= fb_EM1K0_GMD_GPI_10.PG, InletGauge:= fb_EM1K0_GMD_GCC_20.IG, ScrollPump:= fb_EM1K0_GMD_PRT_40.stPump)); fb_EM1K0_GMD_PTM_30(i_xExtILKOk := F_TurboExtILKLogic_2( Turbo:= fb_EM1K0_GMD_PTM_30.iq_stPtm, BackingGauge:= fb_EM1K0_GMD_GPI_10.PG, InletGauge:= fb_EM1K0_GMD_GCC_30.IG, ScrollPump:= fb_EM1K0_GMD_PRT_40.stPump)); fb_EM1K0_GMD_PTM_40(i_xExtILKOk := F_TurboExtILKLogic_2( Turbo:= fb_EM1K0_GMD_PTM_40.iq_stPtm, BackingGauge:= fb_EM1K0_GMD_GPI_10.PG, InletGauge:= fb_EM1K0_GMD_GPI_40.PG, ScrollPump:= fb_EM1K0_GMD_PRT_40.stPump)); fb_EM1K0_GMD_PTM_50(i_xExtILKOk := F_TurboExtILKLogic_2( Turbo:= fb_EM1K0_GMD_PTM_50.iq_stPtm, BackingGauge:= fb_EM1K0_GMD_GPI_10.PG, InletGauge:= fb_EM1K0_GMD_GCC_50.IG, ScrollPump:= fb_EM1K0_GMD_PRT_40.stPump)); fb_EM1K0_GMD_PTM_60(i_xExtILKOk := F_TurboExtILKLogic_2( Turbo:= fb_EM1K0_GMD_PTM_60.iq_stPtm, BackingGauge:= fb_EM1K0_GMD_GPI_10.PG, InletGauge:= fb_EM1K0_GMD_GCC_60.IG, ScrollPump:= fb_EM1K0_GMD_PRT_40.stPump)); fb_EM1K0_GMD_PTM_70(i_xExtILKOk := F_TurboExtILKLogic_2( Turbo:= fb_EM1K0_GMD_PTM_70.iq_stPtm, BackingGauge:= fb_EM1K0_GMD_GPI_10.PG, InletGauge:= fb_EM1K0_GMD_GCC_70.IG, ScrollPump:= fb_EM1K0_GMD_PRT_40.stPump)); // FB_VRC fb_EM1K0_GMD_VRC_10( i_xExtILK_OK := F_TurboGateValve_Protection_ILK_local( i_Turbo := fb_EM1K0_GMD_PTM_10.iq_stPtm, i_stISG := fb_EM1K0_GMD_GPI_40.PG, i_stBSG := fb_EM1K0_GMD_GPI_10.PG, ScrollPump := fb_EM1K0_GMD_PRT_40.stPump ), i_xOverrideMode := xSystemOverrideMode ); fb_EM1K0_GMD_VRC_20( i_xExtILK_OK := F_TurboGateValve_Protection_ILK_local( i_Turbo := fb_EM1K0_GMD_PTM_20.iq_stPtm, i_stISG := fb_EM1K0_GMD_GPI_40.PG, i_stBSG := fb_EM1K0_GMD_GPI_10.PG, ScrollPump := fb_EM1K0_GMD_PRT_40.stPump ), i_xOverrideMode := xSystemOverrideMode ); fb_EM1K0_GMD_VRC_30( i_xExtILK_OK := F_TurboGateValve_Protection_ILK_local( i_Turbo := fb_EM1K0_GMD_PTM_30.iq_stPtm, i_stISG := fb_EM1K0_GMD_GPI_40.PG, i_stBSG := fb_EM1K0_GMD_GPI_10.PG, ScrollPump := fb_EM1K0_GMD_PRT_40.stPump ), i_xOverrideMode := xSystemOverrideMode ); fb_EM1K0_GMD_VRC_50( i_xExtILK_OK := F_TurboGateValve_Protection_ILK_local( i_Turbo := fb_EM1K0_GMD_PTM_50.iq_stPtm, i_stISG := fb_EM1K0_GMD_GPI_40.PG, i_stBSG := fb_EM1K0_GMD_GPI_10.PG, ScrollPump := fb_EM1K0_GMD_PRT_40.stPump ), i_xOverrideMode := xSystemOverrideMode ); fb_EM1K0_GMD_VRC_60( i_xExtILK_OK := F_TurboGateValve_Protection_ILK_local( i_Turbo := fb_EM1K0_GMD_PTM_60.iq_stPtm, i_stISG := fb_EM1K0_GMD_GPI_40.PG, i_stBSG := fb_EM1K0_GMD_GPI_10.PG, ScrollPump := fb_EM1K0_GMD_PRT_40.stPump ), i_xOverrideMode := xSystemOverrideMode ); fb_EM1K0_GMD_VRC_70( i_xExtILK_OK := F_TurboGateValve_Protection_ILK_local( i_Turbo := fb_EM1K0_GMD_PTM_70.iq_stPtm, i_stISG := fb_EM1K0_GMD_GPI_40.PG, i_stBSG := fb_EM1K0_GMD_GPI_10.PG, ScrollPump := fb_EM1K0_GMD_PRT_40.stPump ), i_xOverrideMode := xSystemOverrideMode ); // FB_MKS422 fb_EM1K0_GMD_GCC_10(PG := fb_EM1K0_GMD_GPI_40.PG); fb_EM1K0_GMD_GCC_20(PG := fb_EM1K0_GMD_GPI_40.PG); fb_EM1K0_GMD_GCC_30(PG := fb_EM1K0_GMD_GPI_40.PG); fb_EM1K0_GMD_GCC_40(PG := fb_EM1K0_GMD_GPI_40.PG); fb_EM1K0_GMD_GCC_50(PG := fb_EM1K0_GMD_GPI_40.PG); fb_EM1K0_GMD_GCC_60(PG := fb_EM1K0_GMD_GPI_40.PG); fb_EM1K0_GMD_GCC_70(PG := fb_EM1K0_GMD_GPI_40.PG); // FB_EbaraEVA fb_EM1K0_GMD_PRT_40(i_xExtIlkOK := TRUE); // FB_VVC IF bAutoVVC40 THEN IF fb_EM1K0_GMD_PRT_40.stPump.eState = pumpRUNNING THEN fb_EM1K0_GMD_VVC_40.M_Open(True); ELSE fb_EM1K0_GMD_VVC_40.M_Open(False); END_IF END_IF fb_EM1K0_GMD_VVC_40( i_xExtILK_OK := F_TURBO_PROT_SLND_ILK( i_Turbo := fb_EM1K0_GMD_PTM_40.iq_stPtm, i_stISG := fb_EM1K0_GMD_GPI_40.PG, i_stBSG := fb_EM1K0_GMD_GPI_10.PG, ScrollPump := fb_EM1K0_GMD_PRT_40.stPump ), i_xOverrideMode := xSystemOverrideMode, ); END_PROGRAM ``` POU: PRG_Gas_Selection ---------------------- File: plc_kfe_gmd_vac/POUs/PRG_Gas_Selection.TcPOU ```vhdl PROGRAM PRG_Gas_Selection VAR CurrentGas: E_GasType; //pragma SelectedGas: E_GasType; END_VAR (* Gas selection includes a purge and checks interlocks*) if ( VVC_83.iq_stValve.q_xOPN_DO) then CurrentGas := E_GasType.Neon; elsif ( VVC_84.iq_stValve.q_xOPN_DO) then CurrentGas := E_GasType.Argon; elsif ( VVC_85.iq_stValve.q_xOPN_DO) then CurrentGas := E_GasType.Krypton; elsif ( VVC_86.iq_stValve.q_xOPN_DO) then CurrentGas := E_GasType.Xenon; END_IF If( CurrentGas <> SelectedGas) then bStartPurge_sw := true; END_IF if NOT(bStartPurge_sw) AND(bPurgeDone) then case SelectedGas of E_GasType.none: // all valves closed VVC_83.M_Set_OPN_SW(false); VVC_84.M_Set_OPN_SW(false); VVC_85.M_Set_OPN_SW(false); VVC_86.M_Set_OPN_SW(false); E_GasType.Neon: VVC_83.M_Set_OPN_SW(TRUE); VVC_84.M_Set_OPN_SW(false); VVC_85.M_Set_OPN_SW(false); VVC_86.M_Set_OPN_SW(false); E_GasType.Argon: VVC_83.M_Set_OPN_SW(false); VVC_84.M_Set_OPN_SW(TRUE); VVC_85.M_Set_OPN_SW(false); VVC_86.M_Set_OPN_SW(false); E_GasType.Krypton: VVC_83.M_Set_OPN_SW(false); VVC_84.M_Set_OPN_SW(false); VVC_85.M_Set_OPN_SW(TRUE); VVC_86.M_Set_OPN_SW(false); E_GasType.Xenon: VVC_83.M_Set_OPN_SW(false); VVC_84.M_Set_OPN_SW(false); VVC_85.M_Set_OPN_SW(false); VVC_86.M_Set_OPN_SW(TRUE); END_CASE END_IF /// vcn and vgp on manual or auto?? END_PROGRAM ``` POU: PRG_HV_ILK --------------- File: plc_kfe_gmd_vac/POUs/PRG_HV_ILK.TcPOU ```vhdl PROGRAM PRG_HV_ILK VAR HV_ILK_OK: bool := false; END_VAR //evaluate the HV ILK_OK bit //HV_ILK_OK := GCC_40.IG.xAT_VAC; hv1(i_xExtIlkOK := F_HV_ILK( IG := fb_EM1K0_GMD_GCC_40.IG, HV := hv1.hv) ); END_PROGRAM ``` POU: PRG_INJ ------------ File: plc_kfe_gmd_vac/POUs/PRG_INJ.TcPOU ```vhdl PROGRAM PRG_INJ VAR i:INT; fullScale: REAL :=2000; DefaultSP :REAL:=0; rFULL_SCALE:REAL:=3000;//psig END_VAR // GCM GCM_80(i_rFULL_SCALE := fullScale ); GFM_86(i_rFULL_SCALE:= rFULL_SCALE,rDefaultSP:=DefaultSP); i:=i+1; // Vent Valves // interlock evaluation VVC_80.i_xExtILK_OK := (NOT VVC_81.iq_stValve.q_xOPN_DO) AND(NOT VVC_82.iq_stValve.q_xOPN_DO); // Or we need to purge all the way up to the VCN VVC_81.i_xExtILK_OK := (NOT VVC_83.iq_stValve.q_xOPN_DO) AND(NOT VVC_84.iq_stValve.q_xOPN_DO) AND (NOT VVC_85.iq_stValve.q_xOPN_DO) AND (NOT VVC_86.iq_stValve.q_xOPN_DO);// AND (NOT VVC_80.iq_stValve.q_xOPN_DO); VVC_82.i_xExtILK_OK := (NOT VVC_83.iq_stValve.q_xOPN_DO) AND(NOT VVC_84.iq_stValve.q_xOPN_DO) AND (NOT VVC_85.iq_stValve.q_xOPN_DO) AND (NOT VVC_86.iq_stValve.q_xOPN_DO);// AND (NOT VVC_80.iq_stValve.q_xOPN_DO); // instanitation VVC_80(i_xExtILK_OK:= , i_xOverrideMode:= xOverrideMode, iq_stValve=> ); VVC_81(i_xExtILK_OK:= , i_xOverrideMode:= xOverrideMode, iq_stValve=> ); VVC_82(i_xExtILK_OK:= , i_xOverrideMode:= xOverrideMode, iq_stValve=> ); // Gas panel // Interlock evaluation VVC_83.i_xExtILK_OK := (NOT VVC_84.iq_stValve.q_xOPN_DO) AND (NOT VVC_85.iq_stValve.q_xOPN_DO) AND (NOT VVC_86.iq_stValve.q_xOPN_DO) AND (NOT VVC_81.iq_stValve.q_xOPN_DO) AND (NOT VVC_82.iq_stValve.q_xOPN_DO); // AND NOT bPurgeActive VVC_84.i_xExtILK_OK := (NOT VVC_83.iq_stValve.q_xOPN_DO) AND (NOT VVC_85.iq_stValve.q_xOPN_DO) AND (NOT VVC_86.iq_stValve.q_xOPN_DO) AND (NOT VVC_81.iq_stValve.q_xOPN_DO) AND (NOT VVC_82.iq_stValve.q_xOPN_DO); // AND NOT bPurgeActive VVC_85.i_xExtILK_OK := (NOT VVC_83.iq_stValve.q_xOPN_DO) AND (NOT VVC_84.iq_stValve.q_xOPN_DO) AND (NOT VVC_86.iq_stValve.q_xOPN_DO) AND (NOT VVC_81.iq_stValve.q_xOPN_DO) AND (NOT VVC_82.iq_stValve.q_xOPN_DO); // AND NOT bPurgeActive VVC_86.i_xExtILK_OK := (NOT VVC_83.iq_stValve.q_xOPN_DO) AND (NOT VVC_84.iq_stValve.q_xOPN_DO) AND (NOT VVC_85.iq_stValve.q_xOPN_DO) AND (NOT VVC_81.iq_stValve.q_xOPN_DO) AND (NOT VVC_82.iq_stValve.q_xOPN_DO);// AND NOT bPurgeActive //Gas Panel VVC_83(i_xExtILK_OK:= , i_xOverrideMode:= xOverrideMode, iq_stValve=> ); VVC_84(i_xExtILK_OK:= , i_xOverrideMode:= xOverrideMode, iq_stValve=> ); VVC_85(i_xExtILK_OK:= , i_xOverrideMode:= xOverrideMode, iq_stValve=> ); VVC_86(i_xExtILK_OK:= , i_xOverrideMode:= xOverrideMode, iq_stValve=> ); RTD(); END_PROGRAM ``` POU: PRG_PressureControl ------------------------ File: plc_kfe_gmd_vac/POUs/PRG_PressureControl.TcPOU ```vhdl PROGRAM PRG_PressureControl VAR CONSTANT nDataTable_NumberOfRows : INT:=9; END_VAR VAR fSetpointValue : FLOAT; fActualValue : FLOAT; fCtrlOutput : FLOAT; fBasicCtrlOutput : FLOAT; f_Rep_POS: Float; fManValue : FLOAT; bExtrapolate : BOOL; fManSyncValue : FLOAT; bSync : BOOL; bHold : BOOL; eMode : E_CTRL_MODE; stCTRL_PI_PARAMS : ST_CTRL_PI_PARAMS; stCTRL_LIN_INTERPOLATION_PARAMS : ST_CTRL_LIN_INTERPOLATION_PARAMS; eErrorId : E_CTRL_ERRORCODES; bError : BOOL; bARWactive : BOOL; arrTable : ARRAY[1..nDataTable_NumberOfRows,1..2] OF FLOAT; (* controller *) fbCTRL_PI : FB_CTRL_PI; fbCTRL_Normalize : FB_CTRL_NORMALIZE; fbCTRL_LIN_INTERPOLATION : FB_CTRL_LIN_INTERPOLATION; bInit : BOOL := TRUE; BasicPID: FB_BasicPID; END_VAR //VCN VCN_40(i_xExtIlkOK := true(*GCC_40.IG.xAT_VAC*), i_ReqPos:= ); //VGP_40(i_xExtIlkOK := true(*GCC_40.IG.xAT_VAC*), i_ReqPos:= ); f_Rep_POS := VCN_40.iq_stVCN.rReqPosition; (*-------------------------------------------------------------------*) (* PI CONTROL *) (*-------------------------------------------------------------------*) IF bInit THEN (* init parameter struct *) stCTRL_PI_PARAMS.tCtrlCycleTime := T#10ms; stCTRL_PI_PARAMS.tTaskCycleTime := T#10ms; stCTRL_PI_PARAMS.tTn := T#0S;//T#2s; (* derivative gain Tv *) stCTRL_PI_PARAMS.fKp := 2; (* proportional gain Kp *) stCTRL_PI_PARAMS.fOutMaxLimit := 100; (* maximum output limit *) stCTRL_PI_PARAMS.fOutMinLimit := 0; (* minimum output limit *) (* init array with the interpolation points *) (* fIn | fOut *) arrTable[1,1] := 0; arrTable[1,2] := 0; arrTable[2,1] := 0.001; arrTable[1,2] := 20; arrTable[3,1] := 0.005; arrTable[3,2] := 30; arrTable[4,1] := 0.089; arrTable[4,2] := 40; arrTable[5,1] := 0.276; arrTable[5,2] := 50; arrTable[6,1] := 2.299; arrTable[6,2] := 60; arrTable[7,1] := 9.522; arrTable[7,2] := 70; arrTable[8,1] := 13.815; arrTable[8,2] := 75; arrTable[9,1] := 24.019; arrTable[8,2] := 80; (* init parameter struct *) stCTRL_LIN_INTERPOLATION_PARAMS.tCtrlCycleTime := T#10ms; stCTRL_LIN_INTERPOLATION_PARAMS.tTaskCycleTime := T#10ms; stCTRL_LIN_INTERPOLATION_PARAMS.nDataTable_NumberOfRows := INT_TO_UINT(nDataTable_NumberOfRows); (* set the addresses *) stCTRL_LIN_INTERPOLATION_PARAMS.pDataTable_ADR := ADR(arrTable); stCTRL_LIN_INTERPOLATION_PARAMS.nDataTable_SIZEOF := SIZEOF(arrTable); (* set the mode to ACTIVE --> normal operation *) eMode := eCTRL_MODE_ACTIVE; (* reset the init flag *) bInit := FALSE; END_IF (* call controller *) fbCTRL_PI( fSetpointValue := fSetpointValue, fActualValue := fActualValue, fManSyncValue := fManSyncValue, bSync := bSync, eMode := eMode, bHold := bHold, stParams := stCTRL_PI_PARAMS, fOut => fCtrlOutput, bARWactive => bARWactive, eErrorId => eErrorId, bError => bError ); (* call interpolation fb *) (* fbCTRL_LIN_INTERPOLATION ( fIn := fSetpointValue, fManValue := fManValue, bExtrapolate := bExtrapolate, stParams := stCTRL_LIN_INTERPOLATION_PARAMS, eMode := eMode, fOut => , eErrorId => eErrorId, bError => bError ); fCtrlOutput := fbCTRL_PI.fOut + fbCTRL_LIN_INTERPOLATION.fOut; *)BasicPID( fSetpointValue:= fSetpointValue, fActualValue:= fActualValue , bReset:= FALSE , fCtrlCycleTime:= 10, fKp:= stCTRL_PI_PARAMS.fKp, fTn:= 0, fTv:= 0, fTd:= 0, fCtrlOutput=> fBasicCtrlOutput, nErrorStatus=> ); END_PROGRAM ``` POU: PRG_Purge -------------- File: plc_kfe_gmd_vac/POUs/PRG_Purge.TcPOU ```vhdl PROGRAM PRG_Purge VAR step: INT:=0; //ADD PRAGMAS AllGasVlvCls : BOOL; (* All Gas Manifold Valves are closed when True, not including VIC80, 81 or VGP40 *) WatchdogTmr : TON; (* Purge Watchdog Timer*) StartWatchdogTmr : BOOL; WatchdogPeriod : TIME; NeedleVlvPurgeTmr : TON; (* Declaration for the needle valve Purge timer *) NeedlePurgeTime : TIME:=T#30S; BurpET : TIME; NeedlePurgeRun : BOOL; NeedlePurgeDone : BOOL; NeedlePurgeRepeat : INT:= 2; VCN_Timer :TON; //PRAGMA NeedleBurpTime : TIME; //PRAGMA GBA80Tmr : TON; GBA80Time : TIME:=T#20S; GBATimeDone : BOOL; CATCH : INT; CATCH1 : INT; // Timers VVC_81_Timer : TON; VVC_82_Timer : TON; VGP_50: INT; END_VAR (* PURGE CYCLE The purge cycle cosists of the following steps; 1. Close all gas valves 83-86 2. Close Needle valve 3. Fully open VGP:40 4. PUMP DOWN MANIFOLD: Open VIC82 for a certain peroid of time or till cetrain pressure 5. Open VIC:81 and keep it open while the manifold pumps down to pressure set point 6. BURP NEEDLE VALVE: Once the manifold is pumped down, open the needle valve (burp) to evacuate gases that may be trapped in its mechanism 7. Close needle valve 8. Close VIC:81 and VIC:82 9. Release VGP:40 *) CASE step OF 0: // READY STATE IF (bStartPurge_sw) Then step:=10; bPurgeActive := true; bPurgeDone := false; END_IF 10: // start purge sequence by closing all gas valves VVC_80.M_Set_OPN_SW(FALSE); VVC_83.M_Set_OPN_SW(FALSE); VVC_84.M_Set_OPN_SW(FALSE); VVC_85.M_Set_OPN_SW(FALSE); VVC_86.M_Set_OPN_SW(FALSE); if (NOT VVC_83.iq_stValve.q_xOPN_DO) AND(NOT VVC_84.iq_stValve.q_xOPN_DO) AND (NOT VVC_85.iq_stValve.q_xOPN_DO) AND (NOT VVC_86.iq_stValve.q_xOPN_DO) then step:= 20; END_IF 20: //Close Needle valve VCN_40.M_ValveControl( E_VCN.CloseValve); // wait for a period of time to ensure that the Valve is fully closed IF (VCN_Timer.Q) THEN step:=30; END_IF 30: //Fully open VGP:40 VGP_40.M_ValveControl(E_VCN.OpenValve); IF NOT(VGP_40.q_stVGP.eState = E_MoveState.READY ) THEN // wait until the VGP encoder reads Open step:=31; END_IF if (VGP_40.q_stVGP.pv_xError )then step:=900+step; END_IF 31: IF (VGP_40.q_stVGP.eState = E_MoveState.READY ) THEN // wait until the VGP encoder reads Open //use motion ready step:=40; END_IF if (VGP_40.q_stVGP.pv_xError )then step:=900+step; END_IF 40: // open vavle 80 to pump down all the way to the needle valve VVC_80.M_Set_OPN_SW(TRUE); if (VVC_80.iq_stValve.q_xOPN_DO ) THEN step:=41; END_IF 41: //PUMP DOWN MANIFOLD: Open VIC82 for a certain peroid of time or till cetrain pressure VVC_82.M_Set_OPN_SW(TRUE); if (VVC_82.iq_stValve.q_xOPN_DO ) AND (VVC_82_Timer.Q) THEN step:=50; END_IF 50:// Open VIC:81 and keep it open while the manifold pumps down to pressure set point VVC_81.M_Set_OPN_SW(TRUE); IF (VVC_81.iq_stValve.q_xOPN_DO ) AND (VVC_81_Timer.Q) THEN // or a certain pressure reading and check timeouts step:=51; END_IF 51: //Close VIC:81 and VIC:82 VVC_80.M_Set_OPN_SW(false); VVC_81.M_Set_OPN_SW(false); VVC_82.M_Set_OPN_SW(false); IF (NOT VVC_80.iq_stValve.q_xOPN_DO) AND(NOT VVC_81.iq_stValve.q_xOPN_DO) AND(NOT VVC_82.iq_stValve.q_xOPN_DO) THEN step:=60; END_IF 60: //BURP NEEDLE VALVE: Once the manifold is pumped down, open the needle valve (burp) to evacuate gases that may be trapped in its mechanism VCN_40.M_ValveControl(E_VCN.OpenValve); // wait for a period of time to ensure that the Valve is fully closed IF (VCN_Timer.Q) THEN step:=70; END_IF 70: //Close Needle valve VCN_40.M_ValveControl(E_VCN.CloseValve); // wait for a period of time to ensure that the Valve is fully closed IF (VCN_Timer.Q) THEN step:=80; END_IF 80: // Repeat IF (NeedlePurgeRepeat > 0) THEN NeedlePurgeRepeat := NeedlePurgeRepeat-1; step:= 60; ELSE NeedlePurgeRepeat := 2; step:=90; END_IF 90: //Release VGP:40 VGP_40.M_ValveControl(E_VCN.PressureControl); VGP_40.i_ReqPos:= 50; //50% open IF NOT(VGP_40.q_stVGP.eState = E_MoveState.READY ) THEN // wait until the VGP encoder reads Open //use motion ready step:=91; END_IF if (VGP_40.q_stVGP.pv_xError )then step:=900+step; END_IF 91: IF (VGP_40.q_stVGP.eState = E_MoveState.READY ) THEN // wait until the VGP encoder reads Open //use motion ready step:=100; END_IF if (VGP_40.q_stVGP.pv_xError )then step:=900+step; END_IF 100: // DONE bStartPurge_sw := false; bPurgeActive := false; bPurgeDone := TRUE; 900: //Error VVC_80.M_Set_OPN_SW(false); VVC_81.M_Set_OPN_SW(false); VVC_82.M_Set_OPN_SW(false); VVC_83.M_Set_OPN_SW(false); VVC_84.M_Set_OPN_SW(false); VVC_85.M_Set_OPN_SW(false); VVC_86.M_Set_OPN_SW(false); VCN_40.M_ValveControl(E_VCN.CloseValve); VGP_40.M_ValveControl(E_VCN.ManualControl); // CLOSE or OPEN to pump down END_CASE //shouldn't be here (* if (bPurgeActive) then VVC_83.i_xExtILK_OK := VVC_84.i_xExtILK_OK := VVC_85.i_xExtILK_OK := VVC_86.i_xExtILK_OK := false; END_IF *) //Errors if (step >900 ) Then // show error and step END_IF //Timers VVC_81_Timer(IN:= (step = 50), PT:=t#60s); VVC_82_Timer(IN:= (step = 40), PT:=T#360S); VCN_Timer(IN:= (step = 20) OR (step = 60) OR (step = 70), PT:=T#60S); /// vcn and vgp on manual or auto?? manual, until the Go or auto button is pressed?? END_PROGRAM ``` POU: PRG_VAC_INTF ----------------- File: plc_kfe_gmd_vac/POUs/PRG_VAC_INTF.TcPOU ```vhdl PROGRAM PRG_VAC_INTF VAR END_VAR ads_watch_dog( sNetId := '172.21.92.61.1.1', // AMS NET ID of the PLC reading from this PLC (SXR Vacuum) nPort := 851, // ADS port of the PLC reading from this PLC sVarName := 'GVL_VAC_INTF.n_EM1K0_VAC_counter', // Full name of the UDINT provided to the 'iWatchdog' parameter in the interface functions on the PLC reading from this PLC ); END_PROGRAM ``` POU: PRG_VGP ------------ File: plc_kfe_gmd_vac/POUs/PRG_VGP.TcPOU ```vhdl PROGRAM PRG_VGP VAR arrTable : ARRAY[1..14,1..2] OF FLOAT; arrTable_ENC : ARRAY[1..14,1..2] OF FLOAT; bInit: BOOL:=true; VGP_REQ_POS: LREAL; VGP_OUT_POS:LREAL; END_VAR IF bInit THEN (* init array with the interpolation points *) (* fIn | fOut *) arrTable[1,1] := 0; arrTable[1,2] := 0; arrTable[2,1] := 5; arrTable[2,2] := 135; arrTable[3,1] := 10; arrTable[3,2] := 245; arrTable[4,1] := 20; arrTable[4,2] := 405; arrTable[5,1] := 30; arrTable[5,2] := 535; arrTable[6,1] := 40; arrTable[6,2] := 689; arrTable[7,1] := 50; arrTable[7,2] := 830; arrTable[8,1] := 60; arrTable[8,2] := 960; arrTable[9,1] := 70; arrTable[9,2] := 1095; arrTable[10,1] := 80; arrTable[10,2] := 1225; arrTable[11,1] := 90; arrTable[11,2] := 1415; arrTable[12,1] := 95; arrTable[12,2] := 1495; arrTable[13,1] := 98; arrTable[13,2] := 1559; arrTable[14,1] := 100; arrTable[14,2] := 1645; (* reset the init flag *) bInit := FALSE; END_IF VGP_40.i_xOpenIlkOK := (fb_EM1K0_GMD_PTM_40.iq_stPtm.eState = pumpRUNNING) ; VGP_40( i_xExtIlkOK:= (fb_EM1K0_GMD_PTM_40.iq_stPtm.eState = pumpRUNNING), i_ReqPos:= , arrTable:= arrTable , q_stVGP=> ); END_PROGRAM ``` Symbols ------- .TCPADS_MAXUDP_BUFFSIZE : UDINT (3363008 32) Constants.CompilerVersion : VERSION (15575680 64) Constants.CompilerVersionNumeric : DWORD (15575808 32) Constants.RuntimeVersion : VERSION (15575616 64) Constants.RuntimeVersionNumeric : DWORD (15575776 32) Constants.bFPUSupport : BOOL (15575760 8) Constants.bLittleEndian : BOOL (7612152 8) Constants.bMulticoreSupport : BOOL (15575768 8) Constants.bSimulationMode : BOOL (7768680 8) Constants.gc_GaugeValidState : INT (7513856 16) Constants.gc_GaugeValidState : INT (7515488 16) Constants.gc_iSizeOfGGOArray : INT (3368688 16) Constants.gc_iSizeOfGGOArray : INT (7515472 16) Constants.nPackMode : UINT (15575744 16) Constants.nRegisterSize : WORD (7768688 16) DefaultGlobals.fTimeStamp : LREAL (3072128 64) DefaultGlobals.stSys : ST_System (3072000 88) GVL.nLangId_OnlineMonitoring : DINT (3365248 32) GVL_GMD.fake_always_closed_vent_valve : ST_VVC (7768640 40) GVL_GMD.fb_EM1K0_GMD_GCC_10 : FB_MKS422 (9105792 85056) GVL_GMD.fb_EM1K0_GMD_GCC_10.i_iPRESS_R : INT (9190752 16) GVL_GMD.fb_EM1K0_GMD_GCC_10.q_xHV_DIS : BOOL (9190768 8) GVL_GMD.fb_EM1K0_GMD_GCC_20 : FB_MKS422 (9190848 85056) GVL_GMD.fb_EM1K0_GMD_GCC_20.i_iPRESS_R : INT (9275808 16) GVL_GMD.fb_EM1K0_GMD_GCC_20.q_xHV_DIS : BOOL (9275824 8) GVL_GMD.fb_EM1K0_GMD_GCC_30 : FB_MKS422 (9275904 85056) GVL_GMD.fb_EM1K0_GMD_GCC_30.i_iPRESS_R : INT (9360864 16) GVL_GMD.fb_EM1K0_GMD_GCC_30.q_xHV_DIS : BOOL (9360880 8) GVL_GMD.fb_EM1K0_GMD_GCC_40 : FB_MKS422 (9360960 85056) GVL_GMD.fb_EM1K0_GMD_GCC_40.i_iPRESS_R : INT (9445920 16) GVL_GMD.fb_EM1K0_GMD_GCC_40.q_xHV_DIS : BOOL (9445936 8) GVL_GMD.fb_EM1K0_GMD_GCC_50 : FB_MKS422 (9446016 85056) GVL_GMD.fb_EM1K0_GMD_GCC_50.i_iPRESS_R : INT (9530976 16) GVL_GMD.fb_EM1K0_GMD_GCC_50.q_xHV_DIS : BOOL (9530992 8) GVL_GMD.fb_EM1K0_GMD_GCC_60 : FB_MKS422 (9531072 85056) GVL_GMD.fb_EM1K0_GMD_GCC_60.i_iPRESS_R : INT (9616032 16) GVL_GMD.fb_EM1K0_GMD_GCC_60.q_xHV_DIS : BOOL (9616048 8) GVL_GMD.fb_EM1K0_GMD_GCC_70 : FB_MKS422 (9616128 85056) GVL_GMD.fb_EM1K0_GMD_GCC_70.i_iPRESS_R : INT (9701088 16) GVL_GMD.fb_EM1K0_GMD_GCC_70.q_xHV_DIS : BOOL (9701104 8) GVL_GMD.fb_EM1K0_GMD_GPI_10 : FB_MKS317 (7768704 83968) GVL_GMD.fb_EM1K0_GMD_GPI_10.i_iPRESS_R : INT (7852384 16) GVL_GMD.fb_EM1K0_GMD_GPI_40 : FB_MKS317 (7852672 83968) GVL_GMD.fb_EM1K0_GMD_GPI_40.i_iPRESS_R : INT (7936352 16) GVL_GMD.fb_EM1K0_GMD_GPI_70 : FB_MKS317 (7936640 83968) GVL_GMD.fb_EM1K0_GMD_GPI_70.i_iPRESS_R : INT (8020320 16) GVL_GMD.fb_EM1K0_GMD_PRT_40 : FB_EbaraEVA (9701184 82304) GVL_GMD.fb_EM1K0_GMD_PRT_40.i_xAlarmOK : BOOL (9783464 8) GVL_GMD.fb_EM1K0_GMD_PRT_40.i_xIsRun : BOOL (9783472 8) GVL_GMD.fb_EM1K0_GMD_PRT_40.q_xRemote : BOOL (9783448 8) GVL_GMD.fb_EM1K0_GMD_PRT_40.q_xResetAlarm : BOOL (9783456 8) GVL_GMD.fb_EM1K0_GMD_PRT_40.q_xRunDo : BOOL (9783440 8) GVL_GMD.fb_EM1K0_GMD_PTM_10 : FB_PTM_TwisTorr (8020608 82560) GVL_GMD.fb_EM1K0_GMD_PTM_10.i_xAtSpd : BOOL (8103144 8) GVL_GMD.fb_EM1K0_GMD_PTM_10.i_xFault : BOOL (8103152 8) GVL_GMD.fb_EM1K0_GMD_PTM_10.q_RunDO : BOOL (8103160 8) GVL_GMD.fb_EM1K0_GMD_PTM_20 : FB_PTM_TwisTorr (8103168 82560) GVL_GMD.fb_EM1K0_GMD_PTM_20.i_xAtSpd : BOOL (8185704 8) GVL_GMD.fb_EM1K0_GMD_PTM_20.i_xFault : BOOL (8185712 8) GVL_GMD.fb_EM1K0_GMD_PTM_20.q_RunDO : BOOL (8185720 8) GVL_GMD.fb_EM1K0_GMD_PTM_30 : FB_PTM_TwisTorr (8185728 82560) GVL_GMD.fb_EM1K0_GMD_PTM_30.i_xAtSpd : BOOL (8268264 8) GVL_GMD.fb_EM1K0_GMD_PTM_30.i_xFault : BOOL (8268272 8) GVL_GMD.fb_EM1K0_GMD_PTM_30.q_RunDO : BOOL (8268280 8) GVL_GMD.fb_EM1K0_GMD_PTM_40 : FB_PTM_TwisTorr (8268288 82560) GVL_GMD.fb_EM1K0_GMD_PTM_40.i_xAtSpd : BOOL (8350824 8) GVL_GMD.fb_EM1K0_GMD_PTM_40.i_xFault : BOOL (8350832 8) GVL_GMD.fb_EM1K0_GMD_PTM_40.q_RunDO : BOOL (8350840 8) GVL_GMD.fb_EM1K0_GMD_PTM_50 : FB_PTM_TwisTorr (8350848 82560) GVL_GMD.fb_EM1K0_GMD_PTM_50.i_xAtSpd : BOOL (8433384 8) GVL_GMD.fb_EM1K0_GMD_PTM_50.i_xFault : BOOL (8433392 8) GVL_GMD.fb_EM1K0_GMD_PTM_50.q_RunDO : BOOL (8433400 8) GVL_GMD.fb_EM1K0_GMD_PTM_60 : FB_PTM_TwisTorr (8433408 82560) GVL_GMD.fb_EM1K0_GMD_PTM_60.i_xAtSpd : BOOL (8515944 8) GVL_GMD.fb_EM1K0_GMD_PTM_60.i_xFault : BOOL (8515952 8) GVL_GMD.fb_EM1K0_GMD_PTM_60.q_RunDO : BOOL (8515960 8) GVL_GMD.fb_EM1K0_GMD_PTM_70 : FB_PTM_TwisTorr (8515968 82560) GVL_GMD.fb_EM1K0_GMD_PTM_70.i_xAtSpd : BOOL (8598504 8) GVL_GMD.fb_EM1K0_GMD_PTM_70.i_xFault : BOOL (8598512 8) GVL_GMD.fb_EM1K0_GMD_PTM_70.q_RunDO : BOOL (8598520 8) GVL_GMD.fb_EM1K0_GMD_VRC_10 : FB_VRC (8598528 84544) GVL_GMD.fb_EM1K0_GMD_VRC_10.i_xClsLS : BOOL (8683048 8) GVL_GMD.fb_EM1K0_GMD_VRC_10.i_xOpnLS : BOOL (8683040 8) GVL_GMD.fb_EM1K0_GMD_VRC_10.q_xOPN_DO : BOOL (8683056 8) GVL_GMD.fb_EM1K0_GMD_VRC_20 : FB_VRC (8683072 84544) GVL_GMD.fb_EM1K0_GMD_VRC_20.i_xClsLS : BOOL (8767592 8) GVL_GMD.fb_EM1K0_GMD_VRC_20.i_xOpnLS : BOOL (8767584 8) GVL_GMD.fb_EM1K0_GMD_VRC_20.q_xOPN_DO : BOOL (8767600 8) GVL_GMD.fb_EM1K0_GMD_VRC_30 : FB_VRC (8767616 84544) GVL_GMD.fb_EM1K0_GMD_VRC_30.i_xClsLS : BOOL (8852136 8) GVL_GMD.fb_EM1K0_GMD_VRC_30.i_xOpnLS : BOOL (8852128 8) GVL_GMD.fb_EM1K0_GMD_VRC_30.q_xOPN_DO : BOOL (8852144 8) GVL_GMD.fb_EM1K0_GMD_VRC_50 : FB_VRC (8852160 84544) GVL_GMD.fb_EM1K0_GMD_VRC_50.i_xClsLS : BOOL (8936680 8) GVL_GMD.fb_EM1K0_GMD_VRC_50.i_xOpnLS : BOOL (8936672 8) GVL_GMD.fb_EM1K0_GMD_VRC_50.q_xOPN_DO : BOOL (8936688 8) GVL_GMD.fb_EM1K0_GMD_VRC_60 : FB_VRC (8936704 84544) GVL_GMD.fb_EM1K0_GMD_VRC_60.i_xClsLS : BOOL (9021224 8) GVL_GMD.fb_EM1K0_GMD_VRC_60.i_xOpnLS : BOOL (9021216 8) GVL_GMD.fb_EM1K0_GMD_VRC_60.q_xOPN_DO : BOOL (9021232 8) GVL_GMD.fb_EM1K0_GMD_VRC_70 : FB_VRC (9021248 84544) GVL_GMD.fb_EM1K0_GMD_VRC_70.i_xClsLS : BOOL (9105768 8) GVL_GMD.fb_EM1K0_GMD_VRC_70.i_xOpnLS : BOOL (9105760 8) GVL_GMD.fb_EM1K0_GMD_VRC_70.q_xOPN_DO : BOOL (9105776 8) GVL_GMD.fb_EM1K0_GMD_VVC_40 : FB_VVC (9783488 640) GVL_GMD.fb_EM1K0_GMD_VVC_40.q_xOPN_DO : BOOL (9784096 8) GVL_INJ.GCM_80 : FB_GCM (7764608 1248) GVL_INJ.GCM_80.i_iPRESS_R : INT (7765840 16) GVL_INJ.GFM_83 : FB_PressureTransducer (7767680 608) GVL_INJ.GFM_83.iError : BOOL (7768256 8) GVL_INJ.GFM_83.i_iPRESS_R : INT (7768272 16) GVL_INJ.GFM_84 : FB_PressureTransducer (7767072 608) GVL_INJ.GFM_84.iError : BOOL (7767648 8) GVL_INJ.GFM_84.i_iPRESS_R : INT (7767664 16) GVL_INJ.GFM_85 : FB_PressureTransducer (7766464 608) GVL_INJ.GFM_85.iError : BOOL (7767040 8) GVL_INJ.GFM_85.i_iPRESS_R : INT (7767056 16) GVL_INJ.GFM_86 : FB_PressureTransducer (7765856 608) GVL_INJ.GFM_86.iError : BOOL (7766432 8) GVL_INJ.GFM_86.i_iPRESS_R : INT (7766448 16) GVL_INJ.RTD : FB_RTD (7768448 192) GVL_INJ.RTD.bError : BOOL (7768584 8) GVL_INJ.RTD.bOverrange : BOOL (7768600 8) GVL_INJ.RTD.bUnderrange : BOOL (7768592 8) GVL_INJ.RTD.iRaw : INT (7768608 16) GVL_INJ.VCN_40 : FB_VCN (7611648 480) GVL_INJ.VCN_40.q_iRawPosition : INT (7612096 16) GVL_INJ.VGP_40 : FB_VGP (7612160 147968) GVL_INJ.VGP_40.Axis.NcToPlc : NCTOPLC_AXIS_REF (7616512 2048) GVL_INJ.VGP_40.Axis.PlcToNc : PLCTONC_AXIS_REF (7615488 1024) GVL_INJ.VGP_40.InfoData_State : UINT (7624448 16) GVL_INJ.VVC_80 : FB_VVC (7760128 640) GVL_INJ.VVC_80.q_xOPN_DO : BOOL (7760736 8) GVL_INJ.VVC_81 : FB_VVC (7760768 640) GVL_INJ.VVC_81.q_xOPN_DO : BOOL (7761376 8) GVL_INJ.VVC_82 : FB_VVC (7761408 640) GVL_INJ.VVC_82.q_xOPN_DO : BOOL (7762016 8) GVL_INJ.VVC_83 : FB_VVC (7762048 640) GVL_INJ.VVC_83.q_xOPN_DO : BOOL (7762656 8) GVL_INJ.VVC_84 : FB_VVC (7762688 640) GVL_INJ.VVC_84.q_xOPN_DO : BOOL (7763296 8) GVL_INJ.VVC_85 : FB_VVC (7763328 640) GVL_INJ.VVC_85.q_xOPN_DO : BOOL (7763936 8) GVL_INJ.VVC_86 : FB_VVC (7763968 640) GVL_INJ.VVC_86.q_xOPN_DO : BOOL (7764576 8) GVL_INJ.hv1 : FB_HighVoltage (7768288 160) GVL_INJ.hv1.q_HV_DO : BOOL (7768416 8) GVL_INJ.xOverrideMode : BOOL (7602976 8) GVL_INTERNAL.UNINITIALIZED_CLASS_GUID : GUID (3365600 128) GVL_Logger.TCPADS_MAXUDP_BUFFSIZE : UDINT (3073184 32) GVL_Logger.bTrickleTripped : BOOL (3072088 8) GVL_Logger.cLogHost : STRING(15) (3072192 128) GVL_Logger.fbRootLogger : FB_LogMessage (3073216 81600) GVL_Logger.iLogPort : UINT (3072096 16) GVL_Logger.nGlobAccEvents : UDINT (3154816 32) GVL_Logger.nLocalTrickleTripThreshold : TIME (3072416 32) GVL_Logger.nLocalTripThreshold : TIME (3072384 32) GVL_Logger.nMinTimeViolationAcceptable : INT (3072112 16) GVL_Logger.nTrickleThreshold : UDINT (3154848 32) GVL_Logger.nTrickleTripTime : TIME (3072448 32) GVL_Logger.nTripResetPeriod : TIME (3072480 32) GVL_Logger.sIpTidbit : STRING(6) (3072320 56) GVL_Logger.sPlcHostname : STRING(80) (3072512 648) GVL_Param_TcUnit.MaxNumberOfAsserts : UINT (3366048 16) GVL_Param_TcUnit.MaxNumberOfTestSuites : UINT (3366016 16) GVL_Param_TcUnit.MaxNumberOfTestsForEachTestSuite : UINT (3366032 16) GVL_PfeifferParameters.gcMaxPfeifferPumps : INT (7515456 16) GVL_TcUnit.AdsLogger : FB_ADSLogStringMessageFifoQueue (3384704 4128864) GVL_TcUnit.CurrentTestIsFinished : BOOL (3366064 8) GVL_TcUnit.CurrentTestNameBeingCalled : STRING(255) (3366624 2048) GVL_TcUnit.CurrentTestSuiteBeingCalled : POINTER TO FB_TestSuite (3366592 32) GVL_TcUnit.IgnoreCurrentTest : BOOL (3366072 8) GVL_TcUnit.NumberOfInitializedTestSuites : UINT (3368672 16) GVL_TcUnit.TcUnitRunner : FB_TcUnitRunner (3366080 512) GVL_TcUnit.TestSuiteAddresses : POINTER TO FB_TestSuite (3368704 16000) GVL_TcUnit.TestSuiteIsRegistered : BOOL (3359976 8) GVL_VAC_INTF.ads_watch_dog : FB_ADS_WATCHDOG (9784128 5632) GVL_VARIABLES.bAutoVVC40 : BOOL (7602992 8) GVL_VARIABLES.bPurgeActive : BOOL (7612128 8) GVL_VARIABLES.bPurgeDone : BOOL (7612136 8) GVL_VARIABLES.bStartPurge_sw : BOOL (7603000 8) GVL_VARIABLES.fbLogHandler : FB_LogHandler (9789760 5785856) GVL_VARIABLES.xSystemOverrideMode : BOOL (7602984 8) Global_Constants.EMPTY_EVENT_CLASS : GUID (3364896 128) Global_Constants.EMPTY_EVENT_ID : UDINT (3365024 32) Global_Constants.EMPTY_SEVERITY : TcEventSeverity (3361680 16) Global_Constants.SUCCESS_EVENT : TcEventEntry (3365056 192) Global_Variables.ADSIGRP_DEVICE_DATA : UDINT (3156544 32) Global_Variables.ADSIGRP_IOIMAGE_CLEARI : UDINT (3156448 32) Global_Variables.ADSIGRP_IOIMAGE_CLEARO : UDINT (3156480 32) Global_Variables.ADSIGRP_IOIMAGE_RISIZE : UDINT (3156320 32) Global_Variables.ADSIGRP_IOIMAGE_ROSIZE : UDINT (3156416 32) Global_Variables.ADSIGRP_IOIMAGE_RWIB : UDINT (3156256 32) Global_Variables.ADSIGRP_IOIMAGE_RWIOB : UDINT (3156512 32) Global_Variables.ADSIGRP_IOIMAGE_RWIX : UDINT (3156288 32) Global_Variables.ADSIGRP_IOIMAGE_RWOB : UDINT (3156352 32) Global_Variables.ADSIGRP_IOIMAGE_RWOX : UDINT (3156384 32) Global_Variables.ADSIGRP_SYMNAME : UDINT (3155840 32) Global_Variables.ADSIGRP_SYMNOTE : UDINT (3156224 32) Global_Variables.ADSIGRP_SYMTAB : UDINT (3155808 32) Global_Variables.ADSIGRP_SYMVAL : UDINT (3155872 32) Global_Variables.ADSIGRP_SYM_DOWNLOAD : UDINT (3156128 32) Global_Variables.ADSIGRP_SYM_HNDBYNAME : UDINT (3155904 32) Global_Variables.ADSIGRP_SYM_INFOBYNAME : UDINT (3156032 32) Global_Variables.ADSIGRP_SYM_INFOBYNAMEEX : UDINT (3156096 32) Global_Variables.ADSIGRP_SYM_RELEASEHND : UDINT (3156000 32) Global_Variables.ADSIGRP_SYM_UPLOAD : UDINT (3156160 32) Global_Variables.ADSIGRP_SYM_UPLOADINFO : UDINT (3156192 32) Global_Variables.ADSIGRP_SYM_VALBYHND : UDINT (3155968 32) Global_Variables.ADSIGRP_SYM_VALBYNAME : UDINT (3155936 32) Global_Variables.ADSIGRP_SYM_VERSION : UDINT (3156064 32) Global_Variables.ADSIOFFS_DEVDATA_ADSSTATE : UDINT (3156576 32) Global_Variables.ADSIOFFS_DEVDATA_DEVSTATE : UDINT (3156608 32) Global_Variables.ADSLOG_MSGTYPE_ERROR : DWORD (3157664 32) Global_Variables.ADSLOG_MSGTYPE_HINT : DWORD (3157600 32) Global_Variables.ADSLOG_MSGTYPE_LOG : DWORD (3157696 32) Global_Variables.ADSLOG_MSGTYPE_MSGBOX : DWORD (3157728 32) Global_Variables.ADSLOG_MSGTYPE_RESOURCE : DWORD (3157760 32) Global_Variables.ADSLOG_MSGTYPE_STRING : DWORD (3157792 32) Global_Variables.ADSLOG_MSGTYPE_WARN : DWORD (3157632 32) Global_Variables.ADSSTATE_CONFIG : UINT (3155696 16) Global_Variables.ADSSTATE_ERROR : UINT (3155632 16) Global_Variables.ADSSTATE_EXCEPTION : UINT (3155760 16) Global_Variables.ADSSTATE_IDLE : UINT (3155472 16) Global_Variables.ADSSTATE_INCOMPATIBLE : UINT (3155744 16) Global_Variables.ADSSTATE_INIT : UINT (3155504 16) Global_Variables.ADSSTATE_INVALID : UINT (3155456 16) Global_Variables.ADSSTATE_LOADCFG : UINT (3155584 16) Global_Variables.ADSSTATE_MAXSTATES : UINT (3155776 16) Global_Variables.ADSSTATE_POWERFAILURE : UINT (3155600 16) Global_Variables.ADSSTATE_POWERGOOD : UINT (3155616 16) Global_Variables.ADSSTATE_RECONFIG : UINT (3155712 16) Global_Variables.ADSSTATE_RESET : UINT (3155488 16) Global_Variables.ADSSTATE_RESUME : UINT (3155680 16) Global_Variables.ADSSTATE_RUN : UINT (3155536 16) Global_Variables.ADSSTATE_SAVECFG : UINT (3155568 16) Global_Variables.ADSSTATE_SHUTDOWN : UINT (3155648 16) Global_Variables.ADSSTATE_START : UINT (3155520 16) Global_Variables.ADSSTATE_STOP : UINT (3155552 16) Global_Variables.ADSSTATE_STOPPING : UINT (3155728 16) Global_Variables.ADSSTATE_SUSPEND : UINT (3155664 16) Global_Variables.AMSLOGGER_IGR_GENERAL : UDINT (3223456 32) Global_Variables.AMSLOGGER_IOF_MODE : UDINT (3223488 32) Global_Variables.AMSPORT_AMSLOGGER : UINT (3223520 16) Global_Variables.AMSPORT_EVENTLOG : UINT (3155168 16) Global_Variables.AMSPORT_LOGGER : UINT (3073168 16) Global_Variables.AMSPORT_R0_CAM : UINT (3155392 16) Global_Variables.AMSPORT_R0_CAMTOOL : UINT (3155408 16) Global_Variables.AMSPORT_R0_CNC : UINT (3155280 16) Global_Variables.AMSPORT_R0_IO : UINT (3155200 16) Global_Variables.AMSPORT_R0_ISG : UINT (3155264 16) Global_Variables.AMSPORT_R0_LINE : UINT (3155296 16) Global_Variables.AMSPORT_R0_NC : UINT (3155216 16) Global_Variables.AMSPORT_R0_NCSAF : UINT (3155232 16) Global_Variables.AMSPORT_R0_NCSVB : UINT (3155248 16) Global_Variables.AMSPORT_R0_PLC : UINT (3155312 16) Global_Variables.AMSPORT_R0_PLC_RTS1 : UINT (3155328 16) Global_Variables.AMSPORT_R0_PLC_RTS2 : UINT (3155344 16) Global_Variables.AMSPORT_R0_PLC_RTS3 : UINT (3155360 16) Global_Variables.AMSPORT_R0_PLC_RTS4 : UINT (3155376 16) Global_Variables.AMSPORT_R0_RTIME : UINT (3155184 16) Global_Variables.AMSPORT_R3_SCOPESERVER : UINT (3155440 16) Global_Variables.AMSPORT_R3_SYSSERV : UINT (3155424 16) Global_Variables.AMSPORT_TCPIPSRV : UINT (3359984 16) Global_Variables.BOOTDATAFLAGS_PERSISTENT_INVALID : BYTE (3157824 8) Global_Variables.BOOTDATAFLAGS_PERSISTENT_LOADED : BYTE (3155800 8) Global_Variables.BOOTDATAFLAGS_RETAIN_INVALID : BYTE (3073160 8) Global_Variables.BOOTDATAFLAGS_RETAIN_LOADED : BYTE (3072376 8) Global_Variables.BOOTDATAFLAGS_RETAIN_REQUESTED : BYTE (3155792 8) Global_Variables.CONNECT_MODE_ENABLEDBG : DWORD (3364000 32) Global_Variables.DATE_AND_TIME_SECPERDAY : DWORD (3231136 32) Global_Variables.DATE_AND_TIME_SECPERWEEK : DWORD (3236448 32) Global_Variables.DBG_OUTPUT_FILE : DWORD (3242720 32) Global_Variables.DBG_OUTPUT_LOG : DWORD (3242688 32) Global_Variables.DBG_OUTPUT_NONE : DWORD (3242656 32) Global_Variables.DBG_OUTPUT_VISU : DWORD (3242752 32) Global_Variables.DEFAULT_ADS_TIMEOUT : TIME (3158496 32) Global_Variables.DEFAULT_BACKLASHVALUE : LREAL (7531392 64) Global_Variables.DEFAULT_CSV_FIELD_DOUBLE_QUOTE : BYTE (3222200 8) Global_Variables.DEFAULT_CSV_FIELD_SEP : BYTE (3160224 8) Global_Variables.DEFAULT_CSV_RECORD_SEP_CR : BYTE (3358992 8) Global_Variables.DEFAULT_CSV_RECORD_SEP_LF : BYTE (3359000 8) Global_Variables.DEFAULT_HOME_POSITION : LREAL (7531328 64) Global_Variables.EMPTY_ARG_VALUE : T_Arg (3224096 96) Global_Variables.EMPTY_GUID_REGSTRING : STRING(38) (3362120 312) Global_Variables.EMPTY_GUID_STRING : STRING(36) (3361824 296) Global_Variables.EMPTY_GUID_STRUCT : GUID (3361696 128) Global_Variables.EMPTY_ROUTE_ENTRY : ST_AmsRouteEntry (3222208 1184) Global_Variables.FLOATREC_EXP_IS_INF : INT (3223568 16) Global_Variables.FLOATREC_EXP_IS_NAN : INT (3223552 16) Global_Variables.FLOATREC_MAX_DIGITS : INT (3223584 16) Global_Variables.FLOATREC_MAX_PRECISION : INT (3223600 16) Global_Variables.FLOATREC_MIN_PRECISION : INT (3223616 16) Global_Variables.FMTERR_ARGTYPEINVALID : DWORD (3223936 32) Global_Variables.FMTERR_ASTERISKPOSITION : DWORD (3223712 32) Global_Variables.FMTERR_DESTBUFFOVERFLOW : DWORD (3224032 32) Global_Variables.FMTERR_FLAGPOSITION : DWORD (3223808 32) Global_Variables.FMTERR_INSUFFICIENTARGS : DWORD (3224000 32) Global_Variables.FMTERR_INVALIDPOINTERINPUT : DWORD (3224064 32) Global_Variables.FMTERR_NOERROR : DWORD (3223648 32) Global_Variables.FMTERR_PERCENTSIGNPOSITION : DWORD (3223680 32) Global_Variables.FMTERR_PRECISIONDOTPOSITION : DWORD (3223872 32) Global_Variables.FMTERR_PRECISIONVALUE : DWORD (3223776 32) Global_Variables.FMTERR_TYPEFIELDVALUE : DWORD (3223904 32) Global_Variables.FMTERR_UNACCEPTEDPARAMETER : DWORD (3223968 32) Global_Variables.FMTERR_WIDTHPRECISIONVALPOS : DWORD (3223840 32) Global_Variables.FMTERR_WIDTHVALUE : DWORD (3223744 32) Global_Variables.FOPEN_MODEAPPEND : DWORD (3157920 32) Global_Variables.FOPEN_MODEBINARY : DWORD (3157984 32) Global_Variables.FOPEN_MODEPLUS : DWORD (3157952 32) Global_Variables.FOPEN_MODEREAD : DWORD (3157856 32) Global_Variables.FOPEN_MODETEXT : DWORD (3158016 32) Global_Variables.FOPEN_MODEWRITE : DWORD (3157888 32) Global_Variables.FORMAT_DECASC_CODES : BYTE (3224448 80) Global_Variables.FORMAT_HEXASC_CODES : BYTE (3224192 256) Global_Variables.FORMAT_MAX_ARGS : INT (3223536 16) Global_Variables.GLOBAL_DCF77_PULSE_SPLIT : TIME (3160192 32) Global_Variables.GLOBAL_DCF77_SEQUENCE_CHECK : BOOL (3160072 8) Global_Variables.GLOBAL_FORMAT_HASH_PREFIX_TYPE : E_HashPrefixTypes (3160160 16) Global_Variables.GLOBAL_SBCS_TABLE : E_SBCSType (3160176 16) Global_Variables.HKEY_MAX_BINARY_DATA_SIZE : UDINT (3223424 32) Global_Variables.IPHELPERAPI_ADAPTERSINFO : UDINT (3221888 32) Global_Variables.IPHELPERAPI_IPADDRBYHOSTNAME : UDINT (3221920 32) Global_Variables.LISTEN_MODE_CLOSEALL : DWORD (3363936 32) Global_Variables.LISTEN_MODE_USEOPENED : DWORD (3363968 32) Global_Variables.MAX_ADAPTER_ADDRESS_LENGTH : UDINT (3221792 32) Global_Variables.MAX_ADAPTER_DESCRIPTION_LENGTH : UDINT (3221760 32) Global_Variables.MAX_ADAPTER_NAME_LENGTH : UDINT (3221728 32) Global_Variables.MAX_AVERAGE_MEASURES : INT (2..100) (3160080 16) Global_Variables.MAX_LOCAL_ADAPTERS : UDINT (3221952 32) Global_Variables.MAX_REMOTE_PCS : INT (3160240 16) Global_Variables.MAX_ROUTE_ADDR_LEN : BYTE (3222176 8) Global_Variables.MAX_ROUTE_NAME_LEN : BYTE (3160232 8) Global_Variables.MAX_ROUTE_TRANSPORT : BYTE (3222192 8) Global_Variables.MAX_STRING_LENGTH : UDINT (3158592 32) Global_Variables.MAX_THROTTLE_MODE : DWORD (3364032 32) Global_Variables.MIN_ROUTE_TRANSPORT : BYTE (3222184 8) Global_Variables.PI : LREAL (3158528 64) Global_Variables.ROUTE_FLAG_DYNAMIC : DWORD (3222112 32) Global_Variables.ROUTE_FLAG_NOOVERRIDE : DWORD (3222144 32) Global_Variables.ROUTE_FLAG_TEMPORARY : DWORD (3222080 32) Global_Variables.SYSTEMSERVICE_ADDREMOTE : UDINT (3221984 32) Global_Variables.SYSTEMSERVICE_CHANGENETID : UDINT (3157408 32) Global_Variables.SYSTEMSERVICE_CLOSEHANDLE : UDINT (3156768 32) Global_Variables.SYSTEMSERVICE_CREATEFILE : UDINT (3156736 32) Global_Variables.SYSTEMSERVICE_DELREMOTE : UDINT (3222016 32) Global_Variables.SYSTEMSERVICE_ENUMREMOTE : UDINT (3222048 32) Global_Variables.SYSTEMSERVICE_FCLOSE : UDINT (3156832 32) Global_Variables.SYSTEMSERVICE_FDELETE : UDINT (3157152 32) Global_Variables.SYSTEMSERVICE_FEOF : UDINT (3157120 32) Global_Variables.SYSTEMSERVICE_FFILEFIND : UDINT (3223392 32) Global_Variables.SYSTEMSERVICE_FGETS : UDINT (3156992 32) Global_Variables.SYSTEMSERVICE_FOPEN : UDINT (3156800 32) Global_Variables.SYSTEMSERVICE_FPRINTF : UDINT (3157088 32) Global_Variables.SYSTEMSERVICE_FPUTS : UDINT (3157024 32) Global_Variables.SYSTEMSERVICE_FREAD : UDINT (3156864 32) Global_Variables.SYSTEMSERVICE_FRENAME : UDINT (3157184 32) Global_Variables.SYSTEMSERVICE_FSCANF : UDINT (3157056 32) Global_Variables.SYSTEMSERVICE_FSEEK : UDINT (3156928 32) Global_Variables.SYSTEMSERVICE_FTELL : UDINT (3156960 32) Global_Variables.SYSTEMSERVICE_FWRITE : UDINT (3156896 32) Global_Variables.SYSTEMSERVICE_IPHELPERAPI : UDINT (3221824 32) Global_Variables.SYSTEMSERVICE_IPHOSTNAME : UDINT (3221856 32) Global_Variables.SYSTEMSERVICE_MKDIR : UDINT (3157216 32) Global_Variables.SYSTEMSERVICE_OPENCREATE : UDINT (3156640 32) Global_Variables.SYSTEMSERVICE_OPENREAD : UDINT (3156672 32) Global_Variables.SYSTEMSERVICE_OPENWRITE : UDINT (3156704 32) Global_Variables.SYSTEMSERVICE_REG_HKEYLOCALMACHINE : UDINT (3157280 32) Global_Variables.SYSTEMSERVICE_RMDIR : UDINT (3157248 32) Global_Variables.SYSTEMSERVICE_SENDEMAIL : UDINT (3157312 32) Global_Variables.SYSTEMSERVICE_STARTPROCESS : UDINT (3157376 32) Global_Variables.SYSTEMSERVICE_TIMESERVICES : UDINT (3157344 32) Global_Variables.SYSTEMSTATEFLAGS_BSOD : BYTE (3157832 8) Global_Variables.SYSTEMSTATEFLAGS_RTVIOLATION : BYTE (3157840 8) Global_Variables.SYSTEMTIME_DATEDELTA_OFFSET : DWORD (3230784 32) Global_Variables.SYSTEMTIME_DATE_AND_TIME_MAX : T_ULARGE_INTEGER (3231072 64) Global_Variables.SYSTEMTIME_DATE_AND_TIME_MAX64 : ULINT (3231424 64) Global_Variables.SYSTEMTIME_DATE_AND_TIME_MIN : T_ULARGE_INTEGER (3231008 64) Global_Variables.SYSTEMTIME_DATE_AND_TIME_MIN64 : ULINT (3231360 64) Global_Variables.SYSTEMTIME_MAX_MONTHDAYS : WORD (3229936 384) Global_Variables.SYSTEMTIME_MAX_YEARSDAY : WORD (3230320 448) Global_Variables.SYSTEMTIME_TICKSPERDAY : T_ULARGE_INTEGER (3230944 64) Global_Variables.SYSTEMTIME_TICKSPERDAY64 : ULINT (3231296 64) Global_Variables.SYSTEMTIME_TICKSPERMSEC : T_ULARGE_INTEGER (3230816 64) Global_Variables.SYSTEMTIME_TICKSPERMSEC64 : ULINT (3231168 64) Global_Variables.SYSTEMTIME_TICKSPERSEC : T_ULARGE_INTEGER (3230880 64) Global_Variables.SYSTEMTIME_TICKSPERSEC64 : ULINT (3231232 64) Global_Variables.TCEVENTFLAG_AUTOFMTALL : WORD (3158352 16) Global_Variables.TCEVENTFLAG_FMTSELF : WORD (3158288 16) Global_Variables.TCEVENTFLAG_LOG : WORD (3158304 16) Global_Variables.TCEVENTFLAG_MSGBOX : WORD (3158320 16) Global_Variables.TCEVENTFLAG_PRIOCLASS : WORD (3158272 16) Global_Variables.TCEVENTFLAG_SRCID : WORD (3158336 16) Global_Variables.TCEVENTSTATE_CONFIRMED : WORD (3158416 16) Global_Variables.TCEVENTSTATE_INVALID : WORD (3158368 16) Global_Variables.TCEVENTSTATE_RESET : WORD (3158400 16) Global_Variables.TCEVENTSTATE_RESETCON : WORD (3158432 16) Global_Variables.TCEVENTSTATE_SIGNALED : WORD (3158384 16) Global_Variables.TCEVENT_FMTPRGSIZE : INT (3158464 16) Global_Variables.TCEVENT_SRCNAMESIZE : INT (3158448 16) Global_Variables.TCPADSCONLST_IOF_ACCEPT : UDINT (3363456 32) Global_Variables.TCPADSCONLST_IOF_CLOSEALL : UDINT (3363424 32) Global_Variables.TCPADSCONLST_IOF_CONNECT : UDINT (3363360 32) Global_Variables.TCPADSCONLST_IOF_GETHNDLBYADDR : UDINT (3363520 32) Global_Variables.TCPADSCONLST_IOF_GETLINKSTATUS : UDINT (3363552 32) Global_Variables.TCPADSCONLST_IOF_LISTEN : UDINT (3363392 32) Global_Variables.TCPADSCONLST_IOF_UDPBIND : UDINT (3363488 32) Global_Variables.TCPADS_IGR_ADAPTER_LINKSTATUS : UDINT (3363328 32) Global_Variables.TCPADS_IGR_CLOSEBYHDL : UDINT (3363072 32) Global_Variables.TCPADS_IGR_CONLIST : UDINT (3363040 32) Global_Variables.TCPADS_IGR_MULTICAST_ADDBYHDL : UDINT (3363264 32) Global_Variables.TCPADS_IGR_MULTICAST_DROPBYHDL : UDINT (3363296 32) Global_Variables.TCPADS_IGR_PEERBYHDL : UDINT (3363136 32) Global_Variables.TCPADS_IGR_RECVBYHDL : UDINT (3363168 32) Global_Variables.TCPADS_IGR_RECVFROMBYHDL : UDINT (3363200 32) Global_Variables.TCPADS_IGR_SENDBYHDL : UDINT (3363104 32) Global_Variables.TCPADS_IGR_SENDTOBYHDL : UDINT (3363232 32) Global_Variables.TCPADS_NULL_HSOCKET : T_HSOCKET (3363584 352) Global_Variables.THROTTLE_MODE_DEFAULT : T_ThrottleTimes (3364480 416) Global_Variables.THROTTLE_MODE_OFF : T_ThrottleTimes (3364064 416) Global_Variables.TIMESERVICE_ADJUSTTIMETORTC : UDINT (3157536 32) Global_Variables.TIMESERVICE_DATEANDTIME : UDINT (3157440 32) Global_Variables.TIMESERVICE_RTCTIMEDIFF : UDINT (3157504 32) Global_Variables.TIMESERVICE_SYSTEMTIMES : UDINT (3157472 32) Global_Variables.TIMESERVICE_TIMEZONINFORMATION : UDINT (3157568 32) Global_Variables.TcMcGlobal : _TCMCGLOBAL (7524320 6976) Global_Variables.WEST_EUROPE_TZI : ST_TimeZoneInformation (3231488 864) Global_Variables.eWatchdogConfig : E_WATCHDOG_TIME_CONFIG (3158480 16) Global_Variables.fbGetCurTaskIdx : GETCURTASKINDEX (7515040 128) Global_Variables.fbGetCurTaskIdx : GETCURTASKINDEX (7516032 128) Global_Variables.g_DummyVG : ST_VG (7513984 1056) Global_Variables.g_DummyVG : ST_VG (7515616 416) Global_Variables.g_iSizeOfGGOArray : INT (7513872 16) Global_Variables.g_iSizeOfGGOArray : INT (7515504 16) Global_Variables.g_stSystem : ST_System (7513888 88) Global_Variables.g_stSystem : ST_System (7515520 88) Global_Variables.nCTRL_LOGGER_DATA_ARRAY_SIZE : UINT (7522448 16) Global_Variables.nWatchdogTime : BYTE (3157848 8) Global_Variables.stCtrl_GLOBAL_CycleTimeInterpretation : ST_CTRL_CYCLE_TIME_INTERPRETATION (7531776 128) Global_Version.stLibVersion_LCLS_Vacuum : ST_LibVersion (7515168 288) Global_Version.stLibVersion_Tc2_IoFunctions : ST_LibVersion (3362432 288) Global_Version.stLibVersion_Tc2_MC2 : ST_LibVersion (7524032 288) Global_Version.stLibVersion_Tc2_Math : ST_LibVersion (7531456 288) Global_Version.stLibVersion_Tc2_ModbusSrv : ST_LibVersion (3362720 288) Global_Version.stLibVersion_Tc2_System : ST_LibVersion (3154880 288) Global_Version.stLibVersion_Tc2_Utilities : ST_LibVersion (3159744 288) Global_Version.stLibVersion_Tc3_EventLogger : ST_LibVersion (3365312 288) Global_Version.stLibVersion_Tc3_JsonXml : ST_LibVersion (3365728 288) Global_Version.stLibVersion_Tc3_Module : ST_LibVersion (3159136 288) Global_Version.stLibVersion_TcUnit : ST_LibVersion (7513568 288) LCLS_General.DefaultGlobals.stSys.I_EcatMaster1 : AMSNETID (3072040 48) LCLS_Vacuum.Global_Variables.g_stSystem.I_EcatMaster1 : AMSNETID (7513928 48) LCLS_Vacuum.LCLSVacuumSerialDriverLib.L2SI_Vacuum_Library.Global_Variables.g_stSystem.I_EcatMaster1 : AMSNETID (7515560 48) MAIN.vgp_debug_mode : BOOL (7515608 8) PMPS_GVL.AUX_ATTENUATORS : UINT (7521856 16) PMPS_GVL.AccumulatedFF : UDINT (7519136 32) PMPS_GVL.DUMMY_AUX_ATT_ARRAY : ST_PMPS_Attenuator (7521888 512) PMPS_GVL.EXCLUDED_ASSERTION_ID : UDINT (7519200 32) PMPS_GVL.FAST_TEST_VELOCITY : LREAL (7519296 64) PMPS_GVL.MAX_APERTURES : UINT (7521872 16) PMPS_GVL.MAX_ASSERTIONS : UDINT (7522400 32) PMPS_GVL.MAX_DEVICE_STATES : UDINT (7519360 32) PMPS_GVL.MAX_FAST_FAULTS : DINT (7519168 32) PMPS_GVL.MAX_STOPPERS : UINT (7519392 16) PMPS_GVL.SuccessfulPreemption : UDINT (7519104 32) PMPS_GVL.VISIBLE_TEST_VELOCITY : LREAL (7519232 64) PMPS_GVL.cnMaxStateArrayLen : INT (7519408 16) PMPS_GVL.cstFullBeam : ST_BeamParams (7519424 1216) PMPS_GVL.cstSafeBeam : ST_BeamParams (7520640 1216) PMPS_GVL.fHiK_LUnd : LREAL (7522688 64) PMPS_GVL.fLowK_LUnd : LREAL (7522624 64) PMPS_GVL.fPeriod_mm_LUnd : LREAL (7522560 64) PMPS_GVL.g_areVBoundaries : REAL (7518592 512) PMPS_GVL.g_areVBoundariesK : REAL (7523264 512) PMPS_GVL.g_areVBoundariesL : REAL (7522752 512) PMPS_GVL.g_cBoundaries : INT (7522432 16) PMPS_GVL.iHighBound_LUnd : UDINT (7522496 32) PMPS_GVL.iLowBound_LUnd : UDINT (7522464 32) PMPS_GVL.reVHyst : REAL (7522528 32) PMPS_GVL.stCurrentBeamParameters : ST_BeamParams (7517376 1216) PMPS_GVL.stRequestedBeamParameters : ST_BeamParams (7516160 1216) PMPS_TOOLS.fbJson : FB_JsonSaxWriter (7523776 256) PRG_DIAGNOSTIC.fbTime : FB_LocalSystemTime (7577216 19040) PRG_DIAGNOSTIC.logTimer : TON (7596256 224) PRG_DIAGNOSTIC.plcHeartbeat : UDINT (7531744 32) PRG_DIAGNOSTIC.plcInfo : STRING(40) (7596608 328) PRG_DIAGNOSTIC.plcLocalTime : STRING(25) (7596936 208) PRG_DIAGNOSTIC.plcName : STRING(15) (7596480 128) PRG_DIAGNOSTIC.simHeartbeat : UINT (7531296 16) PRG_GMD.f_ : INT (7531312 16) PRG_GMD.fb_EM1K0_GMD_PTM_10i_xExtILKOk : BOOL (7597144 8) PRG_HV_ILK.HV_ILK_OK : BOOL (7602968 8) PRG_INJ.DefaultSP : REAL (7597216 32) PRG_INJ.fullScale : REAL (7597184 32) PRG_INJ.i : INT (7597152 16) PRG_INJ.rFULL_SCALE : REAL (7597248 32) PRG_PressureControl.BasicPID : FB_BasicPID (7609792 1856) PRG_PressureControl.arrTable : FLOAT (7603008 1152) PRG_PressureControl.bARWactive : BOOL (7602952 8) PRG_PressureControl.bError : BOOL (7602944 8) PRG_PressureControl.bExtrapolate : BOOL (7597176 8) PRG_PressureControl.bHold : BOOL (7597304 8) PRG_PressureControl.bInit : BOOL (7602960 8) PRG_PressureControl.bSync : BOOL (7597296 8) PRG_PressureControl.eErrorId : E_CTRL_ERRORCODES (7601968 16) PRG_PressureControl.eMode : E_CTRL_MODE (7601952 16) PRG_PressureControl.fActualValue : FLOAT (7602048 64) PRG_PressureControl.fBasicCtrlOutput : FLOAT (7602176 64) PRG_PressureControl.fCtrlOutput : FLOAT (7602112 64) PRG_PressureControl.fManSyncValue : FLOAT (7602368 64) PRG_PressureControl.fManValue : FLOAT (7602304 64) PRG_PressureControl.fSetpointValue : FLOAT (7601984 64) PRG_PressureControl.f_Rep_POS : FLOAT (7602240 64) PRG_PressureControl.fbCTRL_LIN_INTERPOLATION : FB_CTRL_LIN_INTERPOLATION (7608064 1728) PRG_PressureControl.fbCTRL_Normalize : FB_CTRL_NORMALIZE (7606336 1728) PRG_PressureControl.fbCTRL_PI : FB_CTRL_PI (7604160 2176) PRG_PressureControl.nDataTable_NumberOfRows : INT (7597280 16) PRG_PressureControl.stCTRL_LIN_INTERPOLATION_PARAMS : ST_CTRL_LIN_INTERPOLATION_PARAMS (7602816 128) PRG_PressureControl.stCTRL_PI_PARAMS : ST_CTRL_PI_PARAMS (7602432 384) PRG_VGP.VGP_OUT_POS : LREAL (7600960 64) PRG_VGP.VGP_REQ_POS : LREAL (7600896 64) PRG_VGP.arrTable : FLOAT (7597312 1792) PRG_VGP.arrTable_ENC : FLOAT (7599104 1792) PRG_VGP.bInit : BOOL (7597168 8) ParameterList.cSourceNameSize : UDINT (81..Tc2_Utilities.ParameterList.cMaxCharacters) (3365280 32) TC_EVENTS.LCLSGeneralEventClass : LCLSGeneralEventClass (15625888 960) TC_EVENT_CLASSES.LCLSGeneralEventClass : GUID (15595680 128) TC_EVENT_CLASSES.TcGeneralAdsEventClass : GUID (15595168 128) TC_EVENT_CLASSES.TcRTimeEventClass : GUID (15595424 128) TC_EVENT_CLASSES.TcRouterEventClass : GUID (15595296 128) TC_EVENT_CLASSES.TcSystemEventClass : GUID (15595040 128) TC_EVENT_CLASSES.Win32EventClass : GUID (15595552 128) TwinCAT_LicenseInfoVarList._LicenseInfo : PlcLicenseInfo (15575840 2048) TwinCAT_SystemInfoVarList._AppInfo : PlcAppSystemInfo (15577888 2048) TwinCAT_SystemInfoVarList._TaskInfo : PlcTaskSystemInfo (15579968 1024) TwinCAT_SystemInfoVarList._TaskOid_PlcTask : OTCID (15580992 32) TwinCAT_SystemInfoVarList._TaskPouOid_PlcTask : OTCID (15579936 32) TwinCAT_SystemInfoVarList.__PlcTask : _Implicit_Task_Info (15581024 704) PLC Project (2): plc_kfe_gmd_vac_sim ==================================== Project root: /home/travis/build/pcdshub/lcls-plc-kfe-gmd-vac/plc/plc-kfe-gmd-vac Project path: plc_kfe_gmd_vac_sim/plc_kfe_gmd_vac_sim.plcproj TMC path: plc_kfe_gmd_vac_sim/plc_kfe_gmd_vac_sim.tmc AMS ID: 172.21.92.59.1.1 IP Address: 172.21.92.59 (* based on AMS ID) Port: 852 Source files: 1.) plc_kfe_gmd_vac_sim/GVLs/GVL_GMD.TcGVL 2.) plc_kfe_gmd_vac_sim/GVLs/GVL_VARIABLES.TcGVL 3.) plc_kfe_gmd_vac_sim/POUs/MAIN.TcPOU 4.) plc_kfe_gmd_vac_sim/POUs/OverridePressure.TcPOU 5.) plc_kfe_gmd_vac_sim/POUs/PRG_DIAGNOSTIC.TcPOU 6.) plc_kfe_gmd_vac_sim/POUs/PRG_GMD.TcPOU 7.) plc_kfe_gmd_vac_sim/SimTask.TcTTO POUs: 1.) MAIN 2.) OverridePressure 3.) PRG_DIAGNOSTIC 4.) PRG_GMD GVLs: 1.) GVL_GMD 2.) GVL_VARIABLES GVL: GVL_GMD ------------ File: plc_kfe_gmd_vac_sim/GVLs/GVL_GMD.TcGVL ```vhdl VAR_GLOBAL // ST_Volume st_GMD : ST_Volume := (rVolume := 1E3, rPressure := Global_Pressure, rVLeak := Global_Leak); st_EM1K0_GMD_VRC_10_VOL : ST_Volume := (rVolume := 1E3, rPressure := Global_Pressure, rVLeak := Global_Leak); st_RoughingLine : ST_Volume := (rVolume := 1E3, rPressure := Global_Pressure, rVLeak := Global_Leak); st_EM1K0_GMD_VRC_20_VOL : ST_Volume := (rVolume := 1E3, rPressure := Global_Pressure, rVLeak := Global_Leak); st_EM1K0_GMD_VRC_30_VOL : ST_Volume := (rVolume := 1E3, rPressure := Global_Pressure, rVLeak := Global_Leak); st_EM1K0_GMD_VRC_50_VOL : ST_Volume := (rVolume := 1E3, rPressure := Global_Pressure, rVLeak := Global_Leak); st_EM1K0_GMD_VRC_60_VOL : ST_Volume := (rVolume := 1E3, rPressure := Global_Pressure, rVLeak := Global_Leak); st_EM1K0_GMD_VRC_70_VOL : ST_Volume := (rVolume := 1E3, rPressure := Global_Pressure, rVLeak := Global_Leak); // ST_MKS_275 st_EM1K0_GMD_GPI_10 : ST_MKS_275 := (q_xGaugeConnected := TRUE); st_EM1K0_GMD_GPI_40 : ST_MKS_275 := (q_xGaugeConnected := TRUE); st_EM1K0_GMD_GPI_70 : ST_MKS_275 := (q_xGaugeConnected := TRUE); // FB_MKS_275 fb_EM1K0_GMD_GPI_10 : FB_MKS_275; fb_EM1K0_GMD_GPI_40 : FB_MKS_275; fb_EM1K0_GMD_GPI_70 : FB_MKS_275; // ST_MechPump st_EM1K0_GMD_PTM_10 : ST_MechPump := (iMaxSpd:=1000, rBasePress:=1E-9, rMaxLoad:=0.95); st_EM1K0_GMD_PTM_20 : ST_MechPump := (iMaxSpd:=1000, rBasePress:=1E-9, rMaxLoad:=0.95); st_EM1K0_GMD_PTM_30 : ST_MechPump := (iMaxSpd:=1000, rBasePress:=1E-9, rMaxLoad:=0.95); st_EM1K0_GMD_PRT_40 : ST_MechPump := (rMRE:=10, rBasePress:=1E-3); st_EM1K0_GMD_PTM_40 : ST_MechPump := (iMaxSpd:=1000, rBasePress:=1E-9, rMaxLoad:=0.95); st_EM1K0_GMD_PTM_50 : ST_MechPump := (iMaxSpd:=1000, rBasePress:=1E-9, rMaxLoad:=0.95); st_EM1K0_GMD_PTM_60 : ST_MechPump := (iMaxSpd:=1000, rBasePress:=1E-9, rMaxLoad:=0.95); st_EM1K0_GMD_PTM_70 : ST_MechPump := (iMaxSpd:=1000, rBasePress:=1E-9, rMaxLoad:=0.95); // FB_TurboPump fb_EM1K0_GMD_PTM_10 : FB_TurboPump; fb_EM1K0_GMD_PTM_20 : FB_TurboPump; fb_EM1K0_GMD_PTM_30 : FB_TurboPump; fb_EM1K0_GMD_PTM_40 : FB_TurboPump; fb_EM1K0_GMD_PTM_50 : FB_TurboPump; fb_EM1K0_GMD_PTM_60 : FB_TurboPump; fb_EM1K0_GMD_PTM_70 : FB_TurboPump; // ST_VacuumValve st_EM1K0_GMD_VRC_10 : ST_VacuumValve := (q_xClsLS := TRUE, q_xOpnLS := FALSE); st_EM1K0_GMD_VRC_20 : ST_VacuumValve := (q_xClsLS := TRUE, q_xOpnLS := FALSE); st_EM1K0_GMD_VRC_30 : ST_VacuumValve := (q_xClsLS := TRUE, q_xOpnLS := FALSE); st_EM1K0_GMD_VRC_50 : ST_VacuumValve := (q_xClsLS := TRUE, q_xOpnLS := FALSE); st_EM1K0_GMD_VRC_60 : ST_VacuumValve := (q_xClsLS := TRUE, q_xOpnLS := FALSE); st_EM1K0_GMD_VRC_70 : ST_VacuumValve := (q_xClsLS := TRUE, q_xOpnLS := FALSE); // FB_VacuumValve fb_EM1K0_GMD_VRC_10 : FB_VacuumValve; fb_EM1K0_GMD_VRC_20 : FB_VacuumValve; fb_EM1K0_GMD_VRC_30 : FB_VacuumValve; fb_EM1K0_GMD_VRC_50 : FB_VacuumValve; fb_EM1K0_GMD_VRC_60 : FB_VacuumValve; fb_EM1K0_GMD_VRC_70 : FB_VacuumValve; // ST_MKS_422 st_EM1K0_GMD_GCC_10 : ST_MKS_422 := (q_xGaugeConnected := TRUE); st_EM1K0_GMD_GCC_20 : ST_MKS_422 := (q_xGaugeConnected := TRUE); st_EM1K0_GMD_GCC_30 : ST_MKS_422 := (q_xGaugeConnected := TRUE); st_EM1K0_GMD_GCC_40 : ST_MKS_422 := (q_xGaugeConnected := TRUE); st_EM1K0_GMD_GCC_50 : ST_MKS_422 := (q_xGaugeConnected := TRUE); st_EM1K0_GMD_GCC_60 : ST_MKS_422 := (q_xGaugeConnected := TRUE); st_EM1K0_GMD_GCC_70 : ST_MKS_422 := (q_xGaugeConnected := TRUE); // FB_MKS_422 fb_EM1K0_GMD_GCC_10 : FB_MKS_422; fb_EM1K0_GMD_GCC_20 : FB_MKS_422; fb_EM1K0_GMD_GCC_30 : FB_MKS_422; fb_EM1K0_GMD_GCC_40 : FB_MKS_422; fb_EM1K0_GMD_GCC_50 : FB_MKS_422; fb_EM1K0_GMD_GCC_60 : FB_MKS_422; fb_EM1K0_GMD_GCC_70 : FB_MKS_422; // FB_RoughPump fb_EM1K0_GMD_PRT_40 : FB_RoughPump; END_VAR ``` GVL: GVL_VARIABLES ------------------ File: plc_kfe_gmd_vac_sim/GVLs/GVL_VARIABLES.TcGVL ```vhdl {attribute 'global_init_slot' := '40500'} // make sure variables are initialized before other GVLs VAR_GLOBAL Global_Leak : REAL := 0; Global_Pressure : REAL := 0.0079; New_Pressure : REAL := 22.0; //Torr Global_OverridePressure : BOOL := FALSE; END_VAR ``` POU: MAIN --------- File: plc_kfe_gmd_vac_sim/POUs/MAIN.TcPOU ```vhdl PROGRAM MAIN VAR END_VAR PRG_DIAGNOSTIC(); OverridePressure(); PRG_GMD(); END_PROGRAM ``` POU: OverridePressure --------------------- File: plc_kfe_gmd_vac_sim/POUs/OverridePressure.TcPOU ```vhdl PROGRAM OverridePressure VAR fb_SetPressure : FB_SetChamberPressure; END_VAR fb_SetPressure(chamber := st_GMD, rNewPressure := New_Pressure, Override := Global_OverridePressure); END_PROGRAM ``` POU: PRG_DIAGNOSTIC ------------------- File: plc_kfe_gmd_vac_sim/POUs/PRG_DIAGNOSTIC.TcPOU ```vhdl PROGRAM PRG_DIAGNOSTIC VAR heartbeat AT %Q* : UINT := 0; END_VAR heartbeat := heartbeat + 1; IF heartbeat > 65000 THEN heartbeat := 0; END_IF END_PROGRAM ``` POU: PRG_GMD ------------ File: plc_kfe_gmd_vac_sim/POUs/PRG_GMD.TcPOU ```vhdl PROGRAM PRG_GMD VAR END_VAR // FB_MKS_275 fb_EM1K0_GMD_GPI_10(stVolume := st_GMD, stGauge := st_EM1K0_GMD_GPI_10); fb_EM1K0_GMD_GPI_40(stVolume := st_GMD, stGauge := st_EM1K0_GMD_GPI_40); fb_EM1K0_GMD_GPI_70(stVolume := st_GMD, stGauge := st_EM1K0_GMD_GPI_70); // FB_TurboPump fb_EM1K0_GMD_PTM_10(stVlInlet := st_EM1K0_GMD_VRC_10_VOL, stVlOutlet := st_RoughingLine, stPump := st_EM1K0_GMD_PTM_10); fb_EM1K0_GMD_PTM_20(stVlInlet := st_EM1K0_GMD_VRC_20_VOL, stVlOutlet := st_RoughingLine, stPump := st_EM1K0_GMD_PTM_20); fb_EM1K0_GMD_PTM_30(stVlInlet := st_EM1K0_GMD_VRC_30_VOL, stVlOutlet := st_RoughingLine, stPump := st_EM1K0_GMD_PTM_30); fb_EM1K0_GMD_PTM_40(stVlInlet := st_GMD, stVlOutlet := st_RoughingLine, stPump := st_EM1K0_GMD_PTM_40); fb_EM1K0_GMD_PTM_50(stVlInlet := st_EM1K0_GMD_VRC_50_VOL, stVlOutlet := st_RoughingLine, stPump := st_EM1K0_GMD_PTM_50); fb_EM1K0_GMD_PTM_60(stVlInlet := st_EM1K0_GMD_VRC_60_VOL, stVlOutlet := st_RoughingLine, stPump := st_EM1K0_GMD_PTM_60); fb_EM1K0_GMD_PTM_70(stVlInlet := st_EM1K0_GMD_VRC_70_VOL, stVlOutlet := st_RoughingLine, stPump := st_EM1K0_GMD_PTM_70); // FB_VacuumValve fb_EM1K0_GMD_VRC_10(stAVol := st_GMD, stBvol := st_EM1K0_GMD_VRC_10_VOL, stValve := st_EM1K0_GMD_VRC_10); fb_EM1K0_GMD_VRC_20(stAVol := st_GMD, stBvol := st_EM1K0_GMD_VRC_20_VOL, stValve := st_EM1K0_GMD_VRC_20); fb_EM1K0_GMD_VRC_30(stAVol := st_GMD, stBvol := st_EM1K0_GMD_VRC_30_VOL, stValve := st_EM1K0_GMD_VRC_30); fb_EM1K0_GMD_VRC_50(stAVol := st_GMD, stBvol := st_EM1K0_GMD_VRC_50_VOL, stValve := st_EM1K0_GMD_VRC_50); fb_EM1K0_GMD_VRC_60(stAVol := st_GMD, stBvol := st_EM1K0_GMD_VRC_60_VOL, stValve := st_EM1K0_GMD_VRC_60); fb_EM1K0_GMD_VRC_70(stAVol := st_GMD, stBvol := st_EM1K0_GMD_VRC_70_VOL, stValve := st_EM1K0_GMD_VRC_70); // FB_MKS_422 fb_EM1K0_GMD_GCC_10(stVolume := st_GMD, stGauge := st_EM1K0_GMD_GCC_10); fb_EM1K0_GMD_GCC_20(stVolume := st_GMD, stGauge := st_EM1K0_GMD_GCC_20); fb_EM1K0_GMD_GCC_30(stVolume := st_GMD, stGauge := st_EM1K0_GMD_GCC_30); fb_EM1K0_GMD_GCC_40(stVolume := st_GMD, stGauge := st_EM1K0_GMD_GCC_40); fb_EM1K0_GMD_GCC_50(stVolume := st_GMD, stGauge := st_EM1K0_GMD_GCC_50); fb_EM1K0_GMD_GCC_60(stVolume := st_GMD, stGauge := st_EM1K0_GMD_GCC_60); fb_EM1K0_GMD_GCC_70(stVolume := st_GMD, stGauge := st_EM1K0_GMD_GCC_70); // FB_RoughPump fb_EM1K0_GMD_PRT_40(stVolInlet := st_RoughingLine, stPump := st_EM1K0_GMD_PRT_40); END_PROGRAM ``` Symbols ------- Boxes ----- 1.) EK1200_00_00 2.) EL3064_00_01 3.) EL1008_00_03 4.) EL2008_00_05 5.) EL2794_00_06 6.) EK1110_00_11 7.) EK1100_01_00 8.) EL2794_01_01 9.) EL3068_01_02 10.) EL3068_01_04 11.) EL2794_01_05 12.) EL2794_01_06 13.) EL3068_01_07 14.) EL3068_01_09 15.) EL2794_01_10 16.) EK1110_01_11 17.) EK1100_02_00 18.) EL1004_02_01 19.) EL2004_02_02 20.) EL1004_02_03 21.) EL1004_02_04 22.) EL2004_02_05 23.) EL1004_02_06 24.) EL9410_02_07 25.) EL1088_02_08 26.) EL2088_02_10 27.) EL1088_02_11 28.) EL1088_02_12 29.) EL2088_02_14 30.) EL1088_02_15 31.) EK1110_02_17 32.) EK1100_03_00 33.) EL2794_03_01 34.) EL3068_03_02 35.) EL3068_03_04 36.) EL2794_03_05 37.) EL2794_03_06 38.) EL1004_03_07 39.) Term 39 (EL9011) 40.) EK1100_04_00 41.) EP4374-0002_05_00 42.) EP5101-0011_05_01 43.) EP7041-0002_05_02 44.) ES2004_04_02 45.) ES2004_04_01 46.) ES3064_04_03 47.) ES9070_04_04 48.) ES3202_04_05 49.) EL3054_04_06 50.) ES3064_04_07 51.) ES9070_04_08 52.) ES1008_04_09 53.) EL9184_04_10 54.) ES2008_04_11 55.) EL2794_04_12 56.) EK1110_04_13 57.) ES9070_00_02 58.) ES9184_00_04 59.) EL2008_02_10 60.) EL6695_00_09 61.) EL9187_02_09 62.) EL2004_02_16 63.) EL2202_00_07 64.) EL6692_00_10 65.) EL2008_02_14 66.) EL9410_03_08 67.) EL2212_03_09 68.) EL6070_00_08 NC axes ------- 3.) 'VGP_40': Id = 3 CreateSymbols = 'true' AxisType = 1 General:UnitName = 'steps' Velo:SlowManual = 20 Velo:FastManual = 30 Velo:Maximum = 1800 OtherSettings:AllowMotionCmdToSlave = 'true' Enc:EncType = 4 Enc:ScaleFactorNumerator = 0.0390625 Enc:Inverse = 'true' Enc:MaxCount = '#x0000ffff' Enc:SoftEndMinControl:Enable = 'true' Enc:SoftEndMinControl:Range = -15 Enc:SoftEndMaxControl:Enable = 'true' Enc:SoftEndMaxControl:Range = 1655 Enc:Inc:RefMode = 2 Enc:Inc:RefSoftSyncMask = '#x0000ffff' Links ----- 1.) A ('TINC^NC-Task 1 SAF^Axes^VGP_40', 'Enc^Inputs^In^nDataIn1[0]') B ('TIID^Device 1 (EtherCAT)^EP5101-0011_05_01', 'ENC Status compact^Counter value') 2.) A ('TINC^NC-Task 1 SAF^Axes^VGP_40', 'Enc^Inputs^In^nDataIn2[0]') B ('TIID^Device 1 (EtherCAT)^EP5101-0011_05_01', 'ENC Status compact^Latch value') 3.) A ('TINC^NC-Task 1 SAF^Axes^VGP_40', 'Enc^Inputs^In^nState1') B ('TIID^Device 1 (EtherCAT)^EP5101-0011_05_01', 'ENC Status compact^Status^Counter overflow') 4.) A ('TINC^NC-Task 1 SAF^Axes^VGP_40', 'Enc^Inputs^In^nState1') B ('TIID^Device 1 (EtherCAT)^EP5101-0011_05_01', 'ENC Status compact^Status^Counter underflow') 5.) A ('TINC^NC-Task 1 SAF^Axes^VGP_40', 'Enc^Inputs^In^nState1') B ('TIID^Device 1 (EtherCAT)^EP5101-0011_05_01', 'ENC Status compact^Status^Extrapolation stall') 6.) A ('TINC^NC-Task 1 SAF^Axes^VGP_40', 'Enc^Inputs^In^nState1') B ('TIID^Device 1 (EtherCAT)^EP5101-0011_05_01', 'ENC Status compact^Status^Latch C valid') 7.) A ('TINC^NC-Task 1 SAF^Axes^VGP_40', 'Enc^Inputs^In^nState1') B ('TIID^Device 1 (EtherCAT)^EP5101-0011_05_01', 'ENC Status compact^Status^Latch extern valid') 8.) A ('TINC^NC-Task 1 SAF^Axes^VGP_40', 'Enc^Inputs^In^nState1') B ('TIID^Device 1 (EtherCAT)^EP5101-0011_05_01', 'ENC Status compact^Status^Open circuit') 9.) A ('TINC^NC-Task 1 SAF^Axes^VGP_40', 'Enc^Inputs^In^nState1') B ('TIID^Device 1 (EtherCAT)^EP5101-0011_05_01', 'ENC Status compact^Status^Set counter done') 10.) A ('TINC^NC-Task 1 SAF^Axes^VGP_40', 'Enc^Inputs^In^nState1') B ('TIID^Device 1 (EtherCAT)^EP5101-0011_05_01', 'ENC Status compact^Status^Status of input status') 11.) A ('TINC^NC-Task 1 SAF^Axes^VGP_40', 'Enc^Inputs^In^nState2') B ('TIID^Device 1 (EtherCAT)^EP5101-0011_05_01', 'ENC Status compact^Status^Status of extern latch') 12.) A ('TINC^NC-Task 1 SAF^Axes^VGP_40', 'Enc^Inputs^In^nState2') B ('TIID^Device 1 (EtherCAT)^EP5101-0011_05_01', 'ENC Status compact^Status^Status of input A') 13.) A ('TINC^NC-Task 1 SAF^Axes^VGP_40', 'Enc^Inputs^In^nState2') B ('TIID^Device 1 (EtherCAT)^EP5101-0011_05_01', 'ENC Status compact^Status^Status of input B') 14.) A ('TINC^NC-Task 1 SAF^Axes^VGP_40', 'Enc^Inputs^In^nState2') B ('TIID^Device 1 (EtherCAT)^EP5101-0011_05_01', 'ENC Status compact^Status^Status of input C') 15.) A ('TINC^NC-Task 1 SAF^Axes^VGP_40', 'Enc^Inputs^In^nState2') B ('TIID^Device 1 (EtherCAT)^EP5101-0011_05_01', 'ENC Status compact^Status^Status of input gate') 16.) A ('TINC^NC-Task 1 SAF^Axes^VGP_40', 'Enc^Inputs^In^nState4') B ('TIID^Device 1 (EtherCAT)^EP5101-0011_05_01', 'WcState^InputToggle') 17.) A ('TINC^NC-Task 1 SAF^Axes^VGP_40', 'Enc^Inputs^In^nState4') B ('TIID^Device 1 (EtherCAT)^EP5101-0011_05_01', 'WcState^WcState') 18.) A ('TINC^NC-Task 1 SAF^Axes^VGP_40', 'Enc^Outputs^Out^nCtrl1') B ('TIID^Device 1 (EtherCAT)^EP5101-0011_05_01', 'ENC Control compact^Control^Enable latch C') 19.) A ('TINC^NC-Task 1 SAF^Axes^VGP_40', 'Enc^Outputs^Out^nCtrl1') B ('TIID^Device 1 (EtherCAT)^EP5101-0011_05_01', 'ENC Control compact^Control^Enable latch extern on negative edge') 20.) A ('TINC^NC-Task 1 SAF^Axes^VGP_40', 'Enc^Outputs^Out^nCtrl1') B ('TIID^Device 1 (EtherCAT)^EP5101-0011_05_01', 'ENC Control compact^Control^Enable latch extern on positive edge') 21.) A ('TINC^NC-Task 1 SAF^Axes^VGP_40', 'Enc^Outputs^Out^nCtrl1') B ('TIID^Device 1 (EtherCAT)^EP5101-0011_05_01', 'ENC Control compact^Control^Set counter') 22.) A ('TINC^NC-Task 1 SAF^Axes^VGP_40', 'Enc^Outputs^Out^nDataOut1[0]') B ('TIID^Device 1 (EtherCAT)^EP5101-0011_05_01', 'ENC Control compact^Set counter value') 23.) A ('TINC^NC-Task 1 SAF^Axes^VGP_40', 'Drive^Inputs^In^nState1') B ('TIID^Device 1 (EtherCAT)^EP7041-0002_05_02', 'STM Status^Status^Error') 24.) A ('TINC^NC-Task 1 SAF^Axes^VGP_40', 'Drive^Inputs^In^nState1') B ('TIID^Device 1 (EtherCAT)^EP7041-0002_05_02', 'STM Status^Status^Moving negative') 25.) A ('TINC^NC-Task 1 SAF^Axes^VGP_40', 'Drive^Inputs^In^nState1') B ('TIID^Device 1 (EtherCAT)^EP7041-0002_05_02', 'STM Status^Status^Moving positive') 26.) A ('TINC^NC-Task 1 SAF^Axes^VGP_40', 'Drive^Inputs^In^nState1') B ('TIID^Device 1 (EtherCAT)^EP7041-0002_05_02', 'STM Status^Status^Ready') 27.) A ('TINC^NC-Task 1 SAF^Axes^VGP_40', 'Drive^Inputs^In^nState1') B ('TIID^Device 1 (EtherCAT)^EP7041-0002_05_02', 'STM Status^Status^Ready to enable') 28.) A ('TINC^NC-Task 1 SAF^Axes^VGP_40', 'Drive^Inputs^In^nState1') B ('TIID^Device 1 (EtherCAT)^EP7041-0002_05_02', 'STM Status^Status^Torque reduced') 29.) A ('TINC^NC-Task 1 SAF^Axes^VGP_40', 'Drive^Inputs^In^nState1') B ('TIID^Device 1 (EtherCAT)^EP7041-0002_05_02', 'STM Status^Status^Warning') 30.) A ('TINC^NC-Task 1 SAF^Axes^VGP_40', 'Drive^Inputs^In^nState2') B ('TIID^Device 1 (EtherCAT)^EP7041-0002_05_02', 'STM Status^Status^Digital input 1') 31.) A ('TINC^NC-Task 1 SAF^Axes^VGP_40', 'Drive^Inputs^In^nState2') B ('TIID^Device 1 (EtherCAT)^EP7041-0002_05_02', 'STM Status^Status^Digital input 2') 32.) A ('TINC^NC-Task 1 SAF^Axes^VGP_40', 'Drive^Inputs^In^nState2') B ('TIID^Device 1 (EtherCAT)^EP7041-0002_05_02', 'STM Status^Status^Sync error') 33.) A ('TINC^NC-Task 1 SAF^Axes^VGP_40', 'Drive^Inputs^In^nState2') B ('TIID^Device 1 (EtherCAT)^EP7041-0002_05_02', 'STM Status^Status^TxPDO Toggle') 34.) A ('TINC^NC-Task 1 SAF^Axes^VGP_40', 'Drive^Inputs^In^nState4') B ('TIID^Device 1 (EtherCAT)^EP7041-0002_05_02', 'WcState^InputToggle') 35.) A ('TINC^NC-Task 1 SAF^Axes^VGP_40', 'Drive^Inputs^In^nState4') B ('TIID^Device 1 (EtherCAT)^EP7041-0002_05_02', 'WcState^WcState') 36.) A ('TINC^NC-Task 1 SAF^Axes^VGP_40', 'Drive^Outputs^Out^nCtrl1') B ('TIID^Device 1 (EtherCAT)^EP7041-0002_05_02', 'STM Control^Control^Enable') 37.) A ('TINC^NC-Task 1 SAF^Axes^VGP_40', 'Drive^Outputs^Out^nCtrl1') B ('TIID^Device 1 (EtherCAT)^EP7041-0002_05_02', 'STM Control^Control^Reduce torque') 38.) A ('TINC^NC-Task 1 SAF^Axes^VGP_40', 'Drive^Outputs^Out^nCtrl1') B ('TIID^Device 1 (EtherCAT)^EP7041-0002_05_02', 'STM Control^Control^Reset') 39.) A ('TINC^NC-Task 1 SAF^Axes^VGP_40', 'Drive^Outputs^Out^nCtrl2') B ('TIID^Device 1 (EtherCAT)^EP7041-0002_05_02', 'STM Control^Control^Digital output 1') 40.) A ('TINC^NC-Task 1 SAF^Axes^VGP_40', 'Drive^Outputs^Out^nDataOut2[0]') B ('TIID^Device 1 (EtherCAT)^EP7041-0002_05_02', 'STM Velocity^Velocity') 41.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Outputs^GVL_GMD.fb_EM1K0_GMD_GCC_10.q_xHV_DIS') B ('TIID^Device 1 (EtherCAT)^EK1100_01_00^EL2794_01_01', 'Channel 1^Output') 42.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Outputs^GVL_GMD.fb_EM1K0_GMD_GCC_20.q_xHV_DIS') B ('TIID^Device 1 (EtherCAT)^EK1100_01_00^EL2794_01_01', 'Channel 2^Output') 43.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Outputs^GVL_GMD.fb_EM1K0_GMD_GCC_30.q_xHV_DIS') B ('TIID^Device 1 (EtherCAT)^EK1100_01_00^EL2794_01_01', 'Channel 3^Output') 44.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Outputs^GVL_GMD.fb_EM1K0_GMD_GCC_50.q_xHV_DIS') B ('TIID^Device 1 (EtherCAT)^EK1100_01_00^EL2794_01_06', 'Channel 1^Output') 45.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Outputs^GVL_GMD.fb_EM1K0_GMD_GCC_60.q_xHV_DIS') B ('TIID^Device 1 (EtherCAT)^EK1100_01_00^EL2794_01_06', 'Channel 2^Output') 46.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Outputs^GVL_GMD.fb_EM1K0_GMD_GCC_70.q_xHV_DIS') B ('TIID^Device 1 (EtherCAT)^EK1100_01_00^EL2794_01_10', 'Channel 1^Output') 47.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Inputs^GVL_GMD.fb_EM1K0_GMD_GCC_10.i_iPRESS_R') B ('TIID^Device 1 (EtherCAT)^EK1100_01_00^EL3068_01_02', 'AI Standard Channel 1^GVL_GMD.fb_EM1K0_GMD_GCC_10.i_iPRESS_R') 48.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Inputs^GVL_GMD.fb_EM1K0_GMD_GCC_20.i_iPRESS_R') B ('TIID^Device 1 (EtherCAT)^EK1100_01_00^EL3068_01_02', 'AI Standard Channel 3^GVL_GMD.fb_EM1K0_GMD_GCC_20.i_iPRESS_R') 49.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Inputs^GVL_GMD.fb_EM1K0_GMD_GCC_30.i_iPRESS_R') B ('TIID^Device 1 (EtherCAT)^EK1100_01_00^EL3068_01_02', 'AI Standard Channel 5^GVL_GMD.fb_EM1K0_GMD_GCC_30.i_iPRESS_R') 50.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Inputs^GVL_GMD.fb_EM1K0_GMD_GCC_50.i_iPRESS_R') B ('TIID^Device 1 (EtherCAT)^EK1100_01_00^EL3068_01_07', 'AI Standard Channel 1^Value') 51.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Inputs^GVL_GMD.fb_EM1K0_GMD_GCC_60.i_iPRESS_R') B ('TIID^Device 1 (EtherCAT)^EK1100_01_00^EL3068_01_07', 'AI Standard Channel 3^Value') 52.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Inputs^GVL_GMD.fb_EM1K0_GMD_GPI_70.i_iPRESS_R') B ('TIID^Device 1 (EtherCAT)^EK1100_01_00^EL3068_01_07', 'AI Standard Channel 6^Value') 53.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Inputs^GVL_GMD.fb_EM1K0_GMD_GCC_70.i_iPRESS_R') B ('TIID^Device 1 (EtherCAT)^EK1100_01_00^EL3068_01_09', 'AI Standard Channel 1^Value') 54.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Inputs^GVL_GMD.fb_EM1K0_GMD_VRC_10.i_xClsLS') B ('TIID^Device 1 (EtherCAT)^EK1100_02_00^EL1004_02_01', 'Channel 2^Input') 55.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Inputs^GVL_GMD.fb_EM1K0_GMD_VRC_10.i_xOpnLS') B ('TIID^Device 1 (EtherCAT)^EK1100_02_00^EL1004_02_01', 'Channel 1^Input') 56.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Inputs^GVL_GMD.fb_EM1K0_GMD_VRC_20.i_xClsLS') B ('TIID^Device 1 (EtherCAT)^EK1100_02_00^EL1004_02_01', 'Channel 4^Input') 57.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Inputs^GVL_GMD.fb_EM1K0_GMD_VRC_20.i_xOpnLS') B ('TIID^Device 1 (EtherCAT)^EK1100_02_00^EL1004_02_01', 'Channel 3^Input') 58.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Inputs^GVL_GMD.fb_EM1K0_GMD_VRC_30.i_xClsLS') B ('TIID^Device 1 (EtherCAT)^EK1100_02_00^EL1004_02_03', 'Channel 2^Input') 59.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Inputs^GVL_GMD.fb_EM1K0_GMD_VRC_30.i_xOpnLS') B ('TIID^Device 1 (EtherCAT)^EK1100_02_00^EL1004_02_03', 'Channel 1^Input') 60.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Inputs^GVL_GMD.fb_EM1K0_GMD_VRC_50.i_xClsLS') B ('TIID^Device 1 (EtherCAT)^EK1100_02_00^EL1004_02_04', 'Channel 2^Input') 61.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Inputs^GVL_GMD.fb_EM1K0_GMD_VRC_50.i_xOpnLS') B ('TIID^Device 1 (EtherCAT)^EK1100_02_00^EL1004_02_04', 'Channel 1^Input') 62.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Inputs^GVL_GMD.fb_EM1K0_GMD_VRC_60.i_xClsLS') B ('TIID^Device 1 (EtherCAT)^EK1100_02_00^EL1004_02_04', 'Channel 4^Input') 63.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Inputs^GVL_GMD.fb_EM1K0_GMD_VRC_60.i_xOpnLS') B ('TIID^Device 1 (EtherCAT)^EK1100_02_00^EL1004_02_04', 'Channel 3^Input') 64.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Inputs^GVL_GMD.fb_EM1K0_GMD_VRC_70.i_xClsLS') B ('TIID^Device 1 (EtherCAT)^EK1100_02_00^EL1004_02_06', 'Channel 2^Input') 65.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Inputs^GVL_GMD.fb_EM1K0_GMD_VRC_70.i_xOpnLS') B ('TIID^Device 1 (EtherCAT)^EK1100_02_00^EL1004_02_06', 'Channel 1^Input') 66.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Inputs^GVL_GMD.fb_EM1K0_GMD_PTM_10.i_xAtSpd') B ('TIID^Device 1 (EtherCAT)^EK1100_02_00^EL1088_02_08', 'Channel 1^Input') 67.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Inputs^GVL_GMD.fb_EM1K0_GMD_PTM_10.i_xFault') B ('TIID^Device 1 (EtherCAT)^EK1100_02_00^EL1088_02_08', 'Channel 2^Input') 68.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Inputs^GVL_GMD.fb_EM1K0_GMD_PTM_20.i_xAtSpd') B ('TIID^Device 1 (EtherCAT)^EK1100_02_00^EL1088_02_08', 'Channel 3^Input') 69.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Inputs^GVL_GMD.fb_EM1K0_GMD_PTM_20.i_xFault') B ('TIID^Device 1 (EtherCAT)^EK1100_02_00^EL1088_02_08', 'Channel 4^Input') 70.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Inputs^GVL_GMD.fb_EM1K0_GMD_PTM_30.i_xAtSpd') B ('TIID^Device 1 (EtherCAT)^EK1100_02_00^EL1088_02_11', 'Channel 1^Input') 71.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Inputs^GVL_GMD.fb_EM1K0_GMD_PTM_30.i_xFault') B ('TIID^Device 1 (EtherCAT)^EK1100_02_00^EL1088_02_11', 'Channel 2^Input') 72.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Inputs^GVL_GMD.fb_EM1K0_GMD_PTM_40.i_xAtSpd') B ('TIID^Device 1 (EtherCAT)^EK1100_02_00^EL1088_02_11', 'Channel 3^Input') 73.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Inputs^GVL_GMD.fb_EM1K0_GMD_PTM_40.i_xFault') B ('TIID^Device 1 (EtherCAT)^EK1100_02_00^EL1088_02_11', 'Channel 4^Input') 74.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Inputs^GVL_GMD.fb_EM1K0_GMD_PTM_50.i_xAtSpd') B ('TIID^Device 1 (EtherCAT)^EK1100_02_00^EL1088_02_12', 'Channel 1^Input') 75.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Inputs^GVL_GMD.fb_EM1K0_GMD_PTM_50.i_xFault') B ('TIID^Device 1 (EtherCAT)^EK1100_02_00^EL1088_02_12', 'Channel 2^Input') 76.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Inputs^GVL_GMD.fb_EM1K0_GMD_PTM_60.i_xAtSpd') B ('TIID^Device 1 (EtherCAT)^EK1100_02_00^EL1088_02_12', 'Channel 3^Input') 77.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Inputs^GVL_GMD.fb_EM1K0_GMD_PTM_60.i_xFault') B ('TIID^Device 1 (EtherCAT)^EK1100_02_00^EL1088_02_12', 'Channel 4^Input') 78.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Inputs^GVL_GMD.fb_EM1K0_GMD_PTM_70.i_xAtSpd') B ('TIID^Device 1 (EtherCAT)^EK1100_02_00^EL1088_02_15', 'Channel 1^Input') 79.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Inputs^GVL_GMD.fb_EM1K0_GMD_PTM_70.i_xFault') B ('TIID^Device 1 (EtherCAT)^EK1100_02_00^EL1088_02_15', 'Channel 2^Input') 80.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Outputs^GVL_GMD.fb_EM1K0_GMD_VRC_10.q_xOPN_DO') B ('TIID^Device 1 (EtherCAT)^EK1100_02_00^EL2004_02_02', 'Channel 1^Output') 81.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Outputs^GVL_GMD.fb_EM1K0_GMD_VRC_20.q_xOPN_DO') B ('TIID^Device 1 (EtherCAT)^EK1100_02_00^EL2004_02_02', 'Channel 3^Output') 82.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Outputs^GVL_GMD.fb_EM1K0_GMD_VRC_30.q_xOPN_DO') B ('TIID^Device 1 (EtherCAT)^EK1100_02_00^EL2004_02_02', 'Channel 2^Output') 83.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Outputs^GVL_GMD.fb_EM1K0_GMD_VRC_30.q_xOPN_DO') B ('TIID^Device 1 (EtherCAT)^EK1100_02_00^EL2004_02_02', 'Channel 4^Output') 84.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Outputs^GVL_GMD.fb_EM1K0_GMD_VRC_50.q_xOPN_DO') B ('TIID^Device 1 (EtherCAT)^EK1100_02_00^EL2004_02_05', 'Channel 1^Output') 85.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Outputs^GVL_GMD.fb_EM1K0_GMD_VRC_60.q_xOPN_DO') B ('TIID^Device 1 (EtherCAT)^EK1100_02_00^EL2004_02_05', 'Channel 3^Output') 86.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Outputs^GVL_GMD.fb_EM1K0_GMD_VRC_70.q_xOPN_DO') B ('TIID^Device 1 (EtherCAT)^EK1100_02_00^EL2004_02_05', 'Channel 2^Output') 87.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Outputs^GVL_GMD.fb_EM1K0_GMD_VRC_70.q_xOPN_DO') B ('TIID^Device 1 (EtherCAT)^EK1100_02_00^EL2004_02_05', 'Channel 4^Output') 88.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Outputs^GVL_GMD.fb_EM1K0_GMD_VRC_10.q_xOPN_DO') B ('TIID^Device 1 (EtherCAT)^EK1100_02_00^EL2004_02_16', 'Channel 1^Output') 89.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Outputs^GVL_GMD.fb_EM1K0_GMD_VRC_20.q_xOPN_DO') B ('TIID^Device 1 (EtherCAT)^EK1100_02_00^EL2004_02_16', 'Channel 3^Output') 90.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Outputs^GVL_GMD.fb_EM1K0_GMD_VRC_50.q_xOPN_DO') B ('TIID^Device 1 (EtherCAT)^EK1100_02_00^EL2004_02_16', 'Channel 2^Output') 91.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Outputs^GVL_GMD.fb_EM1K0_GMD_VRC_60.q_xOPN_DO') B ('TIID^Device 1 (EtherCAT)^EK1100_02_00^EL2004_02_16', 'Channel 4^Output') 92.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Outputs^GVL_GMD.fb_EM1K0_GMD_PTM_10.q_RunDO') B ('TIID^Device 1 (EtherCAT)^EK1100_02_00^EL2008_02_10', 'Channel 1^Output') 93.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Outputs^GVL_GMD.fb_EM1K0_GMD_PTM_20.q_RunDO') B ('TIID^Device 1 (EtherCAT)^EK1100_02_00^EL2008_02_10', 'Channel 2^Output') 94.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Outputs^GVL_GMD.fb_EM1K0_GMD_PTM_30.q_RunDO') B ('TIID^Device 1 (EtherCAT)^EK1100_02_00^EL2008_02_10', 'Channel 3^Output') 95.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Outputs^GVL_GMD.fb_EM1K0_GMD_PTM_40.q_RunDO') B ('TIID^Device 1 (EtherCAT)^EK1100_02_00^EL2008_02_10', 'Channel 4^Output') 96.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Outputs^GVL_GMD.fb_EM1K0_GMD_PTM_50.q_RunDO') B ('TIID^Device 1 (EtherCAT)^EK1100_02_00^EL2008_02_14', 'Channel 1^Output') 97.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Outputs^GVL_GMD.fb_EM1K0_GMD_PTM_60.q_RunDO') B ('TIID^Device 1 (EtherCAT)^EK1100_02_00^EL2008_02_14', 'Channel 2^Output') 98.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Outputs^GVL_GMD.fb_EM1K0_GMD_PTM_70.q_RunDO') B ('TIID^Device 1 (EtherCAT)^EK1100_02_00^EL2008_02_14', 'Channel 3^Output') 99.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Outputs^GVL_GMD.fb_EM1K0_GMD_PTM_10.q_RunDO') B ('TIID^Device 1 (EtherCAT)^EK1100_02_00^EL2088_02_10', 'Channel 1^Output') 100.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Outputs^GVL_GMD.fb_EM1K0_GMD_PTM_20.q_RunDO') B ('TIID^Device 1 (EtherCAT)^EK1100_02_00^EL2088_02_10', 'Channel 2^Output') 101.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Outputs^GVL_GMD.fb_EM1K0_GMD_PTM_30.q_RunDO') B ('TIID^Device 1 (EtherCAT)^EK1100_02_00^EL2088_02_10', 'Channel 3^Output') 102.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Outputs^GVL_GMD.fb_EM1K0_GMD_PTM_40.q_RunDO') B ('TIID^Device 1 (EtherCAT)^EK1100_02_00^EL2088_02_10', 'Channel 4^Output') 103.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Outputs^GVL_GMD.fb_EM1K0_GMD_PTM_50.q_RunDO') B ('TIID^Device 1 (EtherCAT)^EK1100_02_00^EL2088_02_14', 'Channel 1^Output') 104.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Outputs^GVL_GMD.fb_EM1K0_GMD_PTM_60.q_RunDO') B ('TIID^Device 1 (EtherCAT)^EK1100_02_00^EL2088_02_14', 'Channel 2^Output') 105.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Outputs^GVL_GMD.fb_EM1K0_GMD_PTM_70.q_RunDO') B ('TIID^Device 1 (EtherCAT)^EK1100_02_00^EL2088_02_14', 'Channel 3^Output') 106.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Inputs^GVL_GMD.fb_EM1K0_GMD_PRT_40.i_xAlarmOK') B ('TIID^Device 1 (EtherCAT)^EK1100_03_00^EL1004_03_07', 'Channel 2^Input') 107.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Inputs^GVL_GMD.fb_EM1K0_GMD_PRT_40.i_xIsRun') B ('TIID^Device 1 (EtherCAT)^EK1100_03_00^EL1004_03_07', 'Channel 1^Input') 108.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Outputs^GVL_GMD.fb_EM1K0_GMD_VVC_40.q_xOPN_DO') B ('TIID^Device 1 (EtherCAT)^EK1100_03_00^EL2212_03_09', 'DOX Control Channel 1^Control^Output') 109.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Outputs^GVL_GMD.fb_EM1K0_GMD_GCC_40.q_xHV_DIS') B ('TIID^Device 1 (EtherCAT)^EK1100_03_00^EL2794_03_01', 'Channel 2^Output') 110.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Outputs^GVL_GMD.fb_EM1K0_GMD_PRT_40.q_xRemote') B ('TIID^Device 1 (EtherCAT)^EK1100_03_00^EL2794_03_06', 'Channel 2^Output') 111.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Outputs^GVL_GMD.fb_EM1K0_GMD_PRT_40.q_xRunDo') B ('TIID^Device 1 (EtherCAT)^EK1100_03_00^EL2794_03_06', 'Channel 1^Output') 112.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Inputs^GVL_GMD.fb_EM1K0_GMD_GCC_40.i_iPRESS_R') B ('TIID^Device 1 (EtherCAT)^EK1100_03_00^EL3068_03_02', 'AI Standard Channel 3^Value') 113.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Inputs^GVL_GMD.fb_EM1K0_GMD_GPI_10.i_iPRESS_R') B ('TIID^Device 1 (EtherCAT)^EK1100_03_00^EL3068_03_02', 'AI Standard Channel 6^Value') 114.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Inputs^GVL_GMD.fb_EM1K0_GMD_GPI_40.i_iPRESS_R') B ('TIID^Device 1 (EtherCAT)^EK1100_03_00^EL3068_03_02', 'AI Standard Channel 5^Value') 115.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Inputs^GVL_INJ.GFM_83.i_iPRESS_R') B ('TIID^Device 1 (EtherCAT)^EK1100_04_00^EL3054_04_06', 'AI Standard Channel 1^Value') 116.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Inputs^GVL_INJ.GFM_84.i_iPRESS_R') B ('TIID^Device 1 (EtherCAT)^EK1100_04_00^EL3054_04_06', 'AI Standard Channel 2^Value') 117.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Inputs^GVL_INJ.GFM_85.i_iPRESS_R') B ('TIID^Device 1 (EtherCAT)^EK1100_04_00^EL3054_04_06', 'AI Standard Channel 3^Value') 118.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Inputs^GVL_INJ.GFM_86.i_iPRESS_R') B ('TIID^Device 1 (EtherCAT)^EK1100_04_00^EL3054_04_06', 'AI Standard Channel 4^Value') 119.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Outputs^GVL_INJ.VVC_80.q_xOPN_DO') B ('TIID^Device 1 (EtherCAT)^EK1100_04_00^ES2004_04_01', 'Channel 1^Output') 120.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Outputs^GVL_INJ.VVC_81.q_xOPN_DO') B ('TIID^Device 1 (EtherCAT)^EK1100_04_00^ES2004_04_01', 'Channel 3^Output') 121.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Outputs^GVL_INJ.VVC_82.q_xOPN_DO') B ('TIID^Device 1 (EtherCAT)^EK1100_04_00^ES2004_04_01', 'Channel 4^Output') 122.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Outputs^GVL_INJ.VVC_83.q_xOPN_DO') B ('TIID^Device 1 (EtherCAT)^EK1100_04_00^ES2004_04_02', 'Channel 1^Output') 123.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Outputs^GVL_INJ.VVC_84.q_xOPN_DO') B ('TIID^Device 1 (EtherCAT)^EK1100_04_00^ES2004_04_02', 'Channel 2^Output') 124.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Outputs^GVL_INJ.VVC_85.q_xOPN_DO') B ('TIID^Device 1 (EtherCAT)^EK1100_04_00^ES2004_04_02', 'Channel 3^Output') 125.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Outputs^GVL_INJ.VVC_86.q_xOPN_DO') B ('TIID^Device 1 (EtherCAT)^EK1100_04_00^ES2004_04_02', 'Channel 4^Output') 126.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Inputs^GVL_INJ.RTD.bError') B ('TIID^Device 1 (EtherCAT)^EK1100_04_00^ES3202_04_05', 'RTD Inputs Channel 1^Status^Error') 127.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Inputs^GVL_INJ.RTD.bOverrange') B ('TIID^Device 1 (EtherCAT)^EK1100_04_00^ES3202_04_05', 'RTD Inputs Channel 1^Status^Overrange') 128.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Inputs^GVL_INJ.RTD.bUnderrange') B ('TIID^Device 1 (EtherCAT)^EK1100_04_00^ES3202_04_05', 'RTD Inputs Channel 1^Status^Underrange') 129.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Inputs^GVL_INJ.RTD.iRaw') B ('TIID^Device 1 (EtherCAT)^EK1100_04_00^ES3202_04_05', 'RTD Inputs Channel 1^Value') 130.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Outputs^GVL_GMD.fb_EM1K0_GMD_PTM_10.q_RunDO') B ('TIID^Device 1 (EtherCAT)^EK1200_00_00^EL2008_00_05', 'Channel 1^Output') 131.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Outputs^GVL_GMD.fb_EM1K0_GMD_PTM_20.q_RunDO') B ('TIID^Device 1 (EtherCAT)^EK1200_00_00^EL2008_00_05', 'Channel 2^Output') 132.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Outputs^GVL_GMD.fb_EM1K0_GMD_PTM_30.q_RunDO') B ('TIID^Device 1 (EtherCAT)^EK1200_00_00^EL2008_00_05', 'Channel 3^Output') 133.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Outputs^GVL_GMD.fb_EM1K0_GMD_PTM_40.q_RunDO') B ('TIID^Device 1 (EtherCAT)^EK1200_00_00^EL2008_00_05', 'Channel 4^Output') 134.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Outputs^GVL_GMD.fb_EM1K0_GMD_PTM_50.q_RunDO') B ('TIID^Device 1 (EtherCAT)^EK1200_00_00^EL2008_00_05', 'Channel 5^Output') 135.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Outputs^GVL_GMD.fb_EM1K0_GMD_PTM_60.q_RunDO') B ('TIID^Device 1 (EtherCAT)^EK1200_00_00^EL2008_00_05', 'Channel 6^Output') 136.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Outputs^GVL_GMD.fb_EM1K0_GMD_PTM_70.q_RunDO') B ('TIID^Device 1 (EtherCAT)^EK1200_00_00^EL2008_00_05', 'Channel 7^Output') 137.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Outputs^GVL_INJ.hv1.q_HV_DO') B ('TIID^Device 1 (EtherCAT)^EK1200_00_00^EL2794_00_06', 'Channel 1^GVL_INJ.hv1.q_HV_DO') 138.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Inputs^GVL_INJ.GCM_80.i_iPRESS_R') B ('TIID^Device 1 (EtherCAT)^EP4374-0002_05_00', 'AI Inputs Channel 1^Value') 139.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Outputs^GVL_INJ.VCN_40.q_iRawPosition') B ('TIID^Device 1 (EtherCAT)^EP4374-0002_05_00', 'AO Outputs Channel 3^Analog output') 140.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Inputs^GVL_INJ.VGP_40.Axis.NcToPlc') B ('TINC^NC-Task 1 SAF^Axes^VGP_40', 'Outputs^ToPlc') 141.) A ('TIPC^plc_kfe_gmd_vac^plc_kfe_gmd_vac Instance', 'PlcTask Outputs^GVL_INJ.VGP_40.Axis.PlcToNc') B ('TINC^NC-Task 1 SAF^Axes^VGP_40', 'Inputs^FromPlc') Pragma lint results ------------------- ``` WARNING:pytmc.parser:(Pre-loading XTI file) Failed: EK1200_00_00.xti ([Errno 2] No such file or directory: '/home/travis/build/pcdshub/lcls-plc-kfe-gmd-vac/plc/plc-kfe-gmd-vac/_Config/IO/Device 1 (EtherCAT)/EK1200_00_00.xti'). If this file is referenced in the project, this may cause the project to fail loading. If not, this can be ignored. WARNING:pytmc.parser:(Pre-loading XTI file) Failed: EP5101-0011_05_01.xti ([Errno 2] No such file or directory: '/home/travis/build/pcdshub/lcls-plc-kfe-gmd-vac/plc/plc-kfe-gmd-vac/_Config/IO/Device 1 (EtherCAT)/EP5101-0011_05_01.xti'). If this file is referenced in the project, this may cause the project to fail loading. If not, this can be ignored. WARNING:pytmc.parser:(Pre-loading XTI file) Failed: EP4374-0002_05_00.xti ([Errno 2] No such file or directory: '/home/travis/build/pcdshub/lcls-plc-kfe-gmd-vac/plc/plc-kfe-gmd-vac/_Config/IO/Device 1 (EtherCAT)/EP4374-0002_05_00.xti'). If this file is referenced in the project, this may cause the project to fail loading. If not, this can be ignored. WARNING:pytmc.parser:(Pre-loading XTI file) Failed: EK1100_04_00.xti ([Errno 2] No such file or directory: '/home/travis/build/pcdshub/lcls-plc-kfe-gmd-vac/plc/plc-kfe-gmd-vac/_Config/IO/Device 1 (EtherCAT)/EK1100_04_00.xti'). If this file is referenced in the project, this may cause the project to fail loading. If not, this can be ignored. WARNING:pytmc.parser:(Pre-loading XTI file) Failed: EP7041-0002_05_02.xti ([Errno 2] No such file or directory: '/home/travis/build/pcdshub/lcls-plc-kfe-gmd-vac/plc/plc-kfe-gmd-vac/_Config/IO/Device 1 (EtherCAT)/EP7041-0002_05_02.xti'). If this file is referenced in the project, this may cause the project to fail loading. If not, this can be ignored. WARNING:pytmc.parser:(Pre-loading XTI file) Failed: EK1100_01_00.xti ([Errno 2] No such file or directory: '/home/travis/build/pcdshub/lcls-plc-kfe-gmd-vac/plc/plc-kfe-gmd-vac/_Config/IO/Device 1 (EtherCAT)/EK1100_01_00.xti'). If this file is referenced in the project, this may cause the project to fail loading. If not, this can be ignored. WARNING:pytmc.parser:(Pre-loading XTI file) Failed: EK1100_02_00.xti ([Errno 2] No such file or directory: '/home/travis/build/pcdshub/lcls-plc-kfe-gmd-vac/plc/plc-kfe-gmd-vac/_Config/IO/Device 1 (EtherCAT)/EK1100_02_00.xti'). If this file is referenced in the project, this may cause the project to fail loading. If not, this can be ignored. WARNING:pytmc.parser:(Pre-loading XTI file) Failed: EK1100_03_00.xti ([Errno 2] No such file or directory: '/home/travis/build/pcdshub/lcls-plc-kfe-gmd-vac/plc/plc-kfe-gmd-vac/_Config/IO/Device 1 (EtherCAT)/EK1100_03_00.xti'). If this file is referenced in the project, this may cause the project to fail loading. If not, this can be ignored. INFO:pytmc.bin.pragmalint:Total pragmas found: 88 Total linter errors: 0 PLC Project (1): plc_kfe_gmd_vac ================================ DUTs/ST_HV.TcDUT (TcPlcObject) ------------------------------ - ST_HV: Declaration - 4 pragmas DUTs/ST_PressureSensor.TcDUT (TcPlcObject) ------------------------------------------ - ST_PressureSensor: Declaration - 7 pragmas DUTs/ST_VGP.TcDUT (TcPlcObject) ------------------------------- - ST_VGP: Declaration - 17 pragmas GVLs/GVL_INJ.TcGVL (TcPlcObject) -------------------------------- - GVL_INJ: Declaration - 18 pragmas GVLs/GVL_GMD.TcGVL (TcPlcObject) -------------------------------- - GVL_GMD: Declaration - 25 pragmas GVLs/GVL_VARIABLES.TcGVL (TcPlcObject) -------------------------------------- - GVL_VARIABLES: Declaration - 5 pragmas POUs/FB_HighVoltage.TcPOU (TcPlcObject) --------------------------------------- - FB_HighVoltage: Declaration - 1 pragmas POUs/FB_PressureTransducer.TcPOU (TcPlcObject) ---------------------------------------------- - FB_PressureTransducer: Declaration - 1 pragmas POUs/FB_RTD.TcPOU (TcPlcObject) ------------------------------- - FB_RTD: Declaration - 3 pragmas POUs/FB_VGP.TcPOU (TcPlcObject) ------------------------------- - FB_VGP: Declaration - 2 pragmas POUs/PRG_DIAGNOSTIC.TcPOU (TcPlcObject) --------------------------------------- - PRG_DIAGNOSTIC: Declaration - 4 pragmas PLC Project (2): plc_kfe_gmd_vac_sim ==================================== GVLs/GVL_VARIABLES.TcGVL (TcPlcObject) -------------------------------------- - GVL_VARIABLES: Declaration - 1 pragmas ```