|
@@ -13,14 +13,17 @@ using DocumentFormat.OpenXml.VariantTypes;
|
|
|
using FurnaceRT.Equipments.Systems;
|
|
|
using MECF.Framework.Common.CommonData.EnumData;
|
|
|
using MECF.Framework.Common.DataCenter;
|
|
|
+using MECF.Framework.Common.DBCore;
|
|
|
using MECF.Framework.Common.Equipment;
|
|
|
using MECF.Framework.Common.Event;
|
|
|
using MECF.Framework.Common.OperationCenter;
|
|
|
using MECF.Framework.Common.Utilities;
|
|
|
using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.PMs;
|
|
|
+using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Robot;
|
|
|
using System;
|
|
|
using System.Collections;
|
|
|
using System.Collections.Generic;
|
|
|
+using System.Data;
|
|
|
using System.Diagnostics;
|
|
|
using System.Linq;
|
|
|
using System.Runtime.Remoting.Metadata.W3cXsd2001;
|
|
@@ -29,7 +32,35 @@ namespace FurnaceRT.Equipments.PMs
|
|
|
{
|
|
|
public partial class PMModule
|
|
|
{
|
|
|
+ private List<ScheduleMaintenanceDataItem> _dbRecords { get; set; } = new List<ScheduleMaintenanceDataItem>();
|
|
|
+ public void GetAllDBRecord()
|
|
|
+ {
|
|
|
+ _dbRecords.Clear();
|
|
|
+ DataTable dt = DataQuery.Query("select * from \"schedule_maintenance\"");
|
|
|
+
|
|
|
+ for (int i = 0; i < dt.Rows.Count; i++)
|
|
|
+ {
|
|
|
+ ScheduleMaintenanceDataItem item = new ScheduleMaintenanceDataItem();
|
|
|
+ item.Item = dt.Rows[i]["maintenance_item"].ToString();
|
|
|
+ item.Display = dt.Rows[i]["maintenance_display"].ToString();
|
|
|
+ item.Unit = dt.Rows[i]["unit"].ToString();
|
|
|
+ item.MaintenanceProcessing = dt.Rows[i]["maintenance_processing"].ToString();
|
|
|
+ item.Path = dt.Rows[i]["path"].ToString();
|
|
|
+ item.AdditionInformationName = dt.Rows[i]["addition_information_name"].ToString();
|
|
|
+ item.AdditionInformationDisplay = dt.Rows[i]["addition_information_display"].ToString();
|
|
|
+ item.AdditionInformationDisplaySupplement = dt.Rows[i]["addition_information_display_supplement"].ToString();
|
|
|
+ item.AssociationProcessRecipeName = dt.Rows[i]["association_process_recipeName"].ToString();
|
|
|
+ if (float.TryParse(dt.Rows[i]["current_value"].ToString(), out float value))
|
|
|
+ item.CurrentValue = value;
|
|
|
+ if (float.TryParse(dt.Rows[i]["scheduling_start_value"].ToString(), out value))
|
|
|
+ item.StartValue = value;
|
|
|
+ if (float.TryParse(dt.Rows[i]["maintenance_limit_value"].ToString(), out value))
|
|
|
+ item.LimitValue = value;
|
|
|
+
|
|
|
+ _dbRecords.Add(item);
|
|
|
|
|
|
+ }
|
|
|
+ }
|
|
|
private void InitScheduleMaintenance()
|
|
|
{
|
|
|
|
|
@@ -174,7 +205,7 @@ namespace FurnaceRT.Equipments.PMs
|
|
|
if (string.IsNullOrEmpty(stepName) || thickness <= 0)
|
|
|
return;
|
|
|
var stepNo = stepName.Split(':').FirstOrDefault();
|
|
|
- var list = Singleton<ScheduleMaintenanceDataManager>.Instance.Item.Values
|
|
|
+ var list = _dbRecords
|
|
|
.Where(a => !string.IsNullOrEmpty(a.AdditionInformationDisplaySupplement))
|
|
|
.Where(a => a.Path == $"{DataItemEnum.Reactor}.{ReactorsEnum.StepThickness}")
|
|
|
.Where(a => a.AdditionInformationDisplaySupplement.Split(',').Contains(stepNo))
|
|
@@ -189,11 +220,6 @@ namespace FurnaceRT.Equipments.PMs
|
|
|
Singleton<ScheduleMaintenanceDataManager>.Instance.Increase(item.Item, thickness);
|
|
|
|
|
|
|
|
|
- if (item.CurrentValue > item.StartValue && item.CurrentValue < item.LimitValue)
|
|
|
- MaintenanceProcessingCommandExec(item.MaintenanceProcessing, new AlarmReportItem(Singleton<EquipmentManager>.Instance.ReatorStepThicknessWarning.Set, $"more than {item.StartValue} Å"));
|
|
|
-
|
|
|
- if (item.CurrentValue >= item.LimitValue)
|
|
|
- MaintenanceProcessingCommandExec(item.MaintenanceProcessing, new AlarmReportItem(Singleton<EquipmentManager>.Instance.ReatorStepThicknessAlarm.Set, $"more than {item.LimitValue} Å"));
|
|
|
|
|
|
}
|
|
|
}
|
|
@@ -206,9 +232,12 @@ namespace FurnaceRT.Equipments.PMs
|
|
|
if (string.IsNullOrEmpty(stepName) || stepTime <= 0)
|
|
|
return;
|
|
|
var stepNo = stepName.Split(':').FirstOrDefault();
|
|
|
- var list = Singleton<ScheduleMaintenanceDataManager>.Instance.Item.Values.Where(a => a.Path == $"{DataItemEnum.Reactor}.{ReactorsEnum.StepRunTime}" && a.AdditionInformationDisplay == stepNo).ToList();
|
|
|
+
|
|
|
+ var list = _dbRecords.Where(a => a.Path == $"{DataItemEnum.Reactor}.{ReactorsEnum.StepRunTime}" && a.AdditionInformationDisplay == stepNo).ToList();
|
|
|
+
|
|
|
if (list == null || list.Count == 0)
|
|
|
return;
|
|
|
+
|
|
|
foreach (var item in list)
|
|
|
{
|
|
|
if (item == null)
|
|
@@ -230,13 +259,16 @@ namespace FurnaceRT.Equipments.PMs
|
|
|
if (string.IsNullOrEmpty(stepName))
|
|
|
return;
|
|
|
var stepNo = stepName.Split(':').FirstOrDefault();
|
|
|
- var list = Singleton<ScheduleMaintenanceDataManager>.Instance.Item.Values.Where(a => a.Path == $"{DataItemEnum.Reactor}.{ReactorsEnum.StepRunFreq}" && a.AdditionInformationDisplay == stepNo).ToList();
|
|
|
+
|
|
|
+ var list = _dbRecords.Where(a => a.Path == $"{DataItemEnum.Reactor}.{ReactorsEnum.StepRunFreq}" && a.AdditionInformationDisplay == stepNo).ToList();
|
|
|
+
|
|
|
if (list == null || list.Count == 0)
|
|
|
return;
|
|
|
foreach (var item in list)
|
|
|
{
|
|
|
if (item == null)
|
|
|
continue;
|
|
|
+
|
|
|
Singleton<ScheduleMaintenanceDataManager>.Instance.Increase(item.Item);
|
|
|
}
|
|
|
|
|
@@ -250,7 +282,10 @@ namespace FurnaceRT.Equipments.PMs
|
|
|
|
|
|
if (string.IsNullOrEmpty(recipeName))
|
|
|
return;
|
|
|
- var item = Singleton<ScheduleMaintenanceDataManager>.Instance.Item.Values.Where(a => a.Item == MaintenanceItemEnum.RecipeExecuteFreq.ToString() && a.Path == $"{DataItemEnum.Reactor}.{ReactorsEnum.Recipe}" && a.AdditionInformationDisplay == recipeName).FirstOrDefault();
|
|
|
+ var item = _dbRecords
|
|
|
+ .FirstOrDefault(a => a.Item == MaintenanceItemEnum.RecipeExecuteFreq.ToString()
|
|
|
+ && a.Path == $"{DataItemEnum.Reactor}.{ReactorsEnum.Recipe}"
|
|
|
+ && a.AdditionInformationDisplay == recipeName);
|
|
|
if (item == null)
|
|
|
return;
|
|
|
|
|
@@ -268,7 +303,10 @@ namespace FurnaceRT.Equipments.PMs
|
|
|
{
|
|
|
if (string.IsNullOrEmpty(recipeName) || thickness <= 0)
|
|
|
return;
|
|
|
- var item = Singleton<ScheduleMaintenanceDataManager>.Instance.Item.Values.Where(a => a.Item == MaintenanceItemEnum.RecipeThickness.ToString() && a.Path == $"{DataItemEnum.Reactor}.{ReactorsEnum.Recipe}" && a.AdditionInformationDisplay == recipeName).FirstOrDefault();
|
|
|
+ var item = _dbRecords
|
|
|
+ .FirstOrDefault(a => a.Item == MaintenanceItemEnum.RecipeThickness.ToString()
|
|
|
+ && a.Path == $"{DataItemEnum.Reactor}.{ReactorsEnum.Recipe}"
|
|
|
+ && a.AdditionInformationDisplay == recipeName);
|
|
|
|
|
|
if (item == null)
|
|
|
return;
|
|
@@ -277,7 +315,72 @@ namespace FurnaceRT.Equipments.PMs
|
|
|
Singleton<ScheduleMaintenanceDataManager>.Instance.Increase(item.Item, thickness);
|
|
|
|
|
|
}
|
|
|
+ /// <summary>
|
|
|
+ /// 检查
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="stepName"></param>
|
|
|
+ /// <param name="isPause"></param>
|
|
|
+ public void CheckRecipeStepGroupThicknessMoreThan(string stepName, out bool isPause)
|
|
|
+ {
|
|
|
+ isPause = false;
|
|
|
|
|
|
+ if (string.IsNullOrEmpty(stepName))
|
|
|
+ return;
|
|
|
+
|
|
|
+ var stepNo = stepName.Split(':').FirstOrDefault();
|
|
|
+ var reactorStepThicknessList = _dbRecords
|
|
|
+ .Where(a => a.Path == $"{DataItemEnum.Reactor}.{ReactorsEnum.StepThickness}")
|
|
|
+ .Where(a => !string.IsNullOrEmpty(a.AdditionInformationDisplay))
|
|
|
+ .Where(a => !string.IsNullOrEmpty(a.AdditionInformationDisplaySupplement))
|
|
|
+ .Where(a => a.AdditionInformationDisplaySupplement.Split(',').Contains(stepNo))
|
|
|
+ .ToList();
|
|
|
+
|
|
|
+
|
|
|
+ foreach (var item in reactorStepThicknessList)
|
|
|
+ {
|
|
|
+
|
|
|
+ if (!Enum.TryParse<MaintenanceProcessingCommandEnum>(item.MaintenanceProcessing, out var command))
|
|
|
+ continue;
|
|
|
+
|
|
|
+ if (item.StartValue < 0 || item.LimitValue <= item.StartValue || command == MaintenanceProcessingCommandEnum.None)
|
|
|
+ continue;
|
|
|
+
|
|
|
+ string message = $"{item.Item}-{item.Display} {item.AdditionInformationDisplay} {item.CurrentValue} limit is ({item.StartValue}~{item.LimitValue}) times";
|
|
|
+ string nullMessage = $"{item.Display} No recipe file associated, unable to trigger JobAutoStart";
|
|
|
+
|
|
|
+
|
|
|
+ bool isWarning = item.CurrentValue > item.StartValue && item.CurrentValue < item.LimitValue;
|
|
|
+ bool isAlarm = item.CurrentValue >= item.LimitValue;
|
|
|
+
|
|
|
+ if (isWarning)
|
|
|
+ {
|
|
|
+ Singleton<EquipmentManager>.Instance.ReatorStepThicknessWarning.Set(message);
|
|
|
+ }
|
|
|
+ if (isAlarm)
|
|
|
+ {
|
|
|
+ Singleton<EquipmentManager>.Instance.ReatorStepThicknessAlarm.Set(message);
|
|
|
+ if (command == MaintenanceProcessingCommandEnum.JobManualStart)
|
|
|
+ {
|
|
|
+ Singleton<EquipmentManager>.Instance.ReatorStepThicknessAlarm.Set(message);
|
|
|
+ if (string.IsNullOrEmpty(item.AssociationProcessRecipeName))
|
|
|
+ {
|
|
|
+ Singleton<EquipmentManager>.Instance.ReatorStepThicknessAlarm.Set(nullMessage);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ LOG.Info($"{message} Trigger {item.AssociationProcessRecipeName}");
|
|
|
+ CheckToPostMessage((int)MSG.RunOtherRecipe, item.AssociationProcessRecipeName, "Process");
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ isPause = true;
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
@@ -287,20 +390,35 @@ namespace FurnaceRT.Equipments.PMs
|
|
|
/// <param name="isPause"></param>
|
|
|
public void CheckRecipeStepTimeMoreThan(string stepName, out bool isPause)
|
|
|
{
|
|
|
+ isPause = false;
|
|
|
+
|
|
|
+ if (string.IsNullOrEmpty(stepName))
|
|
|
+ return;
|
|
|
|
|
|
var stepNo = stepName.Split(':').FirstOrDefault();
|
|
|
- var item = Singleton<ScheduleMaintenanceDataManager>.Instance.Item.Values
|
|
|
- .Where(a => a.Path == $"{DataItemEnum.Reactor}.{ReactorsEnum.StepRunFreq}" && a.AdditionInformationDisplay == stepNo)
|
|
|
- .FirstOrDefault();
|
|
|
+
|
|
|
+ var item = _dbRecords.FirstOrDefault(a => a.Path == $"{DataItemEnum.Reactor}.{ReactorsEnum.StepRunTime}" && a.AdditionInformationDisplay == stepNo);
|
|
|
+
|
|
|
+ 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}) times";
|
|
|
|
|
|
|
|
|
- CheckRecipeMoreThan(
|
|
|
- stepNo,
|
|
|
- Singleton<EquipmentManager>.Instance.ReatorStepRunTimeWarning.Set,
|
|
|
- Singleton<EquipmentManager>.Instance.ReatorStepRunTimeAlarm.Set,
|
|
|
- item,
|
|
|
- "HH:mm",
|
|
|
- out isPause);
|
|
|
+ bool isWarning = item.CurrentValue > item.StartValue && item.CurrentValue < item.LimitValue;
|
|
|
+ bool isAlarm = item.CurrentValue >= item.LimitValue;
|
|
|
+
|
|
|
+ if (isWarning)
|
|
|
+ Singleton<EquipmentManager>.Instance.ReatorStepRunTimeWarning.Set(message);
|
|
|
+
|
|
|
+ if (isAlarm)
|
|
|
+ {
|
|
|
+ Singleton<EquipmentManager>.Instance.ReatorStepRunTimeAlarm.Set(message);
|
|
|
+ isPause = true;
|
|
|
+ }
|
|
|
|
|
|
}
|
|
|
|
|
@@ -311,20 +429,31 @@ namespace FurnaceRT.Equipments.PMs
|
|
|
/// <param name="isPause"></param>
|
|
|
public void CheckRecipeStepFreqMoreThan(string stepName, out bool isPause)
|
|
|
{
|
|
|
-
|
|
|
+ isPause = false;
|
|
|
+ if (string.IsNullOrEmpty(stepName))
|
|
|
+ return;
|
|
|
var stepNo = stepName.Split(':').FirstOrDefault();
|
|
|
- var item = Singleton<ScheduleMaintenanceDataManager>.Instance.Item.Values
|
|
|
- .Where(a => a.Path == $"{DataItemEnum.Reactor}.{ReactorsEnum.StepRunFreq}" && a.AdditionInformationDisplay == stepNo)
|
|
|
- .FirstOrDefault();
|
|
|
|
|
|
+ var item = _dbRecords.FirstOrDefault(a => a.Path == $"{DataItemEnum.Reactor}.{ReactorsEnum.StepRunFreq}" && a.AdditionInformationDisplay == stepNo);
|
|
|
+
|
|
|
+ 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}) times";
|
|
|
+ bool isWarning = item.CurrentValue > item.StartValue && item.CurrentValue < item.LimitValue;
|
|
|
+ bool isAlarm = item.CurrentValue >= item.LimitValue;
|
|
|
+
|
|
|
+ if (isWarning)
|
|
|
+ Singleton<EquipmentManager>.Instance.ReatorStepRunFreqWarning.Set(message);
|
|
|
|
|
|
- CheckRecipeMoreThan(
|
|
|
- stepNo,
|
|
|
- Singleton<EquipmentManager>.Instance.ReatorStepRunFreqWarning.Set,
|
|
|
- Singleton<EquipmentManager>.Instance.ReatorStepRunFreqAlarm.Set,
|
|
|
- item,
|
|
|
- "times",
|
|
|
- out isPause);
|
|
|
+ if (isAlarm)
|
|
|
+ {
|
|
|
+ Singleton<EquipmentManager>.Instance.ReatorStepRunFreqAlarm.Set(message);
|
|
|
+ isPause = true;
|
|
|
+ }
|
|
|
|
|
|
}
|
|
|
|
|
@@ -336,20 +465,52 @@ namespace FurnaceRT.Equipments.PMs
|
|
|
public void CheckRecipeExecuteFreqMoreThan(string recipeName, out bool isPause)
|
|
|
{
|
|
|
|
|
|
- var item = Singleton<ScheduleMaintenanceDataManager>.Instance.Item.Values
|
|
|
+ isPause = false;
|
|
|
+
|
|
|
+ if (string.IsNullOrEmpty(recipeName))
|
|
|
+ return;
|
|
|
+
|
|
|
+ var item = _dbRecords
|
|
|
.FirstOrDefault(a =>
|
|
|
a.Item == MaintenanceItemEnum.RecipeExecuteFreq.ToString() &&
|
|
|
a.Path == $"{DataItemEnum.Reactor}.{ReactorsEnum.Recipe}" &&
|
|
|
a.AdditionInformationDisplay == recipeName);
|
|
|
|
|
|
|
|
|
- CheckRecipeMoreThan(
|
|
|
- recipeName,
|
|
|
- Singleton<EquipmentManager>.Instance.RecipeExecuteFreqWarning.Set,
|
|
|
- Singleton<EquipmentManager>.Instance.RecipeExecuteFreqAlarm.Set,
|
|
|
- item,
|
|
|
- "times",
|
|
|
- out isPause, true);
|
|
|
+ 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}) times";
|
|
|
+
|
|
|
+
|
|
|
+ bool isWarning = item.CurrentValue > item.StartValue && item.CurrentValue < item.LimitValue;
|
|
|
+ bool isAlarm = item.CurrentValue >= item.LimitValue;
|
|
|
+ if (isWarning)
|
|
|
+ {
|
|
|
+ Singleton<EquipmentManager>.Instance.RecipeExecuteFreqWarning.Set(message);
|
|
|
+ }
|
|
|
+ if (isAlarm)
|
|
|
+ {
|
|
|
+ Singleton<EquipmentManager>.Instance.RecipeExecuteFreqWarning.Set(message);
|
|
|
+ if (command == MaintenanceProcessingCommandEnum.JobAutoStart)
|
|
|
+ {
|
|
|
+ if (string.IsNullOrEmpty(item.AssociationProcessRecipeName))
|
|
|
+ {
|
|
|
+ Singleton<EquipmentManager>.Instance.RecipeExecuteFreqAlarm.Set(message);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ LOG.Info($"{message} Trigger {item.AssociationProcessRecipeName}");
|
|
|
+ CheckToPostMessage((int)MSG.RunOtherRecipe, item.AssociationProcessRecipeName, "Process");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ isPause = true;
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
/// <summary>
|
|
|
/// 检查Recipe执行 累计膜厚是否超限
|
|
@@ -358,76 +519,53 @@ namespace FurnaceRT.Equipments.PMs
|
|
|
/// <param name="isPause"></param>
|
|
|
public void CheckRecipeThicknessMoreThan(string recipeName, out bool isPause)
|
|
|
{
|
|
|
- var item = Singleton<ScheduleMaintenanceDataManager>.Instance.Item.Values
|
|
|
- .FirstOrDefault(a =>
|
|
|
- a.Item == MaintenanceItemEnum.RecipeThickness.ToString() &&
|
|
|
- a.Path == $"{DataItemEnum.Reactor}.{ReactorsEnum.Recipe}" &&
|
|
|
- a.AdditionInformationDisplay == recipeName);
|
|
|
-
|
|
|
-
|
|
|
- CheckRecipeMoreThan(
|
|
|
- recipeName,
|
|
|
- Singleton<EquipmentManager>.Instance.RecipeThicknessWarning.Set,
|
|
|
- Singleton<EquipmentManager>.Instance.RecipeThicknessAlarm.Set,
|
|
|
- item,
|
|
|
- "Å",
|
|
|
- out isPause,true);
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- private void CheckRecipeMoreThan(
|
|
|
- string recipeName,
|
|
|
- Action<string> warningSetId,
|
|
|
- Action<string> alarmSetId,
|
|
|
- ScheduleMaintenanceDataItem item,
|
|
|
- string unit,
|
|
|
- out bool isPause,
|
|
|
- bool isEnableJobAutoStart = false)
|
|
|
- {
|
|
|
isPause = false;
|
|
|
|
|
|
if (string.IsNullOrEmpty(recipeName))
|
|
|
return;
|
|
|
|
|
|
+ var item = _dbRecords.FirstOrDefault(a =>
|
|
|
+ a.Item == MaintenanceItemEnum.RecipeThickness.ToString() &&
|
|
|
+ a.Path == $"{DataItemEnum.Reactor}.{ReactorsEnum.Recipe}" &&
|
|
|
+ a.AdditionInformationDisplay == recipeName);
|
|
|
+
|
|
|
+
|
|
|
if (item == null || !Enum.TryParse<MaintenanceProcessingCommandEnum>(item.MaintenanceProcessing, out var command))
|
|
|
return;
|
|
|
|
|
|
- string message = $"{item.AdditionInformationDisplay} {item.CurrentValue} more than {item.StartValue} {unit}";
|
|
|
- string nullMessage = $"No recipe file associated, unable to trigger JobAutoStart";
|
|
|
- var warningAction = new AlarmReportItem(warningSetId, message);
|
|
|
- var alarmAction = new AlarmReportItem(alarmSetId, message);
|
|
|
+ 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}) Å";
|
|
|
+
|
|
|
|
|
|
- if (item.CurrentValue > item.StartValue && item.CurrentValue < item.LimitValue && command != MaintenanceProcessingCommandEnum.None)
|
|
|
+ bool isWarning = item.CurrentValue > item.StartValue && item.CurrentValue < item.LimitValue;
|
|
|
+ bool isAlarm = item.CurrentValue >= item.LimitValue;
|
|
|
+ if (isWarning)
|
|
|
{
|
|
|
- warningAction.Exec();
|
|
|
+ Singleton<EquipmentManager>.Instance.RecipeThicknessWarning.Set(message);
|
|
|
}
|
|
|
-
|
|
|
- if (item.CurrentValue >= item.LimitValue)
|
|
|
+ if (isAlarm)
|
|
|
{
|
|
|
- ExecuteAlarm(alarmAction, ref isPause);
|
|
|
- if (isEnableJobAutoStart)
|
|
|
+ Singleton<EquipmentManager>.Instance.RecipeThicknessAlarm.Set(message);
|
|
|
+ if (command == MaintenanceProcessingCommandEnum.JobAutoStart)
|
|
|
{
|
|
|
- switch (command)
|
|
|
+ if (string.IsNullOrEmpty(item.AssociationProcessRecipeName))
|
|
|
{
|
|
|
- case MaintenanceProcessingCommandEnum.JobAutoStart:
|
|
|
- if (string.IsNullOrEmpty(item.AssociationProcessRecipeName))
|
|
|
- {
|
|
|
- ExecuteAlarm(new AlarmReportItem(alarmSetId, nullMessage), ref isPause);
|
|
|
- return;
|
|
|
- }
|
|
|
- CheckToPostMessage((int)MSG.RunOtherRecipe, item.AssociationProcessRecipeName, "Process");
|
|
|
- break;
|
|
|
+ Singleton<EquipmentManager>.Instance.RecipeThicknessAlarm.Set(message);
|
|
|
}
|
|
|
+ else
|
|
|
+ {
|
|
|
+ LOG.Info($"{message} Trigger {item.AssociationProcessRecipeName}");
|
|
|
+ CheckToPostMessage((int)MSG.RunOtherRecipe, item.AssociationProcessRecipeName, "Process");
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
|
|
|
+ isPause = true;
|
|
|
+ return;
|
|
|
}
|
|
|
- }
|
|
|
-
|
|
|
- private void ExecuteAlarm(AlarmReportItem alarmAction, ref bool isPause)
|
|
|
- {
|
|
|
- alarmAction.Exec();
|
|
|
- isPause = true;
|
|
|
+
|
|
|
}
|
|
|
}
|
|
|
}
|