0 THEN ReceiveMessage := Left(Com.ReceiveMessage, FindPosition+1); Com.ReceiveMessage := DELETE(Com.ReceiveMessage, FindPosition+1,1); JMP Lable1; END_IF Lable1: IF FIND(ReceiveMessage, CONCAT(ReceiveArray[0], NewLine)) =0 AND ReceiveMessage <> '' THEN MEMMOVE(ADR(ReceiveArray[1]), ADR(ReceiveArray[0]), SIZEOF(ReceiveArray)- SIZEOF(ReceiveArray[0])); ReceiveArray[0] := ReceiveMessage; END_IF FindPosition := find(ReceiveArray[0], NewLine); IF FindPosition > 0 AND ReceiveArray[0] <> NewLine THEN ReceiveArray[0] := LEFT(ReceiveArray[0], FindPosition-1); END_IF IF bInInit THEN IF Init() THEN bInInit := FALSE; END_IF END_IF MediaArray[iStation][eCassetteMedienNamen.TrayNextSlot].Disable := NOT iStationStatus.Ist.InitDone OR rInTargetSlot = 0; IF bInNextSlot THEN IF GetTray(rInTargetSlot) THEN bInNextSlot := FALSE; END_IF END_IF ]]> 0 THEN error_index := AlarmSend(iStation,MsgId := Cassette_ErrorNr.eGetError,TRUE, eReportType.Error, sAvailableResponse.RetryCancel, FALSE); Step := 20; Error := TRUE; ELSIF ReceiveMessage = 'AtBottom$R$N' THEN EndOfLot := TRUE; Step := 0; END_IF 20: Com.SendMessage := 'r$R'; Step := Step +1; 21: IF ReceiveMessage = 'Reset$R$N' THEN //Feeder Ok Step := Step +1; END_IF 22: IF ReceiveMessage = 'Ready$R$N' THEN //Feeder Ok Step := 0; END_IF END_CASE]]> Com.SendMessage ); END_CASE TrayNumber := 0; Step := Step +1; 1: IF ReceiveMessage = 'Index Fast$R$N' THEN Step := Step +1; END_IF 2: IF ReceiveMessage = 'Ready$R$N' THEN Step := Step +1; ELSIF find(ReceiveMessage,'Error')> 0 THEN error_index := AlarmSend(iStation,MsgId := Cassette_ErrorNr.eGetError,TRUE, eReportType.Error, sAvailableResponse.RetryCancel, FALSE); Step := 20; Error := TRUE; ELSIF ReceiveMessage = 'AtBottom$R$N' THEN EOT := TRUE; TrayNumber := 0; Step := 0; bOutError := TRUE; GetTray := TRUE; END_IF 3: Com.SendMessage := 't$R'; Step := Step +1; 4: IF find(ReceiveMessage , 'Ready ')> 0 THEN TrayNumber := STRING_TO_BYTE(MID(ReceiveMessage, 2, 7)); IF TrayNumber <> SlotNr AND SlotNr = 0 THEN Step := 20; ELSE Step := 10; END_IF END_IF 10: IF SCAN(TrayNumber) THEN Step := 100; END_IF 20: Com.SendMessage := 'r$R'; Step := Step +1; 21: IF ReceiveMessage = 'Reset$R$N' THEN //Feeder Ok Step := Step +1; END_IF 22: IF ReceiveMessage = 'Ready$R$N' THEN //Feeder Ok Step := 0; END_IF 100: GetTray := TRUE; Step := 0; END_CASE]]> Com.SendMessage ); END_CASE TrayNumber := 0; Step := Step +1; 1: IF ReceiveMessage = 'Index Fast$R$N' THEN Step := Step +1; END_IF 2: IF ReceiveMessage = 'Ready$R$N' THEN Step := Step +1; END_IF IF ReceiveMessage = 'AtBottom$R$N' THEN EOT := TRUE; TrayNumber := 0; Step := 0; END_IF 3: Com.SendMessage := 't$R'; Step := Step +1; 4: IF find(ReceiveMessage , 'Ready ')> 0 THEN TrayNumber := STRING_TO_BYTE(MID(ReceiveMessage, 2, 7)); Step := 10; END_IF 10: CASE iStation OF 10: IF KeyenceCamera.SizeDetection(Out=>Size) THEN Step := 20; END_IF ELSE Step := 100; END_CASE 20: MaxNumberOfSlots := ROBOT_MAIN.Config.ConfigKUKA.StationsTrayScan[iStation][Size].MaxNumber; IF KeyenceCamera.Mapping(Size := Size, MaxNumberOfSlots := MaxNumberOfSlots, Out := MAP) THEN Step := 30; END_IF 30: // FOR i := 1 TO MaxNumberOfSlots DO FOR i := 1 TO MaxNumberOfSlots DO CASE MAP[i] OF 0: CASSETTE_MAIN[iStation].Signal.Wafer[i+(TrayNumber-1)*100].WaferStatus := noWafer; 1: CASSETTE_MAIN[iStation].Signal.Wafer[i+(TrayNumber-1)*100].WaferStatus := WaferForProccess; CASSETTE_MAIN[iStation].Signal.Wafer[i+(TrayNumber-1)*100].Size := Size; ELSE CASSETTE_MAIN[iStation].Signal.Wafer[i+(TrayNumber-1)*100].WaferStatus := WaferDefect; END_CASE END_FOR // END_FOR Step := 100; 100: IndexNext := TRUE; Step := 0; END_CASE]]> 0 THEN error_index := AlarmSend(iStation,MsgId := Cassette_ErrorNr.eInitError,TRUE, eReportType.Error, sAvailableResponse.RetryCancel, FALSE); Step := 0; Error := TRUE; END_IF IF ReceiveMessage = 'Ok$R$N' THEN //Feeder Ok DelayTimer(IN := FALSE); Step := 20; RETURN; END_IF IF ReceiveMessage = 'Door open$R$N' THEN DelayTimer(IN := FALSE); Error := TRUE; error_index := AlarmSend(iStation:=iStation,MsgId := Cassette_ErrorNr.eDoorIsOpened,TRUE, eReportType.Error, sAvailableResponse.RetryCancel, FALSE); Step := 0; RETURN; END_IF DelayTimer(IN := TRUE, PT := T#3S); IF DelayTimer.Q THEN DelayTimer(IN := FALSE); Com.SendMessage := '?$R';; END_IF 20: DelayTimer(IN := FALSE); IF EndOfLot() THEN Step := 100; END_IF 100: bOutInitDone := TRUE; bInInit := FALSE; Init := TRUE; Step := 0; END_CASE]]> _Size) THEN Step := 20; END_IF ELSE Step := 100; END_CASE 20: IF _Size > 0 THEN LastSizeFound := _Size; iStationStatus.WaferInfo[0].Size := _Size; IF KeyenceCamera.Mapping(Size := _Size, Out := MAP) THEN Step := 30; END_IF ELSE Step := 100; END_IF 30: FOR i := 1 TO MaxNumberOfSubstratesPerTray DO CASE MAP[i] OF 0: AllWafer[i+TrayNumber*100].WaferStatus := noWafer; 1: AllWafer[i+TrayNumber*100].WaferStatus := WaferForProccess; AllWafer[i+TrayNumber*100].Size := _Size; ELSE AllWafer[i+TrayNumber*100].WaferStatus := WaferDefect; END_CASE END_FOR Step := 0; SCAN := TRUE; 100: FOR i := 1 TO MaxNumberOfSubstratesPerTray DO AllWafer[i+TrayNumber*100].WaferStatus := noWafer; END_FOR Step := 0; SCAN := TRUE; END_CASE]]>