151 lines
3.5 KiB
C#
151 lines
3.5 KiB
C#
using Aitex.Core.RT.Event;
|
|
using MECF.Framework.Common.Equipment;
|
|
using MECF.Framework.Common.Schedulers;
|
|
using MECF.Framework.Common.SubstrateTrackings;
|
|
|
|
namespace SicRT.Modules.Schedulers
|
|
{
|
|
public class SchedulerModule
|
|
{
|
|
protected enum TaskType
|
|
{
|
|
None,
|
|
|
|
PrepareTransfer,
|
|
|
|
Pick,
|
|
|
|
Place,
|
|
|
|
PickAndPlace,
|
|
|
|
Preprocess,
|
|
Process,
|
|
PostProcess,
|
|
|
|
OpenCover,
|
|
CloseCover,
|
|
|
|
Load,
|
|
Unload,
|
|
|
|
Align,
|
|
|
|
TransferTarget,
|
|
|
|
Cooling,
|
|
|
|
WarmUp,
|
|
|
|
Vent,
|
|
Pump,
|
|
Purge,
|
|
|
|
IdlePurgeProcess
|
|
}
|
|
|
|
public ModuleName Module
|
|
{
|
|
get { return ModuleHelper.Converter(_module); }
|
|
}
|
|
public virtual bool IsAvailable { get; }
|
|
public virtual bool IsOnline { get; }
|
|
public virtual bool IsError { get; }
|
|
public virtual bool IsReady { get; }
|
|
|
|
|
|
protected string _module;
|
|
|
|
protected TaskType _task = TaskType.None;
|
|
|
|
protected ModuleName _inProcessRobot;
|
|
|
|
public SchedulerModule(string module)
|
|
{
|
|
_module = module;
|
|
}
|
|
protected void LogTaskStart(TaskType cmd, string message)
|
|
{
|
|
EV.PostInfoLog("Scheduler", $"Task start:{_module},{cmd} {message}");
|
|
|
|
}
|
|
protected void LogTaskDone(TaskType cmd, string message)
|
|
{
|
|
EV.PostInfoLog("Scheduler", $"Task done:{_module},{cmd} {message}");
|
|
}
|
|
public void ResetTask()
|
|
{
|
|
_task = TaskType.None;
|
|
}
|
|
|
|
public bool WaitTransfer(ModuleName robot)
|
|
{
|
|
_task = TaskType.TransferTarget;
|
|
_inProcessRobot = robot;
|
|
LogTaskStart(_task, $"Note {robot} in transfer");
|
|
return true;
|
|
}
|
|
|
|
public bool IsWaitTransfer(ModuleName robot)
|
|
{
|
|
return _task == TaskType.TransferTarget && _inProcessRobot == robot;
|
|
}
|
|
|
|
public bool StopWaitTransfer(ModuleName robot)
|
|
{
|
|
LogTaskDone(_task, $"Note {robot} transfer complete");
|
|
_inProcessRobot = ModuleName.System;
|
|
|
|
_task = TaskType.None;
|
|
return true;
|
|
}
|
|
public bool HasWafer(int slot)
|
|
{
|
|
return WaferManager.Instance.CheckHasWafer(ModuleHelper.Converter(_module), slot);
|
|
}
|
|
|
|
public bool NoWafer(int slot)
|
|
{
|
|
return WaferManager.Instance.CheckNoWafer(ModuleHelper.Converter(_module), slot);
|
|
}
|
|
|
|
|
|
public virtual bool IsReadyForPick(ModuleName robot, int slot)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
public virtual bool IsReadyForPlace(ModuleName robot, int slot)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
public virtual bool PrepareTransfer(ModuleName robot, EnumTransferType type, int slot)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
public virtual bool PostTransfer(ModuleName robot, EnumTransferType type, int slot)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
public virtual bool Process(string recipeName, bool isCleanRecipe, bool withDummyWafer)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
public virtual bool Cooling(bool coolingType,int coolingTime)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
public virtual bool WarmUp(int warmUpTime)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
}
|
|
|
|
}
|