瀏覽代碼

添加StepId限制

git-svn-id: http://10.4.3.168:50001/svn/Furnace@133 dbcde07d-dcf5-c148-8a84-ac3097b7778e
Jiangjinyuan 1 月之前
父節點
當前提交
4aa79e42b0

+ 3 - 0
FrameworkLocal/Common/IOCore/IOAccessor.cs

@@ -126,6 +126,8 @@ namespace Aitex.Core.RT.IOCore
         private void SetValue(int index, T value)
         {
             Debug.Assert(values != null && index >= 0 && index < values.Length);
+
+            LOG.Write($"Write DO[{Name}] from {values[index]} to {value}");
             values[index] = value;
         }
     }
@@ -306,6 +308,7 @@ namespace Aitex.Core.RT.IOCore
                 IIoProvider provider = IoProviderManager.Instance.GetProvider(this.Provider);
                 if (provider != null)
                 {
+                    LOG.Write($"Write DO[{Name}] from {_floatValues[index]} to {value}");
                     provider.SetValueFloat(this, value);
                 }
 

+ 8 - 0
FrameworkLocal/UIClient/CenterViews/Parameter/MainParameterEditViewModel.cs

@@ -225,9 +225,17 @@ namespace MECF.Framework.UI.Client.CenterViews.Parameter
         public void StepGroupEdit(string groupName)
         {
             var windowManager = IoC.Get<IWindowManager>();
+            var groupList = CurrentNode.Items.Where(a => a.Display != groupName).Select(a => a.Path).ToList();
+            List<string> hasSelectStepIdList = new List<string>();
+
+            foreach (var item in QueryDataClient.Instance.Service.PollConfig(groupList).Values)
+            {
+                hasSelectStepIdList.AddRange( item.ToString().Split(',').ToList());
+            }
 
             StepGroupEditViewModel recipeStepNameViewModel = new StepGroupEditViewModel();
             recipeStepNameViewModel.StepGroupName = groupName;
+            recipeStepNameViewModel.HasSelectStepIds = hasSelectStepIdList;
             if ((bool)(windowManager as WindowManager)?.ShowDialogWithTitle(recipeStepNameViewModel, null, "Step Group Edit"))
             {
                 var selectStepId = recipeStepNameViewModel.StepIdList.Where(a => a.IsExpanded).Select(a => a.Name).ToList();

+ 9 - 1
FrameworkLocal/UIClient/CenterViews/Parameter/StepGroupEditViewModel.cs

@@ -24,6 +24,7 @@ namespace MECF.Framework.UI.Client.CenterViews.Parameter
             }
         }
         public string StepGroupName = "Group1";
+        public List<string> HasSelectStepIds = new List<string>();
         public string SelectStepIDStr = "";
 
         private ConfigNode _rootNode;
@@ -48,8 +49,15 @@ namespace MECF.Framework.UI.Client.CenterViews.Parameter
                 var datas = QueryDataClient.Instance.Service.PollConfig(stepNameNode.Items.Select(a => $"{a.Path}.{a.Name}").ToList());
                 foreach (var item in stepNameNode.Items)
                 {
+                    if (HasSelectStepIds != null && HasSelectStepIds.Count > 0)
+                    {
+                        if (HasSelectStepIds.Contains(item.Name))
+                        {
+                            continue;
+                        }
+                    }
                     var key = $"{item.Path}.{item.Name}";
-                    datas.TryGetValue(key,out var value);
+                    datas.TryGetValue(key, out var value);
                     item.CurrentValue = (string)value;
                     item.Display = $"{item.Name}:{item.CurrentValue}";
                     StepIdList.Add(item);

+ 101 - 165
Furnace/FurnaceRT/Equipments/PMs/PMScheduleMaintenance.cs

@@ -23,6 +23,7 @@ using System.Collections;
 using System.Collections.Generic;
 using System.Diagnostics;
 using System.Linq;
+using System.Runtime.Remoting.Metadata.W3cXsd2001;
 
 namespace FurnaceRT.Equipments.PMs
 {
@@ -163,7 +164,6 @@ namespace FurnaceRT.Equipments.PMs
         #endregion
 
 
-        #region DataItemEnum.Reactor 模块
 
         /// <summary>
         /// 根据RecipeStep +StepGroup统计  累计膜厚
@@ -238,14 +238,6 @@ namespace FurnaceRT.Equipments.PMs
                 if (item == null)
                     continue;
                 Singleton<ScheduleMaintenanceDataManager>.Instance.Increase(item.Item);
-
-
-                if (item.CurrentValue > item.StartValue && item.CurrentValue < item.LimitValue)
-                    MaintenanceProcessingCommandExec(item.MaintenanceProcessing, new AlarmReportItem(Singleton<EquipmentManager>.Instance.ReatorStepRunFreqWarning.Set, $"more than {item.StartValue} times"));
-
-                if (item.CurrentValue >= item.LimitValue)
-                    MaintenanceProcessingCommandExec(item.MaintenanceProcessing, new AlarmReportItem(Singleton<EquipmentManager>.Instance.ReatorStepRunFreqAlarm.Set, $"more than {item.LimitValue} times"));
-
             }
 
         }
