using Aitex.Core.RT.Device; using Aitex.Core.RT.Routine; using Aitex.Core.Util; using Aitex.Sorter.Common; using Aitex.Sorter.RT.EFEMs.Servers; using MECF.Framework.Common.Equipment; using MECF.Framework.Common.SubstrateTrackings; using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Robot; namespace Aitex.Sorter.RT.EFEMs.Tasks { public class TransferTask : RobotImp, ITask { public TransferTask() { } public bool Execute(out string result, params string[] args) { string device = DeviceName.Robot; IServerModule entity = GetEntity(device); ModuleName source = ModuleName.System; int sourceSlot = 1; if (!ParseMoveTarget(args[0], out source, out sourceSlot)) { result = PARAM_NG; return false; } Hand placearm = Hand.Blade2; if (!ParseMoveArm(args[1], out placearm)) { result = PARAM_NG; return false; } Hand pickarm = Hand.Blade2; if (!ParseMoveArm(args[2], out pickarm)) { result = PARAM_NG; return false; } ModuleName destination = ModuleName.System; int destinationSlot = 1; if (!ParseMoveTarget(args[3], out destination, out destinationSlot)) { result = PARAM_NG; return false; } if (!Check(device, out result)) { return false; } if (!Check(device, out result)) { return false; } if (!Check(device, out result)) { return false; } if (!Check(device, out result)) { return false; } if (!Check(device, out result)) { return false; } if (!Check(device, out result)) { return false; } if (ModuleHelper.IsLoadPort(source)) { if (!Check(source.ToString(), out result)) { return false; } } if (ModuleHelper.IsLoadPort(destination)) { if (!Check(destination.ToString(), out result)) { return false; } } if (!ModuleHelper.IsLoadLock(destination) && !Singleton.Instance.CheckNoWafer(destination,destinationSlot - 1)) { result = "WAFER"; return false; } if (!ModuleHelper.IsLoadLock(source) && !Singleton.Instance.CheckHasWafer(source,sourceSlot - 1)) { result = "NONWAF"; return false; } if (!Check(device, out result)) { return false; } if (!Check(device, out result)) { return false; } if (!Check(device, out result)) { return false; } if (!Check(device, out result)) { return false; } if (!Check(device, out result)) { return false; } if (!Check(device, out result)) { return false; } if (!Check(source.ToString(), out result) || !Check(destination.ToString(), out result)) { return false; } if (!Check(source.ToString(), out result) || !Check(destination.ToString(), out result)) { return false; } if (!Check(source.ToString(), out result) || !Check(destination.ToString(), out result)) { return false; } //MoveType type = MoveType.Move; //MoveOption option = MoveOption)args[1]; //Hand blade = (Hand)args[2]; //ModuleName schamber1 = (ModuleName)args[3]; //int sslot1 = (int)args[4]; //ModuleName dchamber1 = (ModuleName)args[5]; //int dslot1 = (int)args[6]; //ModuleName schamber2 = (ModuleName)args[3]; //int sslot2 = (int)args[4]; //ModuleName dchamber2 = (ModuleName)args[5]; //int dslot2 = (int)args[6]; //if (type != MoveType.Move) //{ // schamber2 = (ModuleName)args[7]; // sslot2 = (int)args[8]; // dchamber2 = (ModuleName)args[9]; // dslot2 = (int)args[10]; //} object[] parameters = new object[10]; parameters[0] = MoveType.Move; parameters[1] = MoveOption.None; parameters[2] = pickarm; parameters[3] = source; parameters[4] = sourceSlot - 1; parameters[5] = destination; parameters[6] = destinationSlot - 1; Singleton.Instance.EfemDevice.InvokeMoveWafer("MoveWafer", parameters); return true; } public bool? Monitor(out string result, params string[] args) { result = string.Empty; if (Singleton.Instance.EfemDevice.IsError) { result = "ERROR"; return false; } if (Singleton.Instance.EfemDevice.IsIdle && Singleton.Instance.EfemDevice.CheckAcked(_token)) { return true; } return null; } } }