| 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 Venus_RT.Device.YASKAWA;//using Venus_RT.Devices.EFEM;using Venus_RT.FAs;using Venus_RT.Modules;namespace Venus_RT.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;        }    }}
 |