|
@@ -15,6 +15,7 @@ using FurnaceRT.Equipments.Stockers;
|
|
|
using FurnaceRT.Equipments.Systems;
|
|
using FurnaceRT.Equipments.Systems;
|
|
|
using FurnaceRT.Equipments.WaferRobots;
|
|
using FurnaceRT.Equipments.WaferRobots;
|
|
|
using static FurnaceRT.Equipments.FIMSs.FIMSModule;
|
|
using static FurnaceRT.Equipments.FIMSs.FIMSModule;
|
|
|
|
|
+using DocumentFormat.OpenXml.Bibliography;
|
|
|
|
|
|
|
|
namespace FurnaceRT.Equipments.CarrierRobots
|
|
namespace FurnaceRT.Equipments.CarrierRobots
|
|
|
{
|
|
{
|
|
@@ -37,6 +38,7 @@ namespace FurnaceRT.Equipments.CarrierRobots
|
|
|
CheckBeforePick,
|
|
CheckBeforePick,
|
|
|
CheckGotoFinish,
|
|
CheckGotoFinish,
|
|
|
SetRobotActionCommand,
|
|
SetRobotActionCommand,
|
|
|
|
|
+ CheckRobotIsReady,
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
private CarrierRobotModule _cassetteRobotModule;
|
|
private CarrierRobotModule _cassetteRobotModule;
|
|
@@ -278,6 +280,7 @@ namespace FurnaceRT.Equipments.CarrierRobots
|
|
|
//RobotRequestCassettePresent((int)RoutineStep.RobotRequestCassettePresent, _blade, _timeout);
|
|
//RobotRequestCassettePresent((int)RoutineStep.RobotRequestCassettePresent, _blade, _timeout);
|
|
|
|
|
|
|
|
CheckCassetteInfoByRobotSensor((int)RoutineStep.CheckCassetteInfoByRobotSensor, _blade, true);
|
|
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"))
|
|
if (SC.ContainsItem("System.AddRobotDelay") && SC.ContainsItem("System.RobotDelayTime") && SC.GetValue<bool>("System.AddRobotDelay"))
|
|
@@ -704,6 +707,44 @@ namespace FurnaceRT.Equipments.CarrierRobots
|
|
|
|
|
|
|
|
_needStartCheck = false;
|
|
_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)
|
|
private void Goto(int id, ModuleName target, int slot, Hand hand, bool isPickReady, int timeout)
|
|
|
{
|
|
{
|