123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414 |
- using Aitex.Core.RT.Log;
- using Aitex.Core.RT.RecipeCenter;
- using Aitex.Core.UI.MVVM;
- using Aitex.Core.Utilities;
- using MECF.Framework.Common.Equipment;
- using MECF.Framework.Common.OperationCenter;
- using MECF.Framework.Common.Persistent.Prewet;
- using MECF.Framework.Common.Persistent.SRD;
- using MECF.Framework.Common.RecipeCenter;
- using MECF.Framework.Common.Routine;
- using CyberX8_Core;
- using System;
- using System.Collections.Generic;
- using System.Collections.ObjectModel;
- using System.ComponentModel;
- using System.Diagnostics;
- using System.Linq;
- using System.Reflection;
- using System.Text;
- using System.Text.RegularExpressions;
- using System.Threading.Tasks;
- using System.Windows;
- using System.Windows.Controls;
- using System.Windows.Data;
- using System.Windows.Documents;
- using System.Windows.Input;
- using System.Windows.Media;
- using System.Windows.Media.Imaging;
- using System.Windows.Navigation;
- using System.Windows.Shapes;
- namespace CyberX8_Themes.UserControls
- {
- /// <summary>
- /// RecipeControl.xaml 的交互逻辑
- /// </summary>
- public partial class RecipeControl : UserControl
- {
- public RecipeControl()
- {
- InitializeComponent();
- }
- #region 属性
- public static readonly DependencyProperty ModuleNameProperty = DependencyProperty.Register(
- "ModuleName", typeof(string), typeof(RecipeControl),
- new FrameworkPropertyMetadata("", FrameworkPropertyMetadataOptions.AffectsRender));
- /// <summary>
- /// 模块名称
- /// </summary>
- public string ModuleName
- {
- get
- {
- return (string)this.GetValue(ModuleNameProperty);
- }
- set
- {
- this.SetValue(ModuleNameProperty, value);
- }
- }
- public static readonly DependencyProperty ModuleTitleProperty = DependencyProperty.Register(
- "ModuleTitle", typeof(string), typeof(RecipeControl),
- new FrameworkPropertyMetadata("", FrameworkPropertyMetadataOptions.AffectsRender));
- /// <summary>
- /// 模块名称
- /// </summary>
- public string ModuleTitle
- {
- get
- {
- return (string)this.GetValue(ModuleTitleProperty);
- }
- set
- {
- this.SetValue(ModuleTitleProperty, value);
- }
- }
- public static readonly DependencyProperty InputCycleTimesProperty = DependencyProperty.Register(
- "InputCycleTimes", typeof(int), typeof(RecipeControl), new FrameworkPropertyMetadata(0, FrameworkPropertyMetadataOptions.AffectsRender));
- /// <summary>
- /// InputCycleTimes
- /// </summary>
- public int InputCycleTimes
- {
- get
- {
- return (int)this.GetValue(InputCycleTimesProperty);
- }
- set
- {
- this.SetValue(InputCycleTimesProperty, value);
- }
- }
- public static readonly DependencyProperty AchievedCycleTimesProperty = DependencyProperty.Register(
- "AchievedCycleTimes", typeof(int), typeof(RecipeControl), new FrameworkPropertyMetadata(0, FrameworkPropertyMetadataOptions.AffectsRender));
- /// <summary>
- /// AchievedCycleTimes
- /// </summary>
- public int AchievedCycleTimes
- {
- get
- {
- return (int)this.GetValue(AchievedCycleTimesProperty);
- }
- set
- {
- this.SetValue(AchievedCycleTimesProperty, value);
- }
- }
- public static readonly DependencyProperty NumberOfSelectedRecipeScansProperty = DependencyProperty.Register(
- "NumberOfSelectedRecipeScans", typeof(int), typeof(RecipeControl), new FrameworkPropertyMetadata(0, FrameworkPropertyMetadataOptions.AffectsRender));
- /// <summary>
- /// NumberOfSelectedRecipeScans
- /// </summary>
- public int NumberOfSelectedRecipeScans
- {
- get
- {
- return (int)this.GetValue(NumberOfSelectedRecipeScansProperty);
- }
- set
- {
- this.SetValue(NumberOfSelectedRecipeScansProperty, value);
- }
- }
- public static readonly DependencyProperty SelectedRecipeNodeProperty = DependencyProperty.Register(
- "SelectedRecipeNode", typeof(RecipeNode), typeof(RecipeControl),new FrameworkPropertyMetadata(null, new PropertyChangedCallback(SelectedRecipeNodeChanged)));
- /// <summary>
- /// 当前选中recipe节点
- /// </summary>
- public RecipeNode SelectedRecipeNode
- {
- get
- {
- return (RecipeNode)this.GetValue(SelectedRecipeNodeProperty);
- }
- set
- {
- this.SetValue(SelectedRecipeNodeProperty, value);
- }
- }
- public static readonly DependencyProperty RecipeTypeProperty = DependencyProperty.Register(
- "RecipeType", typeof(string), typeof(RecipeControl));
- /// <summary>
- /// Recipe类型
- /// </summary>
- public string RecipeType
- {
- get
- {
- return (string)this.GetValue(RecipeTypeProperty);
- }
- set
- {
- this.SetValue(RecipeTypeProperty, value);
- }
- }
- public static readonly DependencyProperty LoadEnabledProperty = DependencyProperty.Register(
- "LoadEnabled", typeof(bool), typeof(RecipeControl),new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender));
- /// <summary>
- /// 按钮可用性
- /// </summary>
- public bool LoadEnabled
- {
- get
- {
- return (bool)this.GetValue(LoadEnabledProperty);
- }
- set
- {
- this.SetValue(LoadEnabledProperty, value);
- }
- }
- /// <summary>
- /// 选中Recipe文件的触发的方法
- /// </summary>
- /// <param name="d"></param>
- /// <param name="e"></param>
- private static void SelectedRecipeNodeChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
- {
- if (e.NewValue != null)
- {
- d.SetValue(LoadEnabledProperty, true);
-
- }
- else
- {
- d.SetValue(LoadEnabledProperty, false);
- }
- }
- public static readonly DependencyProperty CurrentOperationModeProperty = DependencyProperty.Register(
- "CurrentOperationMode", typeof(string), typeof(RecipeControl));
- /// <summary>
- /// CurrentOperationMode
- /// </summary>
- public string CurrentOperationMode
- {
- get
- {
- return (string)this.GetValue(CurrentOperationModeProperty);
- }
- set
- {
- this.SetValue(CurrentOperationModeProperty, value);
- }
- }
- public static readonly DependencyProperty IsEngineeringProperty = DependencyProperty.Register(
- "IsEngineering", typeof(bool), typeof(RecipeControl), new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender));
- /// <summary>
- /// IsEngineering
- /// </summary>
- public bool IsEngineering
- {
- get
- {
- return (bool)this.GetValue(IsEngineeringProperty);
- }
- set
- {
- this.SetValue(IsEngineeringProperty, value);
- }
- }
- public static readonly DependencyProperty IsProductionProperty = DependencyProperty.Register(
- "IsProduction", typeof(bool), typeof(RecipeControl), new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender));
- /// <summary>
- /// IsProduction
- /// </summary>
- public bool IsProduction
- {
- get
- {
- return (bool)this.GetValue(IsProductionProperty);
- }
- set
- {
- this.SetValue(IsProductionProperty, value);
- }
- }
- public static readonly DependencyProperty RecipeModeValueProperty = DependencyProperty.Register(
- "RecipeModeValue", typeof(string), typeof(RecipeControl), new FrameworkPropertyMetadata("", new PropertyChangedCallback(OnItemsSourceChanged)));
- /// <summary>
- /// OpertationModeValue
- /// </summary>
- public string RecipeModeValue
- {
- get
- {
- return (string)this.GetValue(RecipeModeValueProperty);
- }
- set
- {
- this.SetValue(RecipeModeValueProperty, value);
- }
- }
- private static void OnItemsSourceChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
- {
- if (e.NewValue != null)
- {
- string currentMode = (string)e.NewValue;
- switch (currentMode)
- {
- case "Engineering":
- d.SetValue(IsEngineeringProperty, true);
- d.SetValue(IsProductionProperty, false);
- break;
- case "Production":
- d.SetValue(IsEngineeringProperty, false);
- d.SetValue(IsProductionProperty, true);
- break;
- default:
- break;
- }
- }
- }
- #endregion
- private void GetRecipeType()
- {
- if (SelectedRecipeNode.RecipeFullFileName.Contains("pwt"))
- {
- PwtRecipe pwtRecipe = RecipeFileManager.Instance.LoadGenericityRecipe<PwtRecipe>(SelectedRecipeNode.RecipeFullFileName);
- if (pwtRecipe != null)
- {
- NumberOfSelectedRecipeScans = pwtRecipe.NumberOfScans;
- }
- }
- }
- private void Pause_Click(object sender, RoutedEventArgs e)
- {
- if ("Manual".Equals(CurrentOperationMode))
- {
- InvokeClient.Instance.Service.DoOperation($"{ModuleName}.PauseWaferRecipe", SelectedRecipeNode.RecipeFullFileName, InputCycleTimes);
- }
- else
- {
- MessageBox.Show("Current OperationMode Can't Perform This Action", $"Current OperationMode is {CurrentOperationMode}", MessageBoxButton.OK, MessageBoxImage.Error);
- }
- }
- private void Resume_Click(object sender, RoutedEventArgs e)
- {
- if ("Manual".Equals(CurrentOperationMode))
- {
- InvokeClient.Instance.Service.DoOperation($"{ModuleName}.ResumeWaferRecipe", SelectedRecipeNode.RecipeFullFileName, InputCycleTimes);
- }
- else
- {
- MessageBox.Show("Current OperationMode Can't Perform This Action", $"Current OperationMode is {CurrentOperationMode}", MessageBoxButton.OK, MessageBoxImage.Error);
- }
-
- }
- private void Abort_Click(object sender, RoutedEventArgs e)
- {
- if ("Manual".Equals(CurrentOperationMode))
- {
- InvokeClient.Instance.Service.DoOperation($"{ModuleName}.Abort");
- }
- else
- {
- if (RecipeModeValue != SelectedRecipeNode.RecipeLocation)
- {
- MessageBox.Show("Recipe OperationMode is not match!", $"Current Recipe OperationMode is {RecipeModeValue}", MessageBoxButton.OK, MessageBoxImage.Error);
- }
- else
- {
- MessageBox.Show("Current OperationMode Can't Perform This Action", $"Current OperationMode is {CurrentOperationMode}", MessageBoxButton.OK, MessageBoxImage.Error);
- }
- }
-
- }
- private void Edit_Click(object sender, RoutedEventArgs e)
- {
- string _recipeName = "";
- string pattern3 = @"^SRD\d$";
- string pattern2 = @"^Dryer\d$";
- string pattern1 = @"^Rinse\d$";
- string pattern4 = @"^Reservoir\d$";
- Regex regex3 = new Regex(pattern3);
- Regex regex2 = new Regex(pattern2);
- Regex regex1 = new Regex(pattern1);
- Regex regex4 = new Regex(pattern4);
- switch (ModuleName)
- {
- case "Prewet1":
- _recipeName = "PwtRecipe";
- break;
- case string str when regex1.IsMatch(str):
- _recipeName = "QdrRecipe";
- break;
- case string str when regex2.IsMatch(str):
- _recipeName = "HvdRecipe";
- break;
- case string str when regex3.IsMatch(str):
- _recipeName = "SrdRecipe";
- break;
- case string str when regex4.IsMatch(str):
- _recipeName = "ResRecipe";
- break;
- default:
- break;
-
- }
- if (!"Manual".Equals(CurrentOperationMode))
- {
- MessageBox.Show("Current OperationMode Can't Perform This Action", $"Current OperationMode is {CurrentOperationMode}", MessageBoxButton.OK, MessageBoxImage.Error);
- }
- else
- {
- if (RecipeModeValue != SelectedRecipeNode.RecipeLocation)
- {
- MessageBox.Show("Recipe OperationMode is not match!", $"Current Recipe OperationMode is {RecipeModeValue}", MessageBoxButton.OK, MessageBoxImage.Error);
- }
- else
- {
- GlobalEvents.OnSwitchFixedTabItem("Recipe", "", _recipeName);
- }
- }
-
- }
- private void RunRecipe_Click(object sender, RoutedEventArgs e)
- {
- GetRecipeType();
- if ("Manual".Equals(CurrentOperationMode))
- {
- if (InputCycleTimes==0)
- {
- MessageBox.Show("Please Enter CycleTimes First!", "Current Cycle is 0", MessageBoxButton.OK, MessageBoxImage.Error);
- }
- else
- {
- InvokeClient.Instance.Service.DoOperation($"{ModuleName}.CycleManualProcessRecipe", SelectedRecipeNode.RecipeFullFileName, InputCycleTimes);
- }
- }
- else
- {
- MessageBox.Show("Current OperationMode Can't Perform This Action", $"Current OperationMode is {CurrentOperationMode}", MessageBoxButton.OK, MessageBoxImage.Error);
- }
- }
- }
- }
|