using Aitex.Core.Common; using Aitex.Core.RT.Device; using Aitex.Core.RT.Event; using Aitex.Core.RT.Routine; using Aitex.Core.RT.SCCore; using Aitex.Core.Util; using EFEM.RT.Modules; using Aitex.Sorter.Common; using Efem; using MECF.Framework.Common.Equipment; using MECF.Framework.Common.SubstrateTrackings; using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.LoadPorts; using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Robot; using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Robots.RobotBase; namespace EFEM.RT.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 (ModuleHelper.IsLoadPort(destination)) { OpenStageWithWaferSizeLoadPort lp = DEVICE.GetDevice(destination.ToString()); if (destinationSlot == 1 && lp.WaferSize == WaferSize.WS3) { EV.PostWarningLog("EFEM", $"{destination} is 3', slot 1 is disabled"); result = PARAM_NG; return false; } } if (ModuleHelper.IsLoadPort(source)) { OpenStageWithWaferSizeLoadPort lp = DEVICE.GetDevice(source.ToString()); if (sourceSlot == 1 && lp.WaferSize == WaferSize.WS3) { EV.PostWarningLog("EFEM", $"{source} is 3', slot 1 is disabled"); result = PARAM_NG; return false; } } if (ModuleHelper.IsLoadLock(source) && !SC.GetValue("System.IsLoadLockEnableZMotion")) { EV.PostWarningLog("Server", $"not support LL z motion, can not TRANS {source}"); result = PARAM_NG; return false; } if (ModuleHelper.IsLoadLock(destination) && !SC.GetValue("System.IsLoadLockEnableZMotion")) { EV.PostWarningLog("Server", $"not support LL z motion, can not TRANS {destination}"); 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[7]; 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.InvokeMoveWafer("MoveWafer", parameters); return true; } public bool? Monitor(out string result, params string[] args) { result = string.Empty; RobotBaseDevice _device = DEVICE.GetDevice(DeviceName.Robot); if (Singleton.Instance.GetTaskState("MoveWafer") == Result.FAIL) { result = "MoveFailed"; return false; } if (_device.IsError) { flag1 = ErrorCheckList1.VAC | ErrorCheckList1.AIR | ErrorCheckList1.STALL | ErrorCheckList1.LIMIT | ErrorCheckList1.SENSOR | ErrorCheckList1.POSITION | ErrorCheckList1.EMS | ErrorCheckList1.COMM | ErrorCheckList1.COMM2 | ErrorCheckList1.VACON | ErrorCheckList1.VACOFF | ErrorCheckList1.CLAMPON | ErrorCheckList1.CLAMPOF; flag2 = ErrorCheckList2.RRTWAF | ErrorCheckList2.CRSWAF | ErrorCheckList2.THICKWAF | ErrorCheckList2.THINWAF | ErrorCheckList2.DBLWAF | ErrorCheckList2.BAOWAF | ErrorCheckList2.COMMAND | ErrorCheckList2.PODNG | ErrorCheckList2.PODMISMATCH | ErrorCheckList2.VAC_S | ErrorCheckList2.CLAMP_S | ErrorCheckList2.SAFTY | ErrorCheckList2.LOCKNG | ErrorCheckList2.UNLOCKNG | ErrorCheckList2.L_KEY_LK | ErrorCheckList2.L_KEY_UL; flag3 = ErrorCheckList3.MAP_S | ErrorCheckList3.MAP_S1 | ErrorCheckList3.MAP_S2 | ErrorCheckList3.WAFLOST | ErrorCheckList3.ALIGNNG | ErrorCheckList3.DRIVER | ErrorCheckList3.DRPOWERDOWN | ErrorCheckList3.HARDWARE | ErrorCheckList3.INTERNAL | ErrorCheckList3.E84_TIMEOUTx | ErrorCheckList3.E84_CS_VALID | ErrorCheckList3.READFAIL; return CheckError(DeviceName.Robot, out result); } if (Singleton.Instance.Running && !Singleton.Instance.IsRunning) return true; return null; } } }