Parcourir la source

update FIMS load后检查是否wafer移位

jiangjy il y a 1 mois
Parent
commit
13525e2b67

BIN
Furnace/FurnaceRT/Config/VIDs/Equipment_VIDs_20250612.xlsx


+ 38 - 8
Furnace/FurnaceRT/Equipments/FIMSs/FIMSLoadRoutine.cs

@@ -16,6 +16,7 @@ namespace FurnaceRT.Equipments.FIMSs
         {
             Load,
             Delay,
+            CheckWaferShifted,
             CheckLoadFinish,
         }
 
@@ -67,17 +68,13 @@ namespace FurnaceRT.Equipments.FIMSs
             }
 
 
-            if (_fimsModule.FIMSDevice.DoorOpenCloseStatus == Devices.DeviceStatus.Close && _fimsModule.IsWaferOnRobot)
-            {
-                _fimsModule.LoadFailAlarm.Set($"The wafer on {Module} has shifted");
-                return Result.FAIL;
-            }
+
 
             Notify($"{_fimsModule.Name} {Name} start");
             _fimsModule.FIMSDevice.IsLoadCompleted = false;
             _fimsModule.FIMSDevice.IsUnloadCompleted = false;
 
-         
+
             if (_isNeedN2Purge)
             {
                 _pmModule?.SetN2PurgeParameters();
@@ -100,6 +97,8 @@ namespace FurnaceRT.Equipments.FIMSs
 
                 Delay((int)RoutineStep.Delay, 3);
 
+                CheckWaferShifted((int)RoutineStep.CheckWaferShifted, _timeout);
+
                 CheckLoadFinish((int)RoutineStep.CheckLoadFinish, _timeout);
             }
             catch (RoutineBreakException)
@@ -108,12 +107,12 @@ namespace FurnaceRT.Equipments.FIMSs
             }
             catch (RoutineFaildException)
             {
-     
+
                 _fimsModule.Stop();
                 return Result.FAIL;
             }
 
-      
+
             _pmModule?.SetN2PurgeProcess(false);
             _fimsModule.FIMSDevice.IsLoadCompleted = true;
             _fimsModule.Stop();
@@ -157,6 +156,37 @@ namespace FurnaceRT.Equipments.FIMSs
                     throw (new RoutineBreakException());
             }
         }
+        private void CheckWaferShifted(int id, int timeout)
+        {
+            Tuple<bool, Result> ret = ExecuteAndWait(id, () =>
+            {
+                Notify($"Check {Module} Wafer Shifted");
+                return true;
+            }, () =>
+            {
+                if (_fimsModule.IsWaferOnRobot)
+                {
+                    _fimsModule.LoadFailAlarm.Set($"The wafer on {Module} has shifted");
+                    return false;
+                }
+                return true;
+            }, timeout * 1000);
+
+            if (ret.Item1)
+            {
+                if (ret.Item2 == Result.FAIL)
+                {
+                    throw (new RoutineFaildException());
+                }
+                else if (ret.Item2 == Result.TIMEOUT) //timeout
+                {
+                    _fimsModule.LoadTimeoutAlarm.Set($"can not complete in {timeout} seconds");
+                    throw (new RoutineFaildException());
+                }
+                else
+                    throw (new RoutineBreakException());
+            }
+        }
         private void CheckLoadFinish(int id, int timeout)
         {
             Tuple<bool, Result> ret = ExecuteAndWait(id, () =>

+ 2 - 2
Furnace/FurnaceRT/Equipments/FIMSs/FIMSUnloadRoutine.cs

@@ -65,7 +65,7 @@ namespace FurnaceRT.Equipments.FIMSs
                     return Result.FAIL;
                 }
             }
-                
+
             //if (_fimsModule.FIMSDevice.DoorOpenCloseStatus == Devices.DeviceStatus.Open && _fimsModule.IsWaferOnRobot)
             //{
             //    _fimsModule.UnloadFailAlarm.Set($"wafer robot inside {Module}");
@@ -80,7 +80,7 @@ namespace FurnaceRT.Equipments.FIMSs
             {
                 _timeout = (int)SC.GetValue<double>("PM1.N2Purge.FOUPOpenerStableWaitTime");
             }
-            if (_fimsModule.FIMSDevice.DoorOpenCloseStatus == Devices.DeviceStatus.Close && _fimsModule.IsWaferOnRobot)
+            if (_fimsModule.IsWaferOnRobot)
             {
                 _fimsModule.UnloadFailAlarm.Set($"The wafer on {Module} has shifted");
                 return Result.FAIL;