Переглянути джерело

fix 添加boat thinckess total

jiangjy 4 днів тому
батько
коміт
6551178750

+ 2 - 0
FrameworkLocal/Common/CommonData/EnumData/RecipeExecEntryEnum.cs

@@ -21,5 +21,7 @@ namespace MECF.Framework.Common.CommonData.EnumData
         EDWaferRangeTrigger = 80,
         RecipeRangeTrigger = 90,
         RecipeStepRangeTrigger = 100,
+
+        BoatRecipeRangeTrigger = 110,
     }
 }

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

@@ -10197,6 +10197,8 @@
     <ALID id="10010042" logicalName="System.SetLotIDFailedWarning" description="Set lotID failed " category="EquipmentStatusWarning" enabled="false" eventSet="110010042" eventClear="210010042" />
     <ALID id="10010043" logicalName="System.TransferJobStartFailedWarning" description="Transfer job start failed " category="EquipmentStatusWarning" enabled="false" eventSet="110010043" eventClear="210010043" />
     <ALID id="10010044" logicalName="System.UnloadCassetteJobStartFailedWarning" description="UnloadCassette job start failed " category="EquipmentStatusWarning" enabled="false" eventSet="110010044" eventClear="210010044" />
+    <ALID id="10010045" logicalName="System.BoatRecipeThicknessAlarm" description="" category="EquipmentStatusWarning" enabled="false" eventSet="110010045" eventClear="210010045" />
+    <ALID id="10010046" logicalName="System.BoatRecipeThicknessWarning" description="" category="EquipmentStatusWarning" enabled="false" eventSet="110010046" eventClear="210010046" />
     <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.Heater.CommunicationError" description="Can not Communication " category="EquipmentStatusWarning" enabled="false" eventSet="110030001" eventClear="210030001" />

Різницю між файлами не показано, бо вона завелика
+ 1 - 2109
Furnace/FurnaceRT/Config/VIDs/_ALID.xml


+ 57 - 2
Furnace/FurnaceRT/Equipments/PMs/PMScheduleMaintenance.cs

@@ -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");
                     }
 

+ 3 - 1
Furnace/FurnaceRT/Equipments/PMs/RecipeExecutions/PreProcess.cs

@@ -346,7 +346,9 @@ namespace FurnaceRT.Equipments.PMs.RecipeExecutions
                             #endregion
                         }
                     }
-
+                    pm.CheckBoatRecipeThicknessMoreThan( out var boatRecipeThicknessIsPause);
+                    if (boatRecipeThicknessIsPause)
+                        return Result.FAIL;
 
                     pm.CheckRecipeThicknessMoreThan(_recipeName, out var isPause);
                     if (isPause)

+ 2 - 0
Furnace/FurnaceRT/Equipments/PMs/RecipeExecutions/Process.cs

@@ -772,6 +772,8 @@ namespace FurnaceRT.Equipments.PMs.RecipeExecutions
                                     PMModule.UpdateRecipeStepRunTime(stepName, Math.Round(stepTime, 1));
                                     PMModule.UpdateRecipeStepGroupThickness(stepName, thickness);
 
+                                    PMModule.UpdateBoatTotalThickness(thickness);
+
                                 }
                             }
 

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

@@ -48,6 +48,9 @@ namespace FurnaceRT.Equipments.Systems
         public AlarmEventItem RecipeThicknessAlarm { get; set; }
         public AlarmEventItem RecipeThicknessWarning { get; set; }
 
+        public AlarmEventItem BoatRecipeThicknessAlarm { get; set; }
+        public AlarmEventItem BoatRecipeThicknessWarning { get; set; }
+
         public AlarmEventItem ReatorStepRunFreqWarning { get; set; }
         public AlarmEventItem ReatorStepRunFreqAlarm { get; set; }
         public AlarmEventItem ReatorStepRunTimeWarning { get; set; }
@@ -320,7 +323,28 @@ namespace FurnaceRT.Equipments.Systems
                 Action = EventAction.Clear,
                 Category = "SystemAlarm",
             }, () => { return true; });
