1 THEN iChuckSize := -1; END_IF]]> -1); IF NOT TrayJob.Start THEN NozzlesChecked := FALSE; END_IF iMediaArray[eSpinnerMedienNamen.NozzleCheck].Invisible := FALSE; IF NozzleCheckIndex = 0 THEN iMediaArray[eSpinnerMedienNamen.NozzleCheck].Invisible := TRUE; END_IF IF NOT iStationStatus.Ist.InitDone THEN iMediaArray[eSpinnerMedienNamen.NozzleCheck].Invisible := TRUE; END_IF //IF KUKA.bInProcessPositionStart OR // KUKA.bOutInProcessPosition THEN // iMediaArray[eSpinnerMedienNamen.NozzleCheck].Invisible := TRUE; //END_IF IF bNozzleCheck THEN Nozzle := SETBIT32(Nozzle, NozzleCheckIndex); // NozzlesCheck(Nozzle); END_IF IF bCalibration THEN SubstrateCalibration(); END_IF ]]> 6 THEN NozzlesCheckCounter := 0; Step := 200; ELSE IF TargetNozzle[NozzlesCheckCounter] THEN Step := 50; END_IF END_IF 50: IF NozzlesCheck_MoveToSafePosition(NozzlesCheckCounter) THEN Step := 60; END_IF 60: IF NozzlesCheck_MoveToNozzlePosition(NozzlesCheckCounter) THEN Step := 70; END_IF 70: LeviPump[2].bOutRecirculation := TRUE; LeviPump[8].bOutRecirculation := TRUE; LeviPump[9].bOutRecirculation := TRUE; CASE NozzlesCheckCounter OF 1: IF GETBIT32(TargetNozzleCheck, ANY_TO_SINT(eSpinnerMedienNamen.PuddleNozzleSF3)) THEN IO.bOutPuddleNozzleSF3 := TRUE; IO.bOutSwitchSF3_FilmEtchings := TRUE; ELSIF GETBIT32(TargetNozzleCheck, ANY_TO_SINT(eSpinnerMedienNamen.PuddleNozzleFilmEtchings)) THEN IO.bOutPuddleNozzleFilmEtchings := TRUE; IO.bOutSwitchSF3_FilmEtchings := FALSE; END_IF 2: IO.bOutPuddleNozzleSF1 := TRUE; 3: IF GETBIT32(TargetNozzleCheck, ANY_TO_SINT(eSpinnerMedienNamen.PuddleNozzleC2H4O2)) THEN IO.bOUTPuddleNozzleC2H4O2 := TRUE; IO.bOutSwitchC2H4O2_DIW := TRUE; ELSIF GETBIT32(TargetNozzleCheck, ANY_TO_SINT(eSpinnerMedienNamen.PuddleNozzleDIWHot)) THEN IO.bOutPuddleNozzleDIWHot := TRUE; IO.bOutSwitchC2H4O2_DIW := FALSE; END_IF 4: IO.bOutPuddleNozzleSEF2 := TRUE; 5: IO.bOutPuddleNozzleHF := TRUE; 6: IF GETBIT32(TargetNozzleCheck, ANY_TO_SINT(eSpinnerMedienNamen.PuddleNozzleSF2)) THEN IO.bOutPuddleNozzleSF2 := TRUE; IO.bOutSwitchSF1_SEF1 := TRUE; ELSIF GETBIT32(TargetNozzleCheck, ANY_TO_SINT(eSpinnerMedienNamen.PuddleNozzleSEF1)) THEN IO.bOutPuddleNozzleSEF1 := TRUE; IO.bOutSwitchSF1_SEF1 := FALSE; END_IF END_CASE Step := Step +1; 71: FlowOk := iMediaArray[NozzlesCheckCounter].FlowOk; IF iMediaArray[NozzlesCheckCounter].Underrange THEN fbProblemTimer.MsgID := iMediaArray[NozzlesCheckCounter].ErrorIndex_Underrange; ELSIF iMediaArray[NozzlesCheckCounter].Overrange THEN fbProblemTimer.MsgID := iMediaArray[NozzlesCheckCounter].ErrorIndex_Overrange; END_IF fbProblemTimer.AvailableResponse := sAvailableResponse.AbortRetryIgnore; fbProblemTimer.StepRetry := 70; fbProblemTimer.StepIgnore := 150; fbProblemTimer.Timeout := T#5S; IF FlowOk THEN fbProblemTimer.Timeout := T#0S; Step := 80; //Test //Step := 150; END_IF 80: ReferencePosition := Config.Robot.NozzleCalibration[NozzlesCheckCounter].ReferencePosition; IF IO.StrahlSensor.ChangeParameter(NozzlesCheckCounter) THEN Step := Step +1; END_IF 81: //KUKA.rOutOverride := 1; IF ABS(ReferencePosition.Y-IO.StrahlSensor.rInPositionZ) > 0.02 THEN Step := 90; ELSIF ABS(ReferencePosition.X-IO.StrahlSensor.rInPositionX) > 0.02 THEN Step := 100; ELSE //rNozzleCalibration[NozzlesCheckCounter].X := KUKA.rOutCCord - KUKA.rInCCord; //rNozzleCalibration[NozzlesCheckCounter].Y := KUKA.rOutACord - KUKA.rInACord; Step := 150; END_IF 90: //KUKA.bOut_Jog_A_N := FALSE; //KUKA.bOut_Jog_A_P := FALSE; IF ABS(ReferencePosition.Y-IO.StrahlSensor.rInPositionZ) > 0.02 THEN //IF KUKA.bIn_ROB_STOPPED THEN // Step := Step +1; //END_IF ELSE Step := 80; END_IF 91: //KUKA.bOut_Jog_A_P := ReferencePosition.Y > IO.StrahlSensor.rInPositionZ; //KUKA.bOut_Jog_A_N := NOT KUKA.bOut_Jog_A_P; Step := Step +1; 92: IF ABS(ReferencePosition.Y - IO.StrahlSensor.rInPositionZ) < 0.02 THEN Step := 90; END_IF (*IF KUKA.bOut_Jog_A_P THEN IF ReferencePosition.Y < IO.StrahlSensor.rInPositionZ THEN Step := 90; END_IF END_IF IF KUKA.bOut_Jog_A_N THEN IF ReferencePosition.Y > IO.StrahlSensor.rInPositionZ THEN Step := 90; END_IF END_IF*) 100: //KUKA.bOut_Jog_C_N := FALSE; //KUKA.bOut_Jog_C_P := FALSE; IF ABS(ReferencePosition.X-IO.StrahlSensor.rInPositionX) > 0.02 THEN //IF KUKA.bIn_ROB_STOPPED THEN // Step := Step +1; //END_IF ELSE Step := 80; END_IF 101: //KUKA.bOut_Jog_C_P := ReferencePosition.X < IO.StrahlSensor.rInPositionX; //KUKA.bOut_Jog_C_N := NOT KUKA.bOut_Jog_C_P; Step := Step +1; 102: IF ABS(ReferencePosition.X - IO.StrahlSensor.rInPositionX) < 0.02 THEN Step := 100; END_IF (*IF KUKA.bOut_Jog_C_P THEN IF ReferencePosition.X > IO.StrahlSensor.rInPositionX THEN Step := 100; END_IF END_IF IF KUKA.bOut_Jog_C_N THEN IF ReferencePosition.X < IO.StrahlSensor.rInPositionX THEN Step := 100; END_IF END_IF*) 150: IO.bOutPuddleNozzleHF := FALSE; IO.bOutPuddleNozzleSF3 := FALSE; IO.bOutSwitchSF3_FilmEtchings := FALSE; IO.bOutPuddleNozzleSF1 := FALSE; IO.bOUTPuddleNozzleC2H4O2 := FALSE; IO.bOutSwitchC2H4O2_DIW := FALSE; IO.bOutPuddleNozzleSEF2 := FALSE; IO.bOutPuddleNozzleSEF1 := FALSE; //KUKA.bOut_Jog_A_N := FALSE; //KUKA.bOut_Jog_A_P := FALSE; //KUKA.bOut_Jog_C_N := FALSE; //KUKA.bOut_Jog_C_P := FALSE; IF NozzlesCheck_MoveToSafePosition(NozzlesCheckCounter) THEN Step := 40; END_IF 200: IO.StrahlSensor.bOutSensorOn := FALSE; //IF KUKA.ProcessProgramStop() THEN // Step := 210; //END_IF 210: NozzlesChecked := TRUE; NozzlesCheck := TRUE; Step := 0; bNozzleCheck := FALSE; END_CASE ]]> RecipeCurrentStep THEN Step := 10; RETURN; END_IF IF iStationStatus.Soll.RecipeExit THEN Step := 0; iStationStatus.Ist.Recipe := FALSE; iStationStatus.Soll.RecipeExit := FALSE; VisuElems.CURRENTVISU := iStationStatus.StationVisu.RecipeExit; END_IF END_CASE ]]> Recipe.STEP_COUNT THEN (*Rezeptende*) Step := Step +1; ELSE Step := StepRecipeStart; END_IF END_IF ELSE (* dieser step ist nicht Ende einer Schleife - loop nicht behandeln*) CurrentStep :=CurrentStep +1; IF CurrentStep > Recipe.STEP_COUNT THEN (*Rezeptende*) Step := Step +1; ELSE Step := StepRecipeStart; END_IF END_IF ]]> MaxSetSpeed(Recipe.DATA[CurrentStep].Chuck.Speed, iStation) OR // Chuck.UsedTargetAcceleration <> MaxSetAcceleration(Recipe.DATA[CurrentStep].Chuck.Acceleration, iStation) THEN // Chuck.StartVelocity := TRUE; //END_IF CASE Recipe.DATA[CurrentStep].StepEndCond OF EndbyChuckSpeed: IF Chuck.rOutCurrentVelocityDINT = Recipe.DATA[CurrentStep].Chuck.Speed THEN StepEndCondition := TRUE; END_IF EndbyStepTime: StepTimer(IN := TRUE, PT := LREAL_TO_TIME(Recipe.DATA[CurrentStep].StepTime*1000)); IF StepTimer.Q THEN StepEndCondition := TRUE; StepTimer(IN := FALSE); END_IF EndbyBSR: IF BSRAxis.bOutReady THEN StepEndCondition := TRUE; END_IF EndbyRobot: IF NOT Robot.bInStartPos THEN StepEndCondition := TRUE; END_IF // EndbyDChuck: // IF DoubleRotationChuck.bOutReady THEN // Step := StepEnd; // END_IF (* EndbyArm1: IF Arm[1].bOutReady AND ABS (Arm[1].ActualPosition - Arm[1].TargetPosition) < 0.2 THEN Step := StepEnd; END_IF // EndbyArm2:*) // IF NOT Signal.Arm[2].StartPosition AND ABS (Signal.Arm[2].ActualPosition - Signal.Arm[2].TargetPosition) < 0.2 THEN // Step := StepEnd; // END_IF // EndbySyringe: // IF Syringe[1].StartDispense OR Syringe[2].StartDispense THEN // RETURN; // END_IF // Step := StepEnd; // EndbyCover: // IF Cover.CMD = eCoverCMD.noCMD THEN // Step := StepEnd; // END_IF END_CASE]]>