PreProcess.cs 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. using Aitex.Core.RT.Routine;
  2. using MECF.Framework.Common.Equipment;
  3. using System;
  4. using Aitex.Core.RT.SCCore;
  5. using FurnaceRT.Equipments.PMs.Routines;
  6. using System.Collections.Generic;
  7. using FurnaceRT.Equipments.Systems;
  8. using Aitex.Core.Util;
  9. using MECF.Framework.Common.SubstrateTrackings;
  10. using System.Linq;
  11. namespace FurnaceRT.Equipments.PMs.RecipeExecutions
  12. {
  13. public class PreProcess : PMBaseRoutine, IRoutine
  14. {
  15. public enum Routine
  16. {
  17. ToReadyProcessState,
  18. Pump,
  19. PinDown,
  20. }
  21. private string _recipeName;
  22. private int _liftTimeout;
  23. private bool _isProcessRecipe;
  24. public PreProcess(ModuleName module, PMModule pm) : base(module, pm)
  25. {
  26. Module = module.ToString();
  27. Name = "PreProcess";
  28. }
  29. public void Init(string recipeName, bool isProcessRecipe = true)
  30. {
  31. _recipeName = recipeName;
  32. _isProcessRecipe = isProcessRecipe;
  33. }
  34. public override Result Start(params object[] objs)
  35. {
  36. RecipeHead recipeHead;
  37. List<RecipeStep> recipeSteps;
  38. Dictionary<int, List<RecipeStep>> abortRecipe;
  39. Dictionary<int, string> abortRecipeName;
  40. Dictionary<int, List<RecipeStep>> subRecipe;
  41. Dictionary<int, string> subRecipeName;
  42. string reason = string.Empty;
  43. if (_isProcessRecipe)
  44. {
  45. if (!RecipeParser.Parse(_recipeName, Module, out recipeHead, out recipeSteps, out reason, "Process"))
  46. {
  47. PMModule.PreprocessStartFailedWarning.Set($"Load process recipe {_recipeName} failed, {reason}");
  48. return Result.FAIL;
  49. }
  50. #region MyRegion
  51. var isScheduleMaintenance = SC.ContainsItem("System.EnableScheduleMaintenance") && SC.GetValue<bool>("System.EnableScheduleMaintenance");
  52. if (isScheduleMaintenance)
  53. {
  54. var pm = (Singleton<EquipmentManager>.Instance.Modules[ModuleName.PM1] as PMModule);
  55. pm.GetAllDBRecord();
  56. var wafers = WaferManager.Instance.GetWafers(ModuleName.PM1);
  57. if (wafers != null && wafers.Count() > 0)
  58. {
  59. if (!pm.CheckDumyWafer(wafers))
  60. {
  61. return Result.FAIL;
  62. };
  63. }
  64. pm.CheckRecipeThicknessMoreThan(_recipeName, out var isPause);
  65. if (isPause)
  66. return Result.FAIL;
  67. pm.CheckRecipeExecuteFreqMoreThan(_recipeName, out var isPause1);
  68. if (isPause1)
  69. return Result.FAIL;
  70. foreach (var item in recipeSteps)
  71. {
  72. pm.CheckRecipeStepFreqMoreThan(item.StepName, out var isPause2);
  73. if (isPause2)
  74. return Result.FAIL;
  75. pm.CheckRecipeStepTimeMoreThan(item.StepName, out var isPause3);
  76. if (isPause3)
  77. return Result.FAIL;
  78. pm.CheckRecipeStepGroupThicknessMoreThan(item.StepName, out var isPause4);
  79. if (isPause4)
  80. return Result.FAIL;
  81. }
  82. }
  83. #endregion
  84. PMModule.RecipeRunningInfo.MainRecipeName = _recipeName;
  85. PMModule.RecipeRunningInfo.Head = recipeHead;
  86. PMModule.RecipeRunningInfo.RecipeStepList = recipeSteps;
  87. }
  88. Reset();
  89. Notify($"Start");
  90. return Result.RUN;
  91. }
  92. public override Result Monitor()
  93. {
  94. try
  95. {
  96. //ToReadyProcessState((int)Routine.ToReadyProcessState, PMModule, _liftTimeout);
  97. //ExecuteRoutine((int)Routine.Pump, _pumpRoutine);
  98. //MovePinDown((int)Routine.PinDown, PMModule, _liftTimeout);
  99. }
  100. catch (RoutineBreakException)
  101. {
  102. return Result.RUN;
  103. }
  104. catch (RoutineFaildException)
  105. {
  106. return Result.FAIL;
  107. }
  108. return Result.DONE;
  109. }
  110. public override void Abort()
  111. {
  112. }
  113. }
  114. }