Browse Source

update TestScheduleMaintenance

git-svn-id: http://10.4.3.168:50001/svn/Furnace@134 dbcde07d-dcf5-c148-8a84-ac3097b7778e
Jiangjinyuan 1 month ago
parent
commit
6054c12a3d

+ 29 - 24
FrameworkLocal/Common/DataCenter/ScheduleMaintenanceDataManager.cs

@@ -23,7 +23,7 @@ namespace MECF.Framework.Common.DataCenter
     {
         public ScheduleMaintenanceDataItem DataItem { get; private set; }
 
-        public ScheduleMaintenanceData(string item, string unit, string path, string additionInformationName = "", string additionInformationDisplay = "", float startValue = 0, float limitValue = 0, string display = "", string maintenanceProcessing = "None",  string associationProcessRecipeName = "", string additionInformationDisplaySupplement = "")
+        public ScheduleMaintenanceData(string item, string unit, string path, string additionInformationName = "", string additionInformationDisplay = "", float startValue = 0, float limitValue = 0, string display = "", string maintenanceProcessing = "None", string associationProcessRecipeName = "", string additionInformationDisplaySupplement = "")
         {
             if (string.IsNullOrEmpty(display))
                 display = item;
@@ -138,29 +138,7 @@ namespace MECF.Framework.Common.DataCenter
                     return true;
                 });
 
-                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;
-
-                    _items[item.Item] = item;
-                }
+                RefershData();
 
             }
             catch (Exception ex)
@@ -168,6 +146,33 @@ namespace MECF.Framework.Common.DataCenter
                 LOG.Error("init stats data manager failed", ex);
             }
         }
+        public void RefershData()
+        {
+
+            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;
+
+                _items[item.Item] = item;
+            }
+        }
         public string SetMaintenanceName(string name, string display)
         {
             lock (_locker)

+ 2 - 2
Furnace/FurnaceGasPanelUI/Views/Maintenances/ELK/GasPanelView.xaml

@@ -10751,11 +10751,11 @@
                     NH3
                 </TextBlock>
                 <TextBlock
-                    Canvas.Left="1128"
+                    Canvas.Left="1138"
                     Canvas.Top="741"
                     HorizontalAlignment="Left"
                     VerticalAlignment="Center">
-                    SIH2CL2
+                    H2
                 </TextBlock>
                 <TextBlock
                     Canvas.Left="1287"

+ 2 - 0
Furnace/FurnaceRT/Config/FurnaceGemModel.xml

@@ -10831,6 +10831,8 @@
     <ALID id="10010040" logicalName="System.ReatorStepThicknessWarning" description="Recipe Step Run Thickness Warning" category="EquipmentStatusWarning" enabled="false" eventSet="110010040" eventClear="210010040" />
     <ALID id="10010041" logicalName="System.RecipeThicknessAlarm" description="Recipe Thickness Alarm" category="EquipmentStatusWarning" enabled="false" eventSet="110010041" eventClear="210010041" />
     <ALID id="10010042" logicalName="System.RecipeThicknessWarning" description="Recipe Thickness Warning " category="EquipmentStatusWarning" enabled="false" eventSet="110010042" eventClear="210010042" />
+    <ALID id="10010043" logicalName="System.ReatorStepRunTimeAlarm" description="StepRunTime Alarm" category="EquipmentStatusWarning" enabled="false" eventSet="110010043" eventClear="210010043" />
+    <ALID id="10010044" logicalName="System.ReatorStepRunTimeWarning" description="StepRunTime Warning" category="EquipmentStatusWarning" enabled="false" eventSet="110010044" eventClear="210010044" />
     <ALID id="10020001" logicalName="System.CHM.CommunicationError" description="Can not Communication " category="EquipmentStatusWarning" enabled="false" eventSet="110020001" eventClear="210020001" />
     <ALID id="10020002" logicalName="System.CHM.ConnectionError" description="Can not connect with " category="EquipmentStatusWarning" enabled="false" eventSet="110020002" eventClear="210020002" />
     <ALID id="10030001" logicalName="System.GasLine1.CommunicationError" description="Can not Communication " category="EquipmentStatusWarning" enabled="false" eventSet="110030001" eventClear="210030001" />

File diff suppressed because it is too large
+ 1 - 1
Furnace/FurnaceRT/Config/VIDs/_ALID.xml


+ 229 - 91
Furnace/FurnaceRT/Equipments/PMs/PMScheduleMaintenance.cs

@@ -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;
+
         }
     }
 }