@@ -287,50 +279,117 @@ namespace FurnaceRT.Equipments.PMs
         }
 
 
-        #endregion
 
-        #region 检查是否超过设定值
+        /// <summary>
+        /// 检查 RecipeStep 累计时间是否超限
+        /// </summary>
+        /// <param name="stepName"></param>
+        /// <param name="isPause"></param>
+        public void CheckRecipeStepTimeMoreThan(string stepName, out bool isPause)
+        {
+
+            var stepNo = stepName.Split(':').FirstOrDefault();
+            var item = Singleton<ScheduleMaintenanceDataManager>.Instance.Item.Values
+                .Where(a => a.Path == $"{DataItemEnum.Reactor}.{ReactorsEnum.StepRunFreq}" && a.AdditionInformationDisplay == stepNo)
+                .FirstOrDefault();
+
+
+            CheckRecipeMoreThan(
+                stepNo,
+                Singleton<EquipmentManager>.Instance.ReatorStepRunTimeWarning.Set,
+                Singleton<EquipmentManager>.Instance.ReatorStepRunTimeAlarm.Set,
+                item,
+                "HH:mm",
+                out isPause);
+
+        }
+
+        /// <summary>
+        /// RecipeStep 累计次数是否超限
+        /// </summary>
+        /// <param name="stepName"></param>
+        /// <param name="isPause"></param>
+        public void CheckRecipeStepFreqMoreThan(string stepName, out bool isPause)
+        {
+
+            var stepNo = stepName.Split(':').FirstOrDefault();
+            var item = Singleton<ScheduleMaintenanceDataManager>.Instance.Item.Values
+                .Where(a => a.Path == $"{DataItemEnum.Reactor}.{ReactorsEnum.StepRunFreq}" && a.AdditionInformationDisplay == stepNo)
+                .FirstOrDefault();
+
+
+            CheckRecipeMoreThan(
+                stepNo,
+                Singleton<EquipmentManager>.Instance.ReatorStepRunFreqWarning.Set,
+                Singleton<EquipmentManager>.Instance.ReatorStepRunFreqAlarm.Set,
+                item,
+                "times",
+                out isPause);
+
+        }
+
+        /// <summary>
+        ///  检查Recipe执行 累计次数是否超限
+        /// </summary>
+        /// <param name="recipeName"></param>
+        /// <param name="isPause"></param>
         public void CheckRecipeExecuteFreqMoreThan(string recipeName, out bool isPause)
         {
+
+            var item = Singleton<ScheduleMaintenanceDataManager>.Instance.Item.Values
+                         .FirstOrDefault(a =>
+                          a.Item == MaintenanceItemEnum.RecipeExecuteFreq.ToString() &&
+                          a.Path == $"{DataItemEnum.Reactor}.{ReactorsEnum.Recipe}" &&
+                          a.AdditionInformationDisplay == recipeName);
+
+
             CheckRecipeMoreThan(
                 recipeName,
-                MaintenanceItemEnum.RecipeExecuteFreq.ToString(),
                 Singleton<EquipmentManager>.Instance.RecipeExecuteFreqWarning.Set,
                 Singleton<EquipmentManager>.Instance.RecipeExecuteFreqAlarm.Set,
+                item,
                 "times",
-                out isPause);
+                out isPause, true);
         }
