Sic04/SicUI/Models/Maintenances/TM/EFEMViewModel.cs

658 lines
20 KiB
C#
Raw Normal View History

2022-09-19 09:16:33 +08:00
using Aitex.Core.Util;
using Aitex.Sorter.Common;
using MECF.Framework.Common.CommonData;
using MECF.Framework.Common.OperationCenter;
using SicUI.Models;
using System;
using System.Collections.Generic;
namespace SicUI.Client.Models.Platform.TM
{
public class EFEMViewModel : SicUIViewModelBase
{
#region Properties Robot
private List<string> _waferModules = new List<string>() { "LoadLock", "UnLoad", "Aligner", "CassAR", "CassAL" };
public List<string> WaferModules
{
get { return _waferModules; }
set { _waferModules = value; NotifyOfPropertyChange("WaferModules"); }
}
private List<string> _trayModules = new List<string>() { "LoadLock", "CassBL" };
public List<string> TrayModules
{
get { return _trayModules; }
set { _trayModules = value; NotifyOfPropertyChange("TrayModules"); }
}
private string _waferSelectedModule;
public string WaferSelectedModule
{
get { return _waferSelectedModule; }
set { _waferSelectedModule = value; NotifyOfPropertyChange("WaferSelectedModule"); }
}
private string _traySelectedModule;
public string TraySelectedModule
{
get { return _traySelectedModule; }
set { _traySelectedModule = value; NotifyOfPropertyChange("TraySelectedModule"); }
}
private List<int> _waferSlots = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 };
public List<int> WaferSlots
{
get { return _waferSlots; }
set { _waferSlots = value; NotifyOfPropertyChange("WaferSlots"); }
}
private int _waferSelectedSlot;
public int WaferSelectedSlot
{
get { return _waferSelectedSlot; }
set { _waferSelectedSlot = value; NotifyOfPropertyChange("WaferSelectedSlot"); }
}
private List<int> _traySlots = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8 };
public List<int> TraySlots
{
get { return _traySlots; }
set { _traySlots = value; NotifyOfPropertyChange("TraySlots"); }
}
private int _traySelectedSlot;
public int TraySelectedSlot
{
get { return _traySelectedSlot; }
set { _traySelectedSlot = value; NotifyOfPropertyChange("TraySelectedSlot"); }
}
private List<int> _getSetSPSteps = new List<int>() { 1, 2, 3, 4 };
public List<int> GetSetSPSteps
{
get { return _getSetSPSteps; }
set { _getSetSPSteps = value; NotifyOfPropertyChange("GetSetSPSteps"); }
}
private int _selectedGetSteps;
public int SelectedGetSteps
{
get { return _selectedGetSteps; }
set { _selectedGetSteps = value; NotifyOfPropertyChange("SelectedGetSteps"); }
}
[Subscription("WaferRobot.RobotMoveInfo")]
public RobotMoveInfo WaferRobotMoveInfo
{
get;
set;
}
[Subscription("TrayRobot.RobotMoveInfo")]
public RobotMoveInfo TrayRobotMoveInfo
{
get;
set;
}
[Subscription("WaferRobot.State")]
public string WaferRobotState
{
get;
set;
}
[Subscription("WaferRobot.IsBobotReady")]
public string WaferRobotEnable
{
get;
set;
}
[Subscription("TrayRobot.State")]
public string TrayRobotState
{
get;
set;
}
#endregion Properties
#region OP Robot
public void WaferRobotExtend()
{
InvokeClient.Instance.Service.DoOperation($"WaferRobot.SetPosition", WaferSelectedModule);
}
public void WaferRobotRESP()
{
InvokeClient.Instance.Service.DoOperation($"WaferRobot.RESP");
}
public void WaferRobotREMS()
{
InvokeClient.Instance.Service.DoOperation($"WaferRobot.REMS");
}
public void WaferRobotSVON()
{
InvokeClient.Instance.Service.DoOperation($"WaferRobot.SVON");
}
public void WaferRobotHome()
{
InvokeClient.Instance.Service.DoOperation($"WaferRobot.HOME");
}
public void WaferRobotSTAT()
{
InvokeClient.Instance.Service.DoOperation($"WaferRobot.STAT");
}
public void WaferRobotHomeAll()
{
InvokeClient.Instance.Service.DoOperation($"WaferRobot.RobotConnectHomeAll");
}
public void WaferRobotPick()
{
if (string.IsNullOrEmpty(WaferSelectedModule))
{
return;
}
int cSlot = WaferSelectedSlot - 1;
if (!WaferSelectedModule.Contains("Cass"))
{
cSlot = 0;
}
InvokeClient.Instance.Service.DoOperation($"WaferRobot.GETA", WaferSelectedModule, cSlot);
}
public void WaferRobotPlace()
{
if (string.IsNullOrEmpty(WaferSelectedModule))
{
return;
}
int cSlot = WaferSelectedSlot - 1;
if (!WaferSelectedModule.Contains("Cass"))
{
cSlot = 0;
}
InvokeClient.Instance.Service.DoOperation($"WaferRobot.PUTA", WaferSelectedModule, cSlot);
}
public void WaferRobotMap()
{
if (string.IsNullOrEmpty(WaferSelectedModule))
{
return;
}
InvokeClient.Instance.Service.DoOperation($"WaferRobot.MAP", WaferSelectedModule);
}
public void WaferRobotRSR()
{
InvokeClient.Instance.Service.DoOperation($"WaferRobot.RSR");
}
public void WaferRobotGetSP(int spIndex)
{
if (string.IsNullOrEmpty(WaferSelectedModule))
{
return;
}
int cSlot = WaferSelectedSlot - 1;
if (!WaferSelectedModule.Contains("Cass"))
{
cSlot = 0;
}
InvokeClient.Instance.Service.DoOperation($"WaferRobot.GETSP", WaferSelectedModule, cSlot, spIndex);
}
public void WaferRobotPutSP(int spIndex)
{
if (string.IsNullOrEmpty(WaferSelectedModule))
{
return;
}
int cSlot = WaferSelectedSlot - 1;
if (!WaferSelectedModule.Contains("Cass"))
{
cSlot = 0;
}
InvokeClient.Instance.Service.DoOperation($"WaferRobot.PUTSP", WaferSelectedModule, cSlot, spIndex);
}
public void WaferRobotAbort()
{
InvokeClient.Instance.Service.DoOperation($"WaferRobot.Abort");
}
public void WaferRobotInPutA()
{
InvokeClient.Instance.Service.DoOperation($"WaferRobot.InputA");
}
public void WaferRobotOutPA()
{
InvokeClient.Instance.Service.DoOperation($"WaferRobot.OutP");
}
public void WaferRobotERR()
{
InvokeClient.Instance.Service.DoOperation($"WaferRobot.ERR");
}
public void TrayRobotExtend()
{
InvokeClient.Instance.Service.DoOperation($"TrayRobot.SetPosition", TraySelectedModule);
}
public void TrayRobotRESP()
{
InvokeClient.Instance.Service.DoOperation($"TrayRobot.RESP");
}
public void TrayRobotREMS()
{
InvokeClient.Instance.Service.DoOperation($"TrayRobot.REMS");
}
public void TrayRobotSVON()
{
InvokeClient.Instance.Service.DoOperation($"TrayRobot.SVON");
}
public void TrayRobotHome()
{
InvokeClient.Instance.Service.DoOperation($"TrayRobot.HOME");
}
public void TrayRobotSTAT()
{
InvokeClient.Instance.Service.DoOperation($"TrayRobot.STAT");
}
public void TrayRobotHomeAll()
{
InvokeClient.Instance.Service.DoOperation($"TrayRobot.RobotConnectHomeAll");
}
public void TrayRobotERR()
{
InvokeClient.Instance.Service.DoOperation($"TrayRobot.ERR");
}
public void TrayRobotPick()
{
if (string.IsNullOrEmpty(TraySelectedModule))
{
return;
}
int cSlot = TraySelectedSlot - 1;
if (!TraySelectedModule.Contains("Cass"))
{
cSlot = 0;
}
InvokeClient.Instance.Service.DoOperation($"TrayRobot.GETB", TraySelectedModule, cSlot);
}
public void TrayRobotPlace()
{
if (string.IsNullOrEmpty(TraySelectedModule))
{
return;
}
int cSlot = TraySelectedSlot - 1;
if (!TraySelectedModule.Contains("Cass"))
{
cSlot = 0;
}
InvokeClient.Instance.Service.DoOperation($"TrayRobot.PUTB", TraySelectedModule, cSlot);
}
public void TrayRobotMAP()
{
if (string.IsNullOrEmpty(TraySelectedModule))
{
return;
}
InvokeClient.Instance.Service.DoOperation($"TrayRobot.MAP", TraySelectedModule);
}
public void TrayRobotRSR()
{
InvokeClient.Instance.Service.DoOperation($"TrayRobot.RSR");
}
public void TrayRobotAbort()
{
InvokeClient.Instance.Service.DoOperation($"TrayRobot.Abort");
}
public void TrayRobotInPutA()
{
InvokeClient.Instance.Service.DoOperation($"TrayRobot.InputA");
}
#endregion OP
#region OP,Properties Shutter
public void LoadGroup()
{
InvokeClient.Instance.Service.DoOperation($"LoadLock.Group");
}
public void LLLiftUp()
{
InvokeClient.Instance.Service.DoOperation($"LoadLock.LLLift.MoveUp");
}
public void LLLiftDown()
{
InvokeClient.Instance.Service.DoOperation($"LoadLock.LLLift.MoveDown");
}
public void LLWaferClamped()
{
InvokeClient.Instance.Service.DoOperation($"LoadLock.LLWaferClaw.Clamping");
}
public void LLWaferOpen()
{
InvokeClient.Instance.Service.DoOperation($"LoadLock.LLWaferClaw.UnClamping");
}
public void LLTrayClamped()
{
InvokeClient.Instance.Service.DoOperation($"LoadLock.LLTrayClaw.Clamping");
}
public void LLTrayOpen()
{
InvokeClient.Instance.Service.DoOperation($"LoadLock.LLTrayClaw.UnClamping");
}
public void UnLoadSeparate()
{
InvokeClient.Instance.Service.DoOperation($"UnLoad.Separate");
}
public void UnLoadLiftUp()
{
InvokeClient.Instance.Service.DoOperation($"UnLoad.UnLoadLift.MoveUp");
}
public void UnLoadLiftDown()
{
InvokeClient.Instance.Service.DoOperation($"UnLoad.UnLoadLift.MoveDown");
}
public void UnLoadWaferClamped()
{
InvokeClient.Instance.Service.DoOperation($"UnLoad.UnLoadWaferClaw.Clamping");
}
public void UnLoadWaferOpen()
{
InvokeClient.Instance.Service.DoOperation($"UnLoad.UnLoadWaferClaw.UnClamping");
}
[Subscription("LoadLock.LLLift.State")]
public string LLPinState
{
get;
set;
}
[Subscription("LoadLock.LLWaferClaw.State")]
public string LLWaferClawState
{
get;
set;
}
[Subscription("LoadLock.LLTrayClaw.State")]
public string LLTrayClawState
{
get;
set;
}
[Subscription("UnLoad.UnLoadLift.State")]
public string UnLoadPinState
{
get;
set;
}
[Subscription("UnLoad.UnLoadWaferClaw.State")]
public string UnLoadWaferClawState
{
get;
set;
}
public void CreateWafer(string cassName, string startSlotStr,string endSlotStr)
{
int startSlot = 0;
int endSlot = 0;
if (Int32.TryParse(startSlotStr, out startSlot) && Int32.TryParse(endSlotStr, out endSlot))
{
InvokeClient.Instance.Service.DoOperation($"{cassName}.CreateAll", startSlot, endSlot);
}
}
public void DeleteWafer(string cassName, string startSlotStr, string endSlotStr)
{
int startSlot = 0;
int endSlot = 0;
if (Int32.TryParse(startSlotStr, out startSlot) && Int32.TryParse(endSlotStr, out endSlot))
{
InvokeClient.Instance.Service.DoOperation($"{cassName}.DeleteAll", startSlot, endSlot);
}
}
#endregion
#region SlitValve
[Subscription("EFEM.UnLoadSubDoor.OpenFeedback")]
public bool UnLoadEfemDoorOpenFeedback { get; set; }
[Subscription("EFEM.UnLoadSubDoor.CloseFeedback")]
public bool UnLoadEfemDoorCloseFeedback { get; set; }
[Subscription("EFEM.LoadLockLSideDoor.OpenFeedback")]
public bool LLEfemLeftDoorOpenFeedback { get; set; }
[Subscription("EFEM.LoadLockLSideDoor.CloseFeedback")]
public bool LLEfemLeftDoorCloseFeedback { get; set; }
[Subscription("EFEM.LoadLockRSideDoor.OpenFeedback")]
public bool LLEfemRightDoorOpenFeedback { get; set; }
[Subscription("EFEM.LoadLockRSideDoor.CloseFeedback")]
public bool LLEfemRightDoorCloseFeedback { get; set; }
[Subscription("TM.LoadLockDoor.OpenFeedback")]
public bool LLDoorOpenFeedback { get; set; }
[Subscription("TM.LoadLockDoor.CloseFeedback")]
public bool LLDoorCloseFeedback { get; set; }
public bool IsEfemLLLeftDoorOpen => EfemLLLeftDoorState == FoupDoorState.Open ? true : false;
public bool IsEfemLLRightDoorOpen => EfemLLRightDoorState == FoupDoorState.Open ? true : false;
public bool IsEfemUnLoadDoorOpen => EfemUnLoadDoorState == FoupDoorState.Open ? true : false;
public bool IsLLDoorOpen => LLDoorState == FoupDoorState.Open ? true : false;
public bool IsEfemLLLeftDoorClose => EfemLLLeftDoorState == FoupDoorState.Close ? true : false;
public bool IsEfemLLRightDoorClose => EfemLLRightDoorState == FoupDoorState.Close ? true : false;
public bool IsEfemUnLoadDoorClose => EfemUnLoadDoorState == FoupDoorState.Close ? true : false;
public FoupDoorState EfemUnLoadDoorState
{
get
{
{
if (UnLoadEfemDoorOpenFeedback && !UnLoadEfemDoorCloseFeedback) return FoupDoorState.Open;
if (!UnLoadEfemDoorOpenFeedback && UnLoadEfemDoorCloseFeedback) return FoupDoorState.Close;
}
return FoupDoorState.Unknown;
}
}
public FoupDoorState EfemLLLeftDoorState
{
get
{
{
if (LLEfemLeftDoorOpenFeedback && !LLEfemLeftDoorCloseFeedback) return FoupDoorState.Open;
if (!LLEfemLeftDoorOpenFeedback && LLEfemLeftDoorCloseFeedback) return FoupDoorState.Close;
}
return FoupDoorState.Unknown;
}
}
public FoupDoorState EfemLLRightDoorState
{
get
{
{
if (LLEfemRightDoorOpenFeedback && !LLEfemRightDoorCloseFeedback) return FoupDoorState.Open;
if (!LLEfemRightDoorOpenFeedback && LLEfemRightDoorCloseFeedback) return FoupDoorState.Close;
}
return FoupDoorState.Unknown;
}
}
public FoupDoorState LLDoorState
{
get
{
{
if (LLDoorOpenFeedback && !LLDoorCloseFeedback) return FoupDoorState.Open;
if (!LLDoorOpenFeedback && LLDoorCloseFeedback) return FoupDoorState.Close;
}
return FoupDoorState.Unknown;
}
}
public void OpenSlitValve(string module, string robot)
{
InvokeClient.Instance.Service.DoOperation($"EFEM.OpenSlitValve", module, robot);
}
public void CloseSlitValve(string module, string robot)
{
InvokeClient.Instance.Service.DoOperation($"EFEM.CloseSlitValve", module, robot);
}
#endregion
#region Properties Load/UnLoad/Aligner
[Subscription("TM.LLPressure.FeedBack")]
public double LoadPressure { get; set; }
[Subscription("TM.UnLoadPressure.FeedBack")]
public double UnLoadPressure { get; set; }
[Subscription("LoadLock.LLLift.State")]
public string LLLift { get; set; }
[Subscription("UnLoad.UnLoadLift.State")]
public string UnLift { get; set; }
[Subscription("LoadLock.LLWaferClaw.State")]
public string LLWaferClaw { get; set; }
[Subscription("LoadLock.LLTrayClaw.State")]
public string LLTrayClaw { get; set; }
[Subscription("UnLoad.UnLoadWaferClaw.State")]
public string UnLoadWaferClaw { get; set; }
public bool IsLLLiftUp => LLLift == "Up";
public bool IsLLLiftDown => LLLift == "Down";
public bool IsULLiftUp => UnLift == "Up";
public bool IsULLiftDown => UnLift == "Down";
public bool IsLLWaferClamp => LLWaferClaw == "Clamp";
public bool IsLLWaferOpen => LLWaferClaw == "UnClamp";
public bool IsLLTrayClamp => LLTrayClaw == "Clamp";
public bool IsLLTrayOpen => LLTrayClaw == "UnClamp";
public bool IsULWaferClamp => UnLoadWaferClaw == "Clamp";
public bool IsULWaferOpen => UnLoadWaferClaw == "UnClamp";
[Subscription("TM.HiWinAligner.HaveWafer")]
public string AlignerHaveWafer { get; set; }
//设定马达激磁状态
public void Aligner_SME()
{
InvokeClient.Instance.Service.DoOperation($"TM.HiWinAligner.HwSME");
}
//原点复归
public void Aligner_HOM()
{
InvokeClient.Instance.Service.DoOperation($"TM.HiWinAligner.HwHOM");
}
//移至测量中心点
public void Aligner_MTM()
{
InvokeClient.Instance.Service.DoOperation($"TM.HiWinAligner.HwMTM");
}
//读取镭射侦测物件
public void Aligner_DOC()
{
InvokeClient.Instance.Service.DoOperation($"TM.HiWinAligner.HwDOC");
}
//开启真空
public void Aligner_CVN()
{
InvokeClient.Instance.Service.DoOperation($"TM.HiWinAligner.HwCVN");
}
//晶圆寻边与辅正
public void Aligner_BAL()
{
InvokeClient.Instance.Service.DoOperation($"TM.HiWinAligner.HwBAL");
}
//关闭真空
public void Aligner_CVF()
{
InvokeClient.Instance.Service.DoOperation($"TM.HiWinAligner.HwCVF");
}
//清除报警
public void Aligner_ERS()
{
InvokeClient.Instance.Service.DoOperation($"TM.HiWinAligner.HwERS");
}
public void Aligner_Abort()
{
InvokeClient.Instance.Service.DoOperation($"TM.HiWinAligner.HwAbort");
}
public void AlignerHomeRoutine()
{
InvokeClient.Instance.Service.DoOperation($"Aligner.Home");
}
public void AlignerAbortRoutine()
{
InvokeClient.Instance.Service.DoOperation($"Aligner.Abort");
}
public void AlignerAlignerRoutine()
{
InvokeClient.Instance.Service.DoOperation($"Aligner.Aligner");
}
[Subscription("EFEM.Status")]
public string EFEMStatus { get; set; }
public void EFEMHomeRoutine()
{
InvokeClient.Instance.Service.DoOperation($"EFEM.Home");
}
public void EFEMAbortRoutine()
{
InvokeClient.Instance.Service.DoOperation($"EFEM.Abort");
}
#endregion
}
}