| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955 | 
							- using MECF.Framework.Common.CommonData;
 
- using MECF.Framework.Common.DataCenter;
 
- using MECF.Framework.Common.Equipment;
 
- using MECF.Framework.Common.OperationCenter;
 
- using OpenSEMI.ClientBase;
 
- using Prism.Commands;
 
- using Prism.Mvvm;
 
- using System;
 
- using System.Collections.Generic;
 
- using System.Linq;
 
- using System.Text;
 
- using System.Threading.Tasks;
 
- using Venus_Core;
 
- using Venus_Themes.CustomControls;
 
- using System.Windows.Threading;
 
- using Venus_MainPages.Unity;
 
- using Microsoft.VisualBasic;
 
- using ExcelLibrary.BinaryFileFormat;
 
- using MECF.Framework.Common.Schedulers;
 
- using Venus_MainPages.Views;
 
- using System.Windows;
 
- using static Venus_Themes.CustomControls.SERobot;
 
- using System.Security.RightsManagement;
 
- namespace Venus_MainPages.ViewModels
 
- {
 
-     public class VenusSeOperationOverViewModel : BindableBase
 
-     {
 
-         #region 私有字段
 
-         private ModuleInfo m_VCE1ModuleInfo;
 
-         private ModuleInfo m_PMAModuleInfo;
 
-         private ModuleInfo m_PMBModuleInfo;
 
-         private ModuleInfo m_PMCModuleInfo;
 
-         private ModuleInfo m_VPAModuleInfo;
 
-         private ModuleInfo m_TMModuleInfo;
 
-         public WaferInfo m_PMAWafer;
 
-         public WaferInfo m_PMBWafer;
 
-         public WaferInfo m_PMCWafer;
 
-         public WaferInfo m_RobotUpperWafer;
 
-         public WaferInfo m_RobotLowerWafer;
 
-         public WaferInfo m_PAWafer;
 
-         private SERobotTAction m_Robot1TAction;
 
-         private SERobotXAction m_Robot1XAction;
 
-         private SERobotTAction m_Robot2TAction;
 
-         private SERobotXAction m_Robot2XAction;
 
-         public RobotMoveInfo m_robotMoveInfo;
 
-         private int m_VCE1WaferCount;
 
-         private bool m_PMAIsInstalled;
 
-         private bool m_PMBIsInstalled;
 
-         private bool m_PMCIsInstalled;
 
-         private bool m_VCEIsInstalled;
 
-         private bool m_VCEDoorIsOpen;
 
-         private bool m_PMADoorIsOpen;
 
-         private bool m_PMBDoorIsOpen;
 
-         private bool m_PMCDoorIsOpen;
 
-         private bool m_VCEOutDoorIsOpen;
 
-         private Dictionary<string, object> m_RtDataValues = new Dictionary<string, object>();
 
-         private List<string> m_RtDataKeys = new List<string>();
 
-         private double m_PMAPercent;
 
-         private double m_PMBPercent;
 
-         private double m_PMCPercent;
 
-         private double m_VCEPercent;
 
-         private int m_PickNum;
 
-         private RecipeResult m_PMARecipeResult;
 
-         private RecipeResult m_PMBRecipeResult;
 
-         private RecipeResult m_PMCRecipeResult;
 
-         private WaferAssociationInfo m_VCEwaferAssociation;
 
-         private bool loadflag;
 
-         #endregion
 
-         #region 属性
 
-         public SERobotTAction Robot1TAction
 
-         {
 
-             get { return m_Robot1TAction; }
 
-             set { SetProperty(ref m_Robot1TAction, value); }
 
-         }
 
-         private DelegateCommand<object> _AbortJobCommand;
 
-         public DelegateCommand<object> AbortJobCommand =>
 
-             _AbortJobCommand ?? (_AbortJobCommand = new DelegateCommand<object>(OnAbortJob));
 
-         public SERobotXAction Robot1XAction
 
-         {
 
-             get { return m_Robot1XAction; }
 
-             set { SetProperty(ref m_Robot1XAction, value); }
 
-         }
 
-         public SERobotTAction Robot2TAction
 
-         {
 
-             get { return m_Robot2TAction; }
 
-             set { SetProperty(ref m_Robot2TAction, value); }
 
-         }
 
-         public SERobotXAction Robot2XAction
 
-         {
 
-             get { return m_Robot2XAction; }
 
-             set { SetProperty(ref m_Robot2XAction, value); }
 
-         }
 
-         public RobotMoveInfo RobotMoveInfo
 
-         {
 
-             get { return m_robotMoveInfo; }
 
-             set
 
-             {
 
-                 RobotMoveInfoChanged(m_robotMoveInfo, value);
 
-                 m_robotMoveInfo = value;
 
-             }
 
-         }
 
-         public RecipeResult PMARecipeResult
 
-         {
 
-             get { return m_PMARecipeResult; }
 
-             set { SetProperty(ref m_PMARecipeResult, value); }
 
-         }
 
-         public RecipeResult PMBRecipeResult
 
-         {
 
-             get { return m_PMBRecipeResult; }
 
-             set { SetProperty(ref m_PMBRecipeResult, value); }
 
-         }
 
-         public RecipeResult PMCRecipeResult
 
-         {
 
-             get { return m_PMCRecipeResult; }
 
-             set { SetProperty(ref m_PMCRecipeResult, value); }
 
-         }
 
-         public double PMAPercent
 
-         {
 
-             get { return m_PMAPercent; }
 
-             set { SetProperty(ref m_PMAPercent, value); }
 
-         }
 
-         public double PMBPercent
 
-         {
 
-             get { return m_PMBPercent; }
 
-             set { SetProperty(ref m_PMBPercent, value); }
 
-         }
 
-         public double PMCPercent
 
-         {
 
-             get { return m_PMCPercent; }
 
-             set { SetProperty(ref m_PMCPercent, value); }
 
-         }
 
-         public double VCEPercent
 
-         {
 
-             get { return m_VCEPercent; }
 
-             set { SetProperty(ref m_VCEPercent, value); }
 
-         }
 
-         public int PickNum
 
-         {
 
-             get { return m_PickNum; }
 
-             set { SetProperty(ref m_PickNum, value); }
 
-         }
 
-         public WaferInfo PMAWafer
 
-         {
 
-             get { return m_PMAWafer; }
 
-             set { SetProperty(ref m_PMAWafer, value); }
 
-         }
 
-         public WaferInfo PMBWafer
 
-         {
 
-             get { return m_PMBWafer; }
 
-             set { SetProperty(ref m_PMBWafer, value); }
 
-         }
 
-         public WaferInfo PMCWafer
 
-         {
 
-             get { return m_PMCWafer; }
 
-             set { SetProperty(ref m_PMCWafer, value); }
 
-         }
 
-         public WaferInfo RobotUpperWafer
 
-         {
 
-             get { return m_RobotUpperWafer; }
 
-             set { SetProperty(ref m_RobotUpperWafer, value); }
 
-         }
 
-         public WaferInfo RobotLowerWafer
 
-         {
 
-             get { return m_RobotLowerWafer; }
 
-             set { SetProperty(ref m_RobotLowerWafer, value); }
 
-         }
 
-         public WaferInfo PAWafer
 
-         {
 
-             get { return m_PAWafer; }
 
-             set { SetProperty(ref m_PAWafer, value); }
 
-         }
 
-         public ModuleInfo VCE1ModuleInfo
 
-         {
 
-             get { return m_VCE1ModuleInfo; }
 
-             set
 
-             {
 
-                 SetProperty(ref m_VCE1ModuleInfo, value);
 
-             }
 
-         }
 
-         public ModuleInfo PMAModuleInfo
 
-         {
 
-             get { return m_PMAModuleInfo; }
 
-             set
 
-             {
 
-                 SetProperty(ref m_PMAModuleInfo, value);
 
-             }
 
-         }
 
-         public ModuleInfo PMBModuleInfo
 
-         {
 
-             get { return m_PMBModuleInfo; }
 
-             set
 
-             {
 
-                 SetProperty(ref m_PMBModuleInfo, value);
 
-             }
 
-         }
 
-         public ModuleInfo PMCModuleInfo
 
-         {
 
-             get { return m_PMCModuleInfo; }
 
-             set
 
-             {
 
-                 SetProperty(ref m_PMCModuleInfo, value);
 
-             }
 
-         }
 
-         public ModuleInfo VPAModuleInfo
 
-         {
 
-             get { return m_VPAModuleInfo; }
 
-             set
 
-             {
 
-                 SetProperty(ref m_VPAModuleInfo, value);
 
-             }
 
-         }
 
-         public ModuleInfo TMModuleInfo
 
-         {
 
-             get { return m_TMModuleInfo; }
 
-             set
 
-             {
 
-                 SetProperty(ref m_TMModuleInfo, value);
 
-             }
 
-         }
 
-         public bool PMAIsInstalled
 
-         {
 
-             get { return m_PMAIsInstalled; }
 
-             set
 
-             {
 
-                 SetProperty(ref m_PMAIsInstalled, value);
 
-             }
 
-         }
 
-         public bool PMBIsInstalled
 
-         {
 
-             get { return m_PMBIsInstalled; }
 
-             set
 
-             {
 
-                 SetProperty(ref m_PMBIsInstalled, value);
 
-             }
 
-         }
 
-         public bool PMCIsInstalled
 
-         {
 
-             get { return m_PMCIsInstalled; }
 
-             set
 
-             {
 
-                 SetProperty(ref m_PMCIsInstalled, value);
 
-             }
 
-         }
 
-         public bool VCEIsInstalled
 
-         {
 
-             get { return m_VCEIsInstalled; }
 
-             set
 
-             {
 
-                 SetProperty(ref m_VCEIsInstalled, value);
 
-             }
 
-         }
 
-         public bool VCEDoorIsOpen { get => m_VCEDoorIsOpen; set => SetProperty(ref m_VCEDoorIsOpen, value); }
 
-         public bool PMADoorIsOpen { get => m_PMADoorIsOpen; set => SetProperty(ref m_PMADoorIsOpen, value); }
 
-         public bool PMBDoorIsOpen { get => m_PMBDoorIsOpen; set => SetProperty(ref m_PMBDoorIsOpen, value); }
 
-         public bool PMCDoorIsOpen { get => m_PMCDoorIsOpen; set => SetProperty(ref m_PMCDoorIsOpen, value); }
 
-         public bool VCEOutDoorIsOpen { get => m_VCEOutDoorIsOpen; set => SetProperty(ref m_VCEOutDoorIsOpen, value); }
 
-         public int VCE1WaferCount
 
-         {
 
-             get { return m_VCE1WaferCount; }
 
-             set
 
-             {
 
-                 SetProperty(ref m_VCE1WaferCount, value);
 
-             }
 
-         }
 
-         public Dictionary<string, object> RtDataValues
 
-         {
 
-             get { return m_RtDataValues; }
 
-             set { SetProperty(ref m_RtDataValues, value); }
 
-         }
 
-         public WaferAssociationInfo VCEwaferAssociation
 
-         {
 
-             get { return m_VCEwaferAssociation; }
 
-             set { SetProperty(ref m_VCEwaferAssociation, value); }
 
-         }
 
-         #endregion
 
-         #region 命令
 
-         private DelegateCommand _HomeAll;
 
-         public DelegateCommand HomeAll => _HomeAll ?? (_HomeAll = new DelegateCommand(onHomeAll));
 
-         private DelegateCommand _SetAutoMode;
 
-         public DelegateCommand SetAutoMode => _SetAutoMode ?? (_SetAutoMode = new DelegateCommand(onSetAutoMode));
 
-         private DelegateCommand _SetManualMode;
 
-         public DelegateCommand SetManualMode => _SetManualMode ?? (_SetManualMode = new DelegateCommand(onSetManualMode));
 
-         private DelegateCommand _StartSETMCycle;
 
-         public DelegateCommand StartSETMCycle => _StartSETMCycle ?? (_StartSETMCycle = new DelegateCommand(onStartSETMCycle));
 
-         private DelegateCommand<object> _StartCommand;
 
-         public DelegateCommand<object> StartCommand =>
 
-             _StartCommand ?? (_StartCommand = new DelegateCommand<object>(OnStart));
 
-         private DelegateCommand _StopCycle;
 
-         public DelegateCommand StopCycle => _StopCycle ?? (_StopCycle = new DelegateCommand(onStopCycle));
 
-         private DelegateCommand _VCEHome;
 
-         public DelegateCommand VCEHome => _VCEHome ?? (_VCEHome = new DelegateCommand(vceHome));
 
-         private DelegateCommand _VCEReadMap;
 
-         public DelegateCommand VCEReadMap => _VCEReadMap ?? (_VCEReadMap = new DelegateCommand(vceReadMap));
 
-         private DelegateCommand _VCELoadPrepare;
 
-         public DelegateCommand VCELoadPrepare =>
 
-             _VCELoadPrepare ?? (_VCELoadPrepare = new DelegateCommand(vceLoadPrepare));
 
-         private DelegateCommand __VCELoad;
 
-         public DelegateCommand VCELoad =>
 
-             __VCELoad ?? (__VCELoad = new DelegateCommand(vceLoad));
 
-         private DelegateCommand __VCELoadWithSMIF;
 
-         public DelegateCommand VCELoadWithSMIF =>
 
-             __VCELoadWithSMIF ?? (__VCELoadWithSMIF = new DelegateCommand(vceLoadWithSMIF));
 
-         private DelegateCommand __VCEUnLoadWithSMIF;
 
-         public DelegateCommand VCEUnLoadWithSMIF =>
 
-             __VCEUnLoadWithSMIF ?? (__VCEUnLoadWithSMIF = new DelegateCommand(vceUnLoadWithSMIF));
 
-         
 
-         private DelegateCommand _VCEUnLoad;
 
-         public DelegateCommand VCEUnLoad =>
 
-             _VCEUnLoad ?? (_VCEUnLoad = new DelegateCommand(vceUnLoad));
 
-         private DelegateCommand _SMIFLoad;
 
-         public DelegateCommand SMIFLoad =>
 
-             _SMIFLoad ?? (_SMIFLoad = new DelegateCommand(smifLoad));
 
-         private DelegateCommand _SMIFULoad;
 
-         public DelegateCommand SMIFULoad =>
 
-             _SMIFULoad ?? (_SMIFULoad = new DelegateCommand(smifUnLoad));
 
-         private DelegateCommand _tmhome;
 
-         public DelegateCommand TmHome =>
 
-             _tmhome ?? (_tmhome = new DelegateCommand(tmhome));
 
-         private DelegateCommand _tmPick;
 
-         public DelegateCommand TmPick =>
 
-             _tmPick ?? (_tmPick = new DelegateCommand(tmpick));
 
-         private DelegateCommand _tmPlace;
 
-         public DelegateCommand TMPlace =>
 
-             _tmPlace ?? (_tmPlace = new DelegateCommand(tmplace));
 
-         //private DelegateCommand _tmSave;
 
-         private DelegateCommand _LoadCommand;
 
-         public DelegateCommand LoadCommand =>
 
-             _LoadCommand ?? (_LoadCommand = new DelegateCommand(OnLoad));
 
-         private DelegateCommand _PauseAllJobCommand;
 
-         public DelegateCommand PauseAllJobCommand =>
 
-             _PauseAllJobCommand ?? (_PauseAllJobCommand = new DelegateCommand(OnPauseAllJob));
 
-         private DelegateCommand _AbortAllCommand;
 
-         public DelegateCommand AbortAllCommand =>
 
-             _AbortAllCommand ?? (_AbortAllCommand = new DelegateCommand(OnAbortAll));
 
-         private DelegateCommand<object> _SetSequenceCommand;
 
-         public DelegateCommand<object> SetSequenceCommand =>
 
-             _SetSequenceCommand ?? (_SetSequenceCommand = new DelegateCommand<object>(OnSetSequence));
 
-         private DelegateCommand<object> _CreateJobCommand;
 
-         public DelegateCommand<object> CreateJobCommand =>
 
-             _CreateJobCommand ?? (_CreateJobCommand = new DelegateCommand<object>(OnCreateJob));
 
-         private DelegateCommand<object> _SelectAllCommand;
 
-         public DelegateCommand<object> SelectAllCommand =>
 
-             _SelectAllCommand ?? (_SelectAllCommand = new DelegateCommand<object>(OnSelectAll));
 
-         private DelegateCommand<object> _UnSelectAllCommand;
 
-         public DelegateCommand<object> UnSelectAllCommand =>
 
-             _UnSelectAllCommand ?? (_UnSelectAllCommand = new DelegateCommand<object>(OnDeSelectAll));
 
-         private DelegateCommand<object> _ReturnAllWafer;
 
-         public DelegateCommand<object> ReturnAllWafer =>
 
-             _ReturnAllWafer ?? (_ReturnAllWafer = new DelegateCommand<object>(OnReturnAllWafer));
 
-         
 
-         #endregion
 
-         #region 构造函数
 
-         public VenusSeOperationOverViewModel()
 
-         {
 
-             //页面不刷错的方法 页面中的PM做成List的形式 通过itemsource显示 同时提供各个位置的pm点位 旋转角度
 
-             VCE1WaferCount = 25;
 
-             string[] allModules = QueryDataClient.Instance.Service.GetConfig($"System.InstalledModules").ToString().Split(',');
 
-             PMAIsInstalled = allModules.Contains("PMA");
 
-             PMBIsInstalled = allModules.Contains("PMB");
 
-             PMCIsInstalled = allModules.Contains("PMC");
 
-             VCEIsInstalled = allModules.Contains("VCE1");
 
-             addDataKeys();
 
-             RtDataValues = QueryDataClient.Instance.Service.PollData(m_RtDataKeys);
 
-             VCEDoorIsOpen = !CommonFunction.GetValue<bool>(RtDataValues, "SETM.VCESlitDoorClosed");
 
-             PMADoorIsOpen = !CommonFunction.GetValue<bool>(RtDataValues, "SETM.PMASlitDoorClosed");
 
-             PMBDoorIsOpen = !CommonFunction.GetValue<bool>(RtDataValues, "SETM.PMBSlitDoorClosed");
 
-             PMCDoorIsOpen = !CommonFunction.GetValue<bool>(RtDataValues, "SETM.PMCSlitDoorClosed");
 
-             VCEOutDoorIsOpen = !CommonFunction.GetValue<bool>(RtDataValues, "VCE1.VCEOutDoorClosed");
 
-             loadflag = false;
 
-             DispatcherTimer timer = new DispatcherTimer();
 
-             timer.Interval = TimeSpan.FromSeconds(0.1);
 
-             timer.Tick += Timer_Tick;
 
-             timer.Start();
 
-         }
 
-         #endregion
 
-         #region 命令实现
 
-         private void OnLoad()
 
-         {
 
-             if (VCEIsInstalled && !loadflag && VCEwaferAssociation == null)
 
-             {
 
-                 VCEwaferAssociation = new WaferAssociationInfo
 
-                 {
 
-                     ModuleData = ModuleManager.ModuleInfos["VCE1"]
 
-                 };
 
-                 loadflag = true;
 
-             }
 
-         }
 
-         private void OnAbortJob(object obj)
 
-         {
 
-             InvokeClient.Instance.Service.DoOperation("SE.AbortJob", obj.ToString());
 
-         }
 
-         private void OnSelectAll(object obj)
 
-         {
 
-             var info = obj as WaferAssociationInfo;
 
-             info.SlotFrom = 1;
 
-             info.SlotTo = 25;
 
-             AssociateSequence(info, true);
 
-         }
 
-         private void OnDeSelectAll(object obj)
 
-         {
 
-             var info = obj as WaferAssociationInfo;
 
-             info.SlotFrom = 1;
 
-             info.SlotTo = 25;
 
-             AssociateSequence(info, false);
 
-         }
 
-         private void OnReturnAllWafer(object obj)
 
-         {
 
-             WaferDialogView dialog = new WaferDialogView()
 
-             {
 
-                 Owner = Application.Current.MainWindow,
 
-             };
 
-             dialog.Height = 300;
 
-             dialog.Width = 400;
 
-             double angel = 0;
 
-             double coolingtime = 0;
 
-             string message = "Please Confirm Return Wafer";
 
-             WaferDialogViewModel vm = new WaferDialogViewModel();
 
-             vm.ConfirmText = message;
 
-             dialog.DataContext = vm;
 
-             if (dialog.ShowDialog() == true)
 
-             {
 
-                 if ((bool)dialog.AlignFlag == true && !string.IsNullOrEmpty(dialog.Angle))
 
-                 {
 
-                     angel = Convert.ToDouble(dialog.Angle);
 
-                 }
 
-                 if ((bool)dialog.CoolingFlag == true && !string.IsNullOrEmpty(dialog.CoolingTime))
 
-                 {
 
-                     coolingtime = Convert.ToDouble(dialog.CoolingTime);
 
-                 }
 
-                 InvokeClient.Instance.Service.DoOperation("System.ReturnAllSEWafer", dialog.CoolingFlag, coolingtime, dialog.AlignFlag, angel);
 
-             }
 
-         }
 
-         private void OnCreateJob(object obj)
 
-         {
 
-             var info = obj as WaferAssociationInfo;
 
-             List<string> slotSequence = new List<string>();
 
-             info.ModuleData.WaferManager.Wafers.ForEach(key => { slotSequence.Insert(0, key.SequenceName); });
 
-             string jobId = info.LotId.Trim();
 
-             if (string.IsNullOrEmpty(jobId))
 
-                 jobId = "CJ_Local_" + info.ModuleData.ModuleID;
 
-             info.LotId = jobId;
 
-             info.JobID = jobId;
 
-             info.JobStatus = "WaitingForStart";
 
-             info.LotIdSaved = true;
 
-             Dictionary<string, object> param = new Dictionary<string, object>()
 
-             {
 
-                 {"JobId", jobId},
 
-                 {"Module", info.ModuleData.ModuleID},
 
-                 {"SlotSequence", slotSequence.ToArray()},
 
-                 {"AutoStart", true},
 
-             };
 
-             InvokeClient.Instance.Service.DoOperation("System.CreateSEJob", param);
 
-         }
 
-         private void OnSetSequence(object obj)
 
-         {
 
-             var info = obj as WaferInfo;
 
-             bool flag = info.SequenceName != "" ? false : true;
 
-             if (info.ModuleID == "VCE1")
 
-             {
 
-                 AssociateSequence(VCEwaferAssociation, flag, info.SlotID);
 
-             }
 
-         }
 
-         private void OnPauseAllJob()
 
-         {
 
-             InvokeClient.Instance.Service.DoOperation("System.PauseJob", VCEwaferAssociation.JobID);
 
-         }
 
-         private void OnAbortAll()
 
-         {
 
-             InvokeClient.Instance.Service.DoOperation("System.SEAbort");
 
-         }
 
-         private void AssociateSequence(WaferAssociationInfo info, bool flag, int slot = -1)
 
-         {
 
-             List<WaferInfo> wafers = info.ModuleData.WaferManager.Wafers;
 
-             if (slot >= 0) //by wafer
 
-             {
 
-                 int index = wafers.Count - slot - 1;
 
-                 if (index < wafers.Count)
 
-                 {
 
-                     //has wafer
 
-                     if (flag && !(wafers[index].WaferStatus == 0))
 
-                         wafers[index].SequenceName = info.SequenceName;
 
-                     else
 
-                         wafers[index].SequenceName = string.Empty;
 
-                 }
 
-             }
 
-             else //by from-to
 
-             {
 
-                 for (int i = info.SlotFrom - 1; i < info.SlotTo; i++)
 
-                 {
 
-                     int index = wafers.Count - i - 1;
 
-                     if (index < wafers.Count)
 
-                     {
 
-                         if (flag && !(wafers[index].WaferStatus == 0))
 
-                             wafers[index].SequenceName = info.SequenceName;
 
-                         else
 
-                             wafers[index].SequenceName = string.Empty;
 
-                     }
 
-                 }
 
-             }
 
-             if (VCEIsInstalled)
 
-             {
 
-                 VCEwaferAssociation = info;
 
-             }
 
-         }
 
-         private void addDataKeys()
 
-         {
 
-             m_RtDataKeys.Add($"SETM.VCESlitDoorClosed");
 
-             m_RtDataKeys.Add($"SETM.PMASlitDoorClosed");
 
-             m_RtDataKeys.Add($"SETM.PMBSlitDoorClosed");
 
-             m_RtDataKeys.Add($"SETM.PMCSlitDoorClosed");
 
-             m_RtDataKeys.Add($"SETM.VCEPressure.Value");
 
-             m_RtDataKeys.Add($"VCE1.VCEOutDoorClosed");
 
-             m_RtDataKeys.Add($"VCE1.CassetteArrive");
 
-             m_RtDataKeys.Add($"SEScheduler.CycledWafer");
 
-             m_RtDataKeys.Add($"SEScheduler.CycleSetPoint");
 
-             m_RtDataKeys.Add($"SEScheduler.CycleCount");
 
-             m_RtDataKeys.Add($"SEScheduler.ThroughPut");
 
-             m_RtDataKeys.Add($"PMA.ChamberPressure");
 
-             m_RtDataKeys.Add($"PMA.VentingFlag");
 
-             m_RtDataKeys.Add($"PMA.CurrentRecipeResult");
 
-             m_RtDataKeys.Add($"PMB.ChamberPressure");
 
-             m_RtDataKeys.Add($"PMB.VentingFlag");
 
-             m_RtDataKeys.Add($"PMB.CurrentRecipeResult");
 
-             m_RtDataKeys.Add($"PMC.ChamberPressure");
 
-             m_RtDataKeys.Add($"PMC.VentingFlag");
 
-             m_RtDataKeys.Add($"PMC.CurrentRecipeResult");
 
-             //if (PMAIsInstalled)
 
-             //{
 
-             //    m_RtDataKeys.Add($"PMA.ChamberPressure");
 
-             //    m_RtDataKeys.Add($"PMA.VentingFlag");
 
-             //    m_RtDataKeys.Add($"PMA.CurrentRecipeResult");
 
-             //}
 
-             //if (PMBIsInstalled)
 
-             //{
 
-             //    m_RtDataKeys.Add($"PMB.ChamberPressure");
 
-             //    m_RtDataKeys.Add($"PMB.VentingFlag");
 
-             //    m_RtDataKeys.Add($"PMB.CurrentRecipeResult");
 
-             //}
 
-             //if (PMCIsInstalled)
 
-             //{
 
-             //    m_RtDataKeys.Add($"PMC.ChamberPressure");
 
-             //    m_RtDataKeys.Add($"PMC.VentingFlag");
 
-             //    m_RtDataKeys.Add($"PMC.CurrentRecipeResult");
 
-             //}
 
-         }
 
-         private void onHomeAll()
 
-         {
 
-             InvokeClient.Instance.Service.DoOperation("System.HomeAll");
 
-         }
 
-         private void onSetAutoMode()
 
-         {
 
-             InvokeClient.Instance.Service.DoOperation("System.SetAutoMode");
 
-         }
 
-         private void onSetManualMode()
 
-         {
 
-             InvokeClient.Instance.Service.DoOperation("System.SetManualMode");
 
-         }
 
-         private void onStopCycle()
 
-         {
 
-             InvokeClient.Instance.Service.DoOperation("System.StopSECycle");
 
-         }
 
-         private void onStartSETMCycle()
 
-         {
 
-             List<string> stations = new List<string>();
 
-             stations.Add("VCE1");
 
-             stations.Add("VPA");
 
-             if (PMAIsInstalled)
 
-             {
 
-                 stations.Add("PMA");
 
-             }
 
-             if (PMBIsInstalled)
 
-             {
 
-                 stations.Add("PMB");
 
-             }
 
-             if (PMCIsInstalled)
 
-             {
 
-                 stations.Add("PMC");
 
-             }
 
-             stations.Add("VCE1");
 
-             InvokeClient.Instance.Service.DoOperation("System.SETMCycle", stations.ToArray(), 1);
 
-         }
 
-         private void OnStart(object obj)
 
-         {
 
-             var info = obj as WaferAssociationInfo;
 
-             InvokeClient.Instance.Service.DoOperation("System.StartSEJob", info.LotId);
 
-         }
 
-         private void vceHome()
 
-         {
 
-             InvokeClient.Instance.Service.DoOperation("VCE1.HOME");
 
-         }
 
-         private void vceReadMap()
 
-         {
 
-             InvokeClient.Instance.Service.DoOperation("VCE1.ReadMap");
 
-         }
 
-         private void vceLoadPrepare() 
 
-         {
 
-             InvokeClient.Instance.Service.DoOperation("VCE1.LoadPrepare");
 
-         }
 
-         private void vceLoad() 
 
-         {
 
-             InvokeClient.Instance.Service.DoOperation("VCE1.SafeLoad");
 
-         }
 
-         private void vceLoadWithSMIF()
 
-         {
 
-             InvokeClient.Instance.Service.DoOperation("VCE1.LoadWithSMIF");
 
-         }
 
-         private void vceUnLoadWithSMIF()
 
-         {
 
-             InvokeClient.Instance.Service.DoOperation("VCE1.UnLoadWithSMIF");
 
-         }
 
-         private void vceUnLoad() 
 
-         {
 
-             InvokeClient.Instance.Service.DoOperation("VCE1.SafeUnload");
 
-         }
 
-         private void smifLoad() { }
 
-         private void smifUnLoad() { }
 
-         private void tmhome()
 
-         {
 
-             InvokeClient.Instance.Service.DoOperation("SETM.Home");
 
-         }
 
-         private void tmpick()
 
-         {
 
-             ModuleName target = ModuleName.VCE1;
 
-             int slot = PickNum;
 
-             MoveItem moveItem = new MoveItem(target, slot - 1, ModuleName.TMRobot, 0, 0);
 
-             Queue<MoveItem> que = new Queue<MoveItem>();
 
-             que.Enqueue(moveItem);
 
-             InvokeClient.Instance.Service.DoOperation("SETM.Pick", que);
 
-         }
 
-         private void tmplace()
 
-         {
 
-             ModuleName target = ModuleName.VCE1;
 
-             int slot = PickNum;
 
-             MoveItem moveItem = new MoveItem( ModuleName.TMRobot, 0, target, slot - 1, 0);
 
-             Queue<MoveItem> que = new Queue<MoveItem>();
 
-             que.Enqueue(moveItem);
 
-             InvokeClient.Instance.Service.DoOperation("SETM.Place", que);
 
-         }
 
-         #endregion
 
-         #region 私有方法
 
-         private void Timer_Tick(object sender, EventArgs e)
 
-         {
 
-             try 
 
-             {
 
-                 RtDataValues = QueryDataClient.Instance.Service.PollData(m_RtDataKeys);
 
-                 VCEDoorIsOpen = !CommonFunction.GetValue<bool>(RtDataValues, "SETM.VCESlitDoorClosed");
 
-                 PMADoorIsOpen = !CommonFunction.GetValue<bool>(RtDataValues, "SETM.PMASlitDoorClosed");
 
-                 PMBDoorIsOpen = !CommonFunction.GetValue<bool>(RtDataValues, "SETM.PMBSlitDoorClosed");
 
-                 PMCDoorIsOpen = !CommonFunction.GetValue<bool>(RtDataValues, "SETM.PMCSlitDoorClosed");
 
-                 VCEOutDoorIsOpen = !CommonFunction.GetValue<bool>(RtDataValues, "VCE1.VCEOutDoorClosed");
 
-                 VCEPercent = CommonFunction.GetValue<double>(RtDataValues, "SETM.VCEPressure.Value") * 260 / 750000;
 
-                 if (PMAIsInstalled == true)
 
-                 {
 
-                     PMAModuleInfo = ModuleManager.ModuleInfos["PMA"];
 
-                     PMAWafer = PMAModuleInfo.WaferManager.Wafers[0];
 
-                     PMAPercent = CommonFunction.GetValue<double>(RtDataValues, "PMA.ChamberPressure") * 260 / 750000;
 
-                     PMARecipeResult = CommonFunction.GetValue<RecipeResult>(RtDataValues, "PMA.CurrentRecipeResult");
 
-                 }
 
-                 if (PMBIsInstalled == true)
 
-                 {
 
-                     PMBModuleInfo = ModuleManager.ModuleInfos["PMB"];
 
-                     PMBWafer = PMBModuleInfo.WaferManager.Wafers[0];
 
-                     PMBPercent = CommonFunction.GetValue<double>(RtDataValues, "PMB.ChamberPressure") * 260 / 750000;
 
-                     PMBRecipeResult = CommonFunction.GetValue<RecipeResult>(RtDataValues, "PMB.CurrentRecipeResult");
 
-                 }
 
-                 if (PMCIsInstalled == true)
 
-                 {
 
-                     PMCModuleInfo = ModuleManager.ModuleInfos["PMC"];
 
-                     PMCWafer = PMCModuleInfo.WaferManager.Wafers[0];
 
-                     PMCPercent = CommonFunction.GetValue<double>(RtDataValues, "PMC.ChamberPressure") * 260 / 750000;
 
-                     PMCRecipeResult = CommonFunction.GetValue<RecipeResult>(RtDataValues, "PMC.CurrentRecipeResult");
 
-                 }
 
-                 if (VCEIsInstalled == true)
 
-                 {
 
-                     VCE1ModuleInfo = ModuleManager.ModuleInfos["VCE1"];
 
-                 }
 
-                 RobotMoveInfo = (RobotMoveInfo)QueryDataClient.Instance.Service.GetData("SETM.RobotMoveAction");
 
-                 TMModuleInfo = ModuleManager.ModuleInfos["TMRobot"];
 
-                 RobotUpperWafer = TMModuleInfo.WaferManager.Wafers[0];
 
-                 RobotLowerWafer = TMModuleInfo.WaferManager.Wafers[1];
 
-                 PAWafer = ModuleManager.ModuleInfos["VPA"].WaferManager.Wafers[0];
 
-             }
 
-             catch
 
-             {
 
-             }
 
-         }
 
-         #endregion
 
-         private async void RobotMoveInfoChanged(RobotMoveInfo oldValue, RobotMoveInfo newValue)
 
-         {
 
-             string RobotTarget;
 
-             if (oldValue == null || newValue == null)
 
-             {
 
-                 return;
 
-             }
 
-             #region Rotating
 
-             if ((oldValue.Action == RobotAction.None || oldValue.ArmTarget != newValue.ArmTarget) && (newValue.Action == RobotAction.Rotating))
 
-             {
 
-                 var TMRobotMoveActionBladeTarget = newValue.BladeTarget;
 
-                 if (TMRobotMoveActionBladeTarget != null)
 
-                 {
 
-                     RobotTarget = TMRobotMoveActionBladeTarget.ToString();
 
-                 }
 
-                 else
 
-                 {
 
-                     return;
 
-                 }
 
-                 var values = RobotTarget.Split('.');
 
-                 var arm = values[0];
 
-                 var module = values[1];
 
-                 if (arm == "ArmA")
 
-                 {
 
-                     Robot1TAction = (SERobotTAction)Enum.Parse(typeof(SERobotTAction), module, true);
 
-                 }
 
-                 else if (arm == "ArmB")
 
-                 {
 
-                     Robot2TAction = (SERobotTAction)Enum.Parse(typeof(SERobotTAction), module, true);
 
-                 }
 
-             }
 
-             #endregion
 
-             #region VPA、VCE1 Pick、Place
 
-             else if ((oldValue.Action == RobotAction.None || oldValue.ArmTarget != newValue.ArmTarget) && (newValue.Action == RobotAction.Placing || newValue.Action == RobotAction.Picking))
 
-             {
 
-                 var TMRobotMoveActionBladeTarget = newValue.BladeTarget;
 
-                 if (TMRobotMoveActionBladeTarget != null)
 
-                 {
 
-                     RobotTarget = TMRobotMoveActionBladeTarget.ToString();
 
-                 }
 
-                 else
 
-                 {
 
-                     return;
 
-                 }
 
-                 var values = RobotTarget.Split('.');
 
-                 var arm = values[0];
 
-                 var module = values[1];
 
-                 if (arm == "ArmA")
 
-                 {
 
-                     var SERobotTAction = (SERobotTAction)Enum.Parse(typeof(SERobotTAction), module, true);
 
-                     if (SERobotTAction != Robot1TAction)
 
-                     {
 
-                         Robot1TAction = SERobotTAction;
 
-                     }
 
-                     else
 
-                     {
 
-                         //await Task.Delay(100);
 
-                     }
 
-                     await Task.Delay(600);
 
-                     if (module == "VCE1")
 
-                     {
 
-                         Robot1XAction = SERobotXAction.ToVCE;
 
-                     }
 
-                     else
 
-                     {
 
-                         Robot1XAction = SERobotXAction.Extend;
 
-                     }
 
-                     while ((newValue.Action == RobotAction.Placing && ModuleManager.ModuleInfos["TMRobot"].WaferManager.Wafers[0].WaferStatus != 0) || (newValue.Action == RobotAction.Picking && ModuleManager.ModuleInfos["TMRobot"].WaferManager.Wafers[0].WaferStatus == 0))
 
-                     {
 
-                         await Task.Delay(100);
 
-                     }
 
-                     Robot1XAction = SERobotXAction.Retract;
 
-                 }
 
-                 else if (arm == "ArmB")
 
-                 {
 
-                     var waferRobotTAction = (SERobotTAction)Enum.Parse(typeof(SERobotTAction), module, true);
 
-                     if (waferRobotTAction != Robot2TAction)
 
-                     {
 
-                         Robot2TAction = waferRobotTAction;
 
-                     }
 
-                     else
 
-                     {
 
-                         //await Task.Delay(100);
 
-                     }
 
-                     await Task.Delay(600);
 
-                     if (module == "VCE1")
 
-                     {
 
-                         Robot2XAction = SERobotXAction.ToVCE2;
 
-                     }
 
-                     else
 
-                     {
 
-                         Robot2XAction = SERobotXAction.Extend2;
 
-                     }
 
-                     while ((newValue.Action == RobotAction.Placing && ModuleManager.ModuleInfos["TMRobot"].WaferManager.Wafers[1].WaferStatus != 0) || (newValue.Action == RobotAction.Picking && ModuleManager.ModuleInfos["TMRobot"].WaferManager.Wafers[1].WaferStatus == 0))
 
-                     {
 
-                         await Task.Delay(100);
 
-                     }
 
-                     Robot2XAction = SERobotXAction.Retract2;
 
-                 }
 
-             }
 
-             #endregion
 
-             #region PM pick、PM place
 
-             else if ((oldValue.Action == RobotAction.None || oldValue.ArmTarget != newValue.ArmTarget) && newValue.Action == RobotAction.Extending)
 
-             {
 
-                 var TMRobotMoveActionBladeTarget = newValue.BladeTarget;
 
-                 if (TMRobotMoveActionBladeTarget != null)
 
-                 {
 
-                     RobotTarget = TMRobotMoveActionBladeTarget.ToString();
 
-                 }
 
-                 else
 
-                 {
 
-                     return;
 
-                 }
 
-                 var values = RobotTarget.Split('.');
 
-                 var arm = values[0];
 
-                 var module = values[1];
 
-                 if (arm == "ArmA")
 
-                 {
 
-                     var SERobotTAction = (SERobotTAction)Enum.Parse(typeof(SERobotTAction), module, true);
 
-                     if (SERobotTAction != Robot1TAction)
 
-                     {
 
-                         Robot1TAction = SERobotTAction;
 
-                     }
 
-                     else
 
-                     {
 
-                         // await Task.Delay(100);
 
-                     }
 
-                     await Task.Delay(600);
 
-                     Robot1XAction = SERobotXAction.Extend;
 
-                 }
 
-                 else if (arm == "ArmB")
 
-                 {
 
-                     var SERobotTAction = (SERobotTAction)Enum.Parse(typeof(SERobotTAction), module, true);
 
-                     if (SERobotTAction != Robot2TAction)
 
-                     {
 
-                         Robot2TAction = SERobotTAction;
 
-                     }
 
-                     else
 
-                     {
 
-                         // await Task.Delay(100);
 
-                     }
 
-                     await Task.Delay(600);
 
-                     Robot2XAction = SERobotXAction.Extend2;
 
-                 }
 
-             }
 
-             else if ((oldValue.Action == RobotAction.None || oldValue.ArmTarget != newValue.ArmTarget) && newValue.Action == RobotAction.Retracting)
 
-             {
 
-                 var TMRobotMoveActionBladeTarget = newValue.BladeTarget;
 
-                 if (TMRobotMoveActionBladeTarget != null)
 
-                 {
 
-                     RobotTarget = TMRobotMoveActionBladeTarget.ToString();
 
-                 }
 
-                 else
 
-                 {
 
-                     return;
 
-                 }
 
-                 var values = RobotTarget.Split('.');
 
-                 var arm = values[0];
 
-                 if (arm == "ArmA")
 
-                 {
 
-                     Robot1XAction = SERobotXAction.Retract;
 
-                 }
 
-                 else if (arm == "ArmB")
 
-                 {
 
-                     Robot2XAction = SERobotXAction.Retract2;
 
-                 }
 
-             }
 
-             #endregion
 
-             #region Home
 
-             else if (oldValue.Action == RobotAction.None && newValue.Action == RobotAction.Homing)
 
-             {
 
-                 if (Robot1XAction == SERobotXAction.Extend)
 
-                 {
 
-                     Robot1XAction = SERobotXAction.Retract;
 
-                 }
 
-                 if (Robot2XAction == SERobotXAction.Extend2)
 
-                 {
 
-                     Robot2XAction = SERobotXAction.Retract2;
 
-                 }
 
-                 await Task.Delay(2000);
 
-                 if (Robot1TAction != SERobotTAction.T_Origin)
 
-                 {
 
-                     Robot1TAction = SERobotTAction.T_Origin;
 
-                 }
 
-                 if (Robot2TAction != SERobotTAction.T_Origin)
 
-                 {
 
-                     Robot2TAction = SERobotTAction.T_Origin;
 
-                 }
 
-             }
 
-             #endregion
 
-         }
 
-     }
 
- }
 
 
  |