|  | @@ -5907,6 +5907,7 @@ namespace FurnaceRT.Equipments.Jobs
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          private bool CheckDummyWaferUse(ProcessJobInfo pj, ControlJobInfo cj)
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  | +            var pm = (Singleton<EquipmentManager>.Instance.Modules[ModuleName.PM1] as PMModule);
 | 
	
		
			
				|  |  |              foreach (var module in Singleton<EquipmentManager>.Instance.Modules.Keys)
 | 
	
		
			
				|  |  |              {
 | 
	
		
			
				|  |  |                  if (!ModuleHelper.IsStocker(module) || !pj.Stockers.Any(x => x.Item1 == module.ToString()))
 | 
	
	
		
			
				|  | @@ -5945,23 +5946,29 @@ namespace FurnaceRT.Equipments.Jobs
 | 
	
		
			
				|  |  |                          bool IsEnableSDWaferUseTimeWarning = SDTimeWarning > 0;
 | 
	
		
			
				|  |  |                          if (wafer.WaferType == WaferType.SD && IsEnableSDWaferUseCountWarning && wafer.UseCount > SDCountWarning && wafer.UseCount < SDCountAlarm)
 | 
	
		
			
				|  |  |                          {
 | 
	
		
			
				|  |  | -                            (Singleton<EquipmentManager>.Instance.Modules[ModuleName.PM1] as PMModule).MaintenanceProcessingCommandExec(maintenanceItemSDCarrierUseFreq.MaintenanceProcessing, Singleton<EquipmentManager>.Instance.SDWaferTypeUseCountWarning.Set, $"more than {SDCountWarning} 次");
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                            pm.MaintenanceProcessingCommandExec(maintenanceItemSDCarrierUseFreq.MaintenanceProcessing, new AlarmReportItem(Singleton<EquipmentManager>.Instance.SDWaferTypeUseCountWarning.Set, $"more than {SDCountWarning} 次"));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |                          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                          if (wafer.WaferType == WaferType.SD && IsEnableSDWaferUseTimeWarning && wafer.UseTime > SDTimeWarning && wafer.UseTime < SDTimeAlarm)
 | 
	
		
			
				|  |  |                          {
 | 
	
		
			
				|  |  |                              DateTimeUtil.ConvertSecondsToHoursAndMinutes(SDTimeWarning, out var hours, out var minutes);
 | 
	
		
			
				|  |  | -                            (Singleton<EquipmentManager>.Instance.Modules[ModuleName.PM1] as PMModule).MaintenanceProcessingCommandExec(maintenanceItemSDWaferUserTime.MaintenanceProcessing, Singleton<EquipmentManager>.Instance.SDWaferTypeUseTimeWarning.Set, $"more than {hours} hour {minutes} min");
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                            pm.MaintenanceProcessingCommandExec(maintenanceItemSDWaferUserTime.MaintenanceProcessing, new AlarmReportItem(Singleton<EquipmentManager>.Instance.SDWaferTypeUseTimeWarning.Set, $"more than {hours} hour {minutes} min"));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |                          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                          if (wafer.WaferType == WaferType.SD && IsEnableSDWaferThicknessWarning && wafer.UseThick > SDThicknessWarning && wafer.UseThick < SDThicknessAlarm)
 | 
	
		
			
				|  |  |                          {
 | 
	
		
			
				|  |  | -                            (Singleton<EquipmentManager>.Instance.Modules[ModuleName.PM1] as PMModule).MaintenanceProcessingCommandExec(maintenanceItemSDWaferThickness.MaintenanceProcessing, Singleton<EquipmentManager>.Instance.SDWaferTypeThicknessWarning.Set, $"more than {SDThicknessWarning} nm");
 | 
	
		
			
				|  |  | +                            pm.MaintenanceProcessingCommandExec(maintenanceItemSDWaferThickness.MaintenanceProcessing, new AlarmReportItem(Singleton<EquipmentManager>.Instance.SDWaferTypeThicknessWarning.Set, $"more than {SDThicknessWarning} nm"));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |                          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                          if (wafer.WaferType == WaferType.SD && IsEnableSDWaferUseCountWarning && wafer.UseCount >= SDCountAlarm)
 | 
	
		
			
				|  |  |                          {
 | 
	
		
			
				|  |  | -                            (Singleton<EquipmentManager>.Instance.Modules[ModuleName.PM1] as PMModule).MaintenanceProcessingCommandExec(maintenanceItemSDCarrierUseFreq.MaintenanceProcessing, Singleton<EquipmentManager>.Instance.SDWaferTypeUseCountAlarm.Set, $"more than {SDCountAlarm} 次");
 | 
	
		
			
				|  |  | +                            pm.MaintenanceProcessingCommandExec(maintenanceItemSDCarrierUseFreq.MaintenanceProcessing, new AlarmReportItem(Singleton<EquipmentManager>.Instance.SDWaferTypeUseCountAlarm.Set, $"more than {SDCountAlarm} 次"));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |                              return false;
 | 
	
		
			
				|  |  |                          }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -5969,13 +5976,15 @@ namespace FurnaceRT.Equipments.Jobs
 | 
	
		
			
				|  |  |                          {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                              DateTimeUtil.ConvertSecondsToHoursAndMinutes(SDTimeAlarm, out var hours, out var minutes);
 | 
	
		
			
				|  |  | -                            (Singleton<EquipmentManager>.Instance.Modules[ModuleName.PM1] as PMModule).MaintenanceProcessingCommandExec(maintenanceItemSDWaferUserTime.MaintenanceProcessing, Singleton<EquipmentManager>.Instance.SDWaferTypeUseTimeAlarm.Set, $"more than {hours} hour {minutes}");
 | 
	
		
			
				|  |  | +                            pm.MaintenanceProcessingCommandExec(maintenanceItemSDWaferUserTime.MaintenanceProcessing, new AlarmReportItem(Singleton<EquipmentManager>.Instance.SDWaferTypeUseTimeAlarm.Set, $"more than {hours} hour {minutes}"));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |                              return false;
 | 
	
		
			
				|  |  |                          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                          if (wafer.WaferType == WaferType.SD && IsEnableSDWaferThicknessWarning && wafer.UseThick >= SDThicknessAlarm)
 | 
	
		
			
				|  |  |                          {
 | 
	
		
			
				|  |  | -                            (Singleton<EquipmentManager>.Instance.Modules[ModuleName.PM1] as PMModule).MaintenanceProcessingCommandExec(maintenanceItemSDWaferThickness.MaintenanceProcessing, Singleton<EquipmentManager>.Instance.SDWaferTypeThicknessAlarm.Set, $"more than {SDThicknessAlarm} nm");
 | 
	
		
			
				|  |  | +                            pm.MaintenanceProcessingCommandExec(maintenanceItemSDWaferThickness.MaintenanceProcessing, new AlarmReportItem(Singleton<EquipmentManager>.Instance.SDWaferTypeThicknessAlarm.Set, $"more than {SDThicknessAlarm} nm"));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |                              return false;
 | 
	
		
			
				|  |  |                          }
 | 
	
		
			
				|  |  |                          #endregion
 | 
	
	
		
			
				|  | @@ -6001,60 +6010,69 @@ namespace FurnaceRT.Equipments.Jobs
 | 
	
		
			
				|  |  |                          {
 | 
	
		
			
				|  |  |                              //Singleton<ScheduleMaintenanceDataManager>.Instance.MaintenanceProcessingCommandExec(maintenanceItemEDCarrierUseFreq.MaintenanceProcessing, Singleton<EquipmentManager>.Instance.EDWaferTypeUseCountWarning.Set, $"more than {EDCountWarning} 次");
 | 
	
		
			
				|  |  |                              //return false;
 | 
	
		
			
				|  |  | -                            if (Enum.TryParse<MaintenanceProcessingCommandEnum>(maintenanceItemEDCarrierUseFreq.MaintenanceProcessing, out var command))
 | 
	
		
			
				|  |  | -                            {
 | 
	
		
			
				|  |  | -                                switch (command)
 | 
	
		
			
				|  |  | -                                {
 | 
	
		
			
				|  |  | -                                    case MaintenanceProcessingCommandEnum.None:
 | 
	
		
			
				|  |  | -                                        break;
 | 
	
		
			
				|  |  | -                                    case MaintenanceProcessingCommandEnum.AlarmReport:
 | 
	
		
			
				|  |  | -                                        Singleton<EquipmentManager>.Instance.EDWaferTypeUseCountWarning.Set($"more than {EDCountWarning} 次");
 | 
	
		
			
				|  |  | -                                        break;
 | 
	
		
			
				|  |  | -                                    case MaintenanceProcessingCommandEnum.JobProhibition:
 | 
	
		
			
				|  |  | -                                        break;
 | 
	
		
			
				|  |  | -                                    case MaintenanceProcessingCommandEnum.JobManualStart:
 | 
	
		
			
				|  |  | -                                        break;
 | 
	
		
			
				|  |  | -                                    case MaintenanceProcessingCommandEnum.JobAutoStart:
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                                        Singleton<EquipmentManager>.Instance.EDWaferTypeUseCountWarning.Set($"more than {EDCountWarning} 次");
 | 
	
		
			
				|  |  | -                                        Singleton<EquipmentManager>.Instance.CheckToPostMessage((int)EquipmentManager.MSG.JobAutoStart, cj.Name);
 | 
	
		
			
				|  |  | -                                        var pmModule = Singleton<EquipmentManager>.Instance.Modules[ModuleName.PM1] as PMModule;
 | 
	
		
			
				|  |  | -                                        if (pmModule != null)
 | 
	
		
			
				|  |  | -                                            pmModule.Process(maintenanceItemEDCarrierUseFreq.AssociationProcessRecipeName, false, true, out string reson);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                                        return false;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                                }
 | 
	
		
			
				|  |  | -                            }
 | 
	
		
			
				|  |  | +                            pm.MaintenanceProcessingCommandExec(
 | 
	
		
			
				|  |  | +                                maintenanceItemEDCarrierUseFreq.MaintenanceProcessing,
 | 
	
		
			
				|  |  | +                                new AlarmReportItem(Singleton<EquipmentManager>.Instance.EDWaferTypeUseCountWarning.Set, $"more than {EDCountWarning} 次")
 | 
	
		
			
				|  |  | +                                );
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                            //if (Enum.TryParse<MaintenanceProcessingCommandEnum>(maintenanceItemEDCarrierUseFreq.MaintenanceProcessing, out var command))
 | 
	
		
			
				|  |  | +                            //{
 | 
	
		
			
				|  |  | +                            //    switch (command)
 | 
	
		
			
				|  |  | +                            //    {
 | 
	
		
			
				|  |  | +                            //        case MaintenanceProcessingCommandEnum.None:
 | 
	
		
			
				|  |  | +                            //            break;
 | 
	
		
			
				|  |  | +                            //        case MaintenanceProcessingCommandEnum.AlarmReport:
 | 
	
		
			
				|  |  | +                            //            Singleton<EquipmentManager>.Instance.EDWaferTypeUseCountWarning.Set($"more than {EDCountWarning} 次");
 | 
	
		
			
				|  |  | +                            //            break;
 | 
	
		
			
				|  |  | +                            //        case MaintenanceProcessingCommandEnum.JobProhibition:
 | 
	
		
			
				|  |  | +                            //            break;
 | 
	
		
			
				|  |  | +                            //        case MaintenanceProcessingCommandEnum.JobManualStart:
 | 
	
		
			
				|  |  | +                            //            break;
 | 
	
		
			
				|  |  | +                            //        case MaintenanceProcessingCommandEnum.JobAutoStart:
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                            //            Singleton<EquipmentManager>.Instance.EDWaferTypeUseCountWarning.Set($"more than {EDCountWarning} 次");
 | 
	
		
			
				|  |  | +                            //            Singleton<EquipmentManager>.Instance.CheckToPostMessage((int)EquipmentManager.MSG.JobAutoStart, cj.Name);
 | 
	
		
			
				|  |  | +                            //            var pmModule = Singleton<EquipmentManager>.Instance.Modules[ModuleName.PM1] as PMModule;
 | 
	
		
			
				|  |  | +                            //            if (pmModule != null)
 | 
	
		
			
				|  |  | +                            //                pmModule.Process(maintenanceItemEDCarrierUseFreq.AssociationProcessRecipeName, false, true, out string reson);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                            //            return false;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                            //    }
 | 
	
		
			
				|  |  | +                            //}
 | 
	
		
			
				|  |  |                          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                          if (wafer.WaferType == WaferType.ED && IsEnableEDWaferUseTimeWarning && wafer.UseTime > EDTimeWarning && wafer.UseTime < EDTimeAlarm)
 | 
	
		
			
				|  |  |                          {
 | 
	
		
			
				|  |  |                              DateTimeUtil.ConvertSecondsToHoursAndMinutes(EDTimeWarning, out var hours, out var minutes);
 | 
	
		
			
				|  |  | -                            (Singleton<EquipmentManager>.Instance.Modules[ModuleName.PM1] as PMModule).MaintenanceProcessingCommandExec(maintenanceItemEDWaferUserTime.MaintenanceProcessing, Singleton<EquipmentManager>.Instance.EDWaferTypeUseTimeWarning.Set, $"more than {hours} hour {minutes} min");
 | 
	
		
			
				|  |  | +                            pm.MaintenanceProcessingCommandExec(maintenanceItemEDWaferUserTime.MaintenanceProcessing, new AlarmReportItem(Singleton<EquipmentManager>.Instance.EDWaferTypeUseTimeWarning.Set, $"more than {hours} hour {minutes} min"));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |                          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                          if (wafer.WaferType == WaferType.ED && IsEnableEDWaferThicknessWarning && wafer.UseThick > EDThicknessWarning && wafer.UseThick < EDThicknessAlarm)
 | 
	
		
			
				|  |  |                          {
 | 
	
		
			
				|  |  | -                            (Singleton<EquipmentManager>.Instance.Modules[ModuleName.PM1] as PMModule).MaintenanceProcessingCommandExec(maintenanceItemEDWaferThickness.MaintenanceProcessing, Singleton<EquipmentManager>.Instance.EDWaferTypeThicknessWarning.Set, $"more than {EDThicknessWarning} nm");
 | 
	
		
			
				|  |  | +                            pm.MaintenanceProcessingCommandExec(maintenanceItemEDWaferThickness.MaintenanceProcessing, new AlarmReportItem(Singleton<EquipmentManager>.Instance.EDWaferTypeThicknessWarning.Set, $"more than {EDThicknessWarning} nm"));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |                          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                          if (wafer.WaferType == WaferType.ED && IsEnableEDWaferUseCountWarning && wafer.UseCount >= EDCountAlarm)
 | 
	
		
			
				|  |  |                          {
 | 
	
		
			
				|  |  | -                            (Singleton<EquipmentManager>.Instance.Modules[ModuleName.PM1] as PMModule).MaintenanceProcessingCommandExec(maintenanceItemEDCarrierUseFreq.MaintenanceProcessing, Singleton<EquipmentManager>.Instance.EDWaferTypeUseCountAlarm.Set, $"more than {EDCountAlarm} 次");
 | 
	
		
			
				|  |  | +                            pm.MaintenanceProcessingCommandExec(maintenanceItemEDCarrierUseFreq.MaintenanceProcessing, new AlarmReportItem(Singleton<EquipmentManager>.Instance.EDWaferTypeUseCountAlarm.Set, $"more than {EDCountAlarm} 次"));
 | 
	
		
			
				|  |  |                              return false;
 | 
	
		
			
				|  |  |                          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                          if (wafer.WaferType == WaferType.ED && IsEnableEDWaferUseTimeWarning && wafer.UseTime >= EDTimeAlarm)
 | 
	
		
			
				|  |  |                          {
 | 
	
		
			
				|  |  |                              DateTimeUtil.ConvertSecondsToHoursAndMinutes(EDTimeAlarm, out var hours, out var minutes);
 | 
	
		
			
				|  |  | -                            (Singleton<EquipmentManager>.Instance.Modules[ModuleName.PM1] as PMModule).MaintenanceProcessingCommandExec(maintenanceItemEDWaferUserTime.MaintenanceProcessing, Singleton<EquipmentManager>.Instance.EDWaferTypeUseTimeAlarm.Set, $"more than {hours} hour {minutes}");
 | 
	
		
			
				|  |  | +                            pm.MaintenanceProcessingCommandExec(maintenanceItemEDWaferUserTime.MaintenanceProcessing, new AlarmReportItem(Singleton<EquipmentManager>.Instance.EDWaferTypeUseTimeAlarm.Set, $"more than {hours} hour {minutes}"));
 | 
	
		
			
				|  |  |                              return false;
 | 
	
		
			
				|  |  |                          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                          if (wafer.WaferType == WaferType.ED && IsEnableEDWaferThicknessWarning && wafer.UseThick >= EDThicknessAlarm)
 | 
	
		
			
				|  |  |                          {
 | 
	
		
			
				|  |  | -                            (Singleton<EquipmentManager>.Instance.Modules[ModuleName.PM1] as PMModule).MaintenanceProcessingCommandExec(maintenanceItemEDWaferThickness.MaintenanceProcessing, Singleton<EquipmentManager>.Instance.EDWaferTypeThicknessAlarm.Set, $"more than {EDThicknessAlarm} nm");
 | 
	
		
			
				|  |  | +                            pm.MaintenanceProcessingCommandExec(maintenanceItemEDWaferThickness.MaintenanceProcessing, new AlarmReportItem(Singleton<EquipmentManager>.Instance.EDWaferTypeThicknessAlarm.Set, $"more than {EDThicknessAlarm} nm"));
 | 
	
		
			
				|  |  |                              return false;
 | 
	
		
			
				|  |  |                          }
 | 
	
		
			
				|  |  |                          #endregion
 |