-
+        /// <summary>
+        ///  检查Recipe执行 累计膜厚是否超限
+        /// </summary>
+        /// <param name="recipeName"></param>
+        /// <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,
-                MaintenanceItemEnum.RecipeThickness.ToString(),
                 Singleton<EquipmentManager>.Instance.RecipeThicknessWarning.Set,
                 Singleton<EquipmentManager>.Instance.RecipeThicknessAlarm.Set,
+                item,
                 "Å",
-                out isPause);
+                out isPause,true);
         }
 
+
+
         private void CheckRecipeMoreThan(
-            string recipeName,
-            string maintenanceItemType,
-            Action<string> warningSetId,
-            Action<string> alarmSetId,
-            string unit,
-            out bool isPause)
+         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 = Singleton<ScheduleMaintenanceDataManager>.Instance.Item.Values
-                         .FirstOrDefault(a =>
-                          a.Item == maintenanceItemType &&
-                          a.Path == $"{DataItemEnum.Reactor}.{ReactorsEnum.Recipe}" &&
-                          a.AdditionInformationDisplay == recipeName);
-
             if (item == null || !Enum.TryParse<MaintenanceProcessingCommandEnum>(item.MaintenanceProcessing, out var command))
                 return;
 
@@ -347,151 +406,28 @@ namespace FurnaceRT.Equipments.PMs
             if (item.CurrentValue >= item.LimitValue)
             {
                 ExecuteAlarm(alarmAction, ref isPause);
-
-                switch (command)
+                if (isEnableJobAutoStart)
                 {
-                    case MaintenanceProcessingCommandEnum.JobAutoStart:
-                        if (string.IsNullOrEmpty(item.AssociationProcessRecipeName))
-                        {
-                            ExecuteAlarm(new AlarmReportItem(alarmSetId, nullMessage), ref isPause);
-                            return;
-                        }
-                        CheckToPostMessage((int)MSG.RunOtherRecipe, item.AssociationProcessRecipeName, "Process");
-                        break;
+                    switch (command)
+                    {
+                        case MaintenanceProcessingCommandEnum.JobAutoStart:
+                            if (string.IsNullOrEmpty(item.AssociationProcessRecipeName))
+                            {
+                                ExecuteAlarm(new AlarmReportItem(alarmSetId, nullMessage), ref isPause);
+                                return;
+                            }
+                            CheckToPostMessage((int)MSG.RunOtherRecipe, item.AssociationProcessRecipeName, "Process");
+                            break;
+                    }
                 }
+
             }
         }
-
+     
         private void ExecuteAlarm(AlarmReportItem alarmAction, ref bool isPause)
         {
             alarmAction.Exec();
             isPause = true;
         }
