|
@@ -37,10 +37,12 @@ namespace Venus_RT.Modules.TM
|
|
|
{
|
|
|
WaitPMReady,
|
|
|
PreRotation,
|
|
|
+ OpenSlitDoor,
|
|
|
PickPrepare,
|
|
|
Picking,
|
|
|
PlacePrepare,
|
|
|
Placing,
|
|
|
+ CloseSlitDoor,
|
|
|
NotifyDone,
|
|
|
}
|
|
|
private readonly JetTM _JetTM;
|
|
@@ -106,7 +108,7 @@ namespace Venus_RT.Modules.TM
|
|
|
var wafer = WaferManager.Instance.GetWafer(_targetModule, _targetSlot);
|
|
|
if (wafer.ChuckState == EnumWaferChuckStatus.Chucked)
|
|
|
{
|
|
|
- LOG.Write(eEvent.ERR_TM, Module, $"Cannot pick the wafer in {_targetModule } as the wafer is chucked");
|
|
|
+ LOG.Write(eEvent.ERR_TM, Module, $"Cannot pick the wafer in {_targetModule} as the wafer is chucked");
|
|
|
return RState.Failed;
|
|
|
}
|
|
|
|
|
@@ -140,32 +142,34 @@ namespace Venus_RT.Modules.TM
|
|
|
case JetChamber.Venus:
|
|
|
case JetChamber.Kepler2300:
|
|
|
|
|
|
- Runner.Wait(SwapStep.WaitPMReady, () => _pmModule.IsIdle, _delay_60s)
|
|
|
- .RunIf(SwapStep.PreRotation, _JetTM.PreRotateModules.ContainsKey(_targetModule), RotateArm, WaitRotateDone)
|
|
|
- .Run(SwapStep.PickPrepare, PickPrepare, IsModuleReadyForPick)
|
|
|
- .Run(SwapStep.PickExtend, PickExtend, WaitRobotExtendDone)
|
|
|
- .Run(SwapStep.DropDownWafer, NotifyPMPickWafer, WaitPMWaferDropDown)
|
|
|
- .Delay(SwapStep.PickDelay, _pickDelayTime)
|
|
|
- .Run(SwapStep.PickRetract, PickRetract, WaitRobotRetractDone)
|
|
|
- .Run(SwapStep.PlacePrepare, PlacePrepare, IsModuleReadyForPlace)
|
|
|
- .Run(SwapStep.PlaceExtend, PlaceExtend, WaitRobotExtendDone)
|
|
|
- .Run(SwapStep.LiftUpWafer, NotifyLiftUpWafer, WaitPMWaferLiftUp)
|
|
|
- .Delay(SwapStep.PlaceDelay, _placeDelayTime)
|
|
|
- .Run(SwapStep.PlaceRetract, PlaceRetract, WaitRobotRetractDone)
|
|
|
- .End(SwapStep.NotifyDone, NotifyPMDone, _delay_50ms);
|
|
|
- break;
|
|
|
+ Runner.Wait(SwapStep.WaitPMReady, () => _pmModule.IsIdle, _delay_60s)
|
|
|
+ .RunIf(SwapStep.PreRotation, _JetTM.PreRotateModules.ContainsKey(_targetModule), RotateArm, WaitRotateDone)
|
|
|
+ .Run(SwapStep.PickPrepare, PickPrepare, IsModuleReadyForPick)
|
|
|
+ .Run(SwapStep.PickExtend, PickExtend, WaitRobotExtendDone)
|
|
|
+ .Run(SwapStep.DropDownWafer, NotifyPMPickWafer, WaitPMWaferDropDown)
|
|
|
+ .Delay(SwapStep.PickDelay, _pickDelayTime)
|
|
|
+ .Run(SwapStep.PickRetract, PickRetract, WaitRobotRetractDone)
|
|
|
+ .Run(SwapStep.PlacePrepare, PlacePrepare, IsModuleReadyForPlace)
|
|
|
+ .Run(SwapStep.PlaceExtend, PlaceExtend, WaitRobotExtendDone)
|
|
|
+ .Run(SwapStep.LiftUpWafer, NotifyLiftUpWafer, WaitPMWaferLiftUp)
|
|
|
+ .Delay(SwapStep.PlaceDelay, _placeDelayTime)
|
|
|
+ .Run(SwapStep.PlaceRetract, PlaceRetract, WaitRobotRetractDone)
|
|
|
+ .End(SwapStep.NotifyDone, NotifyPMDone, _delay_50ms);
|
|
|
+ break;
|
|
|
|
|
|
case JetChamber.Kepler2200A:
|
|
|
case JetChamber.Kepler2200B:
|
|
|
|
|
|
- Runner.Wait(SwapStep.WaitPMReady, () => _pmModule.IsIdle, _delay_60s)
|
|
|
- .RunIf(SwapStep.PreRotation, _JetTM.PreRotateModules.ContainsKey(_targetModule), RotateArm, WaitRotateDone)
|
|
|
- .Run(SwapStep.PickPrepare, PickPrepare, IsModuleReadyForPick)
|
|
|
- .Run(SwapWithHeaterStep.Picking, Picking, WaitPickDone)
|
|
|
- .Run(SwapWithHeaterStep.PlacePrepare, PlacePrepare, IsModuleReadyForPlace)
|
|
|
- .Run(SwapWithHeaterStep.Placing, Placing, WaitPlaceDone)
|
|
|
- .End(SwapStep.NotifyDone, NotifyPMDone, _delay_50ms);
|
|
|
- break;
|
|
|
+ Runner.Wait(SwapWithHeaterStep.WaitPMReady, () => _pmModule.IsIdle, _delay_60s)
|
|
|
+ .RunIf(SwapWithHeaterStep.PreRotation, _JetTM.PreRotateModules.ContainsKey(_targetModule), RotateArm, WaitRotateDone)
|
|
|
+ .Run(SwapWithHeaterStep.OpenSlitDoor, OpenPMSlitDoor, OpenPMSlitDoorIsOK)
|
|
|
+ .Run(SwapWithHeaterStep.PickPrepare, PickPrepare, IsModuleReadyForPick)
|
|
|
+ .Run(SwapWithHeaterStep.Picking, Picking, WaitPickDone)
|
|
|
+ .Run(SwapWithHeaterStep.PlacePrepare, PlacePrepare, IsModuleReadyForPlace)
|
|
|
+ .Run(SwapWithHeaterStep.Placing, Placing, WaitPlaceDone)
|
|
|
+ .Run(SwapWithHeaterStep.CloseSlitDoor, ClosePMSlitDoor, ClosePMSlitDoorIsOK)
|
|
|
+ .End(SwapStep.NotifyDone, NotifyPMDone, _delay_50ms);
|
|
|
+ break;
|
|
|
}
|
|
|
return Runner.Status;
|
|
|
}
|
|
@@ -175,10 +179,27 @@ namespace Venus_RT.Modules.TM
|
|
|
_pmModule.PostMsg(PMEntity.MSG.PreparePick);
|
|
|
return true;
|
|
|
}
|
|
|
-
|
|
|
+ private bool OpenPMSlitDoor()
|
|
|
+ {
|
|
|
+ return _JetTM.TurnMFSlitDoor(_targetModule, true, out _);
|
|
|
+ }
|
|
|
+ private bool OpenPMSlitDoorIsOK()
|
|
|
+ {
|
|
|
+ return _JetTM.IsPMSlitdoorOpened(_targetModule);
|
|
|
+ }
|
|
|
+ private bool ClosePMSlitDoor()
|
|
|
+ {
|
|
|
+ return _JetTM.TurnMFSlitDoor(_targetModule, false, out _);
|
|
|
+ }
|
|
|
+ private bool ClosePMSlitDoorIsOK()
|
|
|
+ {
|
|
|
+ return _JetTM.IsPMSlitdoorClosed(_targetModule);
|
|
|
+ }
|
|
|
private bool IsModuleReadyForPick()
|
|
|
{
|
|
|
- return _pmModule.Status == PMEntity.PMStatus.Ready_For_Pick && _pmModule.IsSlitDoorOpen;
|
|
|
+ //return _pmModule.Status == PMEntity.PMStatus.Ready_For_Pick && _pmModule.IsSlitDoorOpen;
|
|
|
+ return _pmModule.Status == PMEntity.PMStatus.Ready_For_Pick;
|
|
|
+
|
|
|
}
|
|
|
|
|
|
private bool PickExtend()
|
|
@@ -198,7 +219,9 @@ namespace Venus_RT.Modules.TM
|
|
|
|
|
|
private bool IsModuleReadyForPlace()
|
|
|
{
|
|
|
- return _pmModule.Status == PMEntity.PMStatus.Ready_For_Place && _pmModule.IsSlitDoorOpen;
|
|
|
+ //return _pmModule.Status == PMEntity.PMStatus.Ready_For_Place && _pmModule.IsSlitDoorOpen;
|
|
|
+ return _pmModule.Status == PMEntity.PMStatus.Ready_For_Place;
|
|
|
+
|
|
|
}
|
|
|
|
|
|
private bool PlaceExtend()
|
|
@@ -239,6 +262,9 @@ namespace Venus_RT.Modules.TM
|
|
|
}
|
|
|
else if (_robot.Status == RState.End)
|
|
|
{
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
//WaferManager.Instance.WaferMoved(ModuleName.TM, (int)_hand, _targetModule, _targetSlot);
|
|
|
WaferManager.Instance.WaferMoved(_targetModule, _targetSlot, ModuleName.TMRobot, (int)_pickHand);
|
|
|
|
|
@@ -337,7 +363,7 @@ namespace Venus_RT.Modules.TM
|
|
|
}
|
|
|
private bool WaitPMWaferLiftUp()
|
|
|
{
|
|
|
- if(_pmModule.Status == PMEntity.PMStatus.Exchange_Ready)
|
|
|
+ if (_pmModule.Status == PMEntity.PMStatus.Exchange_Ready)
|
|
|
{
|
|
|
WaferManager.Instance.WaferMoved(ModuleName.TMRobot, (int)_placeHand, _targetModule, _targetSlot);
|
|
|
return true;
|