| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 | using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using Aitex.Core.RT.Fsm;using Aitex.Core.Common;using Aitex.Core.RT.DataCenter;using Aitex.Core.RT.Event;using Aitex.Core.RT.OperationCenter;using Aitex.Core.RT.Routine;using Aitex.Core.RT.SCCore;using Aitex.Core.Util;using MECF.Framework.Common.Equipment;using MECF.Framework.Common.SubstrateTrackings;using Venus_Core;using Venus_RT.Modules.PMs;namespace Venus_RT.Modules{    class RouteManager : Entity, IEntity    {        public enum MSG        {            MoveWafer,            ReturnWafer,            HomeUnit,            PauseAuto,            ResumeAuto,            Stop,            StartCycle,            HOME,            RESET,            ABORT,            ERROR,            SetAutoMode,            SetManualMode,            ResetIdleCleanTime,            ResetIdlePurgeTime,            CreateJob,            PauseJob,            ResumeJob,            StartJob,            StopJob,            AbortJob,            JobDone,            CassetteLeave,  //For unload light control off afer job done            Map,            ReturnAllWafer,        }        public PMEntity PMA { get; private set; }        public PMEntity PMB { get; private set; }        public TMEntity TM { get; private set; }        public LLEntity LLA { get; private set; }        public LLEntity LLB { get; private set; }        public EfemEntity EFEM { get; private set; }        public string Name { get; set; }        public RouteManager()        {            Name = "System";            if (ModuleHelper.IsInstalled(ModuleName.PMA))                PMA = new PMEntity(ModuleName.PMA);            if (ModuleHelper.IsInstalled(ModuleName.PMB))                PMB = new PMEntity(ModuleName.PMB);            if (ModuleHelper.IsInstalled(ModuleName.TM))                TM = new TMEntity();            if (ModuleHelper.IsInstalled(ModuleName.LLA))                LLA = new LLEntity(ModuleName.LLA);            if (ModuleHelper.IsInstalled(ModuleName.LLB))                LLB = new LLEntity(ModuleName.LLB);            fsm = new StateMachine<RouteManager>(Name, (int)RtState.Init, 200);            SubscribeOperation();        }        public bool Check(int msg, out string reason, params object[] args)        {            if (!fsm.FindTransition(fsm.State, msg))            {                reason = String.Format("{0} is in {1} state,can not do {2}", Name, 0, (MSG)msg);                return false;            }            if (msg == (int)MSG.StartCycle)            {                //if (!IsAutoMode)                {                    reason = String.Format("can not do {0}, isn't auto mode.", msg.ToString());                    return false;                }            }            reason = "";            return true;        }        protected override bool Init()        {            PMA?.Initialize();            PMB?.Initialize();            return true;        }        void SubscribeOperation()        {            OP.Subscribe("CreateWafer", InvokeCreateWafer);            OP.Subscribe("DeleteWafer", InvokeDeleteWafer);        }        private bool InvokeCreateWafer(string arg1, object[] args)        {            ModuleName chamber = ModuleHelper.Converter(args[0].ToString());            int slot = (int)args[1];            WaferStatus state = WaferStatus.Normal;            if (WaferManager.Instance.IsWaferSlotLocationValid(chamber, slot))            {                if (WaferManager.Instance.CheckHasWafer(chamber, slot))                {                    EV.PostInfoLog("System", string.Format("{0} slot {1} already has wafer.create wafer is not valid", chamber, slot));                }                else if (WaferManager.Instance.CreateWafer(chamber, slot, state) != null)                {                    EV.PostMessage(ModuleName.System.ToString(), EventEnum.WaferCreate, chamber.ToString(), slot + 1, state.ToString());                }            }            else            {                EV.PostWarningLog("System", string.Format("Invalid position,{0},{1}", chamber.ToString(), slot.ToString()));                return false;            }            return true;        }        private bool InvokeDeleteWafer(string arg1, object[] args)        {            ModuleName chamber = ModuleHelper.Converter(args[0].ToString());            int slot = (int)args[1];            if (WaferManager.Instance.IsWaferSlotLocationValid(chamber, slot))            {                if (WaferManager.Instance.CheckHasWafer(chamber, slot))                {                    WaferManager.Instance.DeleteWafer(chamber, slot);                    EV.PostMessage(ModuleName.System.ToString(), EventEnum.WaferDelete, chamber.ToString(), slot + 1);                }                else                {                    EV.PostInfoLog("System", string.Format("No wafer at {0} {1}, delete not valid", chamber.ToString(), slot + 1));                }            }            else            {                EV.PostWarningLog("System", string.Format("Invalid position,{0},{1}", chamber.ToString(), slot.ToString()));                return false;            }            return true;        }    }}
 |