-
+            BoatRecipeThicknessWarning = SubscribeAlarm(new AlarmEventItem()
+            {
+                EventEnum = $"{Name}.BoatRecipeThicknessWarning",
+                Description = $"",
+                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; });
+            BoatRecipeThicknessAlarm = SubscribeAlarm(new AlarmEventItem()
+            {
+                EventEnum = $"{Name}.BoatRecipeThicknessAlarm",
+                Description = $"",
+                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; });
             ReatorStepRunTimeWarning = SubscribeAlarm(new AlarmEventItem()
             {
                 EventEnum = $"{Name}.ReatorStepRunTimeWarning",

+ 8 - 4
Furnace/FurnaceUI/Views/Scheduled/ScheduledMaintenanceMonitorViewModel.cs

@@ -399,14 +399,18 @@ namespace FurnaceUI.Views.Editors
         #region 方法 SetSave
         public void SetSave()
         {
-            if (EditModel.MaintenanceProcessing == MaintenanceProcessingCommandEnum.JobAutoStart.ToString() && string.IsNullOrEmpty(EditModel.AssociationProcessRecipeName))
+            var judgeConditionA = EditModel.MaintenanceProcessing == MaintenanceProcessingCommandEnum.JobAutoStart.ToString();
+            var judgeConditionB = string.IsNullOrEmpty(EditModel.AssociationProcessRecipeName);
+            if (judgeConditionA && judgeConditionB)
             {
                 DialogBox.ShowWarning($"Recipe cannot be empty");
                 return;
             }
-            if ((EditModel.MaintenanceProcessing == MaintenanceProcessingCommandEnum.AlarmReport.ToString() ||
-                EditModel.MaintenanceProcessing == MaintenanceProcessingCommandEnum.JobAutoStart.ToString())
-                && string.IsNullOrEmpty(EditModel.AdditionInformationDisplay))
+            var judgeConditionC = EditModel.MaintenanceProcessing == MaintenanceProcessingCommandEnum.AlarmReport.ToString();
+            var judgeConditionD = EditModel.Path == DataItemEnum.CarrierWafer.ToString() || EditModel.Path == DataItemEnum.Reactor.ToString();
+            var judgeConditionE = string.IsNullOrEmpty(EditModel.AdditionInformationDisplay);
+
+            if ((judgeConditionC || judgeConditionA) && judgeConditionE && judgeConditionD)
             {
                 DialogBox.ShowWarning($"AdditionInformation cannot be empty");
                 return;

+ 1 - 32
Furnace/FurnaceUI/Views/Scheduled/ScheduledMaitView.xaml

@@ -45,7 +45,6 @@
                     Margin="5,0"
                     Content="Boat"
                     FontSize="18"
-                    Visibility="Collapsed"
                     IsChecked="{Binding DataItemType, Converter={StaticResource EnumToBoolConverter}, ConverterParameter={x:Static enumData:DataItemEnum.Boat}}" />
                 <RadioButton
                     Width="150"
@@ -280,36 +279,6 @@
                 </GridView>
             </ListView.View>
         </ListView>
-        <!--<Border Grid.Row="2">
-            <StackPanel
-                HorizontalAlignment="Right"
-                VerticalAlignment="Center"
-                Orientation="Horizontal">
-                <Button
-                    Width="130"
-                    Height="45"
-                    Content="Save"
-                    IsEnabled="{Binding IsEnable}"
-                    Style="{StaticResource CommandButton}">
-                    <i:Interaction.Triggers>
-                        <i:EventTrigger EventName="Click">
-                            <cal:ActionMessage MethodName="SetSave" />
-                        </i:EventTrigger>
-                    </i:Interaction.Triggers>
-                </Button>
-                <Button
-                    Width="130"
-                    Height="45"
-                    Margin="20,0,20,0"
-                    Content="Cancel"
-                    Style="{StaticResource CommandButton}">
-                    <i:Interaction.Triggers>
-                        <i:EventTrigger EventName="Click">
-                            <cal:ActionMessage MethodName="SetCancel" />
-                        </i:EventTrigger>
-                    </i:Interaction.Triggers>
-                </Button>
-            </StackPanel>
-        </Border>-->
+        
     </Grid>
 </UserControl>

+ 7 - 3
Furnace/FurnaceUI/Views/Scheduled/ScheduledMaitViewModel.cs

@@ -144,13 +144,13 @@ namespace FurnaceUI.Views.Editors
                 {
                     IWindowManager wm = IoC.Get<IWindowManager>();
                     ScheduledMaintenanceMonitorViewModel scheduledMaintenanceMonitorViewModel = new ScheduledMaintenanceMonitorViewModel(selectedItem);
-                    var rtn = (wm as WindowManager)?.ShowDialogWithTitle(scheduledMaintenanceMonitorViewModel,this, null, "Maintenance Setting");
+                    var rtn = (wm as WindowManager)?.ShowDialogWithTitle(scheduledMaintenanceMonitorViewModel, this, null, "Maintenance Setting");
                     if (rtn == true)
                     {
 
                         var isModifyAdditionInformationDisplay = !string.IsNullOrEmpty(scheduledMaintenanceMonitorViewModel.EditModel.AdditionInformationDisplay) && selectedItem.AdditionInformationDisplay != scheduledMaintenanceMonitorViewModel.EditModel.AdditionInformationDisplay;
-                        var isModifyAdditionInformationDisplaySupplement =  selectedItem.AdditionInformationDisplaySupplement != scheduledMaintenanceMonitorViewModel.EditModel.AdditionInformationDisplaySupplement;
-                        if (isModifyAdditionInformationDisplay|| isModifyAdditionInformationDisplaySupplement)
+                        var isModifyAdditionInformationDisplaySupplement = selectedItem.AdditionInformationDisplaySupplement != scheduledMaintenanceMonitorViewModel.EditModel.AdditionInformationDisplaySupplement;
+                        if (isModifyAdditionInformationDisplay || isModifyAdditionInformationDisplaySupplement)
                         {
                             selectedItem.AdditionInformationDisplay = scheduledMaintenanceMonitorViewModel.EditModel.AdditionInformationDisplay;
                             selectedItem.AdditionInformationDisplaySupplement = scheduledMaintenanceMonitorViewModel.EditModel.AdditionInformationDisplaySupplement;
@@ -260,6 +260,10 @@ namespace FurnaceUI.Views.Editors
                             break;
                         case "Boat":
                             item.DataItemType = DataItemEnum.Boat;
+                            if (item.Item != MaintenanceItemEnum.BoatRecipeThickness1.ToString())
+                            {
+                                continue;
+                            }
                             break;
                         case "Conditioning":
                             item.DataItemType = DataItemEnum.Conditioning;