| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450 | 
							- using Aitex.Core.RT.Routine;
 
- using MECF.Framework.Common.Equipment;
 
- using System;
 
- using Aitex.Core.RT.SCCore;
 
- using FurnaceRT.Equipments.PMs.Routines;
 
- using System.Collections.Generic;
 
- using FurnaceRT.Equipments.Systems;
 
- using Aitex.Core.Util;
 
- using MECF.Framework.Common.SubstrateTrackings;
 
- using System.Linq;
 
- using Aitex.Core.Common;
 
- using MECF.Framework.Common.CommonData.EnumData;
 
- using MECF.Framework.Common.DataCenter;
 
- using MECF.Framework.Common.Utilities;
 
- using Aitex.Core.RT.Log;
 
- namespace FurnaceRT.Equipments.PMs.RecipeExecutions
 
- {
 
-     public class PreProcess : PMBaseRoutine, IRoutine
 
-     {
 
-         public enum Routine
 
-         {
 
-             ToReadyProcessState,
 
-             Pump,
 
-             PinDown,
 
-         }
 
-         private string _recipeName;
 
-         private int _liftTimeout;
 
-         private bool _isProcessRecipe;
 
-         public PreProcess(ModuleName module, PMModule pm) : base(module, pm)
 
-         {
 
-             Module = module.ToString();
 
-             Name = "PreProcess";
 
-         }
 
-         public void Init(string recipeName, bool isProcessRecipe = true)
 
-         {
 
-             _recipeName = recipeName;
 
-             _isProcessRecipe = isProcessRecipe;
 
-         }
 
-         public override Result Start(params object[] objs)
 
-         {
 
-             RecipeHead recipeHead;
 
-             List<RecipeStep> recipeSteps;
 
-             Dictionary<int, List<RecipeStep>> abortRecipe;
 
-             Dictionary<int, string> abortRecipeName;
 
-             Dictionary<int, List<RecipeStep>> subRecipe;
 
-             Dictionary<int, string> subRecipeName;
 
-             string reason = string.Empty;
 
-             if (_isProcessRecipe)
 
-             {
 
-                 if (!RecipeParser.Parse(_recipeName, Module, out recipeHead, out recipeSteps, out reason, "Process"))
 
-                 {
 
-                     PMModule.PreprocessStartFailedWarning.Set($"Load process recipe {_recipeName} failed, {reason}");
 
-                     return Result.FAIL;
 
-                 }
 
-                 #region MyRegion
 
-                 var isScheduleMaintenance = SC.ContainsItem("System.EnableScheduleMaintenance") && SC.GetValue<bool>("System.EnableScheduleMaintenance");
 
-                 if (isScheduleMaintenance)
 
-                 {
 
-                     var pm = (Singleton<EquipmentManager>.Instance.Modules[ModuleName.PM1] as PMModule);
 
-                     pm.GetAllDBRecord();
 
-                     var wafers = WaferManager.Instance.GetWafers(ModuleName.PM1);
 
-                     if (wafers != null && wafers.Count() > 0)
 
-                     {
 
-                         foreach (var wafer in wafers)
 
-                         {
 
-                             if (wafer == null || wafer.IsEmpty || (wafer.WaferType != WaferType.SD && wafer.WaferType != WaferType.ED))
 
-                                 continue;
 
-                             #region New
 
-                             if (isScheduleMaintenance)
 
-                             {
 
-                                 #region  SD Dummy 时间/次数/膜厚限制
 
-                                 if (wafer.WaferType == WaferType.SD)
 
-                                 {
 
-                                     var maintenanceItemCarrierUseFreq = ScheduleMaintenanceDataManager.Instance.GetItem(MaintenanceItemEnum.SDCarrierUseFreq.ToString());
 
-                                     var maintenanceItemWaferThickness = ScheduleMaintenanceDataManager.Instance.GetItem(MaintenanceItemEnum.SDWaferThickness.ToString());
 
-                                     var maintenanceItemWaferUserTime = ScheduleMaintenanceDataManager.Instance.GetItem(MaintenanceItemEnum.SDWaferUserTime.ToString());
 
-                                     if (maintenanceItemCarrierUseFreq.StartValue > 0 && wafer.UseCount > maintenanceItemCarrierUseFreq.StartValue && wafer.UseCount < maintenanceItemCarrierUseFreq.LimitValue)
 
-                                     {
 
-                                         if (maintenanceItemCarrierUseFreq.MaintenanceProcessing == MaintenanceProcessingCommandEnum.AlarmReport.ToString() ||
 
-                                             maintenanceItemCarrierUseFreq.MaintenanceProcessing == MaintenanceProcessingCommandEnum.JobAutoStart.ToString())
 
-                                         {
 
-                                             var msg = pm.GetAlarmWarningMsg(maintenanceItemCarrierUseFreq, false, wafer.UseCount.ToString(), maintenanceItemCarrierUseFreq.StartValue.ToString(), maintenanceItemCarrierUseFreq.LimitValue.ToString());
 
-                                             Singleton<EquipmentManager>.Instance.SDWaferTypeUseCountWarning.Set(msg);
 
-                                         }
 
-                                     }
 
-                                     if (maintenanceItemWaferUserTime.StartValue > 0 && wafer.UseTime > maintenanceItemWaferUserTime.StartValue && wafer.UseTime < maintenanceItemWaferUserTime.LimitValue)
 
-                                     {
 
-                                         if (maintenanceItemWaferUserTime.MaintenanceProcessing == MaintenanceProcessingCommandEnum.AlarmReport.ToString() ||
 
-                                             maintenanceItemWaferUserTime.MaintenanceProcessing == MaintenanceProcessingCommandEnum.JobAutoStart.ToString())
 
-                                         {
 
-                                             var currentValue = DateTimeUtil.SecondToHHmmss(maintenanceItemWaferUserTime.CurrentValue.ToString());
 
-                                             var minValue = DateTimeUtil.SecondToHHmmss(maintenanceItemWaferUserTime.StartValue.ToString());
 
-                                             var maxValue = DateTimeUtil.SecondToHHmmss(maintenanceItemWaferUserTime.LimitValue.ToString());
 
-                                             var msg = pm.GetAlarmWarningMsg(maintenanceItemWaferUserTime, true, currentValue, minValue, maxValue);
 
-                                             Singleton<EquipmentManager>.Instance.SDWaferTypeUseTimeWarning.Set(msg);
 
-                                         }
 
-                                     }
 
-                                     if (maintenanceItemWaferThickness.StartValue > 0 && wafer.UseThick > maintenanceItemWaferThickness.StartValue && wafer.UseThick < maintenanceItemWaferThickness.LimitValue)
 
-                                     {
 
-                                         if (maintenanceItemWaferThickness.MaintenanceProcessing == MaintenanceProcessingCommandEnum.AlarmReport.ToString() ||
 
-                                             maintenanceItemWaferThickness.MaintenanceProcessing == MaintenanceProcessingCommandEnum.JobAutoStart.ToString())
 
-                                         {
 
-                                             var msg = pm.GetAlarmWarningMsg(maintenanceItemWaferThickness, false, wafer.UseThick.ToString(), maintenanceItemWaferThickness.StartValue.ToString(), maintenanceItemWaferThickness.LimitValue.ToString());
 
-                                             Singleton<EquipmentManager>.Instance.SDWaferTypeThicknessWarning.Set(msg);
 
-                                         }
 
-                                     }
 
-                                     if (maintenanceItemCarrierUseFreq.StartValue > 0 && wafer.UseCount >= maintenanceItemCarrierUseFreq.LimitValue)
 
-                                     {
 
-                                         if (maintenanceItemCarrierUseFreq.MaintenanceProcessing == MaintenanceProcessingCommandEnum.AlarmReport.ToString())
 
-                                         {
 
-                                             var msg = pm.GetAlarmWarningMsg(maintenanceItemCarrierUseFreq, false, wafer.UseCount.ToString(), maintenanceItemCarrierUseFreq.StartValue.ToString(), maintenanceItemCarrierUseFreq.LimitValue.ToString());
 
-                                             Singleton<EquipmentManager>.Instance.SDWaferTypeUseCountAlarm.Set(msg);
 
-                                             return Result.FAIL;
 
-                                         }
 
-                                         else if (maintenanceItemCarrierUseFreq.MaintenanceProcessing == MaintenanceProcessingCommandEnum.JobAutoStart.ToString())
 
-                                         {
 
-                                             var msg = pm.GetAlarmWarningMsg(maintenanceItemCarrierUseFreq, true);
 
-                                             if (string.IsNullOrEmpty(maintenanceItemCarrierUseFreq.AssociationProcessRecipeName))
 
-                                             {
 
-                                                 Singleton<EquipmentManager>.Instance.SDWaferTypeUseCountAlarm.Set(msg);
 
-                                                 return Result.FAIL;
 
-                                             }
 
-                                             Singleton<EquipmentManager>.Instance.SDWaferTypeUseCountAlarm.Set(msg);
 
-                                             pm.TriggerJobAutoStart(maintenanceItemCarrierUseFreq.AssociationProcessRecipeName, RecipeExecEntryEnum.SDWaferRangeTrigger);
 
-                                             LOG.Info($"{msg} Trigger {maintenanceItemCarrierUseFreq.AssociationProcessRecipeName},auto clear CurrentValue {maintenanceItemCarrierUseFreq.LimitValue} to 0");
 
-                                            // Singleton<ScheduleMaintenanceDataManager>.Instance.SetValue(maintenanceItemCarrierUseFreq.Item, 0, true);
 
-                                             return Result.FAIL;
 
-                                         }
 
-                                     }
 
-                                     if (maintenanceItemWaferUserTime.StartValue > 0 && wafer.UseTime >= maintenanceItemWaferUserTime.LimitValue)
 
-                                     {
 
-                                         var currentValue = DateTimeUtil.SecondToHHmmss(maintenanceItemWaferUserTime.CurrentValue.ToString());
 
-                                         var minValue = DateTimeUtil.SecondToHHmmss(maintenanceItemWaferUserTime.StartValue.ToString());
 
-                                         var maxValue = DateTimeUtil.SecondToHHmmss(maintenanceItemWaferUserTime.LimitValue.ToString());
 
-                                         var msg = pm.GetAlarmWarningMsg(maintenanceItemWaferUserTime, true, currentValue, minValue, maxValue);
 
-                                         if (maintenanceItemWaferUserTime.MaintenanceProcessing == MaintenanceProcessingCommandEnum.AlarmReport.ToString())
 
-                                         {
 
-                                             Singleton<EquipmentManager>.Instance.SDWaferTypeUseTimeAlarm.Set(msg);
 
-                                             return Result.FAIL;
 
-                                         }
 
-                                         else if (maintenanceItemWaferUserTime.MaintenanceProcessing == MaintenanceProcessingCommandEnum.JobAutoStart.ToString())
 
-                                         {
 
-                                             if (string.IsNullOrEmpty(maintenanceItemWaferUserTime.AssociationProcessRecipeName))
 
-                                             {
 
-                                                 Singleton<EquipmentManager>.Instance.SDWaferTypeUseTimeAlarm.Set(msg);
 
-                                                 return Result.FAIL;
 
-                                             }
 
-                                             Singleton<EquipmentManager>.Instance.SDWaferTypeUseTimeAlarm.Set(msg);
 
-                                             pm.TriggerJobAutoStart(maintenanceItemWaferUserTime.AssociationProcessRecipeName, RecipeExecEntryEnum.SDWaferRangeTrigger);
 
-                                             LOG.Info($"{msg} Trigger {maintenanceItemWaferUserTime.AssociationProcessRecipeName},auto clear CurrentValue {maintenanceItemWaferUserTime.LimitValue} to 0");
 
-                                            // Singleton<ScheduleMaintenanceDataManager>.Instance.SetValue(maintenanceItemWaferUserTime.Item, 0, true);
 
-                                             return Result.FAIL;
 
-                                         }
 
-                                     }
 
-                                     if (maintenanceItemWaferThickness.StartValue > 0 && wafer.UseThick >= maintenanceItemWaferThickness.LimitValue)
 
-                                     {
 
-                                         if (maintenanceItemWaferThickness.MaintenanceProcessing == MaintenanceProcessingCommandEnum.AlarmReport.ToString())
 
-                                         {
 
-                                             var msg = pm.GetAlarmWarningMsg(maintenanceItemWaferThickness, false, wafer.UseThick.ToString(), maintenanceItemWaferThickness.StartValue.ToString(), maintenanceItemWaferThickness.LimitValue.ToString());
 
-                                             Singleton<EquipmentManager>.Instance.SDWaferTypeThicknessAlarm.Set(msg);
 
-                                             return Result.FAIL;
 
-                                         }
 
-                                         else if (maintenanceItemWaferThickness.MaintenanceProcessing == MaintenanceProcessingCommandEnum.JobAutoStart.ToString())
 
-                                         {
 
-                                             var msg = pm.GetAlarmWarningMsg(maintenanceItemWaferThickness, true);
 
-                                             if (string.IsNullOrEmpty(maintenanceItemWaferThickness.AssociationProcessRecipeName))
 
-                                             {
 
-                                                 Singleton<EquipmentManager>.Instance.SDWaferTypeThicknessAlarm.Set(msg);
 
-                                                 return Result.FAIL;
 
-                                             }
 
-                                             Singleton<EquipmentManager>.Instance.SDWaferTypeThicknessAlarm.Set(msg);
 
-                                             pm.TriggerJobAutoStart(maintenanceItemWaferThickness.AssociationProcessRecipeName, RecipeExecEntryEnum.SDWaferRangeTrigger);
 
-                                             LOG.Info($"{msg} Trigger {maintenanceItemWaferThickness.AssociationProcessRecipeName},auto clear CurrentValue {maintenanceItemWaferThickness.LimitValue} to 0");
 
-                                          //   Singleton<ScheduleMaintenanceDataManager>.Instance.SetValue(maintenanceItemWaferThickness.Item, 0, true);
 
-                                             return Result.FAIL;
 
-                                         }
 
-                                     }
 
-                                 }
 
-                                 #endregion
 
-                                 #region ED
 
-                                 if (wafer.WaferType == WaferType.ED)
 
-                                 {
 
-                                     var maintenanceItemCarrierUseFreq = ScheduleMaintenanceDataManager.Instance.GetItem(MaintenanceItemEnum.FDCarrierUseFreq.ToString());
 
-                                     var maintenanceItemWaferThickness = ScheduleMaintenanceDataManager.Instance.GetItem(MaintenanceItemEnum.FDWaferThickness.ToString());
 
-                                     var maintenanceItemWaferUserTime = ScheduleMaintenanceDataManager.Instance.GetItem(MaintenanceItemEnum.FDWaferUserTime.ToString());
 
-                                     if (maintenanceItemCarrierUseFreq.StartValue > 0 && wafer.UseCount > maintenanceItemCarrierUseFreq.StartValue && wafer.UseCount < maintenanceItemCarrierUseFreq.LimitValue)
 
-                                     {
 
-                                         if (maintenanceItemCarrierUseFreq.MaintenanceProcessing == MaintenanceProcessingCommandEnum.AlarmReport.ToString() ||
 
-                                            maintenanceItemCarrierUseFreq.MaintenanceProcessing == MaintenanceProcessingCommandEnum.JobAutoStart.ToString())
 
-                                         {
 
-                                             var msg = pm.GetAlarmWarningMsg(maintenanceItemCarrierUseFreq, false, wafer.UseCount.ToString(), maintenanceItemCarrierUseFreq.StartValue.ToString(), maintenanceItemCarrierUseFreq.LimitValue.ToString());
 
-                                             Singleton<EquipmentManager>.Instance.FDWaferTypeUseCountWarning.Set(msg);
 
-                                         }
 
-                                     }
 
-                                     if (maintenanceItemWaferUserTime.StartValue > 0 && wafer.UseTime > maintenanceItemWaferUserTime.StartValue && wafer.UseTime < maintenanceItemWaferUserTime.LimitValue)
 
-                                     {
 
-                                         if (maintenanceItemWaferUserTime.MaintenanceProcessing == MaintenanceProcessingCommandEnum.AlarmReport.ToString() ||
 
-                                             maintenanceItemWaferUserTime.MaintenanceProcessing == MaintenanceProcessingCommandEnum.JobAutoStart.ToString())
 
-                                         {
 
-                                             var currentValue = DateTimeUtil.SecondToHHmmss(maintenanceItemWaferUserTime.CurrentValue.ToString());
 
-                                             var minValue = DateTimeUtil.SecondToHHmmss(maintenanceItemWaferUserTime.StartValue.ToString());
 
-                                             var maxValue = DateTimeUtil.SecondToHHmmss(maintenanceItemWaferUserTime.LimitValue.ToString());
 
-                                             var msg = pm.GetAlarmWarningMsg(maintenanceItemWaferUserTime, true, currentValue, minValue, maxValue);
 
-                                             Singleton<EquipmentManager>.Instance.FDWaferTypeUseTimeWarning.Set(msg);
 
-                                         }
 
-                                     }
 
-                                     if (maintenanceItemWaferThickness.StartValue > 0 && wafer.UseThick > maintenanceItemWaferThickness.StartValue && wafer.UseThick < maintenanceItemWaferThickness.LimitValue)
 
-                                     {
 
-                                         if (maintenanceItemWaferThickness.MaintenanceProcessing == MaintenanceProcessingCommandEnum.AlarmReport.ToString() ||
 
-                                             maintenanceItemWaferThickness.MaintenanceProcessing == MaintenanceProcessingCommandEnum.JobAutoStart.ToString())
 
-                                         {
 
-                                             var msg = pm.GetAlarmWarningMsg(maintenanceItemWaferThickness, false, wafer.UseThick.ToString(), maintenanceItemWaferThickness.StartValue.ToString(), maintenanceItemWaferThickness.LimitValue.ToString());
 
-                                             Singleton<EquipmentManager>.Instance.FDWaferTypeThicknessWarning.Set(msg);
 
-                                         }
 
-                                     }
 
-                                     if (maintenanceItemCarrierUseFreq.StartValue > 0 && wafer.UseCount >= maintenanceItemCarrierUseFreq.LimitValue)
 
-                                     {
 
-                                         if (maintenanceItemCarrierUseFreq.MaintenanceProcessing == MaintenanceProcessingCommandEnum.AlarmReport.ToString())
 
-                                         {
 
-                                             var msg = pm.GetAlarmWarningMsg(maintenanceItemCarrierUseFreq, false, wafer.UseCount.ToString(), maintenanceItemCarrierUseFreq.StartValue.ToString(), maintenanceItemCarrierUseFreq.LimitValue.ToString());
 
-                                             Singleton<EquipmentManager>.Instance.FDWaferTypeUseCountAlarm.Set(msg);
 
-                                             return Result.FAIL;
 
-                                         }
 
-                                         else if (maintenanceItemCarrierUseFreq.MaintenanceProcessing == MaintenanceProcessingCommandEnum.JobAutoStart.ToString())
 
-                                         {
 
-                                             var msg = pm.GetAlarmWarningMsg(maintenanceItemCarrierUseFreq);
 
-                                             if (string.IsNullOrEmpty(maintenanceItemCarrierUseFreq.AssociationProcessRecipeName))
 
-                                             {
 
-                                                 Singleton<EquipmentManager>.Instance.FDWaferTypeUseCountAlarm.Set(msg);
 
-                                                 return Result.FAIL;
 
-                                             }
 
-                                             Singleton<EquipmentManager>.Instance.FDWaferTypeUseCountAlarm.Set(msg);
 
-                                             pm.TriggerJobAutoStart(maintenanceItemCarrierUseFreq.AssociationProcessRecipeName, RecipeExecEntryEnum.EDWaferRangeTrigger);
 
-                                             LOG.Info($"{msg} Trigger {maintenanceItemCarrierUseFreq.AssociationProcessRecipeName},auto clear CurrentValue {maintenanceItemCarrierUseFreq.LimitValue} to 0");
 
-                                            // Singleton<ScheduleMaintenanceDataManager>.Instance.SetValue(maintenanceItemCarrierUseFreq.Item, 0, true);
 
-                                             return Result.FAIL;
 
-                                         }
 
-                                     }
 
-                                     if (maintenanceItemWaferUserTime.StartValue > 0 && wafer.UseTime >= maintenanceItemWaferUserTime.LimitValue)
 
-                                     {
 
-                                         var currentValue = DateTimeUtil.SecondToHHmmss(maintenanceItemWaferUserTime.CurrentValue.ToString());
 
-                                         var minValue = DateTimeUtil.SecondToHHmmss(maintenanceItemWaferUserTime.StartValue.ToString());
 
-                                         var maxValue = DateTimeUtil.SecondToHHmmss(maintenanceItemWaferUserTime.LimitValue.ToString());
 
-                                         var msg = pm.GetAlarmWarningMsg(maintenanceItemWaferUserTime, true, currentValue, minValue, maxValue);
 
-                                         if (maintenanceItemWaferUserTime.MaintenanceProcessing == MaintenanceProcessingCommandEnum.AlarmReport.ToString())
 
-                                         {
 
-                                             Singleton<EquipmentManager>.Instance.FDWaferTypeUseTimeAlarm.Set(msg);
 
-                                             return Result.FAIL;
 
-                                         }
 
-                                         else if (maintenanceItemWaferUserTime.MaintenanceProcessing == MaintenanceProcessingCommandEnum.JobAutoStart.ToString())
 
-                                         {
 
-                                             if (string.IsNullOrEmpty(maintenanceItemWaferUserTime.AssociationProcessRecipeName))
 
-                                             {
 
-                                                 Singleton<EquipmentManager>.Instance.FDWaferTypeUseTimeAlarm.Set(msg);
 
-                                                 return Result.FAIL;
 
-                                             }
 
-                                             Singleton<EquipmentManager>.Instance.FDWaferTypeUseTimeAlarm.Set(msg);
 
-                                             pm.TriggerJobAutoStart(maintenanceItemWaferUserTime.AssociationProcessRecipeName, RecipeExecEntryEnum.EDWaferRangeTrigger);
 
-                                             LOG.Info($"{msg} Trigger {maintenanceItemWaferUserTime.AssociationProcessRecipeName},auto clear CurrentValue {maintenanceItemWaferUserTime.LimitValue} to 0");
 
-                                           //  Singleton<ScheduleMaintenanceDataManager>.Instance.SetValue(maintenanceItemWaferUserTime.Item, 0, true);
 
-                                             return Result.FAIL;
 
-                                         }
 
-                                     }
 
-                                     if (maintenanceItemWaferThickness.StartValue > 0 && wafer.UseThick >= maintenanceItemWaferThickness.LimitValue)
 
-                                     {
 
-                                         if (maintenanceItemWaferThickness.MaintenanceProcessing == MaintenanceProcessingCommandEnum.AlarmReport.ToString())
 
-                                         {
 
-                                             var msg = pm.GetAlarmWarningMsg(maintenanceItemWaferThickness, false, wafer.UseThick.ToString(), maintenanceItemWaferThickness.StartValue.ToString(), maintenanceItemWaferThickness.LimitValue.ToString());
 
-                                             Singleton<EquipmentManager>.Instance.FDWaferTypeThicknessAlarm.Set(msg);
 
-                                             return Result.FAIL;
 
-                                         }
 
-                                         else if (maintenanceItemWaferThickness.MaintenanceProcessing == MaintenanceProcessingCommandEnum.JobAutoStart.ToString())
 
-                                         {
 
-                                             var msg = pm.GetAlarmWarningMsg(maintenanceItemWaferThickness, true);
 
-                                             if (string.IsNullOrEmpty(maintenanceItemWaferThickness.AssociationProcessRecipeName))
 
-                                             {
 
-                                                 Singleton<EquipmentManager>.Instance.FDWaferTypeThicknessAlarm.Set(msg);
 
-                                                 return Result.FAIL;
 
-                                             }
 
-                                             Singleton<EquipmentManager>.Instance.FDWaferTypeThicknessAlarm.Set(msg);
 
-                                             pm.TriggerJobAutoStart(maintenanceItemWaferThickness.AssociationProcessRecipeName, RecipeExecEntryEnum.EDWaferRangeTrigger);
 
-                                             LOG.Info($"{msg} Trigger {maintenanceItemWaferThickness.AssociationProcessRecipeName},auto clear CurrentValue {maintenanceItemWaferThickness.LimitValue} to 0");
 
-                                             //Singleton<ScheduleMaintenanceDataManager>.Instance.SetValue(maintenanceItemWaferThickness.Item, 0, true);
 
-                                             return Result.FAIL;
 
-                                         }
 
-                                     }
 
-                                 }
 
-                                 #endregion
 
-                             }
 
-                             #endregion
 
-                         }
 
-                     }
 
-                     pm.CheckBoatRecipeThicknessMoreThan(out var boatRecipeThicknessIsPause);
 
-                     if (boatRecipeThicknessIsPause)
 
-                         return Result.FAIL;
 
-                     pm.CheckRecipeThicknessMoreThan(_recipeName, out var isPause);
 
-                     if (isPause)
 
-                         return Result.FAIL;
 
-                     pm.CheckRecipeExecuteFreqMoreThan(_recipeName, out var isPause1);
 
-                     if (isPause1)
 
-                         return Result.FAIL;
 
-                     foreach (var item in recipeSteps)
 
-                     {
 
-                         pm.CheckRecipeStepFreqMoreThan(item.StepName, out var isPause2);
 
-                         if (isPause2)
 
-                             return Result.FAIL;
 
-                         pm.CheckRecipeStepTimeMoreThan(item.StepName, out var isPause3);
 
-                         if (isPause3)
 
-                             return Result.FAIL;
 
-                         pm.CheckRecipeStepGroupThicknessMoreThan(item.StepName, out var isPause4);
 
-                         if (isPause4)
 
-                             return Result.FAIL;
 
-                     }
 
-                 }
 
-                 #endregion
 
-                 PMModule.RecipeRunningInfo.MainRecipeName = _recipeName;
 
-                 PMModule.RecipeRunningInfo.Head = recipeHead;
 
-                 PMModule.RecipeRunningInfo.RecipeStepList = recipeSteps;
 
-                 PMModule.RecipeRunningInfo.ExecRecipeType = recipeSteps.Count > 0 ? recipeSteps[0].RecipeType : string.Empty;
 
-             }
 
-             Reset();
 
-             Notify($"Start");
 
-             return Result.RUN;
 
-         }
 
-         public override Result Monitor()
 
-         {
 
-             try
 
-             {
 
-                 //ToReadyProcessState((int)Routine.ToReadyProcessState, PMModule, _liftTimeout);
 
-                 //ExecuteRoutine((int)Routine.Pump, _pumpRoutine);
 
-                 //MovePinDown((int)Routine.PinDown, PMModule, _liftTimeout);
 
-             }
 
-             catch (RoutineBreakException)
 
-             {
 
-                 return Result.RUN;
 
-             }
 
-             catch (RoutineFaildException)
 
-             {
 
-                 return Result.FAIL;
 
-             }
 
-             return Result.DONE;
 
-         }
 
-         public override void Abort()
 
-         {
 
-         }
 
-     }
 
- }
 
 
  |