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
TYPE E_GasType :
(
none := 0,
Neon,
Argon,
Krypton,
Xenon
);
END_TYPE
DUT: E_HomeState¶
File: plc_kfe_gmd_vac/DUTs/E_HomeState.TcDUT
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
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
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
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
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
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
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
VAR_GLOBAL
ads_watch_dog : FB_ADS_WATCHDOG;
END_VAR
GVL: GVL_VARIABLES¶
File: plc_kfe_gmd_vac/GVLs/GVL_VARIABLES.TcGVL
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
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
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
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
(* 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
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
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
(* 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
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
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
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
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
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
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
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
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
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
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
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
{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
PROGRAM MAIN
VAR
END_VAR
PRG_DIAGNOSTIC();
OverridePressure();
PRG_GMD();
END_PROGRAM
POU: OverridePressure¶
File: plc_kfe_gmd_vac_sim/POUs/OverridePressure.TcPOU
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
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
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