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 string Name { get; set; } public RouteManager() { if (SC.GetValue<bool>("System.PMAIsInstalled")) PMA = new PMEntity(ModuleName.PMA); if (SC.GetValue<bool>("System.PMBIsInstalled")) PMB = new PMEntity(ModuleName.PMB); fsm = new StateMachine<RouteManager>(Name, (int)RtState.Init, 200); } 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; } } }