145 lines
3.5 KiB
XML
145 lines
3.5 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.13">
|
|
<POU Name="JOB" Id="{799f177c-bbc6-4aa2-ab23-128c570a7c41}" SpecialFunc="None">
|
|
<Declaration><![CDATA[PROGRAM JOB
|
|
VAR
|
|
Step : INT;
|
|
|
|
// NextIndexDone : ARRAY[FirstCassette..FirstCassette +1] OF BOOL;
|
|
i : INT;
|
|
END_VAR]]></Declaration>
|
|
<Implementation>
|
|
<ST><![CDATA[IF StationsStatus[FirstCassette].Soll.Stop THEN
|
|
Step := 0;
|
|
TrayJob.Start := FALSE;
|
|
TrayBatch(0,0);
|
|
RETURN;
|
|
END_IF
|
|
|
|
CASE Step OF
|
|
0:
|
|
IF TrayJob.Start THEN
|
|
Step := 10;
|
|
END_IF
|
|
10:
|
|
CASE TrayJob.JobType OF
|
|
eJobType.OneTray:
|
|
IF TrayBatch(TrayJob.TryIndex,TrayJob.TryIndex) THEN
|
|
Step := 0;
|
|
END_IF
|
|
eJobType.AllTrays:
|
|
IF TrayBatch(1,20) THEN
|
|
Step := 0;
|
|
END_IF
|
|
eJobType.TrayLot:
|
|
IF TrayBatch(TrayJob.StartTrayIndex,TrayJob.EndTrayIndex) THEN
|
|
Step := 0;
|
|
END_IF
|
|
END_CASE
|
|
END_CASE]]></ST>
|
|
</Implementation>
|
|
<Method Name="TrayBatch" Id="{7fdb400e-fd56-4c2a-8bbf-660c477fc1af}">
|
|
<Declaration><![CDATA[METHOD TrayBatch : BOOL
|
|
VAR_INPUT
|
|
FirstTray : USINT;
|
|
LastTray : USINT;
|
|
END_VAR
|
|
VAR_INST
|
|
Step : INT;
|
|
TrayIndex : USINT;
|
|
i : INT;
|
|
|
|
|
|
ForLoopFrom : INT;
|
|
ForLoopTo : INT;
|
|
|
|
// NextIndexDone : ARRAY[FirstCassette..FirstCassette +1] OF BOOL;
|
|
END_VAR
|
|
VAR
|
|
bError : BOOL;
|
|
END_VAR]]></Declaration>
|
|
<Implementation>
|
|
<ST><![CDATA[IF StationsStatus[FirstCassette].Soll.Stop THEN
|
|
Step := 0;
|
|
RETURN;
|
|
END_IF
|
|
|
|
CASE Step OF
|
|
0:
|
|
IF StationsStatus[FirstCassette].Ist.InitDone AND
|
|
NOT StationsStatus[FirstCassette].Ist.Busy AND
|
|
StationsStatus[FirstCassette+1].Ist.InitDone AND
|
|
NOT StationsStatus[FirstCassette+1].Ist.Busy THEN
|
|
//NextIndexDone[FirstCassette] := FALSE;
|
|
//NextIndexDone[FirstCassette+1] := FALSE;
|
|
TrayIndex := FirstTray;
|
|
Step := 10;
|
|
END_IF
|
|
10:
|
|
IF CASSETTE_MAIN[FirstCassette].TrayFeeder.GetTray(SlotNr := TrayIndex, bOutError => bError) THEN
|
|
IF bError THEN
|
|
Step := Step +1;
|
|
ELSE
|
|
Step := 20;
|
|
END_IF
|
|
END_IF
|
|
20:
|
|
StationsStatus[FirstCassette].SellectedRecipeAutomatic := TrayJob.FlowName;
|
|
IF NOT StationsStatus[FirstCassette].Ist.Busy THEN
|
|
CMD[FirstCassette] := CloseInCMD;
|
|
StationsStatus[FirstCassette].Soll.AutoStart := TRUE;
|
|
Step := Step +1;
|
|
END_IF
|
|
21:
|
|
IF CASSETTE_MAIN[FirstCassette].TrayFeeder.TrayNumber > 0 THEN
|
|
ForLoopFrom := 1+ (CASSETTE_MAIN[FirstCassette].TrayFeeder.TrayNumber)*100;
|
|
ForLoopTo := 100+ (CASSETTE_MAIN[FirstCassette].TrayFeeder.TrayNumber)*100;
|
|
FOR i := 1 TO ForLoopTo DO
|
|
IF CASSETTE_MAIN[FirstCassette].Signal.Wafer[i].WaferStatus = WaferForProccess THEN
|
|
IF NOT StationsStatus[FirstCassette].Ist.Busy THEN
|
|
CMD[FirstCassette] := CloseInCMD;
|
|
StationsStatus[FirstCassette].Soll.AutoStart := TRUE;
|
|
END_IF
|
|
RETURN;
|
|
END_IF
|
|
END_FOR
|
|
Step := 30;
|
|
END_IF
|
|
30:
|
|
IF bEmpty THEN
|
|
Step := 35;
|
|
RETURN;
|
|
END_IF
|
|
IF TrayIndex < LastTray THEN
|
|
TrayIndex := TrayIndex + 1;
|
|
Step := Step +1;
|
|
ELSE
|
|
Step := 35;
|
|
END_IF
|
|
31:
|
|
IF CASSETTE_MAIN[FirstCassette].TrayFeeder.GetTray(
|
|
SlotNr := TrayIndex,
|
|
bOutError => bError) THEN
|
|
Step := 21;
|
|
END_IF
|
|
35:
|
|
IF CASSETTE_MAIN[FirstCassette].TrayFeeder.EndOfLot() THEN
|
|
Step := Step +1;
|
|
END_IF
|
|
36:
|
|
IF NOT StationsStatus[FirstCassette].Ist.Busy THEN
|
|
Step := 40;
|
|
END_IF
|
|
40:
|
|
IF CASSETTE_MAIN[FirstCassette+1].TrayFeeder.EndOfLot() THEN
|
|
Step := 50;
|
|
END_IF
|
|
50:
|
|
TrayJob.Start := FALSE;
|
|
TrayBatch := TRUE;
|
|
Step := 0;
|
|
END_CASE]]></ST>
|
|
</Implementation>
|
|
</Method>
|
|
</POU>
|
|
</TcPlcObject> |