Преглед на файлове

FTR routinue action 后多次检查FTR是否Ready

jiangjy преди 1 седмица
родител
ревизия
d6a4fd9d0a

+ 42 - 0
Furnace/FurnaceRT/Equipments/CarrierRobots/CarrierLoad.cs

@@ -35,6 +35,7 @@ namespace FurnaceRT.Equipments.CarrierRobots
             Goto,
             Delay,
             CheckGotoFinish,
+            CheckRobotIsReady,
         }
 
         private CarrierRobotModule _cassetteRobotModule;
@@ -289,6 +290,7 @@ namespace FurnaceRT.Equipments.CarrierRobots
 
                 CheckCassetteInfoByRobotSensor((int)RoutineStep.CheckCassetteInfoByRobotSensor, _blade, true);
 
+                CheckRobotIsReady((int)RoutineStep.CheckRobotIsReady, _timeout);
 
                 if (SC.ContainsItem("System.AddRobotDelay") && SC.ContainsItem("System.RobotDelayTime") && SC.GetValue<bool>("System.AddRobotDelay"))
                     Delay((int)RoutineStep.Delay, float.Parse(SC.GetStringValue("System.RobotDelayTime")));
@@ -310,6 +312,46 @@ namespace FurnaceRT.Equipments.CarrierRobots
             Notify("Finished");
             return Result.DONE;
         }
+
+        private void CheckRobotIsReady(int id, int timeout)
+        {
+            Tuple<bool, Result> ret = ExecuteAndWait(id, () =>
+            {
+                return true;
+            }, () =>
+            {
+                int count = 0;
+                while (count < 3)
+                {
+                    if (_cassetteRobotModule.CarrierRobotDevice.IsReady() && !_cassetteRobotModule.CarrierRobotDevice.IsError)
+                        count++;
+                }
+
+                if (count == 3)
+                    return true;
+
+                return false;
+            }, timeout * 1000);
+
+            if (ret.Item1)
+            {
+                if (ret.Item2 == Result.FAIL)
+                {
+
+                    _cassetteRobotModule.PickCassetteFailAlarm.Set($"pick CheckRobotIsReady failed for robot isn't Ready");
+                    throw (new RoutineFaildException());
+                }
+                else if (ret.Item2 == Result.TIMEOUT) //timeout
+                {
+
+                    _cassetteRobotModule.PickCassetteFailAlarm.Set($"pick CheckRobotIsReady failed for robot isn't Ready");
+                    throw (new RoutineFaildException());
+                }
+                else
+                    throw (new RoutineBreakException());
+            }
+        }
+
         private void SetRobotActionCommand(int id, ModuleName source, int timeout)
         {
             _routineStep = (RoutineStep)Enum.Parse(typeof(RoutineStep), id.ToString());

+ 37 - 0
Furnace/FurnaceRT/Equipments/CarrierRobots/CarrierRobotHome.cs

@@ -26,6 +26,7 @@ namespace FurnaceRT.Equipments.CarrierRobots
             RobotRequestCassettePresent,
             UpdateWaferInfoByRobotSensor,
             Delay,
+            CheckRobotIsReady,
         }
 
         private CarrierRobotModule _cassetteRobotModule;
@@ -85,6 +86,7 @@ namespace FurnaceRT.Equipments.CarrierRobots
 
                 UpdateCassetteInfoByRobotSensor((int)RoutineStep.UpdateWaferInfoByRobotSensor);
 
+                CheckRobotIsReady((int)RoutineStep.CheckRobotIsReady, _timeout);
 
 
                 if (SC.ContainsItem("System.AddRobotDelay") && SC.ContainsItem("System.RobotDelayTime") && SC.GetValue<bool>("System.AddRobotDelay"))
@@ -103,6 +105,41 @@ namespace FurnaceRT.Equipments.CarrierRobots
             Notify("Finished");
             return Result.DONE;
         }
