Explorar o código

update loader waferSize

chenkui hai 2 meses
pai
achega
2bf0be7542

+ 7 - 0
CyberX8_RT/Devices/EFEM/Loadport.cs

@@ -186,6 +186,13 @@ namespace CyberX8_RT.Devices.EFEM
                         WaferSize = WaferSize.WS8;
                     }
                 }
+                else
+                {
+                    if (_cassete150Present)
+                    {
+                        WaferSize = WaferSize.WS6;
+                    }
+                }
             }
             else if (variable == CASSETE_150_PRESENT)
             {

+ 12 - 2
CyberX8_RT/Devices/Loader/LoaderInstallCRSRoutine.cs

@@ -14,6 +14,7 @@ using CyberX8_RT.Modules;
 using System;
 using CyberX8_RT.Modules.Transporter;
 using Aitex.Core.RT.SCCore;
+using CyberX8_RT.Modules.Loader;
 
 namespace CyberX8_RT.Devices.Loader
 {
@@ -59,6 +60,10 @@ namespace CyberX8_RT.Devices.Loader
             End
         }
 
+        #region 常量
+        private const string SIDE_A = "SideA";
+        private const string SIDE_B = "SideB";
+        #endregion
         #region 内部变量
         private string _side = "";
         private JetAxisBase _lsAxis;
@@ -179,9 +184,14 @@ namespace CyberX8_RT.Devices.Loader
         /// <exception cref="NotImplementedException"></exception>
         public RState Start(params object[] objs)
         {
-            if (SC.ContainsItem($"Loader1.{_side}WaferSize"))
+            LoaderEntity loaderEntity = Singleton<RouteManager>.Instance.GetModule<LoaderEntity>(ModuleName.Loader1.ToString());
+            if (_side == SIDE_A)
+            {
+                _waferSize = loaderEntity.SideAWaferSize;
+            }
+            else
             {
-                _waferSize = SC.GetValue<int>($"Loader1.{_side}WaferSize");
+                _waferSize = loaderEntity.SideBWaferSize;
             }
             _shuttleAxis = GetShuttleAxis();
             _lsAxis = GetLsAxis();

+ 13 - 2
CyberX8_RT/Devices/Loader/LoaderLoadRoutine.cs

@@ -70,6 +70,12 @@ namespace CyberX8_RT.Devices.Loader
             End
  
         }
+
+        #region 常量
+        private const string SIDE_A = "SideA";
+        private const string SIDE_B = "SideB";
+        #endregion
+
         #region 内部变量
         private string _side = "";
         private int _crsVacuumReleaseDelayInMilliseconds = 250;
@@ -268,9 +274,14 @@ namespace CyberX8_RT.Devices.Loader
         /// <returns></returns>
         public RState Start(params object[] objs)
         {
-            if (SC.ContainsItem($"Loader1.{_side}WaferSize"))
+            LoaderEntity loaderEntity = Singleton<RouteManager>.Instance.GetModule<LoaderEntity>(ModuleName.Loader1.ToString());
+            if (_side == SIDE_A)
+            {
+                _waferSize = loaderEntity.SideAWaferSize;
+            }
+            else
             {
-                _waferSize = SC.GetValue<int>($"Loader1.{_side}WaferSize");
+                _waferSize = loaderEntity.SideBWaferSize;
             }
             _crsAxis = GetCrsAxis();
             _tiltAxis = GetTiltAxis();

+ 4 - 2
CyberX8_RT/Devices/Loader/LoaderTiltAxisInterLock.cs

@@ -12,6 +12,7 @@ using MECF.Framework.Common.Equipment;
 using Aitex.Core.Util;
 using CyberX8_RT.Modules;
 using Aitex.Core.RT.SCCore;
+using CyberX8_RT.Modules.Loader;
 
 namespace CyberX8_RT.Devices.Loader
 {
@@ -97,15 +98,16 @@ namespace CyberX8_RT.Devices.Loader
             JetAxisBase shuttleAxis = null;
             double shuttleAxisPosition = 0;
             int wafersize = 0;
+            LoaderEntity loaderEntity = Singleton<RouteManager>.Instance.GetModule<LoaderEntity>(ModuleName.Loader1.ToString());
             if (Name == "TiltA")
             {
                 shuttleAxis = DEVICE.GetDevice<JetAxisBase>($"{Module}.ShuttleA");
-                wafersize = SC.GetValue<int>("Loader1.SideAWaferSize");
+                wafersize = loaderEntity.SideAWaferSize;
             }
             else
             {
                 shuttleAxis = DEVICE.GetDevice<JetAxisBase>($"{Module}.ShuttleB");
-                wafersize = SC.GetValue<int>("Loader1.SideBWaferSize");
+                wafersize = loaderEntity.SideBWaferSize;
             }
             if (shuttleAxis != null)
             {

+ 14 - 2
CyberX8_RT/Devices/Loader/LoaderUnloadRoutine.cs

@@ -18,6 +18,7 @@ using System.Threading.Tasks;
 using MECF.Framework.Common.CommonData.Loader;
 using CyberX8_RT.Modules.Transporter;
 using Aitex.Core.RT.SCCore;
+using CyberX8_RT.Modules.Loader;
 
 namespace CyberX8_RT.Devices.Loader
 {
@@ -57,7 +58,10 @@ namespace CyberX8_RT.Devices.Loader
             WSBladderOffCheck,            
             End
         }
-
+        #region 常量
+        private const string SIDE_A = "SideA";
+        private const string SIDE_B = "SideB";
+        #endregion
 
         #region 内部变量
         private string _side = "";
@@ -264,7 +268,15 @@ namespace CyberX8_RT.Devices.Loader
         /// <exception cref="NotImplementedException"></exception>
         public RState Start(params object[] objs)
         {
-            _waferSize = SC.GetValue<int>($"Loader1.{_side}WaferSize");
+            LoaderEntity loaderEntity = Singleton<RouteManager>.Instance.GetModule<LoaderEntity>(ModuleName.Loader1.ToString());
+            if (_side == SIDE_A)
+            {
+                _waferSize = loaderEntity.SideAWaferSize;
+            }
+            else
+            {
+                _waferSize = loaderEntity.SideBWaferSize;
+            }
             _shuttleAxis = GetShuttleAxis();
             _lsAxis = GetCrsAxis();
             _tiltAxis = GetTiltAxis();

+ 2 - 4
CyberX8_RT/Dispatch/JobProcesser.cs

@@ -296,10 +296,8 @@ namespace CyberX8_RT.Dispatch
                     ClearWafersSeqName(cj);
                     return false;
                 }
-
-                int sideAWaferSize = SC.GetValue<int>($"Loader1.SideAWaferSize");
-                int sideBWaferSize = SC.GetValue<int>($"Loader1.SideBWaferSize");
-                if ((int)waferSize != sideAWaferSize && (int)waferSize != sideBWaferSize)
+                LoaderEntity loaderEntity = Singleton<RouteManager>.Instance.GetModule<LoaderEntity>(ModuleName.Loader1.ToString());
+                if ((int)waferSize != loaderEntity.SideAWaferSize && (int)waferSize != loaderEntity.SideBWaferSize)
                 {
                     reason = $"loader is not matched wafer wafersize {waferSize}";
                     LOG.WriteLog(eEvent.WARN_ROUTER, ModuleName.System.ToString(), reason);

+ 6 - 5
CyberX8_RT/Dispatch/WaferTaskManager.cs

@@ -17,6 +17,7 @@ using System.Text;
 using System.Threading.Tasks;
 using System.Windows.Markup;
 using Aitex.Core.RT.SCCore;
+using CyberX8_RT.Modules.Loader;
 
 namespace CyberX8_RT.Dispatch
 {
@@ -295,9 +296,8 @@ namespace CyberX8_RT.Dispatch
         /// <returns></returns>
         private bool CheckLoaderHasSameWaferSize()
         {
-            int sideAWaferSize = SC.GetValue<int>($"Loader1.SideAWaferSize");
-            int sideBWaferSize = SC.GetValue<int>($"Loader1.SideBWaferSize");
-            return sideAWaferSize == sideBWaferSize;
+            LoaderEntity loaderEntity = Singleton<RouteManager>.Instance.GetModule<LoaderEntity>(ModuleName.Loader1.ToString());
+            return loaderEntity.SideAWaferSize == loaderEntity.SideBWaferSize;
         }
         /// <summary>
         /// Loader两边尺寸不一致,解析Loader使用side
@@ -306,8 +306,9 @@ namespace CyberX8_RT.Dispatch
         /// <returns></returns>
         private string AnalyseLoadSide(SequenceRecipe recipe)
         {
-            int sideAWaferSize = SC.GetValue<int>($"Loader1.SideAWaferSize");
-            int sideBWaferSize = SC.GetValue<int>($"Loader1.SideBWaferSize");
+            LoaderEntity loaderEntity = Singleton<RouteManager>.Instance.GetModule<LoaderEntity>(ModuleName.Loader1.ToString());
+            int sideAWaferSize = loaderEntity.SideAWaferSize;
+            int sideBWaferSize = loaderEntity.SideBWaferSize;
             if (sideAWaferSize != sideBWaferSize)
             {
                 if(recipe.SubstrateSize==sideAWaferSize)

+ 15 - 3
CyberX8_RT/Modules/Loader/LoaderEntity.cs

@@ -96,6 +96,8 @@ namespace CyberX8_RT.Modules.Loader
         {
             get { return _rotationAxis.IsSwitchOn; }
         }
+
+        
         /// <summary>
         /// ShuttleA是否SwitchOn
         /// </summary>
@@ -143,6 +145,14 @@ namespace CyberX8_RT.Modules.Loader
         /// WaferHolder信息
         /// </summary>
         public WaferHolderInfo WaferHolderInfo { get { return WaferHolderManager.Instance.GetWaferHolder("Loader"); } }
+        /// <summary>
+        /// A面Wafer尺寸
+        /// </summary>
+        public int SideAWaferSize { get { return _sideAWaferSize; } }
+        /// <summary>
+        /// B面Wafer尺寸
+        /// </summary>
+        public int SideBWaferSize { get { return _sideBWaferSize; } }
         #endregion
 
         #region 内部变量
@@ -165,6 +175,8 @@ namespace CyberX8_RT.Modules.Loader
         LoaderSideDevice _sideA;
         LoaderSideDevice _sideB;
         LoaderCommonDevice _loaderCommon;
+        int _sideAWaferSize;
+        int _sideBWaferSize;
         #endregion
 
         #region routine
@@ -244,6 +256,8 @@ namespace CyberX8_RT.Modules.Loader
             _sideB = DEVICE.GetDevice<LoaderSideDevice>($"{Module}.SideB");
             _loaderCommon = DEVICE.GetDevice<LoaderCommonDevice>($"{module}.Common");
             WaferManager.Instance.SubscribeLocation(Module, 2);
+            _sideAWaferSize = SC.GetValue<int>("Loader1.SideAWaferSize");
+            _sideBWaferSize = SC.GetValue<int>("Loader1.SideBWaferSize");
             InitialOperation();
             InitializeRoutine();
             InitialDATA();
@@ -374,9 +388,7 @@ namespace CyberX8_RT.Modules.Loader
         /// <returns></returns>
         public bool CheckLoaderWaferSizeNotEqual()
         {
-            int sideAWaferSize = SC.GetValue<int>($"Loader1.SideAWaferSize");
-            int sideBWaferSize = SC.GetValue<int>($"Loader1.SideBWaferSize");
-            return sideAWaferSize != sideBWaferSize;
+            return _sideAWaferSize != _sideBWaferSize;
         }
         #region Abort
         private bool Abort(object parameter)

+ 3 - 8
CyberX8_RT/Modules/Loader/LoaderHomeAllRoutine.cs

@@ -137,14 +137,9 @@ namespace CyberX8_RT.Modules.Loader
         {
             _sideADevice = DEVICE.GetDevice<LoaderSideDevice>($"{Module}.SideA");
             _sideBDevice = DEVICE.GetDevice<LoaderSideDevice>($"{Module}.SideB");
-            if (SC.ContainsItem($"Loader1.SideAWaferSize"))
-            {
-                _sideAWaferSize = SC.GetValue<int>($"Loader1.SideAWaferSize");
-            }
-            if (SC.ContainsItem($"Loader1.SideBWaferSize"))
-            {
-                _sideBWaferSize = SC.GetValue<int>($"Loader1.SideBWaferSize");
-            }
+            LoaderEntity loaderEntity = Singleton<RouteManager>.Instance.GetModule<LoaderEntity>(ModuleName.Loader1.ToString());
+            _sideAWaferSize = loaderEntity.SideAWaferSize;
+            _sideBWaferSize = loaderEntity.SideBWaferSize;
             Runner.Start(Module, "Home All");
             return RState.Running;
         }

+ 10 - 1
CyberX8_RT/Modules/Loader/LoaderLoadSideRoutine.cs

@@ -18,6 +18,7 @@ using MECF.Framework.Common.Persistent.Temperature;
 using MECF.Framework.Common.WaferHolder;
 using Aitex.Core.Common;
 using Aitex.Core.RT.SCCore;
+using Aitex.Core.Util;
 
 namespace CyberX8_RT.Modules.Loader
 {
@@ -323,7 +324,15 @@ namespace CyberX8_RT.Modules.Loader
             {
                 _waferGroup= objs[3].ToString();
             }
-            _waferSize = SC.GetValue<int>($"Loader1.{_side}WaferSize");
+            LoaderEntity loaderEntity = Singleton<RouteManager>.Instance.GetModule<LoaderEntity>(ModuleName.Loader1.ToString());
+            if (_side == SIDE_A)
+            {
+                _waferSize = loaderEntity.SideAWaferSize;
+            }
+            else
+            {
+                _waferSize = loaderEntity.SideBWaferSize;
+            }
             InitializeParameters();
             _loaderCommon = DEVICE.GetDevice<LoaderCommonDevice>($"{Module}.Common");
             _loaderSide = DEVICE.GetDevice<LoaderSideDevice>($"{Module}.{_side}");

+ 14 - 5
CyberX8_RT/Modules/Loader/LoaderUnloadSideRoutine.cs

@@ -13,6 +13,7 @@ using MECF.Framework.Common.CommonData.Loader;
 using MECF.Framework.Common.CommonData;
 using Aitex.Core.RT.DataCenter;
 using Aitex.Core.RT.SCCore;
+using Aitex.Core.Util;
 
 namespace CyberX8_RT.Modules.Loader
 {
@@ -56,13 +57,13 @@ namespace CyberX8_RT.Modules.Loader
         /// </summary>
         private List<LoaderLotTrackData> _datas = new List<LoaderLotTrackData>();
         /// <summary>
-        /// WaferSize
-        /// </summary>
-        private int _waferSize;
-        /// <summary>
         /// Wafer组
         /// </summary>
         private string _waferGroup;
+        /// <summary>
+        /// Wafer尺寸
+        /// </summary>
+        private int _waferSize;
         #endregion
 
         #region 属性
@@ -224,7 +225,15 @@ namespace CyberX8_RT.Modules.Loader
             {
                 _waferGroup = objs[1].ToString();
             }
-            _waferSize = SC.GetValue<int>($"Loader1.{_side}WaferSize");
+            LoaderEntity loaderEntity=Singleton<RouteManager>.Instance.GetModule<LoaderEntity>(ModuleName.Loader1.ToString());
+            if (_side == SIDE_A)
+            {
+                _waferSize = loaderEntity.SideAWaferSize;
+            }
+            else
+            {
+                _waferSize = loaderEntity.SideBWaferSize;
+            }
             InitializeParameters();
             _loaderCommon = DEVICE.GetDevice<LoaderCommonDevice>($"{Module}.Common");
             _loaderSide = DEVICE.GetDevice<LoaderSideDevice>($"{Module}.{_side}");

+ 10 - 2
CyberX8_RT/Modules/PUF/PufOnlyPlaceToLoaderRoutine.cs

@@ -15,6 +15,8 @@ using System.Text;
 using System.Threading.Tasks;
 using Aitex.Core.Common;
 using Aitex.Core.RT.SCCore;
+using Aitex.Core.Util;
+using CyberX8_RT.Modules.Loader;
 
 namespace CyberX8_RT.Modules.PUF
 {
@@ -297,9 +299,15 @@ namespace CyberX8_RT.Modules.PUF
             GetCrsAxis();
             _isSecondPlaceVacuumCheck = false;
             _pufPlaceVacuumCheckRoutine = new PufPlaceVacuumCheckRoutine(Module);
-            if (SC.ContainsItem($"Loader1.{_loaderSide}WaferSize"))
+
+            LoaderEntity loaderEntity = Singleton<RouteManager>.Instance.GetModule<LoaderEntity>(ModuleName.Loader1.ToString());
+            if (_loaderSide == SideA)
+            {
+                _waferSize = loaderEntity.SideAWaferSize;
+            }
+            else
             {
-                _waferSize = SC.GetValue<int>($"Loader1.{_loaderSide}WaferSize");
+                _waferSize = loaderEntity.SideBWaferSize;
             }
             return Runner.Start(Module, "Start Place To Loader");
         }

+ 45 - 4
CyberX8_RT/Modules/Rinse/RinseCycleManualProcessRecipeRoutine.cs

@@ -95,7 +95,6 @@ namespace CyberX8_RT.Modules.Rinse
         /// <param name="module"></param>
         public RinseCycleManualProcessRecipeRoutine(string module) : base(module)
         {
-           
             _rinseFirstStepRoutine = new RinseFirstStepRoutine(module);
             _rinseSecondStepRoutine =  new RinseSecondStepRoutine(module);
             _rinseThirdStepRoutine = new RinseThirdStepRoutine(module);
@@ -152,16 +151,16 @@ namespace CyberX8_RT.Modules.Rinse
             LottrackRecord();
             Runner.LoopStart(CycleManualRunRecipeStep.LoopStart, "Loop Start ManualRunRecipe", _cycle, NullFun, _delay_1ms)
                 
-                .LoopRun(CycleManualRunRecipeStep.LoopRunFirstStep, () => _rinseFirstStepRoutine.Start(param) == RState.Running, _delay_1ms)
+                .LoopRun(CycleManualRunRecipeStep.LoopRunFirstStep, startFirstRoutine, _delay_1ms)
                 .LoopRunWithStopStatus(CycleManualRunRecipeStep.LoopWaitRunFirstStepProcess, () => CommonFunction.CheckRoutineEndState(_rinseFirstStepRoutine), 
                     () => { return CheckRoutineStopStatus(_rinseFirstStepRoutine, _rinseFirstStepRoutine.ErrorMsg, 0); })
                 .LoopDelay(CycleManualRunRecipeStep.LoopFirstStepDelay, _delay_1ms)                
-                .LoopRun(CycleManualRunRecipeStep.LoopRunSecondStep, () => _rinseSecondStepRoutine.Start(param) == RState.Running, _delay_1ms)
+                .LoopRun(CycleManualRunRecipeStep.LoopRunSecondStep, startSecondRoutine, _delay_1ms)
                 .LoopRunWithStopStatus(CycleManualRunRecipeStep.LoopWaitRunSecondStepProcess, () => CommonFunction.CheckRoutineEndState(_rinseSecondStepRoutine),
                     () => { return CheckRoutineStopStatus(_rinseSecondStepRoutine, _rinseSecondStepRoutine.ErrorMsg, 0); })
                 .LoopDelay(CycleManualRunRecipeStep.LoopSecondStepDelay, _delay_1ms)
                 
-                .LoopRunIf(CycleManualRunRecipeStep.LoopRunThirdStep, _recipe.FinalRinseDry == true, () => _rinseThirdStepRoutine.Start(param) == RState.Running, _delay_1ms)
+                .LoopRunIf(CycleManualRunRecipeStep.LoopRunThirdStep, _recipe.FinalRinseDry == true, startThirdRoutine, _delay_1ms)
                 .LoopRunIfWithStopStatus(CycleManualRunRecipeStep.LoopWaitRunThirdStepProcess, _recipe.FinalRinseDry == true, () => CommonFunction.CheckRoutineEndState(_rinseThirdStepRoutine), 
                     () => { return CheckRoutineStopStatus(_rinseThirdStepRoutine, _rinseThirdStepRoutine.ErrorMsg, 0); })
                 .LoopRunIf(CycleManualRunRecipeStep.LoopThirdStepDelay, _recipe.FinalRinseDry == true, NullFun, _delay_1ms)
@@ -171,6 +170,48 @@ namespace CyberX8_RT.Modules.Rinse
             return Runner.Status;
         }
         /// <summary>
+        /// 启动第一阶段Rinse
+        /// </summary>
+        /// <returns></returns>
+        private bool startFirstRoutine()
+        {
+            bool result = _rinseFirstStepRoutine.Start(param) == RState.Running;
+            if (!result)
+            {
+                AddLotTrackData();
+                NotifyError(eEvent.ERR_RINSE, _rinseFirstStepRoutine.ErrorMsg, 0);
+            }
+            return result;
+        }
+        /// <summary>
+        /// 启动第二阶段Rinse
+        /// </summary>
+        /// <returns></returns>
+        private bool startSecondRoutine()
+        {
+            bool result = _rinseSecondStepRoutine.Start(param) == RState.Running;
+            if (!result)
+            {
+                AddLotTrackData();
+                NotifyError(eEvent.ERR_RINSE, _rinseSecondStepRoutine.ErrorMsg, 0);
+            }
+            return result;
+        }
+        /// <summary>
+        /// 启动第三阶段Rinse
+        /// </summary>
+        /// <returns></returns>
+        private bool startThirdRoutine()
+        {
+            bool result = _rinseThirdStepRoutine.Start(param) == RState.Running;
+            if (!result)
+            {
+                AddLotTrackData();
+                NotifyError(eEvent.ERR_RINSE, _rinseThirdStepRoutine.ErrorMsg, 0);
+            }
+            return result;
+        }
+        /// <summary>
         /// 检验Routine停止状态
         /// </summary>
         /// <param name="routine"></param>

+ 0 - 2
CyberX8_RT/Modules/RouteManager.cs

@@ -213,8 +213,6 @@ namespace CyberX8_RT.Modules
 
             SubscribeOperation();
             SubscribeDataVariable();
-
-            SchedulerSequenceManager.Instance.Initialize();
         }
         /// <summary>
         /// 初始化模块集合

+ 5 - 0
CyberX8_RT/Schedulers/SchedulerManager.cs

@@ -184,6 +184,11 @@ namespace CyberX8_RT.Schedulers
                 {
                     continue;
                 }
+                if (!waferHolderInfo.Enabled || waferHolderInfo.WaferSize != (int)waferSize || waferHolderInfo.CrsType != crsType 
+                    || !CheckChemistry(waferHolderInfo, chemistries))
+                {
+                    continue;
+                }
                 if(!Enum.TryParse(item,out ModuleName dryerModuleName))
                 {
                     continue;

+ 6 - 17
CyberX8_RT/Schedulers/SchedulerSequenceManager.cs

@@ -48,19 +48,6 @@ namespace CyberX8_RT.Schedulers
         private const string TRNPA = "TRNPA";
         private const string TRNPB = "TRNPB";
         #endregion
-
-        #region 内部变量
-        private int _sideAWaferSize = 0;
-        private int _sideBWaferSize = 0;
-        #endregion
-        /// <summary>
-        /// 初始化
-        /// </summary>
-        public void Initialize()
-        {
-            _sideAWaferSize = SC.GetValue<int>($"Loader1.SideAWaferSize");
-            _sideBWaferSize = SC.GetValue<int>($"Loader1.SideBWaferSize");
-        }
         /// <summary>
         /// 解析Wafer所有调度工序
         /// </summary>
@@ -200,16 +187,17 @@ namespace CyberX8_RT.Schedulers
         /// <returns></returns>
         private string AnalyseLoadTransporterSide(SequenceRecipe sequenceRecipe,int productWaferCount,int dummyWaferCount)
         {
+            LoaderEntity loaderEntity = Singleton<RouteManager>.Instance.GetModule<LoaderEntity>(ModuleName.Loader1.ToString());
             //单片,同时loader两边尺寸不一致
-            if ((productWaferCount == 1||dummyWaferCount==1) && _sideAWaferSize != _sideBWaferSize)
+            if ((productWaferCount == 1||dummyWaferCount==1) && loaderEntity.SideAWaferSize != loaderEntity.SideBWaferSize)
             {
                 //recipe使用B面工艺,但loader A面与recipe尺寸一致
-                if (sequenceRecipe.LastSingleWaferToSideB && sequenceRecipe.SubstrateSize == _sideAWaferSize)
+                if (sequenceRecipe.LastSingleWaferToSideB && sequenceRecipe.SubstrateSize == loaderEntity.SideAWaferSize)
                 {
                     return "TRNPB";
                 }
                 //recipe使用A面工艺,但loader B面与recipe尺寸一致
-                else if (!sequenceRecipe.LastSingleWaferToSideB && sequenceRecipe.SubstrateSize == _sideBWaferSize)
+                else if (!sequenceRecipe.LastSingleWaferToSideB && sequenceRecipe.SubstrateSize == loaderEntity.SideBWaferSize)
                 {
                     return "TRNPB";
                 }
@@ -258,7 +246,8 @@ namespace CyberX8_RT.Schedulers
         /// <returns></returns>
         private bool CheckLoaderWaferSizeNotEqual()
         {
-            return _sideAWaferSize != _sideBWaferSize;
+            LoaderEntity loaderEntity = Singleton<RouteManager>.Instance.GetModule<LoaderEntity>(ModuleName.Loader1.ToString());
+            return loaderEntity.SideAWaferSize != loaderEntity.SideBWaferSize;
         }
         /// <summary>
         /// 创建LoaderTrasporter同步模块消息