|
@@ -47,6 +47,8 @@ namespace Venus_RT.Modules
|
|
|
Offline,
|
|
|
Pump,
|
|
|
Vent,
|
|
|
+ AutoPump,
|
|
|
+ AutoVent,
|
|
|
Purge,
|
|
|
CyclePurge,
|
|
|
LeakCheck,
|
|
@@ -93,6 +95,7 @@ namespace Venus_RT.Modules
|
|
|
private readonly MFVentRoutine _ventingRoutine;
|
|
|
private readonly MFLeakCheckRoutine _leakCheckRoutine;
|
|
|
private readonly MFPurgeRoutine _purgeRoutine;
|
|
|
+ private readonly int _slotNumber = 4;
|
|
|
public LLEntity(ModuleName module)
|
|
|
{
|
|
|
Module = module;
|
|
@@ -105,8 +108,8 @@ namespace Venus_RT.Modules
|
|
|
_purgeRoutine = new MFPurgeRoutine(_JetTM, Module);
|
|
|
|
|
|
|
|
|
- var soltCount= SC.GetValue<int>($"{module.ToString()}.SlotNumber");
|
|
|
- WaferManager.Instance.SubscribeLocation(Module, soltCount);
|
|
|
+ var _slotNumber = SC.GetValue<int>($"{module.ToString()}.SlotNumber");
|
|
|
+ WaferManager.Instance.SubscribeLocation(Module, _slotNumber);
|
|
|
|
|
|
InitFsmMap();
|
|
|
}
|
|
@@ -177,15 +180,18 @@ namespace Venus_RT.Modules
|
|
|
Transition(STATE.Prepare_For_TM, MSG.Prepare_TM, null, STATE.Prepare_For_TM);
|
|
|
Transition(STATE.Prepare_For_TM, MSG.Abort, FnAbortPreparaTM, STATE.Idle);
|
|
|
Transition(STATE.Ready_For_TM, MSG.TM_Exchange_Ready, null, STATE.Idle);
|
|
|
+ Transition(STATE.Ready_For_TM, MSG.Prepare_TM, null, STATE.Ready_For_TM);
|
|
|
Transition(STATE.Ready_For_TM, MSG.Abort, null, STATE.Idle);
|
|
|
+ Transition(STATE.Ready_For_TM, MSG.AutoVent, FnStartVent, STATE.Venting);
|
|
|
|
|
|
// Prepare EFEM Transfer
|
|
|
Transition(STATE.Idle, MSG.Prepare_EFEM, FnStartPrepareEFEM, STATE.Prepare_For_EFEM);
|
|
|
Transition(STATE.Prepare_For_EFEM, FSM_MSG.TIMER, FnPrepareEFEMTimeout, STATE.Ready_For_EFEM);
|
|
|
Transition(STATE.Prepare_For_EFEM, MSG.Abort, FnAbortPrepareEFEM, STATE.Idle);
|
|
|
Transition(STATE.Ready_For_EFEM, MSG.EFEM_Exchange_Ready, null, STATE.Idle);
|
|
|
+ Transition(STATE.Ready_For_EFEM, MSG.Prepare_EFEM, null, STATE.Ready_For_EFEM);
|
|
|
Transition(STATE.Ready_For_EFEM, MSG.Abort, null, STATE.Idle);
|
|
|
-
|
|
|
+ Transition(STATE.Ready_For_EFEM, MSG.AutoPump, FnTryAutoPump, STATE.Pumping);
|
|
|
|
|
|
Running = true;
|
|
|
}
|
|
@@ -221,6 +227,29 @@ namespace Venus_RT.Modules
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
+ public (int processed, int unprocessed) GetWaferProcessStatus()
|
|
|
+ {
|
|
|
+ int processedCount = 0;
|
|
|
+ int unprocessCount = 0;
|
|
|
+ for (int i = 0; i < _slotNumber; i++)
|
|
|
+ {
|
|
|
+ var wafer = WaferManager.Instance.GetWafer(Module, i);
|
|
|
+ if (!wafer.IsEmpty)
|
|
|
+ {
|
|
|
+ if (wafer.ProcessState == Aitex.Core.Common.EnumWaferProcessStatus.Completed)
|
|
|
+ {
|
|
|
+ processedCount++;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ unprocessCount++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return (processedCount, unprocessCount);
|
|
|
+ }
|
|
|
+
|
|
|
private bool fnEnterTMReady(object[] param)
|
|
|
{
|
|
|
Status = LLStatus.Ready_For_TM;
|
|
@@ -331,6 +360,17 @@ namespace Venus_RT.Modules
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
+ private bool FnTryAutoPump(object[] param)
|
|
|
+ {
|
|
|
+ if(_JetTM.LLPumpStatus != JetTM.LLPumpState.Idle)
|
|
|
+ {
|
|
|
+ PostMsg(MSG.EFEM_Exchange_Ready);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ return _pumpingRoutine.Start() == RState.Running;
|
|
|
+ }
|
|
|
+
|
|
|
private bool FnStartPurge(object[] param)
|
|
|
{
|
|
|
return _purgeRoutine.Start() == RState.Running;
|