+
+        private void CheckRobotIsReady(int id, int timeout)
+        {
+            Tuple<bool, Result> ret = ExecuteAndWait(id, () =>
+            {
+                return true;
+            }, () =>
+            {
+                int count = 0;
+                while (count < 3)
+                {
+                    if (_cassetteRobotModule.CarrierRobotDevice.IsReady() && !_cassetteRobotModule.CarrierRobotDevice.IsError)
+                        count++;
+                }
+
+                if (count == 3)
+                    return true;
+
+                return false;
+            }, timeout * 1000);
+
+            if (ret.Item1)
+            {
+                if (ret.Item2 == Result.FAIL)
+                {
+                    throw (new RoutineFaildException());
+                }
+                else if (ret.Item2 == Result.TIMEOUT) //timeout
+                {
+                    throw (new RoutineFaildException());
+                }
+                else
+                    throw (new RoutineBreakException());
+            }
+        }
         private void RobotReset(int id, int timeout)
         {
             Tuple<bool, Result> ret = ExecuteAndWait(id, () =>

+ 41 - 0
Furnace/FurnaceRT/Equipments/CarrierRobots/CarrierRobotPick.cs

@@ -15,6 +15,7 @@ using FurnaceRT.Equipments.Stockers;
 using FurnaceRT.Equipments.Systems;
 using FurnaceRT.Equipments.WaferRobots;
 using static FurnaceRT.Equipments.FIMSs.FIMSModule;
+using DocumentFormat.OpenXml.Bibliography;
 
 namespace FurnaceRT.Equipments.CarrierRobots
 {
@@ -37,6 +38,7 @@ namespace FurnaceRT.Equipments.CarrierRobots
             CheckBeforePick,
             CheckGotoFinish,
             SetRobotActionCommand,
+            CheckRobotIsReady,
         }
 
         private CarrierRobotModule _cassetteRobotModule;
@@ -278,6 +280,7 @@ namespace FurnaceRT.Equipments.CarrierRobots
                 //RobotRequestCassettePresent((int)RoutineStep.RobotRequestCassettePresent, _blade, _timeout);
 
                 CheckCassetteInfoByRobotSensor((int)RoutineStep.CheckCassetteInfoByRobotSensor, _blade, true);
+                CheckRobotIsReady((int)RoutineStep.CheckRobotIsReady, _timeout);
 
 
                 if (SC.ContainsItem("System.AddRobotDelay") && SC.ContainsItem("System.RobotDelayTime") && SC.GetValue<bool>("System.AddRobotDelay"))
@@ -704,6 +707,44 @@ namespace FurnaceRT.Equipments.CarrierRobots
 
             _needStartCheck = false;
         }
+        private void CheckRobotIsReady(int id, int timeout)
+        {
+            Tuple<bool, Result> ret = ExecuteAndWait(id, () =>
+            {
+                return true;
+            }, () =>
+            {
+                int count = 0;
+                while (count < 3)
+                {
+                    if (_cassetteRobotModule.CarrierRobotDevice.IsReady() && !_cassetteRobotModule.CarrierRobotDevice.IsError)
+                        count++;
+                }
+
+                if (count == 3)
+                    return true;
+
+                return false;
+            }, timeout * 1000);
+
+            if (ret.Item1)
+            {
+                if (ret.Item2 == Result.FAIL)
+                {
+
+                    _cassetteRobotModule.PickCassetteFailAlarm.Set($"pick CheckRobotIsReady failed for robot isn't Ready");
+                    throw (new RoutineFaildException());
+                }
+                else if (ret.Item2 == Result.TIMEOUT) //timeout
+                {
+
+                    _cassetteRobotModule.PickCassetteFailAlarm.Set($"pick CheckRobotIsReady failed for robot isn't Ready");
+                    throw (new RoutineFaildException());
+                }
+                else
+                    throw (new RoutineBreakException());
+            }
+        }
 
         private void Goto(int id, ModuleName target, int slot, Hand hand, bool isPickReady, int timeout)
         {

+ 35 - 0
Furnace/FurnaceRT/Equipments/CarrierRobots/CarrierRobotPlace.cs

@@ -38,6 +38,7 @@ namespace FurnaceRT.Equipments.CarrierRobots
             CheckBeforePlace,
             CheckGotoFinish,
             SetRobotActionCommand,
+            CheckRobotIsReady,
         }
 
         private CarrierRobotModule _cassetteRobotModule;
@@ -277,6 +278,7 @@ namespace FurnaceRT.Equipments.CarrierRobots
 
                 CheckCassetteInfoByRobotSensor((int)RoutineStep.CheckCassetteInfoByRobotSensor, _blade, false);
 
+                CheckRobotIsReady((int)RoutineStep.CheckRobotIsReady, _timeout);
 
                 if (SC.ContainsItem("System.AddRobotDelay") && SC.ContainsItem("System.RobotDelayTime") && SC.GetValue<bool>("System.AddRobotDelay"))
                     Delay((int)RoutineStep.Delay, float.Parse(SC.GetStringValue("System.RobotDelayTime")));
@@ -299,7 +301,40 @@ namespace FurnaceRT.Equipments.CarrierRobots
             return Result.DONE;
         }
 
