123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508 |
- using Aitex.Common.Util;
- using Aitex.Core.RT.DataCenter;
- using Aitex.Core.RT.Event;
- using Aitex.Core.RT.OperationCenter;
- using System.Collections.Generic;
- using Aitex.Core.Common.DeviceData;
- using Aitex.Core.RT.Device;
- using Aitex.Core.RT.SCCore;
- using Aitex.Core.Util;
- using Aitex.Sorter.Common;
- using MECF.Framework.Common.Equipment;
- using VirgoRT.Device.YASKAWA;
- using VirgoRT.Devices.EFEM;
- using VirgoRT.FAs;
- using VirgoRT.Modules;
- namespace VirgoRT.HostWrapper
- {
- class FaManager : FaHost, IHostCallback
- {
- private const string PROCESS_START_INQUIRY = "PROCESS_START_INQUIRY";
- private class DataName
- {
- public const string CommunicationStatus = "CommunicationStatus";
- public const string ControlStatus = "ControlStatus";
- public const string ControlSubStatus = "ControlSubStatus";
- public const string SpoolingState = "SpoolingState";
- public const string SpoolingActual = "SpoolingActual";
- public const string SpoolingTotal = "SpoolingTotal";
- public const string SpoolingFullTime = "SpoolingFullTime";
- public const string SpoolingStartTime = "SpoolingStartTime";
- public const string IsSpoolingEnable = "IsSpoolingEnable";
- }
- private Dictionary<string, ModuleName> _dicPortModule = new Dictionary<string, ModuleName>()
- {
- {"1", ModuleName.LP1},
- {"2", ModuleName.LP2},
- };
- public void Initialize()
- {
- base.Initialize(this, PathManager.GetCfgDir() + "ClusterGemModel.xml");
- OP.Subscribe("System.FACommand", InvokeFaCommand);
- DATA.Subscribe("System.CommunicationStatus", () => FaCommunicationState);
- DATA.Subscribe("System.ControlStatus", () => FaControlState);
- DATA.Subscribe("System.ControlSubStatus", () => FaControlSubState);
- DATA.Subscribe("System.SpoolingState", () => SpoolingState);
- DATA.Subscribe("System.SpoolingActual", () => SpoolingActual);
- DATA.Subscribe("System.SpoolingTotal", () => SpoolingTotal);
- DATA.Subscribe("System.SpoolingFullTime", () => SpoolingFullTime);
- DATA.Subscribe("System.SpoolingStartTime", () => SpoolingStartTime);
- DATA.Subscribe("System.IsSpoolingEnable", () => IsSpoolingEnable);
- EV.Subscribe(new EventItem(PROCESS_START_INQUIRY));
- }
- private bool InvokeFaCommand(string arg1, object[] arg2)
- {
- Invoke(arg2[0].ToString(), null);
- return true;
- }
- public string GetSvidValue(string svName)
- {
- if (svName == "PMA.RecipeProcessTime")
- svName = "PMA.RecipeTotalElapsedSeconds";
- else if (svName == "PMB.RecipeProcessTime")
- svName = "PMB.RecipeTotalElapsedSeconds";
- object data = DATA.Poll(svName);
- if (data != null)
- {
- return data.ToString();
- }
- return "";
- }
- public List<string> GetListSvidValue(string svName)
- {
- List<string> result = new List<string>();
- foreach (var VARIABLE in result)
- {
- }
- return result;
- }
- public bool MapCassette(string portId, out string reason)
- {
- if (!_dicPortModule.ContainsKey(portId))
- {
- reason = $"{portId} not valid";
- return false;
- }
- var LPDevice = Singleton<RouteManager>.Instance.EFEM.EfemDevice[_dicPortModule[portId]] as Loadport;
- if (LPDevice==null)
- {
- reason = $"{portId} not valid";
- return false;
- }
- if (!LPDevice.HasCassette )
- {
- reason = $"{portId} cassette not placed";
- return false;
- }
- if (LPDevice.Protrusion)
- {
- reason = $"{portId} cassette wafer protrude";
- return false;
- }
- if (LPDevice.Status == DeviceState.Error)
- {
- reason = $"{portId} port in error, need reset";
- return false;
- }
- if (SC.ContainsItem("EFEM.CheckSideDoorOnEAPMap") && SC.GetValue<bool>("EFEM.CheckSideDoorOnEAPMap"))
- {
- if (Singleton<RouteManager>.Instance.EFEM.EfemDevice.DoorSwitch != LidState.Close)
- {
- reason = $"EFEM side door not closed, can not map {portId}";
- return false;
- }
- }
- if (SC.ContainsItem("EFEM.CheckCassetteDoorOnEAPMap") &&
- SC.GetValue<bool>("EFEM.CheckCassetteDoorOnEAPMap"))
- {
- if (Singleton<RouteManager>.Instance.EFEM.EfemDevice.CassetteDoor != LidState.Close)
- {
- reason = $"Cassette door not closed, can not map {portId}";
- return false;
- }
- }
- OP.DoOperation($"{_dicPortModule[portId]}.Map");
- reason = string.Empty;
- return true;
- }
- public bool PPSelect(string portId, string jobId, string lotId, string[] slotSequence, out string reason)
- {
- if (!_dicPortModule.ContainsKey(portId))
- {
- reason = $"{portId} not valid";
- return false;
- }
-
- if (!Singleton<RouteManager>.Instance.IsAutoMode)
- {
- reason = $"System not in auto mode";
- return false;
- }
- Dictionary<string, object> param = new Dictionary<string, object>()
- {
- {"JobId", jobId},
- {"LotId", lotId},
- {"Module", _dicPortModule[portId].ToString()},
- {"SlotSequence", slotSequence},
- {"AutoStart", false},
- };
- OP.DoOperation("System.CreateJob", param);
- reason = string.Empty;
- return true;
- }
- public bool StartJob(string jobId, out string reason)
- {
- var param = new object[] { jobId };
- OP.DoOperation("System.StartJob", param);
- reason = string.Empty;
- return true;
- }
- public bool AbortJob(string jobId, out string reason)
- {
- var param = new object[] { jobId };
- OP.DoOperation("System.AbortJob", param);
- reason = string.Empty;
- return true;
- }
- public bool PauseJob(string jobId, out string reason)
- {
- var param = new object[] { jobId };
- OP.DoOperation("System.PauseJob", param);
- reason = string.Empty;
- return true;
- }
- public bool ResumeJob(string jobId, out string reason)
- {
- var param = new object[] { jobId };
- OP.DoOperation("System.ResumeJob", param);
- reason = string.Empty;
- return true;
- }
- public bool StopJob(string jobId, out string reason)
- {
- var param = new object[] { jobId };
- OP.DoOperation("System.StopJob", param);
- reason = string.Empty;
- return true;
- }
- public bool Load(string portId, out string reason)
- {
- if (!_dicPortModule.ContainsKey(portId))
- {
- reason = $"{portId} not valid";
- return false;
- }
- var LPDevice = Singleton<RouteManager>.Instance.EFEM.EfemDevice[_dicPortModule[portId]] as Loadport;
- if (LPDevice == null)
- {
- reason = $"{portId} not valid";
- return false;
- }
- if (!LPDevice.HasCassette)
- {
- reason = $"{portId} cassette not placed";
- return false;
- }
-
- if (LPDevice.Status == DeviceState.Error)
- {
- reason = $"{portId} port in error, need reset";
- return false;
- }
- OP.DoOperation($"{_dicPortModule[portId]}.Load");
- reason = string.Empty;
- return true;
- }
- public bool Unload(string portId, out string reason)
- {
- if (!_dicPortModule.ContainsKey(portId))
- {
- reason = $"{portId} not valid";
- return false;
- }
- var LPDevice = Singleton<RouteManager>.Instance.EFEM.EfemDevice[_dicPortModule[portId]] as Loadport;
- if (LPDevice == null)
- {
- reason = $"{portId} not valid";
- return false;
- }
- if (!LPDevice.HasCassette)
- {
- reason = $"{portId} cassette not placed";
- return false;
- }
-
- if (LPDevice.Status == DeviceState.Error)
- {
- reason = $"{portId} port in error, need reset";
- return false;
- }
- if (SC.GetValue<bool>("EFEM.AutoUnlockAfterUnload") )
- {
- OP.DoOperation($"{_dicPortModule[portId]}.Unload");
- }
- else
- {
- OP.DoOperation($"{_dicPortModule[portId]}.Undock");
- }
-
- reason = string.Empty;
- return true;
- }
- public bool Lock(string portId, out string reason)
- {
- if (!_dicPortModule.ContainsKey(portId))
- {
- reason = $"{portId} not valid";
- return false;
- }
- var LPDevice = Singleton<RouteManager>.Instance.EFEM.EfemDevice[_dicPortModule[portId]] as Loadport;
- if (LPDevice == null)
- {
- reason = $"{portId} not valid";
- return false;
- }
- if (!LPDevice.HasCassette)
- {
- reason = $"{portId} cassette not placed";
- return false;
- }
-
- if (LPDevice.Status == DeviceState.Error)
- {
- reason = $"{portId} port in error, need reset";
- return false;
- }
- OP.DoOperation($"{_dicPortModule[portId]}.Clamp");
- reason = string.Empty;
- return true;
- }
- public bool Unlock(string portId, out string reason)
- {
- if (!_dicPortModule.ContainsKey(portId))
- {
- reason = $"{portId} not valid";
- return false;
- }
- var LPDevice = Singleton<RouteManager>.Instance.EFEM.EfemDevice[_dicPortModule[portId]] as Loadport;
- if (LPDevice == null)
- {
- reason = $"{portId} not valid";
- return false;
- }
- if (!LPDevice.HasCassette)
- {
- reason = $"{portId} cassette not placed";
- return false;
- }
-
- if (LPDevice.Status == DeviceState.Error)
- {
- reason = $"{portId} port in error, need reset";
- return false;
- }
- OP.DoOperation($"{_dicPortModule[portId]}.Unclamp");
- reason = string.Empty;
- return true;
- }
- public bool ReadID(string portId, out string reason)
- {
- if (!_dicPortModule.ContainsKey(portId))
- {
- reason = $"{portId} not valid";
- return false;
- }
- var LPDevice = Singleton<RouteManager>.Instance.EFEM.EfemDevice[_dicPortModule[portId]] as Loadport;
- if (LPDevice == null)
- {
- reason = $"{portId} not valid";
- return false;
- }
- if (!LPDevice.HasCassette)
- {
- reason = $"{portId} cassette not placed";
- return false;
- }
-
- if (LPDevice.Status == DeviceState.Error)
- {
- reason = $"{portId} port in error, need reset";
- return false;
- }
- OP.DoOperation($"{_dicPortModule[portId]}.ReadCarrierId");
- reason = string.Empty;
- return true;
- }
- public bool ReadTag(string portId, out string reason)
- {
- if (!_dicPortModule.ContainsKey(portId))
- {
- reason = $"{portId} not valid";
- return false;
- }
- var LPDevice = Singleton<RouteManager>.Instance.EFEM.EfemDevice[_dicPortModule[portId]] as Loadport;
- if (LPDevice == null)
- {
- reason = $"{portId} not valid";
- return false;
- }
- if (!LPDevice.HasCassette)
- {
- reason = $"{portId} cassette not placed";
- return false;
- }
- if (LPDevice.Status == DeviceState.Error)
- {
- reason = $"{portId} port in error, need reset";
- return false;
- }
- OP.DoOperation($"{_dicPortModule[portId]}.ReadTagData");
- reason = string.Empty;
- return true;
- }
- public bool WriteID(string portId, string carrierID, out string reason)
- {
- if (!_dicPortModule.ContainsKey(portId))
- {
- reason = $"{portId} not valid";
- return false;
- }
- var LPDevice = Singleton<RouteManager>.Instance.EFEM.EfemDevice[_dicPortModule[portId]] as Loadport;
- if (LPDevice == null)
- {
- reason = $"{portId} not valid";
- return false;
- }
- if (!LPDevice.HasCassette)
- {
- reason = $"{portId} cassette not placed";
- return false;
- }
- if (LPDevice.Status == DeviceState.Error)
- {
- reason = $"{portId} port in error, need reset";
- return false;
- }
- OP.DoOperation($"{_dicPortModule[portId]}.WriteCarrierID", carrierID);
- reason = string.Empty;
- return true;
- }
- public bool WriteTag(string portId, string tagData, out string reason)
- {
- if (!_dicPortModule.ContainsKey(portId))
- {
- reason = $"{portId} not valid";
- return false;
- }
- var LPDevice = Singleton<RouteManager>.Instance.EFEM.EfemDevice[_dicPortModule[portId]] as Loadport;
- if (LPDevice == null)
- {
- reason = $"{portId} not valid";
- return false;
- }
- if (!LPDevice.HasCassette)
- {
- reason = $"{portId} cassette not placed";
- return false;
- }
- if (LPDevice.Status == DeviceState.Error)
- {
- reason = $"{portId} port in error, need reset";
- return false;
- }
- OP.DoOperation($"{_dicPortModule[portId]}.WriteTagData", tagData);
- reason = string.Empty;
- return true;
- }
- }
- }
|