-
-        //public void CheckRecipeExecuteFreqMoreThan(string recipeName, out bool isPause)
-        //{
-        //    isPause = false;
-
-        //    if (string.IsNullOrEmpty(recipeName))
-        //        return;
-        //    var item = Singleton<ScheduleMaintenanceDataManager>.Instance.Item.Values
-        //                 .FirstOrDefault(a =>
-        //                  a.Item == MaintenanceItemEnum.RecipeExecuteFreq.ToString() &&
-        //                  a.Path == $"{DataItemEnum.Reactor}.{ReactorsEnum.Recipe}" &&
-        //                  a.AdditionInformationDisplay == recipeName);
-
-        //    if (item != null)
-        //    {
-        //        string message = $"{item.AdditionInformationDisplay} {item.CurrentValue} more than {item.StartValue} times";
-        //        string nullMessage = $"No recipe file associated, unable to trigger JobAutoStart";
-        //        var warningAction = new AlarmReportItem(Singleton<EquipmentManager>.Instance.RecipeExecuteFreqWarning.Set, message);
-        //        var alarmAction = new AlarmReportItem(Singleton<EquipmentManager>.Instance.RecipeExecuteFreqAlarm.Set, message);
-
-
-        //        if (Enum.TryParse<MaintenanceProcessingCommandEnum>(item.MaintenanceProcessing, out var command))
-        //        {
-        //            bool isWarning = item.CurrentValue > item.StartValue && item.CurrentValue < item.LimitValue;
-        //            bool isAlarm = item.CurrentValue >= item.LimitValue;
-        //            switch (command)
-        //            {
-        //                case MaintenanceProcessingCommandEnum.AlarmReport:
-        //                    if (isWarning)
-        //                        warningAction.Exec();
-
-        //                    if (isAlarm)
-        //                    {
-        //                        alarmAction.Exec();
-        //                        isPause = true;
-        //                    }
-        //                    break;
-
-        //                case MaintenanceProcessingCommandEnum.JobAutoStart:
-        //                    if (isWarning)
-        //                        warningAction.Exec();
-
-        //                    if (isAlarm)
-        //                    {
-        //                        alarmAction.Exec();
-        //                        if (string.IsNullOrEmpty(item.AssociationProcessRecipeName))
-        //                        {
-        //                            alarmAction.Exec(nullMessage);
-        //                            isPause = true;
-        //                            return;
-        //                        }
-        //                        CheckToPostMessage((int)MSG.RunOtherRecipe, item.AssociationProcessRecipeName, "Process");
-        //                        isPause = true;
-        //                    }
-        //                    break;
-
-        //            }
-        //        }
-
-        //    }
-
-        //}
-
-        //public void CheckRecipeThicknessMoreThan(string recipeName, out bool isPause)
-        //{
-        //    isPause = false;
-
-        //    if (string.IsNullOrEmpty(recipeName))
-        //        return;
-        //    var item = Singleton<ScheduleMaintenanceDataManager>.Instance.Item.Values
-        //                 .FirstOrDefault(a =>
-        //                  a.Item == MaintenanceItemEnum.RecipeThickness.ToString() &&
-        //                  a.Path == $"{DataItemEnum.Reactor}.{ReactorsEnum.Recipe}" &&
-        //                  a.AdditionInformationDisplay == recipeName);
-
-        //    if (item != null)
-        //    {
-        //        string message = $"{item.AdditionInformationDisplay} {item.CurrentValue} more than {item.StartValue} Å";
-        //        string nullMessage = $"No recipe file associated, unable to trigger JobAutoStart";
-        //        var warningAction = new AlarmReportItem(Singleton<EquipmentManager>.Instance.RecipeThicknessWarning.Set, message);
-        //        var alarmAction = new AlarmReportItem(Singleton<EquipmentManager>.Instance.RecipeThicknessAlarm.Set, message);
-
-
-        //        if (Enum.TryParse<MaintenanceProcessingCommandEnum>(item.MaintenanceProcessing, out var command))
-        //        {
-        //            bool isWarning = item.CurrentValue > item.StartValue && item.CurrentValue < item.LimitValue;
-        //            bool isAlarm = item.CurrentValue >= item.LimitValue;
-        //            switch (command)
-        //            {
-        //                case MaintenanceProcessingCommandEnum.AlarmReport:
-        //                    if (isWarning)
-        //                        warningAction.Exec();
-
-        //                    if (isAlarm)
-        //                    {
-        //                        alarmAction.Exec();
-        //                        isPause = true;
-        //                    }
-        //                    break;
-
-        //                case MaintenanceProcessingCommandEnum.JobAutoStart:
-        //                    if (isWarning)
-        //                        warningAction.Exec();
-
-        //                    if (isAlarm)
-        //                    {
-        //                        alarmAction.Exec();
-        //                        if (string.IsNullOrEmpty(item.AssociationProcessRecipeName))
-        //                        {
-        //                            alarmAction.Exec(nullMessage);
-        //                            isPause = true;
-        //                            return;
-        //                        }
-        //                        CheckToPostMessage((int)MSG.RunOtherRecipe, item.AssociationProcessRecipeName, "Process");
-        //                        isPause = true;
-        //                    }
-        //                    break;
-
-        //            }
-        //        }
-
-        //    }
-
-        //}
-
-        #endregion
     }
 }

