175 lines
5.4 KiB
XML
175 lines
5.4 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.12">
|
|
<POU Name="HV_IO_FB" Id="{147a9e62-dc3f-4b6b-8708-0efd1b986735}" SpecialFunc="None">
|
|
<Declaration><![CDATA[FUNCTION_BLOCK HV_IO_FB EXTENDS Station_GENERAL_IO_FB
|
|
VAR_INPUT
|
|
Config : REFERENCE TO sHVConfig;
|
|
bOutOverpressureN2 AT %Q* : BOOL;
|
|
bOutExhaust AT %Q* : BOOL;
|
|
bOutValve AT %Q* : BOOL;
|
|
|
|
PressureController : ITV2050_FB;
|
|
END_VAR
|
|
|
|
VAR
|
|
Shutter : PneumaticCylinder_FB;
|
|
Chamber : PneumaticCylinder_FB;
|
|
ChuckVacuum : PneumaticCylinder_FB;
|
|
|
|
|
|
|
|
END_VAR
|
|
|
|
VAR_OUTPUT
|
|
bInOverTemp AT %I* : BOOL;
|
|
bInPressureCylinderOk AT %I* : BOOL;
|
|
bInShutterSafety AT %I* : BOOL;
|
|
InChamberPressure AT %I* : INT;
|
|
rInChamberPressure : LREAL;
|
|
bInChamberPressureOk : BOOL;
|
|
bInChamberNoPressure : BOOL;
|
|
bInRobotFree AT %I* : BOOL;
|
|
bInRobotNotFree AT %I* : BOOL;
|
|
END_VAR]]></Declaration>
|
|
<Implementation>
|
|
<ST><![CDATA[MediaCheck();
|
|
|
|
IF NOT bInShutterSafety THEN
|
|
Shutter.Up(TRUE);
|
|
END_IF
|
|
//
|
|
IF NOT Shutter.bInUp OR NOT Chamber.bInUp OR NOT bInRobotFree OR bInRobotNotFree THEN
|
|
iStationStatus.Ist.PrepIn := FALSE;
|
|
iStationStatus.Ist.PrepOut := FALSE;
|
|
END_IF
|
|
|
|
Shutter();
|
|
Chamber();
|
|
ChuckVacuum();
|
|
|
|
iMediaArray[eHVMedienNamen.ChamberClose].Disable := NOT bInPressureCylinderOk OR NOT Shutter.bInDown;
|
|
iMediaArray[eHVMedienNamen.ChamberOpen].Disable := NOT bInPressureCylinderOk OR NOT Shutter.bInDown;
|
|
|
|
IF NOT bInPressureCylinderOk THEN
|
|
Chamber.bOutUp := FALSE;
|
|
Chamber.bOutDown := FALSE;
|
|
END_IF
|
|
|
|
IF NOT Shutter.bInDown THEN
|
|
Chamber.bOutDown := FALSE;
|
|
END_IF
|
|
|
|
iMediaArray[eHVMedienNamen.Valve].Input := bInPressureCylinderOk;
|
|
|
|
rInChamberPressure := InChamberPressure;
|
|
rInChamberPressure := rInChamberPressure / 16#7FFF;
|
|
rInChamberPressure := rInChamberPressure * 10;
|
|
|
|
CASE iStationStatus.StationType OF
|
|
TypeHVHot:
|
|
rInChamberPressure := rInChamberPressure -1;
|
|
END_CASE
|
|
|
|
bInChamberPressureOk := ABS(rInChamberPressure - PressureController.rOutTargetPressure) < 0.1;
|
|
bInChamberNoPressure := rInChamberPressure < 0.02;
|
|
|
|
iMediaArray[eHVMedienNamen.OverpressureN2].Input := bInChamberPressureOk;
|
|
iMediaArray[eHVMedienNamen.Exhaust].Input := bInChamberNoPressure;
|
|
|
|
IF NOT Chamber.bInDown THEN
|
|
bOutOverpressureN2 := FALSE;
|
|
END_IF
|
|
//
|
|
|
|
//Vacuum
|
|
ChuckVacuum.bInDown := NOT ChuckVacuum.bInUp;
|
|
//iMediaArray[eHVMedienNamen.VacuumOn].Input := bInVacuumOk;
|
|
//iMediaArray[eHVMedienNamen.VacuumOff].Input := NOT bInVacuumOk;
|
|
//
|
|
|
|
PressureController();]]></ST>
|
|
</Implementation>
|
|
<Method Name="Initialization" Id="{ee221bc4-5d24-4a1e-9c73-9b3abc1ca4c2}">
|
|
<Declaration><![CDATA[METHOD Initialization : BOOL
|
|
VAR_INPUT
|
|
iStation : INT;
|
|
END_VAR
|
|
|
|
VAR
|
|
ShutterUpServiceName : ARRAY[0..NumberOfLanguages] OF T_MaxString := ['Open$NShutter', 'Shutter$NOffen'];
|
|
ShutterDownServiceName : ARRAY[0..NumberOfLanguages] OF T_MaxString := ['Close$NShutter', 'Shutter$NSchließen'];
|
|
|
|
ChamberUpServiceName : ARRAY[0..NumberOfLanguages] OF T_MaxString := ['Open$NChamber', 'Kammer$NOffen'];
|
|
ChamberDownServiceName : ARRAY[0..NumberOfLanguages] OF T_MaxString := ['Close$NChamber', 'Kammer$NSchließen'];
|
|
|
|
|
|
ChuckVacuumOnServiceName : ARRAY[0..NumberOfLanguages] OF T_MaxString := ['Auflagevakuum$NEin', 'Auflagevakuum$NEin'];
|
|
ChuckVacuumOffServiceName : ARRAY[0..NumberOfLanguages] OF T_MaxString := ['Auflagevakuum$NAus', 'Auflagevakuum$NAus'];
|
|
END_VAR]]></Declaration>
|
|
<Implementation>
|
|
<ST><![CDATA[InitializationExt(iStation);
|
|
|
|
Shutter.Initialization(
|
|
iStation,
|
|
eHVMedienNamen.ShutterOpen,
|
|
eHVMedienNamen.ShutterClose,
|
|
HV_ErrorNr.eTimeoutShutterOpen,
|
|
ShutterUpServiceName,
|
|
ShutterDownServiceName
|
|
);
|
|
Shutter.TimeOut := T#10S;
|
|
|
|
Chamber.Initialization(
|
|
iStation,
|
|
eHVMedienNamen.ChamberOpen,
|
|
eHVMedienNamen.ChamberClose,
|
|
HV_ErrorNr.eTimeoutChamberOpen,
|
|
ChamberUpServiceName,
|
|
ChamberDownServiceName
|
|
);
|
|
Chamber.TimeOut := T#10S;
|
|
|
|
|
|
ChuckVacuum.Initialization(
|
|
iStation,
|
|
eHVMedienNamen.VacuumOn,
|
|
eHVMedienNamen.VacuumOff,
|
|
HV_ErrorNr.eNoWafer,
|
|
Peripherie_GVL.ServiceNameChuckVacuumOn,
|
|
Peripherie_GVL.ServiceNameChuckVacuumOff
|
|
);
|
|
ChuckVacuum.TimeOut := T#10S;
|
|
|
|
iMediaArray[eHVMedienNamen.OverpressureN2].ServiceName[0] := 'Überdruck$NN2';
|
|
iMediaArray[eHVMedienNamen.OverpressureN2].bReferenceControl REF= bOutOverpressureN2;
|
|
iMediaArray[eHVMedienNamen.OverpressureN2].bReferenceResetControl REF= bOutExhaust;
|
|
iMediaArray[eHVMedienNamen.OverpressureN2].InputAvailable := TRUE;
|
|
|
|
iMediaArray[eHVMedienNamen.Exhaust].ServiceName[0] := 'Exhaust';
|
|
iMediaArray[eHVMedienNamen.Exhaust].bReferenceControl REF= bOutExhaust;
|
|
iMediaArray[eHVMedienNamen.Exhaust].bReferenceResetControl REF= bOutOverpressureN2;
|
|
iMediaArray[eHVMedienNamen.Exhaust].InputAvailable := TRUE;
|
|
|
|
|
|
iMediaArray[eHVMedienNamen.Valve].ServiceName[0] := 'Ventil';
|
|
iMediaArray[eHVMedienNamen.Valve].bReferenceControl REF= bOutValve;
|
|
iMediaArray[eHVMedienNamen.Valve].InputAvailable := TRUE;]]></ST>
|
|
</Implementation>
|
|
</Method>
|
|
<Action Name="MediaCheck" Id="{a9750f69-cba0-4bdb-9a48-68a3453c159e}">
|
|
<Implementation>
|
|
<ST><![CDATA[CASE iStationStatus.StationType OF
|
|
TypeHVHot:
|
|
AlarmSend(iStation, HV_ErrorNr.eOverTemp, FALSE, eReportType.Warning, sAvailableResponse.Ok, NOT bInOverTemp);
|
|
END_CASE
|
|
|
|
DelayTimer(IN := TRUE AND InAktorspannung, PT := T#5S);
|
|
IF NOT DelayTimer.Q THEN
|
|
RETURN;
|
|
END_IF
|
|
|
|
]]></ST>
|
|
</Implementation>
|
|
</Action>
|
|
</POU>
|
|
</TcPlcObject> |