+ 31 - 9
Furnace/FurnaceRT/Equipments/PMs/RecipeExecutions/PreProcess.cs

@@ -45,36 +45,58 @@ namespace FurnaceRT.Equipments.PMs.RecipeExecutions
             string reason = string.Empty;
             if (_isProcessRecipe)
             {
+
+
+                if (!RecipeParser.Parse(_recipeName, Module, out recipeHead, out recipeSteps, out reason, "Process"))
+                {
+                    PMModule.PreprocessStartFailedWarning.Set($"Load process recipe {_recipeName} failed, {reason}");
+                    return Result.FAIL;
+                }
+
                 #region MyRegion
                 var isScheduleMaintenance = SC.ContainsItem("System.EnableScheduleMaintenance") && SC.GetValue<bool>("System.EnableScheduleMaintenance");
                 if (isScheduleMaintenance)
                 {
+
                     var pm = (Singleton<EquipmentManager>.Instance.Modules[ModuleName.PM1] as PMModule);
 
+                    pm.GetAllDBRecord();
 
                     pm.CheckRecipeThicknessMoreThan(_recipeName, out var isPause);
                     if (isPause)
                         return Result.FAIL;
 
-                    pm.CheckRecipeExecuteFreqMoreThan(_recipeName, out isPause);
-                    if (isPause)
+                    pm.CheckRecipeExecuteFreqMoreThan(_recipeName, out var isPause1);
+                    if (isPause1)
                         return Result.FAIL;
 
-                }
-                #endregion
 
+                    foreach (var item in recipeSteps)
+                    {
+
+                        pm.CheckRecipeStepFreqMoreThan(item.StepName, out var isPause2);
+                        if (isPause2)
+                            return Result.FAIL;
+
+                        pm.CheckRecipeStepTimeMoreThan(item.StepName, out var isPause3);
+                        if (isPause3)
+                            return Result.FAIL;
+
+                        pm.CheckRecipeStepGroupThicknessMoreThan(item.StepName, out var isPause4);
+                        if (isPause4)
+                            return Result.FAIL;
+
+                    }
 
-                if (!RecipeParser.Parse(_recipeName, Module, out recipeHead, out recipeSteps, out reason, "Process"))
-                {
-                    PMModule.PreprocessStartFailedWarning.Set($"Load process recipe {_recipeName} failed, {reason}");
-                    return Result.FAIL;
                 }
+                #endregion
+
 
                 PMModule.RecipeRunningInfo.MainRecipeName = _recipeName;
                 PMModule.RecipeRunningInfo.Head = recipeHead;
                 PMModule.RecipeRunningInfo.RecipeStepList = recipeSteps;
             }
-            
+
 
 
             Reset();

+ 10 - 10
Furnace/FurnaceRT/Equipments/Systems/EquipmentManagerAlarmDefine.cs

