using SA_LTT; using SA_LTT.Module; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; namespace SA_LTT_UI.Viewer { public partial class VisionViewer : Form { MainFrame _mainFrame; Thread t_UIUpdate; Dictionary recvAckDatas = new Dictionary(); bool updateCheck; public VisionViewer(MainFrame mainFrame) { InitializeComponent(); _mainFrame = mainFrame; InitializeData(); t_UIUpdate = new Thread(UIUpdateTh); t_UIUpdate.Start(); } private void InitializeData() { recvAckDatas.Add(VisionToControlCommand.VisionReadyAck, lb_VisionReady); recvAckDatas.Add(VisionToControlCommand.InspReadyEnd, lb_InspReadyEndAck); recvAckDatas.Add(VisionToControlCommand.WaferDetectionReadyAck, lb_WaferDetectionReady); recvAckDatas.Add(VisionToControlCommand.WaferDetectionReadyEnd, lb_WaferDetectionReadyEndAck); recvAckDatas.Add(VisionToControlCommand.WaferDetectionStartAck, lb_WaferDetectionStart); recvAckDatas.Add(VisionToControlCommand.WaferDetectionResult, lb_WaferDetectionResultAck); recvAckDatas.Add(VisionToControlCommand.RecipeChangeSwitchAck, lb_RecipeSwitch); recvAckDatas.Add(VisionToControlCommand.RecipeChangeUpdate, lb_RecipeUpdateAck); recvAckDatas.Add(VisionToControlCommand.Alarm, lb_AlarmAck); recvAckDatas.Add(VisionToControlCommand.AliveAck, lb_RequestAlive); } private void UIUpdateTh() { while (_mainFrame.equipment.IsDisposed == false) { Thread.Sleep(10); if (updateCheck == false) { updateCheck = true; UIUpdate(); } } } private void UIUpdate() { if (InvokeRequired) { BeginInvoke(new UIUpdateDelegate(UIUpdate)); return; } else { try { tb_Ip.Text = _mainFrame.equipment.visionControl.Ip.ToString(); tb_Port.Text = _mainFrame.equipment.visionControl.Port.ToString(); btn_Connection.BackColor = _mainFrame.equipment.visionControl.isConnected ? Color.Lime : Color.Red; btn_DisConnection.BackColor = _mainFrame.equipment.visionControl.isConnected ? Color.Red : Color.Lime; foreach (VisionToControlCommand command in recvAckDatas.Keys) { recvAckDatas[command].BackColor = _mainFrame.equipment.visionControl.CommnadAcks[command] ? Color.Lime : Color.Red; } tb_Result.Text = _mainFrame.equipment.visionControl.WaferDetectionResultValue.Result.ToString(); tb_ResultX.Text = _mainFrame.equipment.visionControl.WaferDetectionResultValue.ResultX.ToString(); tb_ResultY.Text = _mainFrame.equipment.visionControl.WaferDetectionResultValue.ResultY.ToString(); tb_ResultT.Text = _mainFrame.equipment.visionControl.WaferDetectionResultValue.ResultT.ToString(); } catch (Exception e) { EquipmentLogManager.Instance.WriteExceptionLog(e.StackTrace); } finally { updateCheck = false; } } } private void VisionViewer_FormClosing(object sender, FormClosingEventArgs e) { e.Cancel = true; this.Hide(); } private void btn_Close_Click(object sender, EventArgs e) { this.Hide(); } private void btn_VisionReady_Click(object sender, EventArgs e) { _mainFrame.equipment.visionControl.SendVisionReady(tb_RecipeName.Text); } private void btn_InspReadyEnd_Click(object sender, EventArgs e) { _mainFrame.equipment.visionControl.SendInspReadyEndAck(); } private void btn_WaferDetectionReady_Click(object sender, EventArgs e) { _mainFrame.equipment.visionControl.SendWaferDetectionReady(); } private void btn_WaferDetectionReadyEndAck_Click(object sender, EventArgs e) { _mainFrame.equipment.visionControl.SendWaferDetectionReadyEndAck(); } private void btn_WaferDetectionStart_Click(object sender, EventArgs e) { _mainFrame.equipment.visionControl.SendWaferDetectionStart(); } private void btn_WaferDetectionResultAck_Click(object sender, EventArgs e) { _mainFrame.equipment.visionControl.SendWaferDetectionResultAck(); } private void btn_RecipeSwitch_Click(object sender, EventArgs e) { _mainFrame.equipment.visionControl.SendRecipeSwitch(tb_RecipeName.Text); } private void btn_RecipeUpdateAck_Click(object sender, EventArgs e) { _mainFrame.equipment.visionControl.SendRecipeUpdateAck(); } private void btn_AlarmAck_Click(object sender, EventArgs e) { _mainFrame.equipment.visionControl.SendAlarmAck(); } private void btn_RequestAlive_Click(object sender, EventArgs e) { _mainFrame.equipment.visionControl.SendRequestAlive(); } } }