120 THEN RETURN; END_IF Center.Y := In[3]; Center.Y := Center.Y/1000; IF bCalibration THEN bCalibration := FALSE; _Step := 100; ELSE _Step := 10; END_IF 10: CASE CMD[FirstStation] OF StartCMD: CassetteNumber := iStationStatus.WaferInfo[0].CassetteNumber; NextProcess := iStationStatus.WaferInfo[0].FlowStepNumber +1; TargetEtcher := CASSETTE_PROCESS[CassetteNumber][iStationStatus.WaferInfo[0].Number][NextProcess].TargetStation; CASE TargetEtcher OF 20,21: CASSETTE_PROCESS[CassetteNumber][iStationStatus.WaferInfo[0].Number][NextProcess].Alternative[1] := TargetEtcher; CASSETTE_PROCESS[CassetteNumber][iStationStatus.WaferInfo[0].Number][NextProcess].Alternative[2] := TargetEtcher; RefPoint := Config.CalibrationPosition[TargetEtcher][iStationStatus.WaferInfo[0].Size][0]; ELSE RefPoint := Config.CalibrationPosition[FirstSpinner][iStationStatus.WaferInfo[0].Size][0]; END_CASE ELSE RefPoint := Config.CalibrationPosition[FirstSpinner][iStationStatus.WaferInfo[0].Size][0]; END_CASE _Step := 20; 20: FOR i := 0 TO 7 DO In[i] := UDINT_TO_DINT(TMX_5000.rInResult[i+7]); END_FOR Center.X := In[2]; Center.X := Center.X/1000; Center.Y := In[3]; Center.Y := Center.Y/1000; IF ABS(RefPoint.X - Center.X) > 0.001 THEN IF RefPoint.X < Center.X THEN YAxis.bInJogNegative := TRUE; YAxis.bInJogPositive := FALSE; YAxis.rInTargetVelocity := ABS(RefPoint.X - Center.X); ELSIF RefPoint.X > Center.X THEN YAxis.bInJogNegative := FALSE; YAxis.bInJogPositive := TRUE; YAxis.rInTargetVelocity := ABS(RefPoint.X - Center.X); ELSE YAxis.bInJogNegative := FALSE; YAxis.bInJogPositive := FALSE; END_IF END_IF IF ABS(RefPoint.Y - Center.Y) > 0.001 THEN IF RefPoint.Y < Center.Y THEN XAxis.bInJogNegative := TRUE; XAxis.bInJogPositive := FALSE; XAxis.rInTargetVelocity := ABS(RefPoint.Y - Center.Y); ELSIF RefPoint.Y > Center.Y THEN XAxis.bInJogNegative := FALSE; XAxis.bInJogPositive := TRUE; XAxis.rInTargetVelocity := ABS(RefPoint.Y - Center.Y); ELSE XAxis.bInJogNegative := FALSE; XAxis.bInJogPositive := FALSE; END_IF END_IF IF XAxis.rInTargetVelocity < 0.005 THEN XAxis.rInTargetVelocity := 0.005; END_IF IF YAxis.rInTargetVelocity < 0.005 THEN YAxis.rInTargetVelocity := 0.005; END_IF DelayTimer(IN := ABS(RefPoint.X - Center.X)<= 0.001 AND ABS(RefPoint.Y - Center.Y) <=0.001, PT := T#100MS); IF DelayTimer.Q THEN DelayTimer(IN := FALSE); YAxis.bInJogNegative := FALSE; YAxis.bInJogPositive := FALSE; XAxis.bInJogNegative := FALSE; XAxis.bInJogPositive := FALSE; XAxis.rInTargetVelocity := Config.X_DefaultVelocity; YAxis.rInTargetVelocity := Config.Y_DefaultVelocity; _Step := 30; END_IF 30: _Step := 100; 40: FOR i := 0 TO 7 DO In[i] := UDINT_TO_DINT(TMX_5000.rInResult[i+7]); END_FOR Center.X := In[2]; Center.X := Center.X/1000; Center.Y := In[3]; Center.Y := Center.Y/1000; 100: _Step := 0; Start := TRUE; END_CASE ]]>