@@ -313,7 +313,7 @@ namespace FurnaceRT.Equipments.Systems
             RecipeExecuteFreqWarning = SubscribeAlarm(new AlarmEventItem()
             {
                 EventEnum = $"{Name}.RecipeExecuteFreqWarning",
-                Description = $"RecipeExecFre warning",
+                Description = $"",
                 Solution = "No information available. Press[Clear] to delete alarm message.",
                 Explaination = "No information available.",
                 AutoRecovery = false,
@@ -324,7 +324,7 @@ namespace FurnaceRT.Equipments.Systems
             RecipeExecuteFreqAlarm = SubscribeAlarm(new AlarmEventItem()
             {
                 EventEnum = $"{Name}.RecipeExecuteFreqAlarm",
-                Description = $"RecipeExecFre Alarm",
+                Description = $"",
                 Solution = "No information available. Press[Clear] to delete alarm message.",
                 Explaination = "No information available.",
                 AutoRecovery = false,
@@ -336,7 +336,7 @@ namespace FurnaceRT.Equipments.Systems
             RecipeThicknessWarning = SubscribeAlarm(new AlarmEventItem()
             {
                 EventEnum = $"{Name}.RecipeThicknessWarning",
-                Description = $"RecipeThickness Warning ",
+                Description = $"",
                 Solution = "No information available. Press[Clear] to delete alarm message.",
                 Explaination = "No information available.",
                 AutoRecovery = false,
@@ -347,7 +347,7 @@ namespace FurnaceRT.Equipments.Systems
             RecipeThicknessAlarm = SubscribeAlarm(new AlarmEventItem()
             {
                 EventEnum = $"{Name}.RecipeThicknessAlarm",
-                Description = $"RecipeThickness Alarm",
+                Description = $"",
                 Solution = "No information available. Press[Clear] to delete alarm message.",
                 Explaination = "No information available.",
                 AutoRecovery = false,
@@ -359,7 +359,7 @@ namespace FurnaceRT.Equipments.Systems
             ReatorStepRunTimeWarning = SubscribeAlarm(new AlarmEventItem()
             {
                 EventEnum = $"{Name}.ReatorStepRunTimeWarning",
-                Description = $"StepRunTime Warning",
+                Description = $"",
                 Solution = "No information available. Press[Clear] to delete alarm message.",
                 Explaination = "No information available.",
                 AutoRecovery = false,
@@ -371,7 +371,7 @@ namespace FurnaceRT.Equipments.Systems
             ReatorStepRunTimeAlarm = SubscribeAlarm(new AlarmEventItem()
             {
                 EventEnum = $"{Name}.ReatorStepRunTimeAlarm",
-                Description = $"StepRunTime Alarm",
+                Description = $"",
                 Solution = "No information available. Press[Clear] to delete alarm message.",
                 Explaination = "No information available.",
                 AutoRecovery = false,
@@ -383,7 +383,7 @@ namespace FurnaceRT.Equipments.Systems
             ReatorStepRunFreqWarning = SubscribeAlarm(new AlarmEventItem()
             {
                 EventEnum = $"{Name}.ReatorStepRunFreqWarning",
-                Description = $"StepRunFreq Warning",
+                Description = $"",
                 Solution = "No information available. Press[Clear] to delete alarm message.",
                 Explaination = "No information available.",
                 AutoRecovery = false,
@@ -394,7 +394,7 @@ namespace FurnaceRT.Equipments.Systems
             ReatorStepRunFreqAlarm = SubscribeAlarm(new AlarmEventItem()
             {
                 EventEnum = $"{Name}.ReatorStepRunFreqAlarm",
-                Description = $"StepRunFreq Alarm",
+                Description = $"",
                 Solution = "No information available. Press[Clear] to delete alarm message.",
                 Explaination = "No information available.",
                 AutoRecovery = false,
@@ -405,7 +405,7 @@ namespace FurnaceRT.Equipments.Systems
             ReatorStepThicknessWarning = SubscribeAlarm(new AlarmEventItem()
             {
                 EventEnum = $"{Name}.ReatorStepThicknessWarning",
-                Description = $"StepRunThickness Warning",
+                Description = $"",
                 Solution = "No information available. Press[Clear] to delete alarm message.",
                 Explaination = "No information available.",
                 AutoRecovery = false,
@@ -416,7 +416,7 @@ namespace FurnaceRT.Equipments.Systems
             ReatorStepThicknessAlarm = SubscribeAlarm(new AlarmEventItem()
             {
                 EventEnum = $"{Name}.ReatorStepThicknessAlarm",
-                Description = $"StepRunThickness Alarm",
+                Description = $"",
                 Solution = "No information available. Press[Clear] to delete alarm message.",
                 Explaination = "No information available.",
                 AutoRecovery = false,

+ 2 - 2
Furnace/FurnaceUI/Views/Editors/ELK/RecipeGasPanelSettingView.xaml

@@ -10715,11 +10715,11 @@
                         NH3
                     </TextBlock>
                     <TextBlock
-                        Canvas.Left="1128"
+                        Canvas.Left="1138"
                         Canvas.Top="741"
                         HorizontalAlignment="Left"
                         VerticalAlignment="Center">
-                        SIH2CL2
+                        H2
                     </TextBlock>
                     <TextBlock
                         Canvas.Left="1287"

+ 2 - 2
Furnace/FurnaceUI/Views/Maintenances/Maintenances/ELK/GasPanelView.xaml

@@ -10662,11 +10662,11 @@
                         NH3
                     </TextBlock>
                     <TextBlock
-                        Canvas.Left="1128"
+                        Canvas.Left="1138"
                         Canvas.Top="741"
                         HorizontalAlignment="Left"
                         VerticalAlignment="Center">
-                        SIH2CL2
+                        H2
                     </TextBlock>
                     <TextBlock
                         Canvas.Left="1287"