|
@@ -43,6 +43,7 @@ using MECF.Framework.Common.Utilities;
|
|
|
using System.Threading;
|
|
|
using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.PMs;
|
|
|
using System.Reflection;
|
|
|
+using MECF.Framework.UI.Client.CenterViews.Editors.Recipe;
|
|
|
|
|
|
namespace FurnaceRT.Equipments.Jobs
|
|
|
{
|
|
@@ -5922,12 +5923,362 @@ namespace FurnaceRT.Equipments.Jobs
|
|
|
if (wafers == null)
|
|
|
continue;
|
|
|
|
|
|
- pm.GetAllDBRecord();
|
|
|
+ var isScheduleMaintenance = SC.ContainsItem("System.EnableScheduleMaintenance") && SC.GetValue<bool>("System.EnableScheduleMaintenance");
|
|
|
+ if (isScheduleMaintenance)
|
|
|
+ {
|
|
|
+ pm.GetAllDBRecord();
|
|
|
+ }
|
|
|
|
|
|
- if (!pm.CheckDumyWafer(wafers))
|
|
|
+ foreach (var wafer in wafers)
|
|
|
{
|
|
|
- return false;
|
|
|
- };
|
|
|
+ if (wafer == null || wafer.IsEmpty || (wafer.WaferType != WaferType.SD && wafer.WaferType != WaferType.ED))
|
|
|
+ continue;
|
|
|
+ #region New
|
|
|
+ if (isScheduleMaintenance)
|
|
|
+ {
|
|
|
+ #region SD Dummy 时间/次数/膜厚限制
|
|
|
+
|
|
|
+ var maintenanceItemSDCarrierUseFreq = ScheduleMaintenanceDataManager.Instance.GetItem(MaintenanceItemEnum.SDCarrierUseFreq.ToString());
|
|
|
+ var maintenanceItemSDWaferThickness = ScheduleMaintenanceDataManager.Instance.GetItem(MaintenanceItemEnum.SDWaferThickness.ToString());
|
|
|
+ var maintenanceItemSDWaferUserTime = ScheduleMaintenanceDataManager.Instance.GetItem(MaintenanceItemEnum.SDWaferUserTime.ToString());
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ if (wafer.WaferType == WaferType.SD && maintenanceItemSDCarrierUseFreq.StartValue > 0 && wafer.UseCount > maintenanceItemSDCarrierUseFreq.StartValue && wafer.UseCount < maintenanceItemSDCarrierUseFreq.LimitValue)
|
|
|
+ {
|
|
|
+ if (maintenanceItemSDCarrierUseFreq.MaintenanceProcessing == MaintenanceProcessingCommandEnum.AlarmReport.ToString())
|
|
|
+ {
|
|
|
+ var msg = pm.GetAlarmWarningMsg(maintenanceItemSDCarrierUseFreq);
|
|
|
+ Singleton<EquipmentManager>.Instance.SDWaferTypeUseCountWarning.Set(msg);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (wafer.WaferType == WaferType.SD && maintenanceItemSDWaferUserTime.StartValue > 0 && wafer.UseTime > maintenanceItemSDWaferUserTime.StartValue && wafer.UseTime < maintenanceItemSDWaferUserTime.LimitValue)
|
|
|
+ {
|
|
|
+
|
|
|
+ if (maintenanceItemSDWaferUserTime.MaintenanceProcessing == MaintenanceProcessingCommandEnum.AlarmReport.ToString())
|
|
|
+ {
|
|
|
+ var currentValue = DateTimeUtil.SecondToHHmmss(maintenanceItemSDWaferUserTime.CurrentValue.ToString());
|
|
|
+ var minValue = DateTimeUtil.SecondToHHmmss(maintenanceItemSDWaferUserTime.StartValue.ToString());
|
|
|
+ var maxValue = DateTimeUtil.SecondToHHmmss(maintenanceItemSDWaferUserTime.LimitValue.ToString());
|
|
|
+ var msg = pm.GetAlarmWarningMsg(maintenanceItemSDWaferUserTime, true, currentValue, minValue, maxValue);
|
|
|
+ Singleton<EquipmentManager>.Instance.SDWaferTypeUseTimeWarning.Set(msg);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (wafer.WaferType == WaferType.SD && maintenanceItemSDWaferThickness.StartValue > 0 && wafer.UseThick > maintenanceItemSDWaferThickness.StartValue && wafer.UseThick < maintenanceItemSDWaferThickness.LimitValue)
|
|
|
+ {
|
|
|
+ if (maintenanceItemSDWaferThickness.MaintenanceProcessing == MaintenanceProcessingCommandEnum.AlarmReport.ToString())
|
|
|
+ {
|
|
|
+ var msg = pm.GetAlarmWarningMsg(maintenanceItemSDWaferThickness);
|
|
|
+ Singleton<EquipmentManager>.Instance.SDWaferTypeThicknessWarning.Set(msg);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (wafer.WaferType == WaferType.SD && maintenanceItemSDCarrierUseFreq.StartValue > 0 && wafer.UseCount >= maintenanceItemSDCarrierUseFreq.LimitValue)
|
|
|
+ {
|
|
|
+ if (maintenanceItemSDCarrierUseFreq.MaintenanceProcessing == MaintenanceProcessingCommandEnum.None.ToString())
|
|
|
+ continue;
|
|
|
+
|
|
|
+ if (maintenanceItemSDCarrierUseFreq.MaintenanceProcessing == MaintenanceProcessingCommandEnum.AlarmReport.ToString())
|
|
|
+ {
|
|
|
+ var msg = pm.GetAlarmWarningMsg(maintenanceItemSDCarrierUseFreq);
|
|
|
+ Singleton<EquipmentManager>.Instance.SDWaferTypeUseCountAlarm.Set(msg);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ else if (maintenanceItemSDCarrierUseFreq.MaintenanceProcessing == MaintenanceProcessingCommandEnum.JobAutoStart.ToString())
|
|
|
+ {
|
|
|
+ var msg = pm.GetAlarmWarningMsg(maintenanceItemSDCarrierUseFreq, true);
|
|
|
+
|
|
|
+ if (string.IsNullOrEmpty(maintenanceItemSDCarrierUseFreq.AssociationProcessRecipeName))
|
|
|
+ {
|
|
|
+ Singleton<EquipmentManager>.Instance.SDWaferTypeUseCountAlarm.Set(msg);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ Singleton<EquipmentManager>.Instance.SDWaferTypeUseCountAlarm.Set(msg);
|
|
|
+ pm.TriggerJobAutoStart(maintenanceItemSDCarrierUseFreq.AssociationProcessRecipeName);
|
|
|
+ LOG.Info($"{msg} Trigger {maintenanceItemSDCarrierUseFreq.AssociationProcessRecipeName}");
|
|
|
+ return false;
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (wafer.WaferType == WaferType.SD && maintenanceItemSDWaferUserTime.StartValue > 0 && wafer.UseTime >= maintenanceItemSDWaferUserTime.LimitValue)
|
|
|
+ {
|
|
|
+ if (maintenanceItemSDWaferUserTime.MaintenanceProcessing == MaintenanceProcessingCommandEnum.None.ToString())
|
|
|
+ continue;
|
|
|
+
|
|
|
+
|
|
|
+ var currentValue = DateTimeUtil.SecondToHHmmss(maintenanceItemSDWaferUserTime.CurrentValue.ToString());
|
|
|
+ var minValue = DateTimeUtil.SecondToHHmmss(maintenanceItemSDWaferUserTime.StartValue.ToString());
|
|
|
+ var maxValue = DateTimeUtil.SecondToHHmmss(maintenanceItemSDWaferUserTime.LimitValue.ToString());
|
|
|
+ var msg = pm.GetAlarmWarningMsg(maintenanceItemSDWaferUserTime, true, currentValue, minValue, maxValue);
|
|
|
+
|
|
|
+ if (maintenanceItemSDWaferUserTime.MaintenanceProcessing == MaintenanceProcessingCommandEnum.AlarmReport.ToString())
|
|
|
+ {
|
|
|
+ Singleton<EquipmentManager>.Instance.SDWaferTypeUseTimeAlarm.Set(msg);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ else if (maintenanceItemSDWaferUserTime.MaintenanceProcessing == MaintenanceProcessingCommandEnum.JobAutoStart.ToString())
|
|
|
+ {
|
|
|
+
|
|
|
+ if (string.IsNullOrEmpty(maintenanceItemSDWaferUserTime.AssociationProcessRecipeName))
|
|
|
+ {
|
|
|
+ Singleton<EquipmentManager>.Instance.SDWaferTypeUseTimeAlarm.Set(msg);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ Singleton<EquipmentManager>.Instance.SDWaferTypeUseTimeAlarm.Set(msg);
|
|
|
+ pm.TriggerJobAutoStart(maintenanceItemSDWaferUserTime.AssociationProcessRecipeName);
|
|
|
+ LOG.Info($"{msg} Trigger {maintenanceItemSDWaferUserTime.AssociationProcessRecipeName}");
|
|
|
+ return false;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ if (wafer.WaferType == WaferType.SD && maintenanceItemSDWaferThickness.StartValue > 0 && wafer.UseThick >= maintenanceItemSDWaferThickness.LimitValue)
|
|
|
+ {
|
|
|
+ if (maintenanceItemSDWaferThickness.MaintenanceProcessing == MaintenanceProcessingCommandEnum.None.ToString())
|
|
|
+ continue;
|
|
|
+
|
|
|
+ if (maintenanceItemSDWaferThickness.MaintenanceProcessing == MaintenanceProcessingCommandEnum.AlarmReport.ToString())
|
|
|
+ {
|
|
|
+ var msg = pm.GetAlarmWarningMsg(maintenanceItemSDWaferThickness);
|
|
|
+ Singleton<EquipmentManager>.Instance.SDWaferTypeThicknessAlarm.Set(msg);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ else if (maintenanceItemSDWaferThickness.MaintenanceProcessing == MaintenanceProcessingCommandEnum.JobAutoStart.ToString())
|
|
|
+ {
|
|
|
+ var msg = pm.GetAlarmWarningMsg(maintenanceItemSDWaferThickness, true);
|
|
|
+
|
|
|
+ if (string.IsNullOrEmpty(maintenanceItemSDWaferThickness.AssociationProcessRecipeName))
|
|
|
+ {
|
|
|
+ Singleton<EquipmentManager>.Instance.SDWaferTypeThicknessAlarm.Set(msg);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ Singleton<EquipmentManager>.Instance.SDWaferTypeThicknessAlarm.Set(msg);
|
|
|
+ pm.TriggerJobAutoStart(maintenanceItemSDWaferThickness.AssociationProcessRecipeName);
|
|
|
+ LOG.Info($"{msg} Trigger {maintenanceItemSDWaferThickness.AssociationProcessRecipeName}");
|
|
|
+ return false;
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ #endregion
|
|
|
+
|
|
|
+ #region ED
|
|
|
+ var maintenanceItemEDCarrierUseFreq = ScheduleMaintenanceDataManager.Instance.GetItem(MaintenanceItemEnum.FDCarrierUseFreq.ToString());
|
|
|
+ var maintenanceItemEDWaferThickness = ScheduleMaintenanceDataManager.Instance.GetItem(MaintenanceItemEnum.FDWaferThickness.ToString());
|
|
|
+ var maintenanceItemEDWaferUserTime = ScheduleMaintenanceDataManager.Instance.GetItem(MaintenanceItemEnum.FDWaferUserTime.ToString());
|
|
|
+
|
|
|
+ if (wafer.WaferType == WaferType.ED && maintenanceItemEDCarrierUseFreq.StartValue > 0 && maintenanceItemEDCarrierUseFreq.CurrentValue > maintenanceItemEDCarrierUseFreq.StartValue && wafer.UseCount < maintenanceItemEDCarrierUseFreq.LimitValue)
|
|
|
+ {
|
|
|
+ if (maintenanceItemEDCarrierUseFreq.MaintenanceProcessing == MaintenanceProcessingCommandEnum.AlarmReport.ToString())
|
|
|
+ {
|
|
|
+ var msg = pm.GetAlarmWarningMsg(maintenanceItemEDCarrierUseFreq);
|
|
|
+ Singleton<EquipmentManager>.Instance.EDWaferTypeUseCountWarning.Set(msg);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (wafer.WaferType == WaferType.ED && maintenanceItemEDWaferUserTime.StartValue > 0 && wafer.UseTime > maintenanceItemEDWaferUserTime.StartValue && wafer.UseTime < maintenanceItemEDWaferUserTime.LimitValue)
|
|
|
+ {
|
|
|
+
|
|
|
+ if (maintenanceItemEDWaferUserTime.MaintenanceProcessing == MaintenanceProcessingCommandEnum.AlarmReport.ToString())
|
|
|
+ {
|
|
|
+ var currentValue = DateTimeUtil.SecondToHHmmss(maintenanceItemEDWaferUserTime.CurrentValue.ToString());
|
|
|
+ var minValue = DateTimeUtil.SecondToHHmmss(maintenanceItemEDWaferUserTime.StartValue.ToString());
|
|
|
+ var maxValue = DateTimeUtil.SecondToHHmmss(maintenanceItemEDWaferUserTime.LimitValue.ToString());
|
|
|
+ var msg = pm.GetAlarmWarningMsg(maintenanceItemEDWaferUserTime, true, currentValue, minValue, maxValue);
|
|
|
+
|
|
|
+ Singleton<EquipmentManager>.Instance.EDWaferTypeUseTimeWarning.Set(msg);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ if (wafer.WaferType == WaferType.ED && maintenanceItemEDWaferThickness.StartValue > 0 && wafer.UseThick > maintenanceItemEDWaferThickness.StartValue && wafer.UseThick < maintenanceItemEDWaferThickness.LimitValue)
|
|
|
+ {
|
|
|
+ if (maintenanceItemEDWaferThickness.MaintenanceProcessing == MaintenanceProcessingCommandEnum.AlarmReport.ToString())
|
|
|
+ {
|
|
|
+ var msg = pm.GetAlarmWarningMsg(maintenanceItemEDWaferThickness);
|
|
|
+ Singleton<EquipmentManager>.Instance.EDWaferTypeThicknessWarning.Set(msg);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (wafer.WaferType == WaferType.ED && maintenanceItemEDCarrierUseFreq.StartValue > 0 && wafer.UseCount >= maintenanceItemEDCarrierUseFreq.LimitValue)
|
|
|
+ {
|
|
|
+
|
|
|
+ if (maintenanceItemEDCarrierUseFreq.MaintenanceProcessing == MaintenanceProcessingCommandEnum.None.ToString())
|
|
|
+ continue;
|
|
|
+
|
|
|
+ if (maintenanceItemEDCarrierUseFreq.MaintenanceProcessing == MaintenanceProcessingCommandEnum.AlarmReport.ToString())
|
|
|
+ {
|
|
|
+ var msg = pm.GetAlarmWarningMsg(maintenanceItemEDCarrierUseFreq);
|
|
|
+ Singleton<EquipmentManager>.Instance.EDWaferTypeUseCountAlarm.Set(msg);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ else if (maintenanceItemEDCarrierUseFreq.MaintenanceProcessing == MaintenanceProcessingCommandEnum.JobAutoStart.ToString())
|
|
|
+ {
|
|
|
+ var msg = pm.GetAlarmWarningMsg(maintenanceItemEDCarrierUseFreq);
|
|
|
+
|
|
|
+ if (string.IsNullOrEmpty(maintenanceItemEDCarrierUseFreq.AssociationProcessRecipeName))
|
|
|
+ {
|
|
|
+ Singleton<EquipmentManager>.Instance.EDWaferTypeUseCountAlarm.Set(msg);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ Singleton<EquipmentManager>.Instance.EDWaferTypeUseCountAlarm.Set(msg);
|
|
|
+ pm.TriggerJobAutoStart(maintenanceItemEDCarrierUseFreq.AssociationProcessRecipeName);
|
|
|
+ LOG.Info($"{msg} Trigger {maintenanceItemEDCarrierUseFreq.AssociationProcessRecipeName}");
|
|
|
+ return false;
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (wafer.WaferType == WaferType.ED && maintenanceItemEDWaferUserTime.StartValue > 0 && wafer.UseTime >= maintenanceItemEDWaferUserTime.LimitValue)
|
|
|
+ {
|
|
|
+ if (maintenanceItemEDWaferUserTime.MaintenanceProcessing == MaintenanceProcessingCommandEnum.None.ToString())
|
|
|
+ continue;
|
|
|
+
|
|
|
+ var currentValue = DateTimeUtil.SecondToHHmmss(maintenanceItemEDWaferUserTime.CurrentValue.ToString());
|
|
|
+ var minValue = DateTimeUtil.SecondToHHmmss(maintenanceItemEDWaferUserTime.StartValue.ToString());
|
|
|
+ var maxValue = DateTimeUtil.SecondToHHmmss(maintenanceItemEDWaferUserTime.LimitValue.ToString());
|
|
|
+ var msg = pm.GetAlarmWarningMsg(maintenanceItemEDWaferUserTime, true, currentValue, minValue, maxValue);
|
|
|
+
|
|
|
+ if (maintenanceItemEDWaferUserTime.MaintenanceProcessing == MaintenanceProcessingCommandEnum.AlarmReport.ToString())
|
|
|
+ {
|
|
|
+ Singleton<EquipmentManager>.Instance.EDWaferTypeUseTimeAlarm.Set(msg);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ else if (maintenanceItemEDWaferUserTime.MaintenanceProcessing == MaintenanceProcessingCommandEnum.JobAutoStart.ToString())
|
|
|
+ {
|
|
|
+
|
|
|
+ if (string.IsNullOrEmpty(maintenanceItemEDWaferUserTime.AssociationProcessRecipeName))
|
|
|
+ {
|
|
|
+ Singleton<EquipmentManager>.Instance.EDWaferTypeUseTimeAlarm.Set(msg);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ Singleton<EquipmentManager>.Instance.EDWaferTypeUseTimeAlarm.Set(msg);
|
|
|
+ pm.TriggerJobAutoStart(maintenanceItemEDWaferUserTime.AssociationProcessRecipeName);
|
|
|
+ LOG.Info($"{msg} Trigger {maintenanceItemEDWaferUserTime.AssociationProcessRecipeName}");
|
|
|
+ return false;
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (wafer.WaferType == WaferType.ED && maintenanceItemEDWaferThickness.StartValue > 0 && wafer.UseThick >= maintenanceItemEDWaferThickness.LimitValue)
|
|
|
+ {
|
|
|
+
|
|
|
+ if (maintenanceItemEDWaferThickness.MaintenanceProcessing == MaintenanceProcessingCommandEnum.None.ToString())
|
|
|
+ continue;
|
|
|
+
|
|
|
+
|
|
|
+ if (maintenanceItemEDWaferThickness.MaintenanceProcessing == MaintenanceProcessingCommandEnum.AlarmReport.ToString())
|
|
|
+ {
|
|
|
+ var msg = pm.GetAlarmWarningMsg(maintenanceItemEDWaferThickness);
|
|
|
+ Singleton<EquipmentManager>.Instance.EDWaferTypeThicknessAlarm.Set(msg);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ else if (maintenanceItemEDWaferThickness.MaintenanceProcessing == MaintenanceProcessingCommandEnum.JobAutoStart.ToString())
|
|
|
+ {
|
|
|
+ var msg = pm.GetAlarmWarningMsg(maintenanceItemEDWaferThickness, true);
|
|
|
+
|
|
|
+ if (string.IsNullOrEmpty(maintenanceItemEDWaferThickness.AssociationProcessRecipeName))
|
|
|
+ {
|
|
|
+ Singleton<EquipmentManager>.Instance.EDWaferTypeThicknessAlarm.Set(msg);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ Singleton<EquipmentManager>.Instance.EDWaferTypeThicknessAlarm.Set(msg);
|
|
|
+ pm.TriggerJobAutoStart(maintenanceItemEDWaferThickness.AssociationProcessRecipeName);
|
|
|
+ LOG.Info($"{msg} Trigger {maintenanceItemEDWaferThickness.AssociationProcessRecipeName}");
|
|
|
+ return false;
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ #endregion
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ // SD Dummy
|
|
|
+ if (wafer.WaferType == WaferType.SD && SC.GetValue<bool>($"PM1.WaferCycleTime.IsEnableSDWaferUseCountWarning") && wafer.UseCount > SC.GetValue<int>($"PM1.WaferCycleTime.SDCountWarning") && wafer.UseCount < SC.GetValue<int>($"PM1.WaferCycleTime.SDCountAlarm"))
|
|
|
+ {
|
|
|
+ Singleton<EquipmentManager>.Instance.SDWaferTypeUseCountWarning.Set($"more than {SC.GetValue<int>($"PM1.WaferCycleTime.SDCountWarning")} 次");
|
|
|
+ }
|
|
|
+
|
|
|
+ if (wafer.WaferType == WaferType.SD && SC.GetValue<bool>($"PM1.WaferCycleTime.IsEnableSDWaferUseTimeWarning") && wafer.UseTime / 3600 > SC.GetValue<double>($"PM1.WaferCycleTime.SDTimeWarning") && wafer.UseTime / 3600 < SC.GetValue<double>($"PM1.WaferCycleTime.SDTimeAlarm"))
|
|
|
+ {
|
|
|
+ Singleton<EquipmentManager>.Instance.SDWaferTypeUseTimeWarning.Set($"more than {SC.GetValue<double>($"PM1.WaferCycleTime.SDTimeWarning")} hour");
|
|
|
+ }
|
|
|
+
|
|
|
+ if (wafer.WaferType == WaferType.SD && SC.GetValue<bool>($"PM1.WaferCycleTime.IsEnableSDWaferThicknessWarning") && wafer.UseThick > SC.GetValue<double>($"PM1.WaferCycleTime.SDThicknessWarning") && wafer.UseThick < SC.GetValue<double>($"PM1.WaferCycleTime.SDThicknessAlarm"))
|
|
|
+ {
|
|
|
+ Singleton<EquipmentManager>.Instance.SDWaferTypeThicknessWarning.Set($"more than {SC.GetValue<double>($"PM1.WaferCycleTime.SDThicknessWarning")} nm");
|
|
|
+ }
|
|
|
+
|
|
|
+ if (wafer.WaferType == WaferType.SD && SC.GetValue<bool>($"PM1.WaferCycleTime.IsEnableSDWaferUseCountWarning") && wafer.UseCount >= SC.GetValue<int>($"PM1.WaferCycleTime.SDCountAlarm"))
|
|
|
+ {
|
|
|
+ Singleton<EquipmentManager>.Instance.SDWaferTypeUseCountAlarm.Set($"more than {SC.GetValue<int>($"PM1.WaferCycleTime.SDCountAlarm")} 次");
|
|
|
+
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (wafer.WaferType == WaferType.SD && SC.GetValue<bool>($"PM1.WaferCycleTime.IsEnableSDWaferUseTimeWarning") && wafer.UseTime / 3600 >= SC.GetValue<double>($"PM1.WaferCycleTime.SDTimeAlarm"))
|
|
|
+ {
|
|
|
+ Singleton<EquipmentManager>.Instance.SDWaferTypeUseTimeAlarm.Set($"more than {SC.GetValue<double>($"PM1.WaferCycleTime.SDTimeAlarm")} hour");
|
|
|
+
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (wafer.WaferType == WaferType.SD && SC.GetValue<bool>($"PM1.WaferCycleTime.IsEnableSDWaferThicknessWarning") && wafer.UseThick >= SC.GetValue<double>($"PM1.WaferCycleTime.SDThicknessAlarm"))
|
|
|
+ {
|
|
|
+ Singleton<EquipmentManager>.Instance.SDWaferTypeThicknessAlarm.Set($"more than {SC.GetValue<double>($"PM1.WaferCycleTime.SDThicknessAlarm")} nm");
|
|
|
+
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ // Extra Dummy
|
|
|
+ if (wafer.WaferType == WaferType.ED && SC.GetValue<bool>($"PM1.WaferCycleTime.IsEnableEDWaferUseCountWarning") && wafer.UseCount > SC.GetValue<int>($"PM1.WaferCycleTime.EDCountWarning") && wafer.UseCount < SC.GetValue<int>($"PM1.WaferCycleTime.EDCountAlarm"))
|
|
|
+ {
|
|
|
+ Singleton<EquipmentManager>.Instance.EDWaferTypeUseCountWarning.Set($"more than {SC.GetValue<int>($"PM1.WaferCycleTime.EDCountWarning")} 次");
|
|
|
+ }
|
|
|
+
|
|
|
+ if (wafer.WaferType == WaferType.ED && SC.GetValue<bool>($"PM1.WaferCycleTime.IsEnableEDWaferUseTimeWarning") && wafer.UseTime / 3600 > SC.GetValue<double>($"PM1.WaferCycleTime.EDTimeWarning") && wafer.UseTime / 3600 < SC.GetValue<double>($"PM1.WaferCycleTime.EDTimeAlarm"))
|
|
|
+ {
|
|
|
+ Singleton<EquipmentManager>.Instance.EDWaferTypeUseTimeWarning.Set($"more than {SC.GetValue<double>($"PM1.WaferCycleTime.EDTimeWarning")} hour");
|
|
|
+ }
|
|
|
+
|
|
|
+ if (wafer.WaferType == WaferType.ED && SC.GetValue<bool>($"PM1.WaferCycleTime.IsEnableEDWaferThicknessWarning") && wafer.UseThick > SC.GetValue<double>($"PM1.WaferCycleTime.EDThicknessWarning") && wafer.UseThick < SC.GetValue<double>($"PM1.WaferCycleTime.EDThicknessAlarm"))
|
|
|
+ {
|
|
|
+ Singleton<EquipmentManager>.Instance.EDWaferTypeThicknessWarning.Set($"more than {SC.GetValue<double>($"PM1.WaferCycleTime.EDThicknessWarning")} nm");
|
|
|
+ }
|
|
|
+
|
|
|
+ if (wafer.WaferType == WaferType.ED && SC.GetValue<bool>($"PM1.WaferCycleTime.IsEnableEDWaferUseCountWarning") && wafer.UseCount >= SC.GetValue<int>($"PM1.WaferCycleTime.EDCountAlarm"))
|
|
|
+ {
|
|
|
+ Singleton<EquipmentManager>.Instance.EDWaferTypeUseCountAlarm.Set($"more than {SC.GetValue<int>($"PM1.WaferCycleTime.EDCountAlarm")} 次");
|
|
|
+
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (wafer.WaferType == WaferType.ED && SC.GetValue<bool>($"PM1.WaferCycleTime.IsEnableEDWaferUseTimeWarning") && wafer.UseTime / 3600 >= SC.GetValue<double>($"PM1.WaferCycleTime.EDTimeAlarm"))
|
|
|
+ {
|
|
|
+ Singleton<EquipmentManager>.Instance.EDWaferTypeUseTimeAlarm.Set($"more than {SC.GetValue<double>($"PM1.WaferCycleTime.EDTimeAlarm")} hour");
|
|
|
+
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (wafer.WaferType == WaferType.ED && SC.GetValue<bool>($"PM1.WaferCycleTime.IsEnableEDWaferThicknessWarning") && wafer.UseThick >= SC.GetValue<double>($"PM1.WaferCycleTime.EDThicknessAlarm"))
|
|
|
+ {
|
|
|
+ Singleton<EquipmentManager>.Instance.EDWaferTypeThicknessAlarm.Set($"more than {SC.GetValue<double>($"PM1.WaferCycleTime.EDThicknessAlarm")} nm");
|
|
|
+
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ #endregion
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
return true;
|