+        private void CheckRobotIsReady(int id, int timeout)
+        {
+            Tuple<bool, Result> ret = ExecuteAndWait(id, () =>
+            {
+                return true;
+            }, () =>
+            {
+                int count = 0;
+                while (count < 3)
+                {
+                    if (_cassetteRobotModule.CarrierRobotDevice.IsReady() && !_cassetteRobotModule.CarrierRobotDevice.IsError)
+                        count++;
+                }
+
+                if (count == 3)
+                    return true;
 
+                return false;
+            }, timeout * 1000);
+
+            if (ret.Item1)
+            {
+                if (ret.Item2 == Result.FAIL)
+                {
+                    throw (new RoutineFaildException());
+                }
+                else if (ret.Item2 == Result.TIMEOUT) //timeout
+                {
+                    throw (new RoutineFaildException());
+                }
+                else
+                    throw (new RoutineBreakException());
+            }
+        }
         private void PlaceEndInfo()
         {
             (Singleton<EquipmentManager>.Instance.Modules[_destination] as ITransferTarget)?.NoteTransferStop(ModuleHelper.Converter(_cassetteRobotModule.Module), _blade, _destinationSlot, EnumTransferType.Place);

+ 37 - 0
Furnace/FurnaceRT/Equipments/CarrierRobots/CarrierUnload.cs

@@ -38,6 +38,7 @@ namespace FurnaceRT.Equipments.CarrierRobots
             Goto,
             CheckGotoFinish,
             Delay,
+            CheckRobotIsReady,
         }
 
         private CarrierRobotModule _cassetteRobotModule;
@@ -257,6 +258,8 @@ namespace FurnaceRT.Equipments.CarrierRobots
 
                 CheckCassetteInfoByRobotSensor((int)RoutineStep.CheckCassetteInfoByRobotSensor, _blade, false);
 
+                CheckRobotIsReady((int)RoutineStep.CheckRobotIsReady, _timeout);
+
 
                 if (SC.ContainsItem("System.AddRobotDelay") && SC.ContainsItem("System.RobotDelayTime") && SC.GetValue<bool>("System.AddRobotDelay"))
                     Delay((int)RoutineStep.Delay, float.Parse(SC.GetStringValue("System.RobotDelayTime")));
@@ -281,6 +284,40 @@ namespace FurnaceRT.Equipments.CarrierRobots
             Notify("Finished");
             return Result.DONE;
         }
+        private void CheckRobotIsReady(int id, int timeout)
+        {
+            Tuple<bool, Result> ret = ExecuteAndWait(id, () =>
+            {
+                return true;
+            }, () =>
+            {
+                int count = 0;
+                while (count < 3)
+                {
+                    if (_cassetteRobotModule.CarrierRobotDevice.IsReady() && !_cassetteRobotModule.CarrierRobotDevice.IsError)
+                        count++;
+                }
+
+                if (count == 3)
+                    return true;
+
+                return false;
+            }, timeout * 1000);
+
+            if (ret.Item1)
+            {
+                if (ret.Item2 == Result.FAIL)
+                {
+                    throw (new RoutineFaildException());
+                }
+                else if (ret.Item2 == Result.TIMEOUT) //timeout
+                {
+                    throw (new RoutineFaildException());
+                }
+                else
+                    throw (new RoutineBreakException());
+            }
+        }
         private void SetRobotActionCommand(int id, ModuleName source, int timeout)
         {
             _routineStep = (RoutineStep)Enum.Parse(typeof(RoutineStep), id.ToString());