|
@@ -121,7 +121,7 @@ namespace FurnaceRT.Equipments.PMs
|
|
|
}
|
|
|
#region Carrier/Wafer
|
|
|
|
|
|
-
|
|
|
+
|
|
|
public void UpdateSEDWafer(List<WaferInfo> waferInfos)
|
|
|
{
|
|
|
if (waferInfos == null)
|
|
@@ -164,7 +164,16 @@ namespace FurnaceRT.Equipments.PMs
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
+ public void UpdateBoatTotalThickness(float thickness)
|
|
|
+ {
|
|
|
+ var item = _dbRecords.FirstOrDefault(a => a.Item == MaintenanceItemEnum.BoatRecipeThickness1.ToString() && a.Path == $"{DataItemEnum.Boat}");
|
|
|
+
|
|
|
+ if (item == null)
|
|
|
+ return;
|
|
|
|
|
|
+ if (item != null && item.Item == MaintenanceItemEnum.BoatRecipeThickness1.ToString())
|
|
|
+ Singleton<ScheduleMaintenanceDataManager>.Instance.Increase(item.Item, thickness);
|
|
|
+ }
|
|
|
|
|
|
/// <summary>
|
|
|
/// 根据RecipeStep +StepGroup统计 累计膜厚
|
|
@@ -489,6 +498,52 @@ namespace FurnaceRT.Equipments.PMs
|
|
|
/// </summary>
|
|
|
/// <param name="recipeName"></param>
|
|
|
/// <param name="isPause"></param>
|
|
|
+ public void CheckBoatRecipeThicknessMoreThan(out bool isPause)
|
|
|
+ {
|
|
|
+ isPause = false;
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ var item = _dbRecords.FirstOrDefault(a => a.Item == MaintenanceItemEnum.BoatRecipeThickness1.ToString() && a.Path == $"{DataItemEnum.Boat}");
|
|
|
+
|
|
|
+
|
|
|
+ if (item == null || !Enum.TryParse<MaintenanceProcessingCommandEnum>(item.MaintenanceProcessing, out var command))
|
|
|
+ return;
|
|
|
+
|
|
|
+ if (item.StartValue < 0 || item.LimitValue <= item.StartValue || command == MaintenanceProcessingCommandEnum.None)
|
|
|
+ return;
|
|
|
+
|
|
|
+ string message = $"{item.Item}-{item.Display} {item.AdditionInformationDisplay} {item.CurrentValue} limit is ({item.StartValue}~{item.LimitValue}) nm";
|
|
|
+
|
|
|
+
|
|
|
+ bool isWarning = item.CurrentValue > item.StartValue && item.CurrentValue < item.LimitValue;
|
|
|
+ bool isAlarm = item.CurrentValue >= item.LimitValue;
|
|
|
+ if (isWarning)
|
|
|
+ {
|
|
|
+ Singleton<EquipmentManager>.Instance.BoatRecipeThicknessWarning.Set(message);
|
|
|
+ }
|
|
|
+ if (isAlarm)
|
|
|
+ {
|
|
|
+ Singleton<EquipmentManager>.Instance.BoatRecipeThicknessAlarm.Set(message);
|
|
|
+ if (command == MaintenanceProcessingCommandEnum.JobAutoStart)
|
|
|
+ {
|
|
|
+ if (string.IsNullOrEmpty(item.AssociationProcessRecipeName))
|
|
|
+ {
|
|
|
+ Singleton<EquipmentManager>.Instance.BoatRecipeThicknessAlarm.Set(message);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ LOG.Info($"{message} Trigger {item.AssociationProcessRecipeName}");
|
|
|
+ RecipeExecEntryEnumValue = RecipeExecEntryEnum.BoatRecipeRangeTrigger;
|
|
|
+ CheckToPostMessage((int)MSG.RunOtherRecipe, item.AssociationProcessRecipeName, "Process");
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ isPause = true;
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
public void CheckRecipeThicknessMoreThan(string recipeName, out bool isPause)
|
|
|
{
|
|
|
isPause = false;
|
|
@@ -529,7 +584,7 @@ namespace FurnaceRT.Equipments.PMs
|
|
|
else
|
|
|
{
|
|
|
LOG.Info($"{message} Trigger {item.AssociationProcessRecipeName}");
|
|
|
- RecipeExecEntryEnumValue= RecipeExecEntryEnum.RecipeRangeTrigger;
|
|
|
+ RecipeExecEntryEnumValue = RecipeExecEntryEnum.RecipeRangeTrigger;
|
|
|
CheckToPostMessage((int)MSG.RunOtherRecipe, item.AssociationProcessRecipeName, "Process");
|
|
|
}
|
|
|
|