using SA_LTT;
|
using SA_LTT.Info.RecipeInfo;
|
using SA_LTT.Info.WaferInfo;
|
using System;
|
using System.Collections.Generic;
|
using System.Drawing;
|
using System.Threading;
|
using System.Windows.Forms;
|
using static SA_LTT.Info.WaferInfo.WaferInfoManager;
|
|
namespace SA_LTT_UI.Viewer
|
{
|
public partial class WaferInfoViewer : Form
|
{
|
MainFrame _mainFrame;
|
Thread t_UIUpdate;
|
|
private List<Label> Port1Labels = new List<Label>();
|
private List<Label> Port2Labels = new List<Label>();
|
|
WaferNumbers currentWaferNumber = WaferNumbers.A1;
|
|
bool updateCheck;
|
protected override CreateParams CreateParams
|
{
|
get
|
{
|
CreateParams MyCp = base.CreateParams;
|
MyCp.ExStyle |= 0x02000000;
|
|
return MyCp;
|
}
|
}
|
|
public WaferInfoViewer(MainFrame mainFrame)
|
{
|
InitializeComponent();
|
|
_mainFrame = mainFrame;
|
|
InitializeUI();
|
|
t_UIUpdate = new Thread(UIUpdateTh);
|
t_UIUpdate.Start();
|
}
|
|
private void InitializeUI()
|
{
|
flpnl_Port1.Controls.Clear();
|
flpnl_Port2.Controls.Clear();
|
|
Port1Labels.Clear();
|
Port2Labels.Clear();
|
|
for (int i = 0 ; i < 25; i ++)
|
{
|
Label label = new Label();
|
label.BorderStyle = BorderStyle.FixedSingle;
|
label.Size = new Size(205, 23);
|
label.TabIndex = 4;
|
label.Text = $"{WaferNumbers.A1 + i}";
|
label.TextAlign = ContentAlignment.MiddleCenter;
|
label.Click += Label_Click;
|
Port1Labels.Add(label);
|
}
|
|
for (int i = 0; i < 25; i++)
|
{
|
Label label = new Label();
|
label.BorderStyle = BorderStyle.FixedSingle;
|
label.Size = new Size(205, 23);
|
label.TabIndex = 4;
|
label.Text = $"{WaferNumbers.B1 + i}";
|
label.TextAlign = ContentAlignment.MiddleCenter;
|
label.Click += Label_Click;
|
Port2Labels.Add(label);
|
}
|
|
for (int i = 0; i < 25; i++)
|
{
|
flpnl_Port1.Controls.Add(Port1Labels[24 - i]);
|
flpnl_Port2.Controls.Add(Port2Labels[24 - i]);
|
}
|
|
//Wafer Number ComboBoxSet
|
cbb_WaferNumbers.Items.Clear();
|
|
foreach(WaferNumbers waferNumber in Enum.GetValues(typeof(WaferNumbers)))
|
{
|
cbb_WaferNumbers.Items.Add(waferNumber);
|
}
|
|
cbb_WaferNumbers.SelectedIndex = 0;
|
|
//WaferStatus ComboBoxSet
|
cbb_AfterStatus.Items.Clear();
|
foreach (WaferInfo.WaferStatus waferStatus in Enum.GetValues(typeof(WaferInfo.WaferStatus)))
|
{
|
cbb_AfterStatus.Items.Add(waferStatus);
|
}
|
cbb_AfterStatus.SelectedIndex = 0;
|
|
//SourceNumber ComboBoxSet
|
cbb_AfterSourceNum.Items.Clear();
|
foreach (WaferNumbers waferNumber in Enum.GetValues(typeof(WaferNumbers)))
|
{
|
if(waferNumber < WaferNumbers.Robot)
|
cbb_AfterSourceNum.Items.Add(waferNumber);
|
}
|
cbb_AfterSourceNum.SelectedIndex = 0;
|
|
|
cbb_AfterIsProcessComplete.Items.Clear();
|
cbb_AfterIsProcessComplete.Items.Add("Complete");
|
cbb_AfterIsProcessComplete.Items.Add("NonComplete");
|
cbb_AfterIsProcessComplete.SelectedIndex = 0;
|
|
cbb_AfterIsFlip.Items.Clear();
|
cbb_AfterIsFlip.Items.Add("Flip");
|
cbb_AfterIsFlip.Items.Add("NonFlip");
|
cbb_AfterIsFlip.SelectedIndex = 0;
|
|
cbb_AfterRecipeName.Items.Clear();
|
cbb_AfterRecipeName.Items.Add("");
|
foreach (Recipe recipe in _mainFrame.equipment.recipeManager.GetRecipeList())
|
{
|
cbb_AfterRecipeName.Items.Add(recipe.Name);
|
}
|
cbb_AfterRecipeName.SelectedIndex = 0;
|
|
gb_RobotInfo.Click += Gb_Click;
|
gb_ChamberInfo.Click += Gb_Click;
|
gb_AlignerInfo.Click += Gb_Click;
|
}
|
|
private void Label_Click(object sender, EventArgs e)
|
{
|
Label label = (Label)sender;
|
WaferNumbers waferNumber = WaferNumbers.A1;
|
|
if(Enum.TryParse(label.Text, out waferNumber))
|
{
|
SetCurrentWaferInfo(waferNumber);
|
}
|
}
|
|
private void Gb_Click(object sender, EventArgs e)
|
{
|
GroupBox gb = (GroupBox)sender;
|
|
if (gb.Name == "gb_RobotInfo")
|
{
|
SetCurrentWaferInfo(WaferNumbers.Robot);
|
}
|
else if (gb.Name == "gb_ChamberInfo")
|
{
|
SetCurrentWaferInfo(WaferNumbers.Chamber);
|
}
|
else if (gb.Name == "gb_AlignerInfo")
|
{
|
SetCurrentWaferInfo(WaferNumbers.PreAligner);
|
}
|
}
|
|
private void SetCurrentWaferInfo(WaferNumbers waferNumber)
|
{
|
currentWaferNumber = waferNumber;
|
cbb_WaferNumbers.Text = waferNumber.ToString();
|
|
WaferInfo info = _mainFrame.equipment.waferInfoManager.GetWaferInfo(currentWaferNumber).Clone();
|
|
cbb_AfterStatus.Text = info.IsStatus.ToString();
|
|
tb_AfterCarrierID.Text = info.CarrierID;
|
tb_AfterLotID.Text = info.LotID;
|
cbb_AfterSourceNum.Text = info.SourceNumber.ToString();
|
|
cbb_AfterIsProcessComplete.Text = info.IsProcessComplete ? "Complete" : "NonComplete";
|
cbb_AfterIsFlip.Text = info.IsFlip ? "Flip" : "NonFlip";
|
|
cbb_AfterRecipeName.Items.Clear();
|
cbb_AfterRecipeName.Items.Add("");
|
foreach (Recipe recipe in _mainFrame.equipment.recipeManager.GetRecipeList())
|
{
|
cbb_AfterRecipeName.Items.Add(recipe.Name);
|
}
|
cbb_AfterRecipeName.Text = info.RecipeName;
|
}
|
|
private void UIUpdateTh()
|
{
|
while (_mainFrame.equipment.IsDisposed == false)
|
{
|
Thread.Sleep(10);
|
|
if (updateCheck == false)
|
{
|
updateCheck = true;
|
UIUpdate();
|
}
|
}
|
}
|
|
public void UIUpdate()
|
{
|
if (InvokeRequired)
|
{
|
BeginInvoke(new UIUpdateDelegate(UIUpdate));
|
return;
|
}
|
else
|
{
|
try
|
{
|
UpdatePort1();
|
UpdatePort2();
|
UpdateModule();
|
UpdateWaferInfo();
|
|
if (_mainFrame.equipment.ProcessStatus != ProcessStatus.Execute)
|
{
|
if (groupBox1.Enabled == false)
|
{
|
groupBox1.Enabled = true;
|
}
|
}
|
else
|
{
|
if (groupBox1.Enabled)
|
{
|
groupBox1.Enabled = false;
|
}
|
}
|
}
|
catch (Exception e)
|
{
|
EquipmentLogManager.Instance.WriteExceptionLog(e.StackTrace);
|
}
|
finally
|
{
|
updateCheck = false;
|
}
|
}
|
}
|
|
private void UpdatePort1()
|
{
|
WaferNumbers waferNumber = WaferNumbers.A1;
|
|
for (int i = 0; i < 25; i++)
|
{
|
WaferInfo info = _mainFrame.equipment.waferInfoManager.GetWaferInfo(waferNumber + i).Clone();
|
if (info.IsStatus == WaferInfo.WaferStatus.Exist)
|
{
|
Port1Labels[i].BackColor = Color.Lime;
|
}
|
else if (info.IsStatus == WaferInfo.WaferStatus.Empty)
|
{
|
Port1Labels[i].BackColor = Color.White;
|
}
|
else
|
{
|
Port1Labels[i].BackColor = Color.Red;
|
}
|
}
|
}
|
|
private void UpdatePort2()
|
{
|
WaferNumbers waferNumber = WaferNumbers.B1;
|
|
for (int i = 0; i < 25; i++)
|
{
|
WaferInfo info = _mainFrame.equipment.waferInfoManager.GetWaferInfo(waferNumber + i).Clone();
|
if (info.IsStatus == WaferInfo.WaferStatus.Exist)
|
{
|
Port2Labels[i].BackColor = Color.Lime;
|
}
|
else if (info.IsStatus == WaferInfo.WaferStatus.Empty)
|
{
|
Port2Labels[i].BackColor = Color.White;
|
}
|
else
|
{
|
Port2Labels[i].BackColor = Color.Red;
|
}
|
}
|
}
|
|
private void UpdateModule()
|
{
|
lb_RobotRun.BackColor = _mainFrame.equipment.robot.IsRun ? Color.Lime : Color.Red;
|
lb_RobotWaferExist.BackColor = _mainFrame.equipment.waferInfoManager.GetWaferInfo(WaferNumbers.Robot).IsStatus == WaferInfo.WaferStatus.Exist ? Color.Lime : Color.Red;
|
lb_RobotWaferExistIo.BackColor = _mainFrame.equipment.robot.IsWaferExist ? Color.Lime : Color.Red;
|
|
lb_IsAlignRun.BackColor = _mainFrame.equipment.preAligner.IsAlignRun ? Color.Lime : Color.Red;
|
lb_AlignerWaferExist.BackColor = _mainFrame.equipment.waferInfoManager.GetWaferInfo(WaferNumbers.PreAligner).IsStatus == WaferInfo.WaferStatus.Exist ? Color.Lime : Color.Red;
|
lb_AlignerWaferExistIo.BackColor = _mainFrame.equipment.preAligner.IsWaferExist ? Color.Lime : Color.Red;
|
|
lb_ChamberVacuumOn.BackColor = _mainFrame.equipment.crevis.DigitalInputs[SA_LTT.Module.Crevis.DigitalInput.CMB_VACUUM_PRESSURE] ? Color.Lime : Color.Red;
|
lb_ChamberWaferExist.BackColor = _mainFrame.equipment.waferInfoManager.GetWaferInfo(WaferNumbers.Chamber).IsStatus == WaferInfo.WaferStatus.Exist ? Color.Lime : Color.Red;
|
}
|
|
private void UpdateWaferInfo()
|
{
|
WaferInfo info = _mainFrame.equipment.waferInfoManager.GetWaferInfo(currentWaferNumber).Clone();
|
|
tb_Status.Text = info.IsStatus.ToString();
|
tb_CarrierID.Text = info.CarrierID;
|
tb_LotID.Text = info.LotID;
|
tb_SourceNum.Text = info.SourceNumber.ToString();
|
tb_IsProcessComplete.Text = info.IsProcessComplete ? "Complete" : "NonComplete";
|
tb_IsFlip.Text = info.IsFlip ? "Flip" : "NonFlip";
|
tb_RecipeName.Text = info.RecipeName;
|
}
|
|
private void btn_Port1Clear_Click(object sender, EventArgs e)
|
{
|
WaferInfo waferInfo = new WaferInfo();
|
WaferNumbers waferNumber = WaferNumbers.A1;
|
|
for (int i = 0; i < 25; i++)
|
{
|
waferInfo.SourceNumber = waferNumber + i;
|
_mainFrame.equipment.waferInfoManager.SetWaferInfo(waferNumber + i, waferInfo.Clone());
|
}
|
}
|
|
private void btn_Port2Clear_Click(object sender, EventArgs e)
|
{
|
WaferInfo waferInfo = new WaferInfo();
|
WaferNumbers waferNumber = WaferNumbers.B1;
|
|
for (int i = 0; i < 25; i++)
|
{
|
waferInfo.SourceNumber = waferNumber + i;
|
|
_mainFrame.equipment.waferInfoManager.SetWaferInfo(waferNumber + i , waferInfo.Clone());
|
}
|
}
|
|
private void WaferInfoViewer_FormClosing(object sender, FormClosingEventArgs e)
|
{
|
e.Cancel = true;
|
this.Hide();
|
}
|
|
private void btn_WaferInfoClear_Click(object sender, EventArgs e)
|
{
|
if (MessageBox.Show("데이터를 초기화 하시겠습니까?", "확인", MessageBoxButtons.YesNo) == DialogResult.Yes)
|
{
|
WaferInfo waferInfo = new WaferInfo();
|
|
EquipmentLogManager.Instance.WriteButtonLog($"{this.Name} : {((Control)sender).Text}");
|
_mainFrame.equipment.waferInfoManager.SetWaferInfo(currentWaferNumber, waferInfo.Clone());
|
|
SetCurrentWaferInfo(currentWaferNumber);
|
}
|
}
|
|
private void cbb_WaferNumbers_SelectedIndexChanged(object sender, EventArgs e)
|
{
|
WaferNumbers waferNumber = WaferNumbers.A1;
|
|
if (Enum.TryParse(cbb_WaferNumbers.Text, out waferNumber))
|
{
|
SetCurrentWaferInfo(waferNumber);
|
}
|
}
|
|
private void btn_Cancel_Click(object sender, EventArgs e)
|
{
|
if (MessageBox.Show("취소 하시겠습니까?", "확인", MessageBoxButtons.YesNo) == DialogResult.Yes)
|
{
|
SetCurrentWaferInfo(currentWaferNumber);
|
}
|
}
|
|
private void btn_Save_Click(object sender, EventArgs e)
|
{
|
if (MessageBox.Show("적용 하시겠습니까?", "확인", MessageBoxButtons.YesNo) == DialogResult.Yes)
|
{
|
WaferInfo info = _mainFrame.equipment.waferInfoManager.GetWaferInfo(currentWaferNumber);
|
|
WaferInfo.WaferStatus waferStatus = WaferInfo.WaferStatus.Empty;
|
string carrierId = string.Empty;
|
string lotId = string.Empty;
|
WaferNumbers waferNumber = WaferNumbers.A1;
|
bool isProcessComplete = false;
|
bool isFlip = false;
|
string recipeName = string.Empty;
|
|
if(Enum.TryParse(cbb_AfterStatus.Text, out waferStatus) == false)
|
{
|
MessageBox.Show("Status 값을 확인해 주세요");
|
return;
|
}
|
|
carrierId = tb_AfterCarrierID.Text;
|
lotId = tb_AfterLotID.Text;
|
|
if (Enum.TryParse(cbb_AfterSourceNum.Text, out waferNumber) == false)
|
{
|
MessageBox.Show("Source Num 값을 확인해 주세요");
|
return;
|
}
|
|
isFlip = cbb_AfterIsFlip.SelectedIndex == 0;
|
isProcessComplete = cbb_AfterIsProcessComplete.SelectedIndex == 0;
|
recipeName = cbb_AfterRecipeName.Text;
|
|
info.IsStatus = waferStatus;
|
info.CarrierID = carrierId;
|
info.LotID = lotId;
|
info.SourceNumber = waferNumber;
|
info.IsProcessComplete = isProcessComplete;
|
info.IsFlip = isFlip;
|
info.RecipeName = recipeName;
|
|
_mainFrame.equipment.waferInfoManager.SetWaferInfo(currentWaferNumber, info);
|
|
SetCurrentWaferInfo(currentWaferNumber);
|
}
|
}
|
}
|
}
|