|
@@ -1,13 +1,504 @@
|
|
|
-using Prism.Mvvm;
|
|
|
+using Aitex.Sorter.Common;
|
|
|
+using ExcelLibrary.BinaryFileFormat;
|
|
|
+using MECF.Framework.Common.CommonData;
|
|
|
+using MECF.Framework.Common.DataCenter;
|
|
|
+using MECF.Framework.Common.Equipment;
|
|
|
+using MECF.Framework.Common.OperationCenter;
|
|
|
+using MECF.Framework.Common.Schedulers;
|
|
|
+using OpenSEMI.ClientBase;
|
|
|
+using Prism.Commands;
|
|
|
+using Prism.Mvvm;
|
|
|
using System;
|
|
|
using System.Collections.Generic;
|
|
|
+using System.Collections.ObjectModel;
|
|
|
using System.Linq;
|
|
|
-using System.Text;
|
|
|
-using System.Threading.Tasks;
|
|
|
+using System.Windows.Threading;
|
|
|
+using Venus_Core;
|
|
|
+using Venus_MainPages.Unity;
|
|
|
|
|
|
namespace Venus_MainPages.ViewModels
|
|
|
{
|
|
|
+ public enum EFEMModule
|
|
|
+ {
|
|
|
+ LLA, LLB,LP1,LP2,LP3,Aligner1
|
|
|
+ }
|
|
|
+ public enum EFEMBlade
|
|
|
+ {
|
|
|
+ Blade1, Blade2
|
|
|
+ }
|
|
|
+
|
|
|
internal class EfemViewModel:BindableBase
|
|
|
{
|
|
|
+ #region 私有字段
|
|
|
+ private bool m_LLAIsInstalled;
|
|
|
+ private bool m_LLBIsInstalled;
|
|
|
+ private ModuleInfo m_LLAModuleInfo;
|
|
|
+ private ModuleInfo m_LLBModuleInfo;
|
|
|
+ private ModuleInfo m_LP1ModuleInfo;
|
|
|
+ private ModuleInfo m_LP2ModuleInfo;
|
|
|
+ private ModuleInfo m_LP3ModuleInfo;
|
|
|
+ private List<EFEMModule> m_EFEMModules = new List<EFEMModule>();
|
|
|
+ private EFEMBlade m_PickSelectedBlade;
|
|
|
+ private EFEMBlade m_PlaceSelectedBlade;
|
|
|
+ private EFEMBlade m_ExtendSelectedBlade;
|
|
|
+ private EFEMBlade m_RetractSelectedBlade;
|
|
|
+ private ObservableCollection<int> m_PlaceSoltItemsSource = new ObservableCollection<int>();
|
|
|
+ private ObservableCollection<int> m_PickSoltItemsSource = new ObservableCollection<int>();
|
|
|
+ private ObservableCollection<int> m_ExtendSoltItemsSource = new ObservableCollection<int>();
|
|
|
+ private ObservableCollection<int> m_RetractSoltItemsSource = new ObservableCollection<int>();
|
|
|
+ private int m_PickSoltSelectedIndex;
|
|
|
+ private int m_PlaceSoltSelectedIndex;
|
|
|
+ private int m_ExtendSoltSelectedIndex;
|
|
|
+ private int m_RetractSoltSelectedIndex;
|
|
|
+ private EFEMModule m_PickSelectedModule;
|
|
|
+ private EFEMModule m_PlaceSelectedModule;
|
|
|
+ private EFEMModule m_ExtendSelectedModule;
|
|
|
+ private EFEMModule m_RetractSelectedModule;
|
|
|
+
|
|
|
+ private WaferInfo m_BladeAWafer;
|
|
|
+ private WaferInfo m_BladeBWafer;
|
|
|
+
|
|
|
+ private WaferInfo m_Aligner1Wafer;
|
|
|
+
|
|
|
+ #endregion
|
|
|
+
|
|
|
+ #region 属性
|
|
|
+ public bool LLAIsInstalled
|
|
|
+ {
|
|
|
+ get { return m_LLAIsInstalled; }
|
|
|
+ set { SetProperty(ref m_LLAIsInstalled, value); }
|
|
|
+ }
|
|
|
+ public bool LLBIsInstalled
|
|
|
+ {
|
|
|
+ get { return m_LLBIsInstalled; }
|
|
|
+ set { SetProperty(ref m_LLBIsInstalled, value); }
|
|
|
+ }
|
|
|
+ public ModuleInfo LLAModuleInfo
|
|
|
+ {
|
|
|
+ get { return m_LLAModuleInfo; }
|
|
|
+ set { SetProperty(ref m_LLAModuleInfo, value); }
|
|
|
+ }
|
|
|
+ public ModuleInfo LLBModuleInfo
|
|
|
+ {
|
|
|
+ get { return m_LLBModuleInfo; }
|
|
|
+ set { SetProperty(ref m_LLBModuleInfo, value); }
|
|
|
+ }
|
|
|
+ public ModuleInfo LP1ModuleInfo
|
|
|
+ {
|
|
|
+ get { return m_LP1ModuleInfo; }
|
|
|
+ set { SetProperty(ref m_LP1ModuleInfo, value); }
|
|
|
+ }
|
|
|
+ public ModuleInfo LP2ModuleInfo
|
|
|
+ {
|
|
|
+ get { return m_LP2ModuleInfo; }
|
|
|
+ set { SetProperty(ref m_LP2ModuleInfo, value); }
|
|
|
+ }
|
|
|
+ public ModuleInfo LP3ModuleInfo
|
|
|
+ {
|
|
|
+ get { return m_LP3ModuleInfo; }
|
|
|
+ set { SetProperty(ref m_LP3ModuleInfo, value); }
|
|
|
+ }
|
|
|
+ public List<EFEMModule> EFEMModules
|
|
|
+ {
|
|
|
+ get { return m_EFEMModules; }
|
|
|
+ set { SetProperty(ref m_EFEMModules, value); }
|
|
|
+ }
|
|
|
+ public EFEMBlade PickSelectedBlade
|
|
|
+ {
|
|
|
+ get { return m_PickSelectedBlade; }
|
|
|
+ set { SetProperty(ref m_PickSelectedBlade, value); }
|
|
|
+ }
|
|
|
+ public EFEMBlade PlaceSelectedBlade
|
|
|
+ {
|
|
|
+ get { return m_PlaceSelectedBlade; }
|
|
|
+ set { SetProperty(ref m_PlaceSelectedBlade, value); }
|
|
|
+ }
|
|
|
+ public EFEMBlade ExtendSelectedBlade
|
|
|
+ {
|
|
|
+ get { return m_ExtendSelectedBlade; }
|
|
|
+ set { SetProperty(ref m_ExtendSelectedBlade, value); }
|
|
|
+ }
|
|
|
+ public EFEMBlade RetractSelectedBlade
|
|
|
+ {
|
|
|
+ get { return m_RetractSelectedBlade; }
|
|
|
+ set { SetProperty(ref m_RetractSelectedBlade, value); }
|
|
|
+ }
|
|
|
+ public ObservableCollection<int> PickSoltItemsSource
|
|
|
+ {
|
|
|
+ get { return m_PickSoltItemsSource; }
|
|
|
+ set { SetProperty(ref m_PickSoltItemsSource, value); }
|
|
|
+ }
|
|
|
+ public ObservableCollection<int> PlaceSoltItemsSource
|
|
|
+ {
|
|
|
+ get { return m_PlaceSoltItemsSource; }
|
|
|
+ set { SetProperty(ref m_PlaceSoltItemsSource, value); }
|
|
|
+ }
|
|
|
+ public ObservableCollection<int> ExtendSoltItemsSource
|
|
|
+ {
|
|
|
+ get { return m_ExtendSoltItemsSource; }
|
|
|
+ set { SetProperty(ref m_ExtendSoltItemsSource, value); }
|
|
|
+ }
|
|
|
+ public ObservableCollection<int> RetractSoltItemsSource
|
|
|
+ {
|
|
|
+ get { return m_RetractSoltItemsSource; }
|
|
|
+ set { SetProperty(ref m_RetractSoltItemsSource, value); }
|
|
|
+ }
|
|
|
+ public int PickSoltSelectedIndex
|
|
|
+ {
|
|
|
+ get { return m_PickSoltSelectedIndex; }
|
|
|
+ set { SetProperty(ref m_PickSoltSelectedIndex, value); }
|
|
|
+ }
|
|
|
+ public int PlaceSoltSelectedIndex
|
|
|
+ {
|
|
|
+ get { return m_PlaceSoltSelectedIndex; }
|
|
|
+ set { SetProperty(ref m_PlaceSoltSelectedIndex, value); }
|
|
|
+ }
|
|
|
+ public int ExtendSoltSelectedIndex
|
|
|
+ {
|
|
|
+ get { return m_ExtendSoltSelectedIndex; }
|
|
|
+ set { SetProperty(ref m_ExtendSoltSelectedIndex, value); }
|
|
|
+ }
|
|
|
+ public int RetractSoltSelectedIndex
|
|
|
+ {
|
|
|
+ get { return m_RetractSoltSelectedIndex; }
|
|
|
+ set { SetProperty(ref m_RetractSoltSelectedIndex, value); }
|
|
|
+ }
|
|
|
+ public EFEMModule PickSelectedModule
|
|
|
+ {
|
|
|
+ get { return m_PickSelectedModule; }
|
|
|
+ set { SetProperty(ref m_PickSelectedModule, value); }
|
|
|
+ }
|
|
|
+ public EFEMModule PlaceSelectedModule
|
|
|
+ {
|
|
|
+ get { return m_PlaceSelectedModule; }
|
|
|
+ set { SetProperty(ref m_PlaceSelectedModule, value); }
|
|
|
+ }
|
|
|
+ public EFEMModule ExtendSelectedModule
|
|
|
+ {
|
|
|
+ get { return m_ExtendSelectedModule; }
|
|
|
+ set { SetProperty(ref m_ExtendSelectedModule, value); }
|
|
|
+ }
|
|
|
+ public EFEMModule RetractSelectedModule
|
|
|
+ {
|
|
|
+ get { return m_RetractSelectedModule; }
|
|
|
+ set { SetProperty(ref m_RetractSelectedModule, value); }
|
|
|
+ }
|
|
|
+ public WaferInfo BladeAWafer
|
|
|
+ {
|
|
|
+ get { return m_BladeAWafer; }
|
|
|
+ set { SetProperty(ref m_BladeAWafer, value); }
|
|
|
+ }
|
|
|
+ public WaferInfo BladeBWafer
|
|
|
+ {
|
|
|
+ get { return m_BladeBWafer; }
|
|
|
+ set { SetProperty(ref m_BladeBWafer, value); }
|
|
|
+ }
|
|
|
+ public WaferInfo Aligner1Wafer
|
|
|
+ {
|
|
|
+ get { return m_Aligner1Wafer; }
|
|
|
+ set { SetProperty(ref m_Aligner1Wafer, value); }
|
|
|
+ }
|
|
|
+
|
|
|
+ #endregion
|
|
|
+
|
|
|
+ #region 命令
|
|
|
+ private DelegateCommand _ExtendCommand;
|
|
|
+ public DelegateCommand ExtendCommand =>
|
|
|
+ _ExtendCommand ?? (_ExtendCommand = new DelegateCommand(OnExtend));
|
|
|
+ private DelegateCommand _RetractCommand;
|
|
|
+ public DelegateCommand RetractCommand =>
|
|
|
+ _RetractCommand ?? (_RetractCommand = new DelegateCommand(OnRetract));
|
|
|
+
|
|
|
+ private DelegateCommand<object> _ModuleChangeCommand;
|
|
|
+ public DelegateCommand<object> ModuleChangeCommand =>
|
|
|
+ _ModuleChangeCommand ?? (_ModuleChangeCommand = new DelegateCommand<object>(OnModuleChange));
|
|
|
+
|
|
|
+ private DelegateCommand _PickCommand;
|
|
|
+ public DelegateCommand PickCommand =>
|
|
|
+ _PickCommand ?? (_PickCommand = new DelegateCommand(OnPick));
|
|
|
+
|
|
|
+ private DelegateCommand _PlaceCommand;
|
|
|
+ public DelegateCommand PlaceCommand =>
|
|
|
+ _PlaceCommand ?? (_PlaceCommand = new DelegateCommand(OnPlace));
|
|
|
+
|
|
|
+ private DelegateCommand _HomeAllCommand;
|
|
|
+ public DelegateCommand HomeAllCommand =>
|
|
|
+ _HomeAllCommand ?? (_HomeAllCommand = new DelegateCommand(OnHomeAll));
|
|
|
+
|
|
|
+ private DelegateCommand _ClearErrorCommand;
|
|
|
+ public DelegateCommand ClearErrorCommand =>
|
|
|
+ _ClearErrorCommand ?? (_ClearErrorCommand = new DelegateCommand(OnClearError));
|
|
|
+
|
|
|
+ private DelegateCommand _AbortCommand;
|
|
|
+ public DelegateCommand AbortCommand =>
|
|
|
+ _AbortCommand ?? (_AbortCommand = new DelegateCommand(OnAbort));
|
|
|
+
|
|
|
+ private DelegateCommand _Align1HomeCommand;
|
|
|
+ public DelegateCommand Align1HomeCommand =>
|
|
|
+ _Align1HomeCommand ?? (_Align1HomeCommand = new DelegateCommand(OnAlign1Home));
|
|
|
+
|
|
|
+ private DelegateCommand _Align1UpCommand;
|
|
|
+ public DelegateCommand Align1UpCommand =>
|
|
|
+ _Align1UpCommand ?? (_Align1UpCommand = new DelegateCommand(OnAlign1Up));
|
|
|
+ private DelegateCommand _Align1DownCommand;
|
|
|
+ public DelegateCommand Align1DownCommand =>
|
|
|
+ _Align1DownCommand ?? (_Align1DownCommand = new DelegateCommand(OnAlign1Down));
|
|
|
+ #endregion
|
|
|
+
|
|
|
+ #region 构造函数
|
|
|
+ public EfemViewModel()
|
|
|
+ {
|
|
|
+ string[] allModules = QueryDataClient.Instance.Service.GetConfig($"System.InstalledModules").ToString().Split(',');
|
|
|
+
|
|
|
+ LLAIsInstalled = allModules.Contains("LLA");
|
|
|
+ LLBIsInstalled = allModules.Contains("LLB");
|
|
|
+ DispatcherTimer timer = new DispatcherTimer();
|
|
|
+ timer.Interval = TimeSpan.FromSeconds(0.1);
|
|
|
+ timer.Tick += Timer_Tick;
|
|
|
+ timer.Start();
|
|
|
+ EFEMModules.Add(EFEMModule.LLA);
|
|
|
+ EFEMModules.Add(EFEMModule.LLB);
|
|
|
+ EFEMModules.Add(EFEMModule.LP1);
|
|
|
+ EFEMModules.Add(EFEMModule.LP2);
|
|
|
+ EFEMModules.Add(EFEMModule.Aligner1);
|
|
|
+ OnModuleChange("Pick");
|
|
|
+ OnModuleChange("Place");
|
|
|
+ //OnModuleChange("Extend");
|
|
|
+
|
|
|
+ //OnModuleChange("Retract");
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+ #endregion
|
|
|
+
|
|
|
+ #region 命令方法
|
|
|
+ private void OnModuleChange(object obj)
|
|
|
+ {
|
|
|
+ var value = obj.ToString();
|
|
|
+ switch (value)
|
|
|
+ {
|
|
|
+ case "Pick":
|
|
|
+ PickSoltItemsSource.Clear();
|
|
|
+ switch (PickSelectedModule)
|
|
|
+ {
|
|
|
+ case EFEMModule.LLA:
|
|
|
+ case EFEMModule.LLB:
|
|
|
+ PickSoltItemsSource.Add(1);
|
|
|
+ PickSoltItemsSource.Add(2);
|
|
|
+ break;
|
|
|
+ case EFEMModule.LP1:
|
|
|
+ case EFEMModule.LP2:
|
|
|
+ case EFEMModule.LP3:
|
|
|
+
|
|
|
+ for (int i = 1; i < 26; i++)
|
|
|
+ {
|
|
|
+ PickSoltItemsSource.Add(i);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+
|
|
|
+ default:
|
|
|
+ PickSoltItemsSource.Add(1);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ PickSoltSelectedIndex = 0;
|
|
|
+
|
|
|
+ break;
|
|
|
+
|
|
|
+ case "Place":
|
|
|
+ PlaceSoltItemsSource.Clear();
|
|
|
+ switch (PlaceSelectedModule)
|
|
|
+ {
|
|
|
+ case EFEMModule.LLA:
|
|
|
+ case EFEMModule.LLB:
|
|
|
+ PlaceSoltItemsSource.Add(1);
|
|
|
+ PlaceSoltItemsSource.Add(2);
|
|
|
+ break;
|
|
|
+ case EFEMModule.LP1:
|
|
|
+ case EFEMModule.LP2:
|
|
|
+ case EFEMModule.LP3:
|
|
|
+
|
|
|
+ for (int i = 1; i < 26; i++)
|
|
|
+ {
|
|
|
+ PlaceSoltItemsSource.Add(i);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+
|
|
|
+ default:
|
|
|
+ PlaceSoltItemsSource.Add(1);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ PlaceSoltSelectedIndex = 0;
|
|
|
+ break;
|
|
|
+
|
|
|
+ //case "Extend":
|
|
|
+ // ExtendSoltItemsSource.Clear();
|
|
|
+ // switch (ExtendSelectedModule)
|
|
|
+ // {
|
|
|
+ // case EFEMModule.LLA:
|
|
|
+ // case EFEMModule.LLB:
|
|
|
+ // ExtendSoltItemsSource.Add(1);
|
|
|
+ // ExtendSoltItemsSource.Add(2);
|
|
|
+ // break;
|
|
|
+ // case EFEMModule.LP1:
|
|
|
+ // case EFEMModule.LP2:
|
|
|
+ // case EFEMModule.LP3:
|
|
|
+
|
|
|
+ // for (int i = 1; i < 26; i++)
|
|
|
+ // {
|
|
|
+ // ExtendSoltItemsSource.Add(i);
|
|
|
+ // }
|
|
|
+ // break;
|
|
|
+
|
|
|
+ // default:
|
|
|
+ // ExtendSoltItemsSource.Add(1);
|
|
|
+ // break;
|
|
|
+ // }
|
|
|
+ // ExtendSoltSelectedIndex = 0;
|
|
|
+ // break;
|
|
|
+
|
|
|
+ //case "Retract":
|
|
|
+ // RetractSoltItemsSource.Clear();
|
|
|
+ // switch (RetractSelectedModule)
|
|
|
+ // {
|
|
|
+ // case EFEMModule.LLA:
|
|
|
+ // case EFEMModule.LLB:
|
|
|
+ // RetractSoltItemsSource.Add(1);
|
|
|
+ // RetractSoltItemsSource.Add(2);
|
|
|
+ // break;
|
|
|
+ // case EFEMModule.LP1:
|
|
|
+ // case EFEMModule.LP2:
|
|
|
+ // case EFEMModule.LP3:
|
|
|
+
|
|
|
+ // for (int i = 1; i < 26; i++)
|
|
|
+ // {
|
|
|
+ // RetractSoltItemsSource.Add(i);
|
|
|
+ // }
|
|
|
+ // break;
|
|
|
+
|
|
|
+ // default:
|
|
|
+ // RetractSoltItemsSource.Add(1);
|
|
|
+ // break;
|
|
|
+ // }
|
|
|
+ // RetractSoltSelectedIndex = 0;
|
|
|
+ // break;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ private void OnExtend()
|
|
|
+ {
|
|
|
+ var moduleName = (ModuleName)Enum.Parse(typeof(ModuleName), PlaceSelectedModule.ToString(), true);
|
|
|
+ var selectedHand = (Hand)Enum.Parse(typeof(Hand), PlaceSelectedBlade.ToString(), true);
|
|
|
+ InvokeClient.Instance.Service.DoOperation($"EFEM.{RtOperation.Extend}", moduleName, 0, selectedHand);
|
|
|
+ }
|
|
|
+ private void OnRetract()
|
|
|
+ {
|
|
|
+ var moduleName = (ModuleName)Enum.Parse(typeof(ModuleName), PlaceSelectedModule.ToString(), true);
|
|
|
+ var selectedHand = (Hand)Enum.Parse(typeof(Hand), PlaceSelectedBlade.ToString(), true);
|
|
|
+ InvokeClient.Instance.Service.DoOperation($"EFEM.{RtOperation.Retract}", moduleName, 0, selectedHand);
|
|
|
+ }
|
|
|
+ private void OnPick()
|
|
|
+ {
|
|
|
+ Queue<MoveItem> moveItems = new Queue<MoveItem>();
|
|
|
+
|
|
|
+ var moduleName = (ModuleName)Enum.Parse(typeof(ModuleName), PickSelectedModule.ToString(), true);
|
|
|
+ var selectedHand = (Hand)Enum.Parse(typeof(Hand), PickSelectedBlade.ToString(), true);
|
|
|
+ MoveItem moveItem = new MoveItem(moduleName, PickSoltItemsSource[PickSoltSelectedIndex]-1, 0, 0, selectedHand);
|
|
|
+ moveItems.Enqueue(moveItem);
|
|
|
+
|
|
|
+ if (PickSelectedModule == EFEMModule.LLA || PickSelectedModule == EFEMModule.LLB)
|
|
|
+ {
|
|
|
+ InvokeClient.Instance.Service.DoOperation($"{ModuleName.EfemRobot}.{EfemOperation.Swap}", moveItems);
|
|
|
+
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ InvokeClient.Instance.Service.DoOperation($"{ModuleName.EfemRobot}.{EfemOperation.Pick}", moveItems);
|
|
|
+ }
|
|
|
+ //if ((int)PickSelectedModule > 3)
|
|
|
+ //{
|
|
|
+ // InvokeClient.Instance.Service.DoOperation($"EFEM.{RtOperation.LLPick}", moveItems);
|
|
|
+ //}
|
|
|
+ //else
|
|
|
+ //{
|
|
|
+ // InvokeClient.Instance.Service.DoOperation($"EFEM.{RtOperation.PMPick}", moveItems);
|
|
|
+ //}
|
|
|
+ }
|
|
|
+ private void OnPlace()
|
|
|
+ {
|
|
|
+ Queue<MoveItem> moveItems = new Queue<MoveItem>();
|
|
|
+ var moduleName = (ModuleName)Enum.Parse(typeof(ModuleName), PlaceSelectedModule.ToString(), true);
|
|
|
+
|
|
|
+ var selectedHand = (Hand)Enum.Parse(typeof(Hand), PlaceSelectedBlade.ToString(), true);
|
|
|
+ MoveItem moveItem = new MoveItem(0, 0, moduleName, PlaceSoltItemsSource[PlaceSoltSelectedIndex]-1, selectedHand);
|
|
|
+ moveItems.Enqueue(moveItem);
|
|
|
+ //if ((int)PlaceSelectedModule > 3)
|
|
|
+ //{
|
|
|
+ // InvokeClient.Instance.Service.DoOperation($"TM.{RtOperation.LLPlace}", moveItems);
|
|
|
+ //}
|
|
|
+ //else
|
|
|
+ //{
|
|
|
+ // InvokeClient.Instance.Service.DoOperation($"TM.{RtOperation.PMPlace}", moveItems);
|
|
|
+ //}
|
|
|
+ if (PlaceSelectedModule == EFEMModule.LLA || PlaceSelectedModule == EFEMModule.LLB)
|
|
|
+ {
|
|
|
+ InvokeClient.Instance.Service.DoOperation($"{ModuleName.EfemRobot}.{EfemOperation.Swap}", moveItems);
|
|
|
+
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ InvokeClient.Instance.Service.DoOperation($"{ModuleName.EfemRobot}.{EfemOperation.Place}", moveItems);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ private void OnHomeAll()
|
|
|
+ {
|
|
|
+ InvokeClient.Instance.Service.DoOperation($"EFEM.{EfemOperation.Home}");
|
|
|
+ }
|
|
|
+ private void OnClearError()
|
|
|
+ {
|
|
|
+ InvokeClient.Instance.Service.DoOperation($"EFEM.{EfemOperation.ClearError}");
|
|
|
+ }
|
|
|
+ private void OnAbort()
|
|
|
+ {
|
|
|
+ InvokeClient.Instance.Service.DoOperation($"{ModuleName.EfemRobot}.{EfemOperation.Abort}");
|
|
|
+ }
|
|
|
+ private void OnAlign1Home()
|
|
|
+ {
|
|
|
+ InvokeClient.Instance.Service.DoOperation($"{ModuleName.Aligner1}.{EfemOperation.Home}");
|
|
|
+ }
|
|
|
+ private void OnAlign1Up()
|
|
|
+ {
|
|
|
+ InvokeClient.Instance.Service.DoOperation($"{ModuleName.Aligner1}.{EfemOperation.Lift}", true);
|
|
|
+ }
|
|
|
+ private void OnAlign1Down()
|
|
|
+ {
|
|
|
+ InvokeClient.Instance.Service.DoOperation($"{ModuleName.Aligner1}.{EfemOperation.Lift}", false);
|
|
|
+ }
|
|
|
+ #endregion
|
|
|
+
|
|
|
+ #region 私有方法
|
|
|
+ private void Timer_Tick(object sender, EventArgs e)
|
|
|
+ {
|
|
|
+ if (LLAIsInstalled == true)
|
|
|
+ {
|
|
|
+ LLAModuleInfo = ModuleManager.ModuleInfos["LLA"];
|
|
|
+ }
|
|
|
+ if (LLBIsInstalled == true)
|
|
|
+ {
|
|
|
+ LLBModuleInfo = ModuleManager.ModuleInfos["LLB"];
|
|
|
+ }
|
|
|
+ LP1ModuleInfo = ModuleManager.ModuleInfos["LP1"];
|
|
|
+ LP2ModuleInfo = ModuleManager.ModuleInfos["LP2"];
|
|
|
+ LP3ModuleInfo = ModuleManager.ModuleInfos["LP3"];
|
|
|
+ BladeAWafer = ModuleManager.ModuleInfos["EfemRobot"].WaferManager.Wafers[0];
|
|
|
+ BladeBWafer = ModuleManager.ModuleInfos["EfemRobot"].WaferManager.Wafers[1];
|
|
|
+ Aligner1Wafer= ModuleManager.ModuleInfos["Aligner1"].WaferManager.Wafers[0];
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ #endregion
|
|
|
+
|
|
|
}
|
|
|
}
|