using Rs.Camera; using Rs.Controls; using Rs.DataAccess; using Rs.Framework; using Rs.Motion.Base; using Rs.MotionPlat.Commom; using Rs.MotionPlat.Entitys; using Rs.MotionPlat.Entitys.Trays; using Rs.MotionPlat.Flow; using Rs.MotionPlat.Flow.SafePosFlow; using Rs.MotionPlat.Flow.SubFlow; using Rs.MotionPlat.SysConfig; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; namespace Rs.MotionPlat { public partial class FormMain : BaseForm { public FormMain() { InitializeComponent(); DischargeFlow.Instance.workFinishedEvent += () => { Invoke(new Action(() => { GlobalVar.Clear = false; switchButton1.Checked = true; })); }; DischargeFlow.Instance.CleanDataEvent += () => { btnClearData.PerformClick(); }; GrrFlow.Instance.CleanDataEvent += () => { btnClearData.PerformClick(); }; } private void timer1_Tick(object sender, EventArgs e) { if(!string.IsNullOrEmpty(GlobalUser.UserName)) { if (tableLayoutPanel2.Enabled==false) { if(!GlobalUser.IsPm()) { tableLayoutPanel2.Enabled = true; } } if (cboxTestMode.Enabled==false) { cboxTestMode.Items.Clear(); if (GlobalUser.IsOp()) { cboxTestMode.Items.Add("Production"); cboxTestMode.Items.Add("REL"); //cboxTestMode.SelectedIndex = 0; } else if(GlobalUser.IsAudit()) { cboxTestMode.Items.Add("GRR"); cboxTestMode.Items.Add("AUDIT"); //cboxTestMode.SelectedIndex = 0; } else if(GlobalUser.IsSuper()||GlobalUser.IsVender()) { cboxTestMode.Items.Add("Production"); cboxTestMode.Items.Add("GRR"); cboxTestMode.Items.Add("AUDIT"); cboxTestMode.Items.Add("REL"); cboxTestMode.Items.Add("DOE"); //cboxTestMode.SelectedIndex = 0; } cboxTestMode.Enabled = true; } if(cboxTestMethod.Enabled==false) cboxTestMethod.Enabled = true; if(txtLotName.Enabled==false) txtLotName.Enabled = true; if(cboxMtcp.Enabled==false) cboxMtcp.Enabled = true; if (cboxNoise.Enabled == false) cboxNoise.Enabled = true; if (cboxTestMode.SelectedItem != null && (cboxTestMode.SelectedItem.ToString() == "GRR" || cboxTestMode.SelectedItem.ToString() == "AUDIT")) { if (txtGrrProductNum.Enabled == false) txtGrrProductNum.Enabled = true; if (txtGrrTestNum.Enabled == false) txtGrrTestNum.Enabled = true; } } else { if (MachineManage.Instance.MachineStatus == EMachineStatus.Working) { Ops.Stop(); } if (tableLayoutPanel2.Enabled) { tableLayoutPanel2.Enabled = false; } if (cboxTestMode.Enabled == true) { cboxTestMode.Items.Clear(); cboxTestMode.Enabled = false; } if (cboxTestMethod.Enabled == true) cboxTestMethod.Enabled = false; if (txtLotName.Enabled == true) txtLotName.Enabled = false; if (cboxMtcp.Enabled) cboxMtcp.Enabled = false; if(cboxNoise.Enabled) cboxNoise.Enabled = false; if (txtGrrProductNum.Enabled) txtGrrProductNum.Enabled = false; if (txtGrrTestNum.Enabled) txtGrrTestNum.Enabled = false; } if(Ops.IsOutOn("照明灯") ) { if(btnLight.BackColor != Color.Lime) { btnLight.BackColor = Color.Lime; } } else { btnLight.BackColor = Color.FromArgb(56, 56, 56); } //获取运行信息 while (MessageQueue.Instance.HaveMessage()) { MessageItem runInfo = MessageQueue.Instance.GetMessage(); if (runInfo != null) { //while (dgv_runinfo.Rows.Count > 500) //{ // dgv_runinfo.Rows.RemoveAt(dgv_runinfo.Rows.Count - 1); //} //dgv_runinfo.Rows.Insert(0, runInfo.Time, runInfo.Content); } MessageItem errorInfo = MessageQueue.Instance.GetWarn(); if (errorInfo != null) { //while (dgv_errinfo.Rows.Count > 500) //{ // dgv_errinfo.Rows.RemoveAt(dgv_errinfo.Rows.Count - 1); //} //dgv_errinfo.Rows.Insert(0, errorInfo.Time, errorInfo.Content); } } if(MachineManage.Instance.MachineStatus== EMachineStatus.Working) { if (btnWholeHome.Visible == true) btnWholeHome.Visible = false; } else { if (btnWholeHome.Visible == false) btnWholeHome.Visible = true; } } private void FormMain_Load(object sender, EventArgs e) { tabControlEx1.TabPages.RemoveAt(1); SqliteHelper db = new SqliteHelper(); string querySql = "select * from NormalTray"; DataTable dt = db.GetDataTable(querySql); if (dt != null && dt.Rows.Count > 0) { DataRow dr = dt.AsEnumerable().Where(r => r.Field("TrayName") == "Ng").First(); if (dr != null) { trayNg.ColumnNum = int.Parse(dr["ColumnNum"].ToString()); trayNg.RowNum = int.Parse(dr["RowNum"].ToString()); } dr = dt.AsEnumerable().Where(r => r.Field("TrayName") == "ReTest").First(); if (dr != null) { trayReTest.ColumnNum = int.Parse(dr["ColumnNum"].ToString()); trayReTest.RowNum = int.Parse(dr["RowNum"].ToString()); } dr = dt.AsEnumerable().Where(r => r.Field("TrayName") == "Grr").First(); if (dr != null) { trayGrr.ColumnNum = int.Parse(dr["ColumnNum"].ToString()); trayGrr.RowNum = int.Parse(dr["RowNum"].ToString()); } dr = dt.AsEnumerable().Where(r => r.Field("TrayName") == "Ok").First(); if (dr != null) { trayOk.ColumnNum = int.Parse(dr["ColumnNum"].ToString()); trayOk.RowNum = int.Parse(dr["RowNum"].ToString()); } dr = dt.AsEnumerable().Where(r => r.Field("TrayName") == "Input").First(); if (dr != null) { trayInput.ColumnNum = int.Parse(dr["ColumnNum"].ToString()); trayInput.RowNum = int.Parse(dr["RowNum"].ToString()); } //dr = dt.AsEnumerable().Where(r => r.Field("TrayName") == "Grab").First(); //if (dr != null) //{ // trayGrab.ColumnNum = int.Parse(dr["ColumnNum"].ToString()); // trayGrab.RowNum = int.Parse(dr["RowNum"].ToString()); //} } timer1.Interval = 500; timer1.Enabled = true; timer2.Interval = 200; timer2.Enabled = true; trayNg.ItemName = "Empty1"; trayReTest.ItemName = "Input"; trayGrr.ItemName = "Ok"; trayOk.ItemName = "Ng"; trayInput.ItemName = "Multi"; trayNg.InitSlotStatus = ESlotStatus.NotHave; trayReTest.InitSlotStatus = ESlotStatus.NotHave; trayGrr.InitSlotStatus = ESlotStatus.NotHave; trayOk.InitSlotStatus = ESlotStatus.NotHave; trayInput.InitSlotStatus = ESlotStatus.NotHave; GlobalTray.NgTray = trayNg; GlobalTray.RetestTray = trayReTest; GlobalTray.GrrTray=trayGrr; GlobalTray.OkTary = trayOk ; GlobalTray.InputTray = trayInput; //GlobalTray.GrabTray = trayGrab; GlobalTray.NozzleTray = trayNozzle ; //StockManager.Instance.Start(); LoadStockStatus(); if(GlobalVar.Clear==false) { switchButton1.Checked = true; } //uTestCell1.BindEntity(TestFixtureManager.Instance.GetTestFixture(1)); //uTestCell2.BindEntity(TestFixtureManager.Instance.GetTestFixture(2)); //uTestCell3.BindEntity(TestFixtureManager.Instance.GetTestFixture(3)); //uTestCell4.BindEntity(TestFixtureManager.Instance.GetTestFixture(4)); //uTestCell5.BindEntity(TestFixtureManager.Instance.GetTestFixture(5)); //uTestCell6.BindEntity(TestFixtureManager.Instance.GetTestFixture(6)); //PositionHelper.BindSinglePosition(txtLotName,"string"); for(int i=1;i<=6;i++) { switch (i) { case 1: TestFixtureManager.Instance.GetTestFixture(i).Enable = GlobalVar.EnableTC1; break; case 2: TestFixtureManager.Instance.GetTestFixture(i).Enable = GlobalVar.EnableTC2; break; case 3: TestFixtureManager.Instance.GetTestFixture(i).Enable = GlobalVar.EnableTC3; break; case 4: TestFixtureManager.Instance.GetTestFixture(i).Enable = GlobalVar.EnableTC4; break; case 5: TestFixtureManager.Instance.GetTestFixture(i).Enable = GlobalVar.EnableTC5; break; case 6: TestFixtureManager.Instance.GetTestFixture(i).Enable = GlobalVar.EnableTC6; break; } } timertc1.Enabled = true; timertc2.Enabled = true; timertc3.Enabled = true; timertc4.Enabled = true; timertc5.Enabled = true; timertc6.Enabled = true; timeruph.Enabled = true; BindParameter(); //if (!string.IsNullOrEmpty(GlobalUser.UserName)) //{ // txtLotName.Enabled = true; // //txtConfig.Enabled = true; // //cboxConfigName.Enabled = true; // //txtSubLotName.Enabled = true; // //txtSiteID.Enabled = true; // //txtProjectID.Enabled = true; // cboxMtcp.Enabled = true; // cboxNoise.Enabled = true; // cboxTestMethod.Enabled = true; // cboxTestMode.Enabled = true; //} uTestCell1.SetIndex(1); uTestCell2.SetIndex(2); uTestCell3.SetIndex(3); uTestCell4.SetIndex(4); uTestCell5.SetIndex(5); uTestCell6.SetIndex(6); StockPlaceFlow.Instance.PlaceFinishedEvent += (pro) => { int.TryParse(lblTotalNum.Text, out int totalNum); int.TryParse(lblPassNum.Text,out int passNum); int.TryParse(lblNgNum.Text, out int ngNum); totalNum++; if (pro!= null && pro.Result == "PASS") { passNum++; } else { ngNum++; } lblTotalNum.Text=totalNum.ToString(); lblPassNum.Text = passNum.ToString(); lblNgNum.Text = ngNum.ToString(); lblTotalYield.Text = $"{(((double)((double)passNum / totalNum)) * 100).ToString("0.00")}%"; }; } public void ReloadParameters() { BindParameter(); } void BindParameter() { txtLotName.Text = GlobalVar.LotName; //txtConfig.Text = GlobalVar.Config; //cboxConfigName.SelectedItem = GlobalVar.ConfigName; //txtSubLotName.Text=GlobalVar.SubLotName; //txtSiteID.Text= GlobalVar.SiteID; //txtProjectID.Text=GlobalVar.ProjectID; cboxMtcp.Checked = GlobalVar.Mtcp; cboxNoise.Checked = GlobalVar.Noise; cboxTestMode.SelectedItem = GlobalVar.TestMode; cboxTestMethod.SelectedItem = GlobalVar.TestMethod; txtGrrProductNum.Text = GlobalVar.GrrProductNum.ToString(); txtGrrTestNum.Text = GlobalVar.GrrTestNum.ToString(); } private void btnWholeHome_Load(object sender, EventArgs e) { Ops.GoHome(); } private void btnSpaceRun_BtnClick(object sender, EventArgs e) { //SpaceTest.Instance.Start(); if (MachineManage.Instance.MachineStatus== EMachineStatus.Homed || MachineManage.Instance.MachineStatus == EMachineStatus.Stop) { //MachineManage.Instance.RunStatus = Commom.ERunStatus.Started; ////WorkFlow.Instance.Start(); //TurnoverFlow.Instance.Start(); //TakeTrayFlow.Instance.Start(); Ops.Start(); //TakeTrayFlow.Instance.Start(); //StockManager.Instance.Start(); //WorkEnvironment.Instance.Ready(); //TakeDumpTest.Instance.Start(); } else { MessageQueue.Instance.Warn($"device {MachineManage.Instance.MachineStatus} status,cann't start!"); } } private void btnStop_BtnClick(object sender, EventArgs e) { Ops.Stop(); //TakeDumpTest.Instance.Stop(); //LoadAndUnloadTest.Instance.Stop(); //TakeTrayTest.Instance.Stop(); //TurnoverFlow.Instance.Stop(); //TakeTrayFlow.Instance.Stop(); ////ZRTest.Instance.Stop(); ////CameraTriggerTest.Instance.Stop(); ////SpaceTest.Instance.Stop(); //WorkFlow.Instance.Stop(); //MachineManage.Instance.MachineStatus = EMachineStatus.Stop; } private void LoadStockStatus() { //StringBuilder msg = new StringBuilder(); //if (StockManager.Instance.HasTray(ETrayType.Input)) //{ // msg.Append(ETrayType.Input.ToString()).Append(","); //} //if (StockManager.Instance.HasTray(ETrayType.Ok)) //{ // msg.Append(ETrayType.Ok.ToString()).Append(","); //} //if (StockManager.Instance.HasTray(ETrayType.Ng)) //{ // msg.Append(ETrayType.Ng.ToString()).Append(","); //} //if (StockManager.Instance.HasTray(ETrayType.Multi)) //{ // msg.Append(ETrayType.Multi.ToString()).Append(","); //} //if(msg.Length > 0) //{ // Task.Run(() => { // Msg.ShowInfo("Stock " + msg.ToString().TrimEnd(new char[] { ',' }) + " has tray,please check products status"); // }); //} //if (StockManager.Instance.HasTray(ETrayType.Empty1)) //{ // StockManager.Instance.GetStock(ETrayType.Empty1).ChangeStatus(EStockTrayStatus.Loaded); //} //else //{ // GlobalTray.GetTray(ETrayType.Empty1).Status = EStockTrayStatus.Empty.ToString(); //} //if (StockManager.Instance.HasTray(ETrayType.Input)) //{ // StockManager.Instance.GetStock(ETrayType.Input).ChangeStatus(EStockTrayStatus.Loaded,false); // TrayStatusManager.Init(ETrayType.Input); // //GlobalTray.InputTray.ChangeStatus() //} //else //{ // GlobalTray.GetTray(ETrayType.Input).Status = EStockTrayStatus.Empty.ToString(); //} //if (StockManager.Instance.HasTray(ETrayType.Ok)) //{ // StockManager.Instance.GetStock(ETrayType.Ok).ChangeStatus(EStockTrayStatus.Loaded, false); // TrayStatusManager.Init(ETrayType.Ok); //} //else //{ // GlobalTray.GetTray(ETrayType.Ok).Status = EStockTrayStatus.Empty.ToString(); //} //if (Ops.IsOn("NG")) //{ // StockManager.Instance.GetStock(ETrayType.Ng).ChangeStatus(EStockTrayStatus.Loaded, false); // TrayStatusManager.Init(ETrayType.Ng); //} //else //{ // GlobalTray.GetTray(ETrayType.Ng).Status = EStockTrayStatus.Empty.ToString(); //} //if (StockManager.Instance.HasTray(ETrayType.Multi)) //{ // StockManager.Instance.GetStock(ETrayType.Multi).ChangeStatus(EStockTrayStatus.Loaded, false); // TrayStatusManager.Init(ETrayType.Multi); //} //else //{ // GlobalTray.GetTray(ETrayType.Multi).Status = EStockTrayStatus.Empty.ToString(); //} //TrayStatusManager.InitDischargeNozzle(); //TrayStatusManager.InitTrunoverTray(); //TrayStatusManager.InitTurnoverNozzle(); //TrayStatusManager.InitFixtureTray(); } private void button1_Click(object sender, EventArgs e) { //PromptMessageBox.ShowDialog(111, "取料失败!! \r\n周转吸嘴取治具{}号穴位的物料时失败 \r\nPickup fail !!\r\nNozzle of tester from site{} socket\r\nPickup fail !!\r\nSite{} socket 으로부터 Unit을 pickup할때 pickup fail이 발생하였습니다.", ETipButton.Yes); } /// /// 治具盘画盘后事件 /// /// private void trayTest_DrawTrayAfterEvent(RsTray obj, ESlotStatus status, List opSlots) { //TestTrayManager.Instance.ResetStatus(); //List slots = obj.GetSlots(ESlotStatus.Have); LogHelper.Debug($"手动画盘设置{opSlots.Select(s=>s.Index).ToJoinString()}{status}"); foreach (TraySlot slot in opSlots) { int slotIndex = slot.Index; if(status== ESlotStatus.Have) { //TestTrayManager.Instance.Slot(slotIndex).IsHasProduct = true; } else { //TestTrayManager.Instance.Slot(slotIndex).ResetStatus(); } } } /// /// 周转盘画盘后事件 /// /// private void trayTurnover_DrawTrayAfterEvent(RsTray obj, ESlotStatus status, List opSlots) { //TurnoverTrayManager.Instance.ResetStatus(); //List slots = obj.GetSlots(ESlotStatus.Have); LogHelper.Debug($"手动画盘设置{opSlots.Select(s => s.Index).ToJoinString()}{status}"); foreach (TraySlot slot in opSlots) { int slotIndex = slot.Index; if (status == ESlotStatus.Have) { //TurnoverTrayManager.Instance.Slot(slotIndex).IsHasProduct = true; } else { //TurnoverTrayManager.Instance.Slot(slotIndex).ResetStatus(); } } } /// /// 周转吸嘴画盘后事件 /// /// private void trayTurnoverNozzle_DrawTrayAfterEvent(RsTray obj, ESlotStatus status, List opSlots) { //TransitNozzleManager.Instance.ResetStatus(); //List slots = obj.GetSlots(ESlotStatus.Have); LogHelper.Debug($"手动画盘设置{opSlots.Select(s => s.Index).ToJoinString()}{status}"); foreach (TraySlot slot in opSlots) { int slotIndex = slot.Index; if(status== ESlotStatus.Have) { //TransitNozzleManager.Instance.Nozzle(slotIndex).FromType = TurnoverType.Turnover; //TransitNozzleManager.Instance.Nozzle(slotIndex).FromIndex = slotIndex - 1; //TransitNozzleManager.Instance.Nozzle(slotIndex).ToType = TurnoverType.Multifunction; //TransitNozzleManager.Instance.Nozzle(slotIndex).ToIndex = (slotIndex <= 8 ? slotIndex + 8 : slotIndex + 16) - 1; //TransitNozzleManager.Instance.Nozzle(slotIndex).IsHasProduct = true; //TransitNozzleManager.Instance.Nozzle(slotIndex).Update(); } else { //TransitNozzleManager.Instance.Nozzle(slotIndex).ResetStaus(); //TransitNozzleManager.Instance.Nozzle(slotIndex).Update(); } } } /// /// 排料吸嘴画盘后事件 /// /// private void trayDischargeNozzle_DrawTrayAfterEvent(RsTray obj, ESlotStatus status, List opSlots) { //NozzleManager.GetAllNozzles().ForEach((n) => { n.ResetStatus(); }); //List slots = obj.GetSlots(ESlotStatus.Have); LogHelper.Debug($"手动画盘设置{opSlots.Select(s => s.Index).ToJoinString()}{status}"); foreach (TraySlot slot in opSlots) { int slotIndex = slot.Index; if (status == ESlotStatus.Have) { Nozzle nozzle = NozzleManager.GetNozzle(slotIndex); if (nozzle != null) { //NozzleManager.GetNozzle(slotIndex).FromType = TurnoverType.Turnover; //nozzle.FromIndex = slotIndex - 1; //NozzleManager.GetNozzle(slotIndex).ToType = TurnoverType.Multifunction; //nozzle.ToIndex = 0; NozzleManager.GetNozzle(slotIndex).Status = ENozzleStatus.ToUnload; nozzle.Update(); } } else { NozzleManager.GetNozzle(slotIndex).Clear(); NozzleManager.GetNozzle(slotIndex).Update(); } } } private void switchButton1_Click(object sender, EventArgs e) { //GlobalVar.DeviceIsAuto = switchButton1.Checked; if(switchButton1.Checked) { GlobalVar.Clear = false; } else { GlobalVar.Clear = true; } } private void timer2_Tick(object sender, EventArgs e) { } public void txtSysParam_KeyUp(object sender, KeyEventArgs e) { //if(e.KeyCode == Keys.Enter) //{ // UpdateSysParam((TextBox)sender); //} } private void timer3_Tick(object sender, EventArgs e) { uTestCell1.RefreshStatus(TestFixtureManager.Instance.GetTestFixture(1)); } private void timertc2_Tick(object sender, EventArgs e) { uTestCell2.RefreshStatus(TestFixtureManager.Instance.GetTestFixture(2)); } private void timertc3_Tick(object sender, EventArgs e) { uTestCell3.RefreshStatus(TestFixtureManager.Instance.GetTestFixture(3)); } private void timertc4_Tick(object sender, EventArgs e) { uTestCell4.RefreshStatus(TestFixtureManager.Instance.GetTestFixture(4)); } private void timertc5_Tick(object sender, EventArgs e) { uTestCell5.RefreshStatus(TestFixtureManager.Instance.GetTestFixture(5)); } private void timertc6_Tick(object sender, EventArgs e) { uTestCell6.RefreshStatus(TestFixtureManager.Instance.GetTestFixture(6)); } private void cboxMtcp_Click(object sender, EventArgs e) { if(cboxMtcp.Checked) { SysConfigParam.Update("Mtcp","true"); } else { SysConfigParam.Update("Mtcp", "false"); } } private void cboxNoise_Click(object sender, EventArgs e) { if (cboxNoise.Checked) { SysConfigParam.Update("Noise", "true"); } else { SysConfigParam.Update("Noise", "false"); } } private void cboxTestMethod_SelectedIndexChanged(object sender, EventArgs e) { //SysConfigParam.Update("TestMethod", cboxTestMethod.SelectedItem.ToString()); } private void cboxTestMode_SelectedIndexChanged(object sender, EventArgs e) { //SysConfigParam.Update("TestMode", cboxTestMode.SelectedItem.ToString()); if(cboxTestMode.SelectedItem!=null && (cboxTestMode.SelectedItem.ToString()=="GRR" || cboxTestMode.SelectedItem.ToString()=="AUDIT")) { GlobalTray.GrrTray.ChangeStatus(ESlotStatus.NotHave); for (int i=0;iTestFixtureManager.Instance.GetEnableFixtureList().Count+1 && cboxTestMode.SelectedItem.ToString() == "GRR") { Msg.ShowError("1. The number of products can be less than that of the fixtures.\r\n2. The number of products is equal to that of the fixtures.\r\n3. The number of products is 1 more than that of the fixtures."); return; } else { SysConfigParam.Update("GrrProductNum", txtGrrProductNum.Text); SysConfigParam.Update("GrrTestNum", txtGrrTestNum.Text); GlobalTray.GrrTray.ChangeStatus(ESlotStatus.NotHave); for (int i = 0; i < GlobalVar.GrrProductNum; i++) { GlobalTray.GrrTray.ChangeStatus(i + 1, ESlotStatus.Have); } } } SysConfigParam.Update("Mtcp", cboxMtcp.Checked.ToString()); SysConfigParam.Update("Noise", cboxNoise.Checked.ToString()); SysConfigParam.Init(); Msgbox.ShowTipDialog(EButtonType.Ok, "Save success!", "tip"); } private void btnUpCameraGrab_Click(object sender, EventArgs e) { AxisControl.LoadY2.ComparePulse((ushort)GlobalVar.HightChannel, false); } private void txtLotName_KeyUp(object sender, KeyEventArgs e) { StringBuilder msg = new StringBuilder(); string reg = "[\\w,&,\\.]"; TextBox textBox = (TextBox)sender; string text=textBox.Text; foreach(char c in text.ToCharArray()) { if(Regex.IsMatch(c.ToString(), reg)) { msg.Append(c); } } textBox.Text = msg.ToString(); //textBox.Select(msg.Length, 0); } private void timer3_Tick_1(object sender, EventArgs e) { DateTime start = DateTime.Now.AddMinutes(GlobalVar.UphRefreshCycle*-1); string querySql = $"select count(0) from records where placetime >= '{start.ToString("yyyy-MM-dd HH:mm:ss")}'"; DataSet ds = MySqlHelper.GetDataSet(querySql); if(ds!=null && ds.Tables.Count>0) { if(int.TryParse(ds.Tables[0].Rows[0][0].ToString(),out int totalNum)) { int uph = (int)(((double)totalNum / GlobalVar.UphRefreshCycle) * 60); lblAvgUpg.Text = uph.ToString(); } } } private void btnEndLot_Click(object sender, EventArgs e) { List fixtureList = TestFixtureManager.Instance.GetEnableFixtureList(); if(fixtureList!=null && fixtureList.Count>0) { fixtureList[0].Send("LotEnd$"); DevLog.EventTracker("End", 0, "", "End"); } } } }