Initial
This commit is contained in:
162
PLC/0 General/POUs/CLEANOUT.TcPOU
Normal file
162
PLC/0 General/POUs/CLEANOUT.TcPOU
Normal file
@@ -0,0 +1,162 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.11">
|
||||
<POU Name="CLEANOUT" Id="{ce0061ae-e812-4a19-b385-951266a3cfdc}" SpecialFunc="None">
|
||||
<Declaration><![CDATA[PROGRAM CLEANOUT
|
||||
VAR_INPUT
|
||||
Scan : BOOL;
|
||||
CleanOut : BOOL;
|
||||
TargetStation : INT;
|
||||
TargetCassette : INT;
|
||||
TargetSlot : INT;
|
||||
END_VAR
|
||||
VAR_OUTPUT
|
||||
TargetStations : ARRAY[0..12] OF STRING;
|
||||
TargetStationsN : ARRAY[0..12] OF INT;
|
||||
TargetCassettes : ARRAY[0..3] OF STRING;
|
||||
|
||||
{IF defined (SO1635)}
|
||||
TargetCassettesMaxIndex : INT := 3;
|
||||
{END_IF}
|
||||
{IF defined (SO1636)}
|
||||
TargetCassettesMaxIndex : INT := 1;
|
||||
{END_IF}
|
||||
TargetCassettesMaxIndex : INT := 1;
|
||||
|
||||
TargetSlots : ARRAY[0..MaxNumberOfWafer-1] OF STRING;
|
||||
NumberOfTargetStation : INT;
|
||||
|
||||
|
||||
ScanInvisible : BOOL;
|
||||
SlotInvisible : BOOL;
|
||||
CleanoutInvisible : BOOL;
|
||||
CassetteInvisible : BOOL;
|
||||
END_VAR
|
||||
VAR
|
||||
i : INT;
|
||||
Step : INT;
|
||||
|
||||
iTargetStation : INT;
|
||||
END_VAR
|
||||
]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[NumberOfTargetStation := 0;
|
||||
CleanOutNeeded := FALSE;
|
||||
ScanInvisible := FALSE;
|
||||
SlotInvisible := FALSE;
|
||||
CleanoutInvisible := FALSE;
|
||||
CassetteInvisible := FALSE;
|
||||
FOR i:= FirstStation TO LastStation DO
|
||||
CASE StationsStatus[i].StationType OF
|
||||
noStationType, TypeGeneral, TypeMedia:
|
||||
;
|
||||
TypeCassette:
|
||||
TargetCassettes[i-FirstCassette] := StationsStatus[i].StationName;
|
||||
IF StationsStatus[i].Ist.Busy THEN
|
||||
ScanInvisible := TRUE;
|
||||
SlotInvisible := TRUE;
|
||||
END_IF
|
||||
ELSE
|
||||
IF StationsStatus[i].OnlyMoveToStation THEN
|
||||
CONTINUE;
|
||||
END_IF
|
||||
|
||||
IF StationsStatus[i].WaferInfo[0].Number = 100 THEN
|
||||
TargetStations[NumberOfTargetStation] := StationsStatus[i].StationName;
|
||||
TargetStationsN[NumberOfTargetStation] := i;
|
||||
CleanOutNeeded := TRUE;
|
||||
NumberOfTargetStation := NumberOfTargetStation +1;
|
||||
END_IF
|
||||
|
||||
IF StationsStatus[i].StationType = TypeRobot THEN
|
||||
IF StationsStatus[i].WaferInfo[0].Number = 100 THEN
|
||||
TargetStations[NumberOfTargetStation] := StationsStatus[i].StationName;
|
||||
TargetStationsN[NumberOfTargetStation] := i;
|
||||
CleanOutNeeded := TRUE;
|
||||
NumberOfTargetStation := NumberOfTargetStation +1;
|
||||
END_IF
|
||||
|
||||
IF StationsStatus[i].Ist.Busy THEN
|
||||
ScanInvisible := TRUE;
|
||||
SlotInvisible := TRUE;
|
||||
END_IF
|
||||
END_IF
|
||||
END_CASE
|
||||
END_FOR
|
||||
IF NOT CASSETTE_MAIN[TargetCassette + FirstCassette].IO.CarrierAvailable THEN
|
||||
ScanInvisible := TRUE;
|
||||
END_IF
|
||||
|
||||
|
||||
IF StationsStatus[RobotStation].WaferInfo[0].Number <> 0 THEN
|
||||
ScanInvisible := TRUE;
|
||||
END_IF
|
||||
IF TargetStationsN[TargetStation] = RobotStation THEN
|
||||
CassetteInvisible := TRUE;
|
||||
END_IF
|
||||
|
||||
IF StationsStatus[FirstCassette + TargetCassette].Ist.CloseIn THEN
|
||||
FOR i := 0 TO MaxNumberOfWafer - 1 DO
|
||||
IF CASSETTE_MAIN[FirstCassette + TargetCassette].Signal.Wafer[i+1].WaferStatus = noWafer THEN
|
||||
TargetSlots[i] := INT_TO_STRING(i+1);
|
||||
ELSE
|
||||
TargetSlots[i] := CONCAT(INT_TO_STRING(i+1), ' (Not Available)');
|
||||
END_IF
|
||||
END_FOR
|
||||
ELSE
|
||||
SlotInvisible := TRUE;
|
||||
END_IF
|
||||
|
||||
|
||||
IF FIND(TargetSlots[TargetSlot], '(Not Available)') > 0 THEN
|
||||
CleanoutInvisible := TRUE;
|
||||
END_IF
|
||||
|
||||
IF SlotInvisible THEN
|
||||
CleanoutInvisible := TRUE;
|
||||
END_IF
|
||||
|
||||
|
||||
CASE Step OF
|
||||
0:
|
||||
IF CleanOut THEN
|
||||
Step := 10;
|
||||
END_IF
|
||||
10:
|
||||
iTargetStation := TargetStationsN[TargetStation];
|
||||
IF NOT StationsStatus[iTargetStation].Ist.Busy AND NOT StationsStatus[RobotStation].Ist.Busy THEN
|
||||
ROBOT_MAIN.TargetStation := iTargetStation;
|
||||
CMD[RobotStation] := GetCMD;
|
||||
Step := Step +1;
|
||||
END_IF
|
||||
11:
|
||||
IF NOT StationsStatus[RobotStation].Ist.Busy THEN
|
||||
Step := 30;
|
||||
END_IF
|
||||
20:
|
||||
IF NOT StationsStatus[RobotStation].Ist.Busy THEN
|
||||
ROBOT_MAIN.TargetStation := TypeAligner;
|
||||
CMD[RobotStation] := PutCMD;
|
||||
Step := Step +1;
|
||||
END_IF
|
||||
21:
|
||||
IF NOT StationsStatus[RobotStation].Ist.Busy THEN
|
||||
Step := 30;
|
||||
END_IF
|
||||
30:
|
||||
IF NOT StationsStatus[RobotStation].Ist.Busy THEN
|
||||
ROBOT_MAIN.TargetStation := TypeCassette + TargetCassette;
|
||||
ROBOT_MAIN.TargetSlot := TargetSlot +1;
|
||||
CASSETTE_MAIN[ROBOT_MAIN.TargetStation].Signal.Wafer[ROBOT_MAIN.TargetSlot].Defect := TRUE;
|
||||
CMD[RobotStation] := PutCMD;
|
||||
Step := Step +1;
|
||||
END_IF
|
||||
31:
|
||||
IF NOT StationsStatus[RobotStation].Ist.Busy THEN
|
||||
CleanOut := FALSE;
|
||||
Step := 0;
|
||||
END_IF
|
||||
END_CASE
|
||||
]]></ST>
|
||||
</Implementation>
|
||||
</POU>
|
||||
</TcPlcObject>
|
||||
Reference in New Issue
Block a user