419 lines
11 KiB
C#
419 lines
11 KiB
C#
|
using System;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.Collections.ObjectModel;
|
|||
|
using System.Linq;
|
|||
|
using System.Text;
|
|||
|
using System.Threading.Tasks;
|
|||
|
using System.Windows;
|
|||
|
using Aitex.Core.RT.Log;
|
|||
|
using Caliburn.Micro;
|
|||
|
using MECF.Framework.Common.OperationCenter;
|
|||
|
using MECF.Framework.UI.Client.ClientBase;
|
|||
|
using OpenSEMI.Ctrlib.Controls;
|
|||
|
|
|||
|
namespace SicUI.Models
|
|||
|
{
|
|||
|
public class SicModuleUIViewModelBase : ModuleUiViewModelBase
|
|||
|
{
|
|||
|
|
|||
|
public ModuleInfo FOUPA { get; set; }
|
|||
|
public ModuleInfo FOUPB { get; set; }
|
|||
|
public ModuleInfo FOUPC { get; set; }
|
|||
|
public ModuleInfo FOUPD { get; set; }
|
|||
|
|
|||
|
public ModuleInfo EFEM { get; set; }
|
|||
|
|
|||
|
public ModuleInfo TMRobot { get; set; }
|
|||
|
|
|||
|
public ModuleInfo Buffer { get; set; }
|
|||
|
|
|||
|
public ModuleInfo PreHeat { get; set; }
|
|||
|
|
|||
|
|
|||
|
|
|||
|
public ModuleInfo PM1 { get; set; }
|
|||
|
public ModuleInfo PM2 { get; set; }
|
|||
|
|
|||
|
|
|||
|
#region Wafer info for machine
|
|||
|
public WaferInfo PreHeatWafer
|
|||
|
{
|
|||
|
get
|
|||
|
{
|
|||
|
if (ModuleManager.ModuleInfos["PreHeat"].WaferManager.Wafers.Count > 0)
|
|||
|
return ModuleManager.ModuleInfos["PreHeat"].WaferManager.Wafers[0];
|
|||
|
return null;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public WaferInfo BufferWafer
|
|||
|
{
|
|||
|
get
|
|||
|
{
|
|||
|
if (ModuleManager.ModuleInfos["Buffer"].WaferManager.Wafers.Count > 0)
|
|||
|
return ModuleManager.ModuleInfos["Buffer"].WaferManager.Wafers[0];
|
|||
|
return null;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public WaferInfo PM1Wafer
|
|||
|
{
|
|||
|
get
|
|||
|
{
|
|||
|
if (ModuleManager.ModuleInfos["PM1"].WaferManager.Wafers.Count > 0)
|
|||
|
return ModuleManager.ModuleInfos["PM1"].WaferManager.Wafers[0];
|
|||
|
return null;
|
|||
|
}
|
|||
|
}
|
|||
|
public WaferInfo PM2Wafer
|
|||
|
{
|
|||
|
get
|
|||
|
{
|
|||
|
if (ModuleManager.ModuleInfos["PM2"].WaferManager.Wafers.Count > 0)
|
|||
|
return ModuleManager.ModuleInfos["PM2"].WaferManager.Wafers[0];
|
|||
|
return null;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public WaferInfo Wafer1
|
|||
|
{
|
|||
|
get
|
|||
|
{
|
|||
|
if (ModuleManager.ModuleInfos["TMRobot"].WaferManager.Wafers.Count > 0)
|
|||
|
return ModuleManager.ModuleInfos["TMRobot"].WaferManager.Wafers[0];
|
|||
|
return null;
|
|||
|
}
|
|||
|
}
|
|||
|
public WaferInfo EfemRobotWafer1
|
|||
|
{
|
|||
|
get
|
|||
|
{
|
|||
|
if (ModuleManager.ModuleInfos["EfemRobot"].WaferManager.Wafers.Count > 0)
|
|||
|
return ModuleManager.ModuleInfos["EfemRobot"].WaferManager.Wafers[0];
|
|||
|
return null;
|
|||
|
}
|
|||
|
}
|
|||
|
public WaferInfo EfemRobotWafer2
|
|||
|
{
|
|||
|
get
|
|||
|
{
|
|||
|
if (ModuleManager.ModuleInfos["EfemRobot"].WaferManager.Wafers.Count > 1)
|
|||
|
return ModuleManager.ModuleInfos["EfemRobot"].WaferManager.Wafers[1];
|
|||
|
return null;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
#endregion
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
protected void InitFOUP()
|
|||
|
{
|
|||
|
FOUPA = ModuleManager.ModuleInfos["LP1"];
|
|||
|
FOUPB = ModuleManager.ModuleInfos["LP2"];
|
|||
|
FOUPC = ModuleManager.ModuleInfos["LP3"];
|
|||
|
}
|
|||
|
protected void InitBuffer()
|
|||
|
{
|
|||
|
Buffer = ModuleManager.ModuleInfos["Buffer"];
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
protected void InitPM()
|
|||
|
{
|
|||
|
PreHeat = ModuleManager.ModuleInfos["PreHeat"];
|
|||
|
TMRobot = ModuleManager.ModuleInfos["TMRobot"];
|
|||
|
PM1 = ModuleManager.ModuleInfos["PM1"];
|
|||
|
PM2 = ModuleManager.ModuleInfos["PM2"];
|
|||
|
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
public class SicUIViewModelBase : UiViewModelBase
|
|||
|
{
|
|||
|
public string SystemName { get; set; }
|
|||
|
|
|||
|
public ModuleInfo FOUPA { get; set; }
|
|||
|
public ModuleInfo FOUPB { get; set; }
|
|||
|
public ModuleInfo FOUPC { get; set; }
|
|||
|
public ModuleInfo FOUPD { get; set; }
|
|||
|
public ModuleInfo TMRobot { get; set; }
|
|||
|
public ModuleInfo EFEM { get; set; }
|
|||
|
|
|||
|
public ModuleInfo Buffer { get; set; }
|
|||
|
|
|||
|
public ModuleInfo PreHeat { get; set; }
|
|||
|
|
|||
|
|
|||
|
public ModuleInfo LoadLock { get; set; }
|
|||
|
public ModuleInfo PM1 { get; set; }
|
|||
|
public ModuleInfo PM2 { get; set; }
|
|||
|
|
|||
|
|
|||
|
#region Wafer info for machine
|
|||
|
public WaferInfo LoadLockWafer
|
|||
|
{
|
|||
|
get
|
|||
|
{
|
|||
|
if (ModuleManager.ModuleInfos["LoadLock"].WaferManager.Wafers.Count > 0)
|
|||
|
return ModuleManager.ModuleInfos["LoadLock"].WaferManager.Wafers[0];
|
|||
|
|
|||
|
return null;
|
|||
|
}
|
|||
|
}
|
|||
|
public WaferInfo LLAWafer1
|
|||
|
{
|
|||
|
get
|
|||
|
{
|
|||
|
|
|||
|
return null;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public WaferInfo LLAWafer2
|
|||
|
{
|
|||
|
get
|
|||
|
{
|
|||
|
|
|||
|
return null;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public WaferInfo LLBWafer1
|
|||
|
{
|
|||
|
get
|
|||
|
{
|
|||
|
|
|||
|
return null;
|
|||
|
}
|
|||
|
}
|
|||
|
public WaferInfo LLBWafer2
|
|||
|
{
|
|||
|
get
|
|||
|
{
|
|||
|
|
|||
|
return null;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public WaferInfo BufferWafer
|
|||
|
{
|
|||
|
get
|
|||
|
{
|
|||
|
if (ModuleManager.ModuleInfos["Buffer"].WaferManager.Wafers.Count > 0)
|
|||
|
return ModuleManager.ModuleInfos["Buffer"].WaferManager.Wafers[0];
|
|||
|
return null;
|
|||
|
}
|
|||
|
}
|
|||
|
public WaferInfo PreHeatWafer
|
|||
|
{
|
|||
|
get
|
|||
|
{
|
|||
|
if (ModuleManager.ModuleInfos["PreHeat"].WaferManager.Wafers.Count > 0)
|
|||
|
return ModuleManager.ModuleInfos["PreHeat"].WaferManager.Wafers[0];
|
|||
|
return null;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public WaferInfo PM1Wafer
|
|||
|
{
|
|||
|
get
|
|||
|
{
|
|||
|
if (ModuleManager.ModuleInfos["PM1"].WaferManager.Wafers.Count > 0)
|
|||
|
return ModuleManager.ModuleInfos["PM1"].WaferManager.Wafers[0];
|
|||
|
return null;
|
|||
|
}
|
|||
|
}
|
|||
|
public WaferInfo PM2Wafer
|
|||
|
{
|
|||
|
get
|
|||
|
{
|
|||
|
if (ModuleManager.ModuleInfos["PM2"].WaferManager.Wafers.Count > 0)
|
|||
|
return ModuleManager.ModuleInfos["PM2"].WaferManager.Wafers[0];
|
|||
|
return null;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public WaferInfo Wafer1
|
|||
|
{
|
|||
|
get
|
|||
|
{
|
|||
|
if (ModuleManager.ModuleInfos["TMRobot"].WaferManager.Wafers.Count > 0)
|
|||
|
return ModuleManager.ModuleInfos["TMRobot"].WaferManager.Wafers[0];
|
|||
|
return null;
|
|||
|
}
|
|||
|
}
|
|||
|
public WaferInfo PM3Wafer
|
|||
|
{
|
|||
|
get
|
|||
|
{
|
|||
|
|
|||
|
return null;
|
|||
|
}
|
|||
|
}
|
|||
|
public WaferInfo PM4Wafer
|
|||
|
{
|
|||
|
get
|
|||
|
{
|
|||
|
|
|||
|
return null;
|
|||
|
}
|
|||
|
}
|
|||
|
public WaferInfo PM5Wafer
|
|||
|
{
|
|||
|
get
|
|||
|
{
|
|||
|
|
|||
|
return null;
|
|||
|
}
|
|||
|
}
|
|||
|
public WaferInfo PM6Wafer
|
|||
|
{
|
|||
|
get
|
|||
|
{
|
|||
|
|
|||
|
return null;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public WaferInfo AlignerWafer
|
|||
|
{
|
|||
|
get
|
|||
|
{
|
|||
|
|
|||
|
return null;
|
|||
|
}
|
|||
|
}
|
|||
|
public WaferInfo EfemRobotWafer1
|
|||
|
{
|
|||
|
get
|
|||
|
{
|
|||
|
if (ModuleManager.ModuleInfos["EfemRobot"].WaferManager.Wafers.Count > 0)
|
|||
|
return ModuleManager.ModuleInfos["EfemRobot"].WaferManager.Wafers[0];
|
|||
|
return null;
|
|||
|
}
|
|||
|
}
|
|||
|
public WaferInfo EfemRobotWafer2
|
|||
|
{
|
|||
|
get
|
|||
|
{
|
|||
|
if (ModuleManager.ModuleInfos["EfemRobot"].WaferManager.Wafers.Count > 1)
|
|||
|
return ModuleManager.ModuleInfos["EfemRobot"].WaferManager.Wafers[1];
|
|||
|
return null;
|
|||
|
}
|
|||
|
}
|
|||
|
public WaferInfo TMRobotWafer1
|
|||
|
{
|
|||
|
get
|
|||
|
{
|
|||
|
if (ModuleManager.ModuleInfos["TMRobot"].WaferManager.Wafers.Count > 0)
|
|||
|
return ModuleManager.ModuleInfos["TMRobot"].WaferManager.Wafers[0];
|
|||
|
return null;
|
|||
|
}
|
|||
|
}
|
|||
|
public WaferInfo TMRobotWafer2
|
|||
|
{
|
|||
|
get
|
|||
|
{
|
|||
|
|
|||
|
return null;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
#endregion
|
|||
|
|
|||
|
|
|||
|
protected void InitTM()
|
|||
|
{
|
|||
|
TMRobot = ModuleManager.ModuleInfos["TMRobot"];
|
|||
|
}
|
|||
|
|
|||
|
protected void InitLL()
|
|||
|
{
|
|||
|
LoadLock = ModuleManager.ModuleInfos["LoadLock"];
|
|||
|
}
|
|||
|
|
|||
|
protected void InitEFEM()
|
|||
|
{
|
|||
|
EFEM = ModuleManager.ModuleInfos["EfemRobot"];
|
|||
|
}
|
|||
|
|
|||
|
protected void InitFOUP()
|
|||
|
{
|
|||
|
FOUPA = ModuleManager.ModuleInfos["LP1"];
|
|||
|
FOUPB = ModuleManager.ModuleInfos["LP2"];
|
|||
|
FOUPC = ModuleManager.ModuleInfos["LP3"];
|
|||
|
FOUPD = ModuleManager.ModuleInfos["LP4"];
|
|||
|
}
|
|||
|
protected void InitBuffer()
|
|||
|
{
|
|||
|
Buffer = ModuleManager.ModuleInfos["Buffer"];
|
|||
|
}
|
|||
|
|
|||
|
protected void InitPM()
|
|||
|
{
|
|||
|
PreHeat = ModuleManager.ModuleInfos["PreHeat"];
|
|||
|
PM1 = ModuleManager.ModuleInfos["PM1"];
|
|||
|
PM2 = ModuleManager.ModuleInfos["PM2"];
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
public override void OnWaferTransfer(DragDropEventArgs args)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
TransferWafer(args.TranferFrom, args.TranferTo);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LOG.Write(ex);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
public void TransferWafer(Slot p_from, Slot p_to)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
if (p_from == null || p_to == null || !p_from.IsValidSlot() || !p_to.IsValidSlot())
|
|||
|
return;
|
|||
|
|
|||
|
//DialogButton btns = DialogButton.Transfer | DialogButton.Cancel;
|
|||
|
string info = " from " + p_from.ModuleID + " to " + p_to.ModuleID ;
|
|||
|
string message = "Are you sure to transfer the wafer: \n" + info;
|
|||
|
|
|||
|
|
|||
|
WindowManager wm = new WindowManager();
|
|||
|
WaferTransferDialogViewModel _transferVM = new WaferTransferDialogViewModel(message, false, false, false);
|
|||
|
_transferVM.AlignerVisibility = Visibility.Hidden;
|
|||
|
_transferVM.CoolingVisibility = Visibility.Hidden;
|
|||
|
_transferVM.BladeVisibility = Visibility.Hidden;
|
|||
|
bool? bret = wm.ShowDialogWithNoStyle(_transferVM);
|
|||
|
if ((bool)bret)
|
|||
|
{
|
|||
|
//get and use transfer conditions
|
|||
|
WaferTransferCondition conditions = _transferVM.DialogResult;
|
|||
|
|
|||
|
InvokeClient.Instance.Service.DoOperation("System.MoveWafer",
|
|||
|
p_from.ModuleID, p_from.SlotID, p_to.ModuleID, p_to.SlotID,
|
|||
|
conditions.IsPassAligner, conditions.AlignerAngle, conditions.IsPassCooling, conditions.CoolingTime, (int)conditions.Blade);
|
|||
|
}
|
|||
|
|
|||
|
p_from.ClearDragDropStatus();
|
|||
|
p_to.ClearDragDropStatus();
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LOG.Write(ex);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
}
|