/// <summary> /// 下一个测试温度设置及测试完成的数据保存 /// </summary> private void btnNext_Click(object sender, EventArgs e) { TestData.Test_end_time = DateTime.Now.ToLongTimeString(); //添加一条测试数据到TestDataCommon TestDataCommon.Pf = true & TestData.Pf; TestDataCommon.lstTestData.Add(TestData); //保存上一次的眼图图片 SaveEyeImage(); //当前测试结果为fail,且Test plan设置fail后不继续测试,则disable 眼图仪操作按钮,同时将TEC设置回常温 if (TestData.Pf == false && lstTecTempNote[TecTempIndex].ToUpper().Contains("FALSE") && TecTempIndex != TECTempCount - 1) { strMsg = $"{lstTecTemp[TecTempIndex]}℃下测试Fail,根据TestPlan的设置,余下的温度无需测试!"; ShowMsg(strMsg, true); MessageBox.Show(strMsg, "Caution", MessageBoxButtons.OK, MessageBoxIcon.Information); FinishedTest(); return; } TecTempIndex++; if (TecTempIndex >= TECTempCount) { FinishedTest(); } else { TC720.WriteTemperature(Channel.CH1, lstTecTemp[TecTempIndex]); TickCountTotal = 0; TecTimer.Start(); ShowMsg($"将TEC的温度设置为{lstTecTemp[TecTempIndex]}", true); } this.btnNext.Enabled = false; }
private void btnRestTemp_Click(object sender, EventArgs e) { if (lstTecTemp != null) { TecTempIndex = 0; TC720.WriteTemperature(Channel.CH1, lstTecTemp[TecTempIndex]);//测试完成,将TEC设置回常温 TickCountTotal = 0; TecTimer.Start(); ShowMsg($"环境温度重置为{lstTecTemp[TecTempIndex]}...", true); } else { ShowMsg("请先选择PN!", false); } }
/// <summary> /// 测试结束的操作,环境温度设回常温,保存测试数据到数据库 /// </summary> private void FinishedTest() { try { TecTempIndex = 0; TC720.WriteTemperature(Channel.CH1, lstTecTemp[TecTempIndex]);//测试完成,将TEC设置回常温 TickCountTotal = 0; TecTimer.Start(); ShowMsg($"当前产品测试已完成,环境温度设回{lstTecTemp[TecTempIndex]}...", true); //保存数据 if (DialogResult.Yes == MessageBox.Show("测试已完成,是否需要保存数据到数据库?", "保存数据", MessageBoxButtons.YesNo, MessageBoxIcon.Information)) { ShowMsg("保存数据到数据库...", true); db.SaveTestData(TestDataCommon); //MES 数据上传 SaveMesData(); ShowMsg("数据上传完成!", true); } //TOSA 断电 if (!DP832A.SetOutput(DP832A.CHANNEL.CH2, false)) { ShowMsg(string.Format("关闭通道{0}失败", DP832A.CHANNEL.CH2.ToString()), false); } var task = new Task(() => { while (!TemperatureIsTimeOut) { if (TemperatureIsOk) { strMsg = $"测试完成,温度已经设置到{lstTecTemp[TecTempIndex]},请装卸产品!"; ShowMsg(strMsg, true); MessageBox.Show(strMsg, "测试完成", MessageBoxButtons.OK, MessageBoxIcon.Information); break; } } if (TemperatureIsTimeOut) { ShowMsg("温度未正常设置回常温,装卸产品请注意!", false); } }); task.Start(); } catch (Exception ex) { ShowMsg(ex.Message, false); } }
/// <summary> /// Set devices according to test plan file /// </summary> /// <param name="pn"> product name,also is sheet name in excel</param> private void ReadTestPlan(string pn) { lstTecTemp = new List <double>(); lstTecTempNote = new List <string>(); strMsg = "正在获取test plan 的内容,并根据其内容进行初始设置,请稍等..."; ShowMsg(strMsg, true); var task1 = new Task(() => { string TestPlanFile = $"{ Directory.GetCurrentDirectory()}\\config\\PAM4 TOSA TEST PLAN.xlsx"; Excel.Application excelApp = new Excel.Application { Visible = false }; Excel.Workbook workbook = excelApp.Workbooks.Open(TestPlanFile); Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Worksheets.get_Item(pn); Excel.Range excelCell = worksheet.UsedRange; try { //Bert paras TestDataCommon.Ppg_data_rate = excelCell[4, 2].value; TestDataCommon.Ppg_channel = Convert.ToInt32(excelCell[5, 2].value); TestDataCommon.Ppg_pattern = Convert.ToString(excelCell[6, 2].value); TestDataCommon.Pre_cursor = excelCell[7, 2].value; TestDataCommon.Main_cursor = excelCell[8, 2].value; TestDataCommon.Post_cursor = excelCell[9, 2].value; TestDataCommon.Inner_1 = excelCell[10, 2].value; TestDataCommon.Inner_2 = excelCell[11, 2].value; //DP832A paras TestDataCommon.Vcc1 = excelCell[14, 2].value; TestDataCommon.Vcc2 = excelCell[15, 2].value; //Driver Board paras TestDataCommon.TxTEC = Convert.ToUInt16(excelCell[18, 2].value); TestDataCommon.TxVB = Convert.ToUInt16(excelCell[19, 2].value); TestDataCommon.TxVEA = Convert.ToUInt16(excelCell[20, 2].value); TestDataCommon.TxVG = Convert.ToUInt16(excelCell[21, 2].value); TestDataCommon.LDBias = Convert.ToUInt16(excelCell[22, 2].value); //N1092 paras kesight_N1902D.Channel = Convert.ToString(excelCell[25, 2].value); kesight_N1902D.Filter_rate = Convert.ToString(excelCell[26, 2].value); kesight_N1902D.Channel_bandWidth = Convert.ToString(excelCell[27, 2].value); kesight_N1902D.DCA_Offset = excelCell[28, 2].value; //Tec Paras lstTecTemp.Add(excelCell[31, 2].value); lstTecTemp.Add(excelCell[32, 2].value); lstTecTemp.Add(excelCell[33, 2].value); lstTecTempNote.Add(Convert.ToString(excelCell[31, 3].value)); lstTecTempNote.Add(Convert.ToString(excelCell[32, 3].value)); lstTecTempNote.Add(Convert.ToString(excelCell[33, 3].value)); TC720.TempSpan = excelCell[34, 2].value; TC720.StablizaitonTime = Convert.ToInt32(excelCell[35, 2].value); TC720.TimeOut = Convert.ToInt32(excelCell[36, 2].value); TECTempCount = lstTecTemp.Count; } catch (Exception ex) { ShowMsg($"读取Test plan 出错,{ex.Message}", false); return; } finally { workbook.Close(); excelApp.Quit(); IntPtr t = new IntPtr(excelApp.Hwnd); int kill = 0; GetWindowThreadProcessId(t, out kill); System.Diagnostics.Process p = System.Diagnostics.Process.GetProcessById(kill); p.Kill(); } }); task1.Start(); task1.Wait(); //TEC 的初始设置 try { TecTempIndex = 0; TC720.WriteTemperature(0, lstTecTemp[TecTempIndex]); ShowMsg($"将TEC的温度设置为{lstTecTemp[TecTempIndex]}", true); TickCountTotal = 0; TecTimer.Start(); } catch (Exception ex) { ShowMsg($"根据test plan对TEC进行初始设置时出错,{ex.Message}", false); return; } //Bert的初始设置 try { BertChannel = TestDataCommon.Ppg_channel - 1; Inst_PAM4_Bert.setTimebase(TestDataCommon.Ppg_data_rate); // set rate Inst_PAM4_Bert.ppgOutputControl(BertChannel, true); //Enable PPG CH1 Inst_PAM4_Bert.setPPGSignalType(BertChannel, "PAM"); //Set PPG signal as PAM for CH1 Inst_PAM4_Bert.setPPGpatternType(BertChannel, "PBRS"); //设置patternType 为[PRBS| SSPRQ |JP03A|JP03B|SQWV|LINEAR|FIXED|CJT Inst_PAM4_Bert.setPPGPRBSpattern(BertChannel, TestDataCommon.Ppg_pattern); // Inst_PAM4_Bert.setPpgprbsMode(BertChannel, "COMBINE"); //设置信号发生器PRBS 为combine或者MSB LSB模式 Inst_PAM4_Bert.setPretap(BertChannel, TestDataCommon.Pre_cursor); this.TrackBarPre_Cursor.ValueChanged -= this.TrackBarPre_Cursor_ValueChanged; this.TrackBarPre_Cursor.Value = Convert.ToInt32(TestDataCommon.Pre_cursor); this.lblPre_Cursor.Text = TestDataCommon.Pre_cursor.ToString(); this.txtPre_Cursor.Text = TestDataCommon.Pre_cursor.ToString(); this.TrackBarPre_Cursor.ValueChanged += this.TrackBarPre_Cursor_ValueChanged; Inst_PAM4_Bert.setMaintap(BertChannel, TestDataCommon.Main_cursor); this.TrackBarMain_Cursor.ValueChanged -= this.TrackBarMain_Cursor_ValueChanged; this.TrackBarMain_Cursor.Value = Convert.ToInt32(TestDataCommon.Main_cursor); this.lblMain_Cursor.Text = TestDataCommon.Main_cursor.ToString(); this.txtMain_Cursor.Text = TestDataCommon.Main_cursor.ToString(); this.TrackBarMain_Cursor.ValueChanged += this.TrackBarMain_Cursor_ValueChanged; Inst_PAM4_Bert.setPosttap(BertChannel, TestDataCommon.Post_cursor); this.TrackBarPost_Cursor.ValueChanged -= this.TrackBarPost_Cursor_ValueChanged; this.TrackBarPost_Cursor.Value = Convert.ToInt32(TestDataCommon.Post_cursor); this.lblPost_Cursor.Text = TestDataCommon.Post_cursor.ToString(); this.txtPost_Cursor.Text = TestDataCommon.Post_cursor.ToString(); this.TrackBarPost_Cursor.ValueChanged += this.TrackBarPost_Cursor_ValueChanged; Inst_PAM4_Bert.setInner1(BertChannel, TestDataCommon.Inner_1); this.TrackBarInner_1.ValueChanged -= this.TrackBarInner_1_ValueChanged; this.TrackBarInner_1.Value = Convert.ToInt32(TestDataCommon.Inner_1); this.lblInner_1.Text = TestDataCommon.Inner_1.ToString(); this.txtInner_1.Text = TestDataCommon.Inner_1.ToString(); this.TrackBarInner_1.ValueChanged += this.TrackBarInner_1_ValueChanged; Inst_PAM4_Bert.setInner2(BertChannel, TestDataCommon.Inner_2); this.TrackBarInner_2.ValueChanged -= this.TrackBarInner_2_ValueChanged; this.TrackBarInner_2.Value = Convert.ToInt32(TestDataCommon.Inner_2); this.lblInner_2.Text = TestDataCommon.Inner_2.ToString(); this.txtInner_2.Text = TestDataCommon.Inner_2.ToString(); this.TrackBarInner_2.ValueChanged += this.TrackBarInner_2_ValueChanged; } catch (Exception ex) { ShowMsg($"根据test plan对Bert进行初始设置时出错,{ex.Message}", false); return; } //DP832A的初始设置 try { if (!DP832A.SetOutput(DP832A.CHANNEL.CH1, true)) { ShowMsg(string.Format("打开通道{0}失败", DP832A.CHANNEL.CH1.ToString()), false); } DP832A.SetVoltLevel(DP832A.CHANNEL.CH1, TestDataCommon.Vcc1); if (!DP832A.SetOutput(DP832A.CHANNEL.CH2, true)) { ShowMsg(string.Format("打开通道{0}失败", DP832A.CHANNEL.CH2.ToString()), false); } DP832A.SetVoltLevel(DP832A.CHANNEL.CH2, TestDataCommon.Vcc2); } catch (Exception ex) { ShowMsg($"根据test plan对DP832进行初始设置时出错,{ex.Message}", false); // return; } //Driver Board AAB的初始设置 try { AAB = new AAB(); AAB.SetTxTEC(TestDataCommon.TxTEC); this.txtTxTEC.Text = TestDataCommon.TxTEC.ToString(); AAB.SetTxVB(TestDataCommon.TxVB); this.txtTxVB.Text = TestDataCommon.TxVB.ToString(); AAB.SetTxVEA(TestDataCommon.TxVEA); this.txtTxVEA.Text = TestDataCommon.TxVEA.ToString(); AAB.SetTxVG(TestDataCommon.TxVG); this.txtTxVG.Text = TestDataCommon.TxVG.ToString(); AAB.SetLDiBias(TestDataCommon.LDBias); this.txtLDiBias.Text = TestDataCommon.LDBias.ToString(); } catch (Exception ex) { ShowMsg($"根据test plan对AAB进行初始设置时出错,{ex.Message}", false); return; } //N1092A 的初始设置 try { kesight_N1902D.SetN1092(); } catch (Exception ex) { ShowMsg($"根据test plan对N1092A进行初始设置时出错,{ex.Message}", false); } }