|
@@ -72,6 +72,7 @@ namespace Venus_RT.Modules
|
|
|
CreateSEJob,
|
|
|
StartSEJob,
|
|
|
AbortSEJob,
|
|
|
+ SEMoveWafer
|
|
|
}
|
|
|
|
|
|
public PMEntity PMA { get; private set; }
|
|
@@ -153,10 +154,11 @@ namespace Venus_RT.Modules
|
|
|
public SequenceLLInOutPath LLInOutPath => _AutoCycle.LLInOutPath;
|
|
|
|
|
|
private TMCycle _TMCycle;
|
|
|
- private SETMCycle _seTMCycle;
|
|
|
private AutoCycle _AutoCycle;
|
|
|
private ManualTransfer _manualTransfer;
|
|
|
private ReturnAllWafer _returnWafer;
|
|
|
+ private SETMCycle _seTMCycle;
|
|
|
+ private SEManualTransfer _setransfer;
|
|
|
|
|
|
private bool _isWaitUnload;
|
|
|
private static int _isATMMode = -1;
|
|
@@ -294,11 +296,18 @@ namespace Venus_RT.Modules
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
- return CheckToPostMessage((int)MSG.MoveWafer,
|
|
|
- source, (int)args[1],
|
|
|
- destination, (int)args[3],
|
|
|
- (bool)args[4], (int)args[5],
|
|
|
- (bool)args[6], (int)args[7], (string)args[8]);
|
|
|
+ if (seTM!=null && VCE!=null)
|
|
|
+ return CheckToPostMessage((int)MSG.SEMoveWafer,
|
|
|
+ source, (int)args[1],
|
|
|
+ destination, (int)args[3],
|
|
|
+ args[4], args[5],
|
|
|
+ args[6], args[7], (string)args[8]);
|
|
|
+ else
|
|
|
+ return CheckToPostMessage((int)MSG.MoveWafer,
|
|
|
+ source, (int)args[1],
|
|
|
+ destination, (int)args[3],
|
|
|
+ (bool)args[4], (int)args[5],
|
|
|
+ (bool)args[6], (int)args[7], (string)args[8]);
|
|
|
});
|
|
|
|
|
|
OP.Subscribe("System.HomeAll", (string cmd, object[] args) =>
|
|
@@ -595,10 +604,12 @@ namespace Venus_RT.Modules
|
|
|
seTM?.Initialize();
|
|
|
|
|
|
_TMCycle = new TMCycle();
|
|
|
- _seTMCycle = new SETMCycle(ModuleName.SETM);
|
|
|
_AutoCycle = new AutoCycle();
|
|
|
_manualTransfer = new ManualTransfer();
|
|
|
_returnWafer = new ReturnAllWafer(_manualTransfer);
|
|
|
+ _seTMCycle = new SETMCycle(ModuleName.SETM);
|
|
|
+ _setransfer = new SEManualTransfer();
|
|
|
+
|
|
|
|
|
|
BuildTransitionTable();
|
|
|
return true;
|
|
@@ -676,13 +687,19 @@ namespace Venus_RT.Modules
|
|
|
// SETM Cycle
|
|
|
Transition(RtState.Idle, MSG.SETMCycle, FsmStartSETMCycle, RtState.SETMCycle);
|
|
|
Transition(RtState.SETMCycle, FSM_MSG.TIMER, FsmMonitorSETMCycle, RtState.Idle);
|
|
|
- Transition(RtState.SETMCycle, MSG.StopSECycle, FsmStopSETMCycle, RtState.Idle);
|
|
|
+ Transition(RtState.SETMCycle, MSG.StopSECycle, FsmStopSETMCycle, RtState.Idle);
|
|
|
// SETM CreateCycle
|
|
|
- Transition(RtState.Idle, MSG.CreateSEJob, FSMStartCreateSEJob, RtState.Idle);
|
|
|
+ Transition(RtState.Idle, MSG.CreateSEJob, FsmStartCreateSEJob, RtState.Idle);
|
|
|
// SETM StartCycle
|
|
|
- Transition(RtState.Idle, MSG.StartSEJob, FSMStartSEJob, RtState.SERunning);
|
|
|
- Transition(RtState.SERunning, FSM_MSG.TIMER, FSMSEJobMonitor, RtState.Idle);
|
|
|
- Transition(RtState.SERunning, MSG.StopSECycle, FsmStopSETMCycle, RtState.Idle);
|
|
|
+ Transition(RtState.Idle, MSG.StartSEJob, FsmStartSEJob, RtState.SERunning);
|
|
|
+ Transition(RtState.SERunning, FSM_MSG.TIMER, FsmSEJobMonitor, RtState.Idle);
|
|
|
+ Transition(RtState.SERunning, MSG.StopSECycle, FsmStopSETMCycle, RtState.Idle);
|
|
|
+ // SE Transfer
|
|
|
+ Transition(RtState.Idle, MSG.SEMoveWafer, FsmStartMoveWafer, RtState.SETransfer);
|
|
|
+ Transition(RtState.SETransfer, FSM_MSG.TIMER, FsmMonitorMoveWafer, RtState.Idle);
|
|
|
+ Transition(RtState.SETransfer, MSG.StopSECycle, FsmSEAbort, RtState.Idle);
|
|
|
+ // SE ReturnWafer
|
|
|
+
|
|
|
}
|
|
|
|
|
|
private bool FsmMonitor(object[] objs)
|
|
@@ -1003,22 +1020,44 @@ namespace Venus_RT.Modules
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
- private bool FSMStartCreateSEJob(object[] objs)
|
|
|
+ private bool FsmStartCreateSEJob(object[] objs)
|
|
|
{
|
|
|
_seTMCycle.CreateJob((Dictionary<string, object>)objs[0]);
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
- private bool FSMStartSEJob(object[] objs)
|
|
|
+ private bool FsmStartSEJob(object[] objs)
|
|
|
{
|
|
|
_seTMCycle.StartJob(objs[0].ToString());
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
- private bool FSMSEJobMonitor(object[] objs)
|
|
|
+ private bool FsmSEJobMonitor(object[] objs)
|
|
|
{
|
|
|
RState ret = _seTMCycle.Monitor();
|
|
|
return ret == RState.End;
|
|
|
}
|
|
|
+
|
|
|
+ private bool FsmStartMoveWafer(object[] objs)
|
|
|
+ {
|
|
|
+ return _setransfer.Start(objs) == RState.Running;
|
|
|
+ }
|
|
|
+
|
|
|
+ private bool FsmMonitorMoveWafer(object[] objs)
|
|
|
+ {
|
|
|
+ RState ret = _setransfer.Monitor();
|
|
|
+ if (ret == RState.Failed || ret == RState.Timeout)
|
|
|
+ {
|
|
|
+ PostMsg(MSG.ERROR);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ return ret == RState.End;
|
|
|
+ }
|
|
|
+
|
|
|
+ private bool FsmSEAbort(object[] objs)
|
|
|
+ {
|
|
|
+ _setransfer.Abort();
|
|
|
+ return true;
|
|
|
+ }
|
|
|
}
|
|
|
}
|