|
@@ -131,6 +131,7 @@ namespace Venus_RT.Modules
|
|
|
private readonly EfemPlaceRoutine _placeRoutine;
|
|
|
private readonly EfemSwapRoutine _swapRoutine;
|
|
|
private readonly EfemHomeRoutine _homeRoutine;
|
|
|
+ private readonly EFEMAlignRoutine _alignRoutine;
|
|
|
private string LiftMessage;
|
|
|
|
|
|
// Constructor
|
|
@@ -147,6 +148,7 @@ namespace Venus_RT.Modules
|
|
|
_pickRoutine = new EfemPickRoutine(_efem);
|
|
|
_placeRoutine = new EfemPlaceRoutine(_efem);
|
|
|
_swapRoutine = new EfemSwapRoutine(_efem);
|
|
|
+ _alignRoutine = new EFEMAlignRoutine(_efem);
|
|
|
|
|
|
InitFsmMap();
|
|
|
}
|
|
@@ -286,6 +288,7 @@ namespace Venus_RT.Modules
|
|
|
//Transition(STATE.Lifting, MSG.LiftActionDone, fnActionDone, STATE.Idle);
|
|
|
Transition(STATE.Lifting, FSM_MSG.TIMER, fnLiftTimeout, STATE.Idle);
|
|
|
Transition(STATE.Idle, MSG.Align, fnAlign, STATE.Aligning);
|
|
|
+ Transition(STATE.Aligning, FSM_MSG.TIMER, fnAlignTimeout, STATE.Idle);
|
|
|
Transition(STATE.Aligning, MSG.ActionDone, fnActionDone, STATE.Idle);
|
|
|
|
|
|
|
|
@@ -296,6 +299,7 @@ namespace Venus_RT.Modules
|
|
|
Running = true;
|
|
|
}
|
|
|
|
|
|
+
|
|
|
private bool fnCommReady(object[] param)
|
|
|
{
|
|
|
return true;
|
|
@@ -551,30 +555,49 @@ namespace Venus_RT.Modules
|
|
|
private bool fnAlign(object[] param)
|
|
|
{
|
|
|
// module
|
|
|
- ModuleName unit = ModuleName.EFEM;
|
|
|
- if (param[0] is string s1)
|
|
|
- unit = ModuleNameString.ToEnum(s1);
|
|
|
- else if (param[0] is ModuleName mod)
|
|
|
- unit = mod;
|
|
|
- else
|
|
|
- throw new ArgumentException("Argument error");
|
|
|
+ //ModuleName unit = ModuleName.EFEM;
|
|
|
|
|
|
+ //if (param.Length < 2)
|
|
|
+ //{
|
|
|
+ // return _efem.Align(unit, 180, 1000, WaferSize.WS12);
|
|
|
|
|
|
- // wafer size
|
|
|
- WaferSize ws1 = WaferSize.WS0;
|
|
|
- if (param[1] is string s2)
|
|
|
- {
|
|
|
- if (Enum.TryParse(s2, out WaferSize p5))
|
|
|
- ws1 = p5;
|
|
|
- }
|
|
|
- else if (param[1] is WaferSize p6)
|
|
|
+ //}
|
|
|
+
|
|
|
+ //if (param[0] is string s1)
|
|
|
+ // unit = ModuleNameString.ToEnum(s1);
|
|
|
+ //else if (param[0] is ModuleName mod)
|
|
|
+ // unit = mod;
|
|
|
+ //else
|
|
|
+ // throw new ArgumentException("Argument error");
|
|
|
+
|
|
|
+ //// wafer size
|
|
|
+ //WaferSize ws1 = WaferSize.WS0;
|
|
|
+ //if (param[1] is string s2)
|
|
|
+ //{
|
|
|
+ // if (Enum.TryParse(s2, out WaferSize p5))
|
|
|
+ // ws1 = p5;
|
|
|
+ //}
|
|
|
+ //else if (param[1] is WaferSize p6)
|
|
|
+ //{
|
|
|
+ // ws1 = p6;
|
|
|
+ //}
|
|
|
+
|
|
|
+ //if (!_efem.Align(unit, 180,1000, ws1))
|
|
|
+ // return false;
|
|
|
+ return _alignRoutine.Start(param) == RState.Running;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ private bool fnAlignTimeout(object[] param)
|
|
|
+ {
|
|
|
+ RState ret = _alignRoutine.Monitor();
|
|
|
+ if (ret == RState.Failed || ret == RState.Timeout)
|
|
|
{
|
|
|
- ws1 = p6;
|
|
|
+ PostMsg(MSG.Error);
|
|
|
+ return false;
|
|
|
}
|
|
|
|
|
|
- if (!_efem.Align(unit, 1000, ws1))
|
|
|
- return false;
|
|
|
- return true;
|
|
|
+ return ret == RState.End;
|
|
|
}
|
|
|
|
|
|
private bool fnMap(object[] param)
|