Browse Source

Force System Restart after change IsATM mode configuration item and add abort process.

sangwq 1 year ago
parent
commit
69eff33372

+ 32 - 32
Venus/Venus_RT/Devices/JetKepler2200APM.cs

@@ -3,6 +3,7 @@ using Aitex.Core.RT.Device;
 using Aitex.Core.RT.Device.Unit;
 using Aitex.Core.RT.SCCore;
 using Aitex.Core.RT.Log;
+using Aitex.Core.Util;
 using MECF.Framework.Common.Device.Bases;
 using MECF.Framework.Common.Equipment;
 using System;
@@ -13,6 +14,7 @@ using Venus_RT.Devices.EPD;
 using MECF.Framework.Common.SubstrateTrackings;
 using IoMfc = Venus_RT.Devices.IODevices.IoMfc;
 using System.Threading.Tasks;
+using Venus_RT.Modules;
 
 namespace Venus_RT.Devices
 {
@@ -635,39 +637,37 @@ namespace Venus_RT.Devices
 
         public override bool SetSlitDoor(bool open, out string reason)
         {
-            reason = string.Empty;
+            if (open)
+            {
+                if (Singleton<RouteManager>.Instance.IsATMMode)
+                {
+                    if (!IsATM)
+                    {
+                        reason = $"{Module} is not ATM, can not open slit door";
+                        LOG.Write(eEvent.ERR_DEVICE_INFO, Module, reason);
+                        return false;
+                    }
+
+                    if (!IsTMATM)
+                    {
+                        reason = $"LoadLock is not ATM, can not open slit door";
+                        LOG.Write(eEvent.ERR_DEVICE_INFO, Module, reason);
+                        return false;
+                    }
+                }
+                else
+                {
+
+                    double maxPressureDifference = SC.GetValue<double>("System.PMTMMaxPressureDifference");
+                    if (Math.Abs(TMPressure - ChamberPressure) > maxPressureDifference)
+                    {
+                        reason = $"{Module} and TM pressure difference exceeds the max limit {maxPressureDifference}";
+                        LOG.Write(eEvent.ERR_DEVICE_INFO, Module, reason);
+                        return false;
+                    }
+                }
 
-            //if(open)
-            //{
-            //    bool _isATMMode = SC.GetValue<bool>("System.IsATMMode");
-            //    if(_isATMMode)
-            //    {
-            //        if(!IsATM)
-            //        {
-            //            reason = $"{Module} is not ATM, can not open slit door";
-            //            LOG.Write(eEvent.ERR_DEVICE_INFO, Module, reason);
-            //            return false;
-            //        }
-
-            //        if(!IsATMLoadlock)
-            //        {
-            //            reason = $"LoadLock is not ATM, can not open slit door";
-            //            LOG.Write(eEvent.ERR_DEVICE_INFO, Module, reason);
-            //            return false;
-            //        }
-            //    }
-            //    else
-            //    {
-            //        double maxPressureDifference = SC.GetValue<double>("System.PMLLMaxPressureDifference");
-            //        if (Math.Abs(LoadlockPressure - ChamberPressure) > maxPressureDifference)
-            //        {
-            //            reason = $"{Module} and Loadlock pressure difference exceeds the max limit {maxPressureDifference}";
-            //            LOG.Write(eEvent.ERR_DEVICE_INFO, Module, reason);
-            //            return false;
-            //        }
-            //    }
-
-            //}
+            }
 
             return _slitDoor.SetCylinder(open, out reason);
         }

+ 3 - 4
Venus/Venus_RT/Devices/JetKepler2300PM.cs

@@ -3,11 +3,13 @@ using Aitex.Core.RT.Device;
 using Aitex.Core.RT.Device.Unit;
 using Aitex.Core.RT.SCCore;
 using Aitex.Core.RT.Log;
+using Aitex.Core.Util;
 using MECF.Framework.Common.Device.Bases;
 using MECF.Framework.Common.Equipment;
 using System;
 using System.Collections.Generic;
 using Venus_Core;
+using Venus_RT.Modules;
 using Venus_RT.Devices.IODevices;
 using Venus_RT.Devices.EPD;
 using MECF.Framework.Common.SubstrateTrackings;
@@ -686,12 +688,9 @@ namespace Venus_RT.Devices
 
         public override bool SetSlitDoor(bool open, out string reason)
         {
-            reason = string.Empty;
-
             if (open)
             {
-                bool _isATMMode = SC.GetValue<bool>("System.IsATMMode");
-                if (_isATMMode)
+                if (Singleton<RouteManager>.Instance.IsATMMode)
                 {
                     if (!IsATM)
                     {

+ 0 - 1
Venus/Venus_RT/Devices/JetPMBase.cs

@@ -5,7 +5,6 @@ using Aitex.Core.Util;
 using MECF.Framework.Common.Equipment;
 using System.Collections.Generic;
 using Venus_Core;
-
 using Aitex.Core.RT.Device.Unit;
 using Venus_RT.Modules;
 using System;

+ 4 - 4
Venus/Venus_RT/Devices/JetVenusPM.cs

@@ -3,6 +3,7 @@ using Aitex.Core.RT.Device;
 using Aitex.Core.RT.Device.Unit;
 using Aitex.Core.RT.SCCore;
 using Aitex.Core.RT.Log;
+using Aitex.Core.Util;
 using MECF.Framework.Common.Device.Bases;
 using MECF.Framework.Common.Equipment;
 using System;
@@ -14,6 +15,7 @@ using MECF.Framework.Common.SubstrateTrackings;
 using IoMfc = Venus_RT.Devices.IODevices.IoMfc;
 using System.Threading.Tasks;
 using Aitex.Core.RT.DataCenter;
+using Venus_RT.Modules;
 
 namespace Venus_RT.Devices
 {
@@ -653,12 +655,9 @@ namespace Venus_RT.Devices
 
         public override bool SetSlitDoor(bool open, out string reason)
         {
-          
-            reason = string.Empty;
             if (open)
             {
-                bool _isATMMode = SC.GetValue<bool>("System.IsATMMode");
-                if (_isATMMode)
+                if (Singleton<RouteManager>.Instance.IsATMMode)
                 {
                     if (!IsATM)
                     {
@@ -687,6 +686,7 @@ namespace Venus_RT.Devices
                 }
 
             }
+
             return _slitDoor.SetCylinder(open, out reason);
         }
 

+ 3 - 4
Venus/Venus_RT/Devices/TM/JetTM.cs

@@ -108,7 +108,6 @@ namespace Venus_RT.Devices
         private readonly PumpBase _LLPump;
 
         private readonly IoTMPressureCtrl _presureCtrl;
-        private readonly bool _isATMMode;
 
         public bool TMLidClosed => _TMLid.OFFFeedback;
         public bool LLALidClosed => _LLALid.OFFFeedback;
@@ -377,8 +376,8 @@ namespace Venus_RT.Devices
                 TurnMFSlitDoor(module, (bool)args[1], out _);
                 return true;
             });
-            _isATMMode = SC.GetValue<bool>("System.IsATMMode");
-            _TMVacAtmMode.TurnValve(_isATMMode, out string _);
+
+            _TMVacAtmMode.TurnValve(Singleton<RouteManager>.Instance.IsATMMode, out string _);
 
         }
 
@@ -701,7 +700,7 @@ namespace Venus_RT.Devices
 
             if (open)
             {
-                if (_isATMMode)
+                if (Singleton<RouteManager>.Instance.IsATMMode)
                 {
                     if (!IsTMATM)
                     {

+ 1 - 1
Venus/Venus_RT/Modules/AutoCycle.cs

@@ -286,7 +286,7 @@ namespace Venus_RT.Modules
                     return;
                 }
 
-                if (!SC.GetValue<bool>("System.IsATMMode") && !CheckSequenceRecipeFileValid(pj.Sequence, out reason))
+                if (!Singleton<RouteManager>.Instance.IsATMMode && !CheckSequenceRecipeFileValid(pj.Sequence, out reason))
                 {
                     LOG.Write(eEvent.WARN_ROUTER, ModuleName.System, $"recipe file not valid in the sequence, {reason}");
                     _faCallback.JobCreateFailed(module, lotId, jobId, "");

+ 4 - 6
Venus/Venus_RT/Modules/LLs/LLEntity.cs

@@ -93,7 +93,6 @@ namespace Venus_RT.Modules
         private readonly MFVentRoutine _ventingRoutine;
         private readonly MFLeakCheckRoutine _leakCheckRoutine;
         private readonly MFPurgeRoutine _purgeRoutine;
-        private bool _isATMMode;
         public LLEntity(ModuleName module)
         {
             Module = module;
@@ -105,7 +104,6 @@ namespace Venus_RT.Modules
             _leakCheckRoutine   = new MFLeakCheckRoutine(_JetTM, Module);
             _purgeRoutine       = new MFPurgeRoutine(_JetTM, Module);
 
-            _isATMMode = SC.GetValue<bool>("System.IsATMMode");
 
             var soltCount= SC.GetValue<int>($"{module.ToString()}.SlotNumber");
             WaferManager.Instance.SubscribeLocation(Module, soltCount);
@@ -379,7 +377,7 @@ namespace Venus_RT.Modules
 
         private bool FnStartPrepareTM(object[] param)
         {
-            if (_isATMMode)
+            if (Singleton<RouteManager>.Instance.IsATMMode)
                 return true;
 
             return _pumpingRoutine.Start() == RState.Running;
@@ -387,7 +385,7 @@ namespace Venus_RT.Modules
 
         private bool FnPreparaTMTimeout(object[] param)
         {
-            if(_isATMMode)
+            if (Singleton<RouteManager>.Instance.IsATMMode)
             {
                 if (fsm.ElapsedTime > 10000)
                 {
@@ -418,7 +416,7 @@ namespace Venus_RT.Modules
 
         private bool FnStartPrepareEFEM(object[] param)
         {
-            if (_isATMMode)
+            if (Singleton<RouteManager>.Instance.IsATMMode)
                 return true;
 
             return _ventingRoutine.Start() == RState.Running;
@@ -426,7 +424,7 @@ namespace Venus_RT.Modules
 
         private bool FnPrepareEFEMTimeout(object[] param)
         {
-            if (_isATMMode)
+            if (Singleton<RouteManager>.Instance.IsATMMode)
             {
                 if (fsm.ElapsedTime > 10000)
                 {

+ 4 - 0
Venus/Venus_RT/Modules/ManualTransfer.cs

@@ -147,6 +147,8 @@ namespace Venus_RT.Modules
         public void Clear()
         {
             _moveTaskQueue.Clear();
+            Singleton<TransferModule>.Instance.GetScheduler(ModuleName.TMRobot).ResetTask();
+            Singleton<TransferModule>.Instance.GetScheduler(ModuleName.EfemRobot).ResetTask();
         }
 
         private RState MoveWaferForward()
@@ -363,6 +365,8 @@ namespace Venus_RT.Modules
         public void Clear()
         {
             _returnTaskQueue.Clear();
+            Singleton<TransferModule>.Instance.GetScheduler(ModuleName.TMRobot).ResetTask();
+            Singleton<TransferModule>.Instance.GetScheduler(ModuleName.EfemRobot).ResetTask();
         }
 
         private void PushWaferToReturnQueqe(ModuleName mod, int nSlot)

+ 2 - 3
Venus/Venus_RT/Modules/PMs/LLPickRoutine.cs

@@ -1,5 +1,6 @@
 using Aitex.Core.RT.Routine;
 using Aitex.Core.RT.SCCore;
+using Aitex.Core.Util;
 using Venus_RT.Devices;
 using MECF.Framework.Common.Equipment;
 using MECF.Framework.Common.SubstrateTrackings;
@@ -23,7 +24,6 @@ namespace Venus_RT.Modules.PMs
         private readonly LoadLockVentRoutine _loadLockVentRoutine;
         private int _prepareTransferTimeout = 120;
         private int _transferWaferTimeout = 120;
-        private bool _isATMMode = false;
         public LLPickRoutine(JetPMBase chamber, LoadLockVentRoutine ventRoutine) : base(chamber)
         {
             Name = "PickWafer";
@@ -34,7 +34,6 @@ namespace Venus_RT.Modules.PMs
         {
             _prepareTransferTimeout = SC.GetValue<int>($"{Module}.PrepareTransferTimeout");
             _transferWaferTimeout = SC.GetValue<int>($"{Module}.TransferWaferTimeout");
-            _isATMMode = SC.GetValue<bool>("System.IsATMMode");
 
             if(WaferManager.Instance.CheckNoWafer(ModuleName.PMA, 0))
             {
@@ -54,7 +53,7 @@ namespace Venus_RT.Modules.PMs
                 return RState.Failed;
             }
 
-            if (_isATMMode)
+            if (Singleton<RouteManager>.Instance.IsATMMode)
             {
                 if (!_chamber.IsATM || !_chamber.IsATMLoadlock)
                 {

+ 4 - 4
Venus/Venus_RT/Modules/PMs/LLPlaceRoutine.cs

@@ -1,11 +1,13 @@
 using Aitex.Core.RT.Routine;
 using Aitex.Core.RT.SCCore;
 using Venus_RT.Devices;
+using Aitex.Core.Util;
 using MECF.Framework.Common.Equipment;
 using MECF.Framework.Common.SubstrateTrackings;
 using System.Diagnostics;
 using System.Collections.Generic;
 using Venus_Core;
+using Venus_RT.Modules;
 namespace Venus_RT.Modules.PMs
 {
     class LLPlaceRoutine : PMRoutineBase, IRoutine
@@ -23,7 +25,6 @@ namespace Venus_RT.Modules.PMs
 
         private int _prepareTransferTimeout = 120;
         private int _transferWaferTimeout = 120;
-        private bool _isATMMode = false;
         public LLPlaceRoutine(JetPMBase chamber) : base(chamber)
         {
             Name = "PlaceWafer";
@@ -33,7 +34,6 @@ namespace Venus_RT.Modules.PMs
         {
             _prepareTransferTimeout = SC.GetValue<int>($"{Module}.PrepareTransferTimeout");
             _transferWaferTimeout = SC.GetValue<int>($"{Module}.TransferWaferTimeout");
-            _isATMMode = SC.GetValue<bool>("System.IsATMMode");
 
             if (WaferManager.Instance.CheckHasWafer(ModuleName.PMA, 0))
             {
@@ -47,7 +47,7 @@ namespace Venus_RT.Modules.PMs
                 return RState.Failed;
             }
 
-            if (_isATMMode)
+            if (Singleton<RouteManager>.Instance.IsATMMode)
             {
                 if (!_chamber.IsATM || !_chamber.IsATMLoadlock)
                 {
@@ -115,7 +115,7 @@ namespace Venus_RT.Modules.PMs
 
         private bool OpenFastPump()
         {
-            if (!_isATMMode)
+            if (!Singleton<RouteManager>.Instance.IsATMMode)
                 _chamber.OpenValve(ValveType.FastPump, true);
 
             return true;

+ 12 - 0
Venus/Venus_RT/Modules/RouteManager.cs

@@ -122,12 +122,21 @@ namespace Venus_RT.Modules
             }
         }
 
+        public bool IsATMMode
+        {
+            get
+            {
+                return _isATMMode;
+            }
+        }
+
         private TMCycle _TMCycle;
         private AutoCycle _AutoCycle;
         private ManualTransfer _manualTransfer;
         private ReturnAllWafer _returnWafer;
 
         private bool _isWaitUnload;
+        private bool _isATMMode;
 
         public RouteManager()
         {
@@ -159,6 +168,7 @@ namespace Venus_RT.Modules
 
             fsm = new StateMachine<RouteManager>(Name, (int)RtState.Init, 200);
 
+            _isATMMode = SC.GetValue<bool>("System.IsATMMode");
             SubscribeOperation();
             SubscribeDataVariable();
         }
@@ -691,6 +701,8 @@ namespace Venus_RT.Modules
 
         private bool FsmAbort(object[] objs)
         {
+            _manualTransfer.Clear();
+            _returnWafer.Clear();
             return true;
         }
 

+ 2 - 2
Venus/Venus_RT/Modules/Schedulers/SchedulerPM.cs

@@ -215,7 +215,7 @@ namespace Venus_RT.Scheduler
             _task = TaskType.Process;
             LogTaskStart(_task, $"recipe: {recipeName}, clean: {isCleanRecipe}, with wafer: {withWafer}");
 
-            if (SC.GetValue<bool>("System.IsATMMode"))
+            if (Singleton<RouteManager>.Instance.IsATMMode)
             {
                 int time = SC.GetValue<int>("System.ATMCyclePMDelayTime");
                 _timerProcess.Start(time * 1000);
@@ -268,7 +268,7 @@ namespace Venus_RT.Scheduler
                 case TaskType.IdleCleanProcess:
                 case TaskType.PreJobProcess:
                 case TaskType.CompleteJobProcess:
-                    if (SC.GetValue<bool>("System.IsATMMode"))
+                    if (Singleton<RouteManager>.Instance.IsATMMode)
                     {
                         ret = _timerProcess.IsTimeout() && _entity.IsIdle;
 

+ 8 - 6
Venus/Venus_RT/Modules/TM/MFControlPressureRoutine.cs

@@ -101,12 +101,14 @@ namespace Venus_RT.Modules.TM
         }
         public void Abort()
         {
-            _JetTM.TurnFastPumpValve(ModuleName.TM, false);
-            _JetTM.TurnN2Valve(false);
-            _JetTM.TurnPurgeValve(ModuleName.TM, false);
-            _JetTM.SetTMPressure(0);
-            _JetTM.SetTMFlow(0);
-
+            if(_JetTM != null)
+            {
+                _JetTM.TurnFastPumpValve(ModuleName.TM, false);
+                _JetTM.TurnN2Valve(false);
+                _JetTM.TurnPurgeValve(ModuleName.TM, false);
+                _JetTM.SetTMPressure(0);
+                _JetTM.SetTMFlow(0);
+            }
         }
     }
 }