void TestStateUpdate(TESTSTATUS testStatus) { if (bButtonThreadActive == false) { return; } if (btnTestStatus.InvokeRequired) { _del_UpdateBtn recurFunc = new _del_UpdateBtn(TestStateUpdate); this.Invoke(recurFunc, new object[] { testStatus }); } else { switch (testStatus) { case TESTSTATUS.READY: btnTestStatus.BackColor = Color.White; btnTestStatus.ForeColor = Color.Black; btnTestStatus.Text = "Press to Start"; break; case TESTSTATUS.ERROR: btnTestStatus.BackColor = Color.Red; btnTestStatus.ForeColor = Color.Black; btnTestStatus.Text = "Error While Testing"; break; case TESTSTATUS.TESTABORTED: btnTestStatus.BackColor = Color.Red; btnTestStatus.ForeColor = Color.Black; btnTestStatus.Text = "Test Stopped by User"; break; case TESTSTATUS.TESTING: btnTestStatus.BackColor = Color.Yellow; btnTestStatus.ForeColor = Color.Black; btnTestStatus.Text = "Testing"; break; case TESTSTATUS.TESTDONE: btnTestStatus.BackColor = Color.Blue; btnTestStatus.ForeColor = Color.White; btnTestStatus.Text = "Test Done."; break; case TESTSTATUS.BLANK: btnTestStatus.Text = ""; break; } } }
private void btnTestStatus_Click(object sender, EventArgs e) { if (bMainTestStarted) { bMainTestStarted = false; testState = TESTSTATUS.TESTABORTED; } else { bMainTestStarted = true; this.testThread = new Thread(new ThreadStart(MainTest)); testThread.Start(); } }
void MainTest() { try { testState = TESTSTATUS.TESTING; string[] t = txtFreqToTest.Text.Split(','); double[] FreqToTest = new double[t.Length]; int i = 0; foreach (string strNum in t) { FreqToTest[i++] = Convert.ToDouble(strNum); } t = txtVoltChange.Text.Split(','); double[] VoltLevelToTest = new double[t.Length]; i = 0; foreach (string strNum in t) { VoltLevelToTest[i++] = Convert.ToDouble(strNum); } int nRepeat = Convert.ToInt16(txtRepeatTime.Text); t = txtMXGPowerLevelToTest.Text.Split(','); double[] PowerlevelToTest = new double[t.Length]; i = 0; foreach (string strNum in t) { PowerlevelToTest[i++] = Convert.ToDouble(strNum); } #region Setup MXG iSgControl.SetupSG(parameter.T1, parameter.T2, parameter.DutyCycle, parameter.SGFreqInMhz, PowerlevelToTest[0], parameter.WaveformFileName); #endregion #region Setup MXA // Select WLAN App xSA.SendCommand("INST:SEL WLAN"); // Select 11ax 80Mhz xSA.SendCommand("RAD:STAN AX80"); // configure EVM measurement xSA.SendCommand("CONF:EVM"); // set External trigger to EXT1 xSA.SendCommand("TRIG:EVM:SOUR EXT1"); // Set input range xSA.SetAttenuator((PowerlevelToTest[0] + parameter.Range)); // turn off average xSA.SendCommand("EVM:AVER:STAT OFF"); // Equalizer training setting xSA.SendCommand("CALC:EVM:EQU:TMOD SDATA"); #endregion #region Power On n6700x.SendCommand("SENSE:FUNC \"VOLT\",(@1)"); #endregion string strRead = ""; Log(" >Measure EVM"); int nTotalLoop = FreqToTest.Length * VoltLevelToTest.Length * nRepeat * PowerlevelToTest.Length; SetProgressBar(PROGRESSSET.MAX, nTotalLoop); SetProgressBar(PROGRESSSET.MIN, 0); SetProgressBar(PROGRESSSET.STATE, 0); nTotalLoop = 0; // Main Test List <string> Result = new List <string>(); for (int PowerlevelLoop = 0; PowerlevelLoop < PowerlevelToTest.Length; PowerlevelLoop++) { // Set MXG Power Level. iSgControl.SendCommand("POWER " + PowerlevelToTest[PowerlevelLoop].ToString(".00") + "DBM"); // added for auto range clippnig : Jooyoung //xSA.SendCommand("POWER:ATT 15"); xSA.SetAttenuator(PowerlevelToTest[PowerlevelLoop] + parameter.Range); //xSA.SendCommand("POWER:ATT " + ((int)((PowerlevelToTest[PowerlevelLoop] + parameter.Range))).ToString()); //xSA.SendCommand("POWER:RANGE " + (PowerlevelToTest[PowerlevelLoop] + parameter.Range).ToString()); Thread.Sleep(1000); for (int FreqLoop = 0; FreqLoop < FreqToTest.Length; FreqLoop++) { xSA.SendCommand("FREQ:CENT " + FreqToTest[FreqLoop].ToString() + "MHZ"); iSgControl.SendCommand("FREQ " + FreqToTest[FreqLoop].ToString() + "MHZ"); for (int VoltLoop = 0; VoltLoop < VoltLevelToTest.Length; VoltLoop++) { n6700x.SendCommand("SOUR:VOLT:LEVEL:IMM:AMP " + VoltLevelToTest[VoltLoop].ToString() + ",(@1)"); n6700x.SendCommand("OUTPUT:STATE 1" + ",(@1)"); Thread.Sleep(parameter.GapBtwMeasure); xSA.SendCommand("SENSe:POWer:RF:RANGe:OPTimize IMMediate"); Thread.Sleep(parameter.GapBtwMeasure); for (int repeat = 0; repeat < nRepeat; repeat++) { LogStatus("Testing at " + PowerlevelToTest[PowerlevelLoop].ToString() + " dBm/ " + FreqToTest[FreqLoop].ToString() + " Mhz / " + VoltLevelToTest[VoltLoop].ToString() + " Volts ( Repeat " + (repeat + 1).ToString() + " )"); SetProgressBar(PROGRESSSET.STATE, ++nTotalLoop); xSA.SendCommand("READ:EVM?"); Thread.Sleep(500); xSA.Read(ref strRead); Result.Add(PowerlevelToTest[PowerlevelLoop].ToString() + "," + FreqToTest[FreqLoop].ToString() + "," + VoltLevelToTest[VoltLoop].ToString() + "," + (repeat + 1).ToString() + "," + strRead.Split(',')[0]); Thread.Sleep(parameter.GapBtwMeasure); if (!bMainTestStarted) { throw new Exception("Test Aborted.."); } } n6700x.SendCommand("OUTPUT:STATE 0" + ",(@1)"); Thread.Sleep(parameter.GapBtwMeasure); } } } iSgControl.SendCommand("output off"); n6700x.SendCommand("OUTPUT:STATE 0" + ",(@1)"); Log("Test Done. "); this.bMainTestStarted = false; testState = TESTSTATUS.TESTDONE; double[] data = new double[Result.Count]; int nIndex = 0; bool tLogSet = bLoggingEverything; bLoggingEverything = true; DateTimeStamp stamp = new DateTimeStamp(); FileStream fs = new FileStream(".\\Report_" + stamp.GetNowTime() + ".txt", FileMode.Create); StreamWriter sw = new StreamWriter(fs); sw.WriteLine("POWER, FREQ, VOLT,REPEAT,RESULT"); foreach (string tStr in Result) { Log(tStr); data[nIndex++] = Convert.ToDouble(tStr.Split(',')[4]); sw.WriteLine(tStr); } sw.Close(); fs.Close(); bLoggingEverything = tLogSet; UpdateGraph(data); } catch (Exception ex) { if (ex.Message == "Test Aborted..") { testState = TESTSTATUS.TESTABORTED; } else { testState = TESTSTATUS.ERROR; } Log(ex.Message); } }