+ 25 - 1
Furnace/FurnaceRT/Equipments/Systems/EquipmentManagerAlarmDefine.cs

@@ -50,7 +50,8 @@ namespace FurnaceRT.Equipments.Systems
 
         public AlarmEventItem ReatorStepRunFreqWarning { get; set; }
         public AlarmEventItem ReatorStepRunFreqAlarm { get; set; }
-
+        public AlarmEventItem ReatorStepRunTimeWarning { get; set; }
+        public AlarmEventItem ReatorStepRunTimeAlarm { get; set; }
         public AlarmEventItem ReatorStepThicknessAlarm { get; set; }
         public AlarmEventItem ReatorStepThicknessWarning { get; set; }
         #endregion
@@ -355,6 +356,29 @@ namespace FurnaceRT.Equipments.Systems
                 Category = "SystemAlarm",
             }, () => { return true; });
 
+            ReatorStepRunTimeWarning = SubscribeAlarm(new AlarmEventItem()
+            {
+                EventEnum = $"{Name}.ReatorStepRunTimeWarning",
+                Description = $"StepRunTime Warning",
+                Solution = "No information available. Press[Clear] to delete alarm message.",
+                Explaination = "No information available.",
+                AutoRecovery = false,
+                Level = EventLevel.Warning,
+                Action = EventAction.Clear,
+                Category = "SystemAlarm",
+            }, () => { return true; });
+
+            ReatorStepRunTimeAlarm = SubscribeAlarm(new AlarmEventItem()
+            {
+                EventEnum = $"{Name}.ReatorStepRunTimeAlarm",
+                Description = $"StepRunTime Alarm",
+                Solution = "No information available. Press[Clear] to delete alarm message.",
+                Explaination = "No information available.",
+                AutoRecovery = false,
+                Level = EventLevel.Alarm,
+                Action = EventAction.Clear,
+                Category = "SystemAlarm",
+            }, () => { return true; });
 
             ReatorStepRunFreqWarning = SubscribeAlarm(new AlarmEventItem()
             {

+ 17 - 0
Furnace/FurnaceUI/Views/Scheduled/ScheduledMaintenanceMonitorViewModel.cs

@@ -193,6 +193,12 @@ namespace FurnaceUI.Views.Editors
             if ((bool)(windowManager as WindowManager)?.ShowDialogWithTitle(recipeStepNameViewModel, null, "Select Step ID"))
             {
                 var strs = recipeStepNameViewModel.SelectedStepName.Split(':');
+                if (IsExist(strs.FirstOrDefault()))
+                {
+                    DialogBox.ShowWarning($"Step: {strs.FirstOrDefault()} repeated selection!");
+                    return;
+
+                }
                 EditModel.AdditionInformationDisplay = strs.FirstOrDefault();
                 if (strs.Length > 1)
                 {
@@ -205,6 +211,17 @@ namespace FurnaceUI.Views.Editors
             }
 
         }
+        private bool IsExist(string stepId)
+        {
+            string sql = $"SELECT addition_information_display FROM \"schedule_maintenance\"  WHERE  path='{EditModel.DataItemType}.{EditModel.ReactorsType}' AND addition_information_display='{stepId}'";
+
+            DataTable dt = QueryDataClient.Instance.Service.QueryData(sql);
+            if (dt != null && dt.Rows != null)
+            {
+                return dt.Rows.Count >= 1;
+            }
+            return false;
+        }
         private void CompareConfigurations()
         {
             var groupValue = (string)QueryDataClient.Instance.Service.GetConfig($"PM1.RecipeEditParameter.StepGroup.{EditModel.AdditionInformationDisplay}");