赞
踩
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using MT8852B_Driver;
using System.Collections;
using System.Xml;
using UE_CMD;
using System.Threading;
using System.IO;
using System.Diagnostics;
namespace NRF52382_Test
{
public partial class FormMain : Form
{
#region //参数类及变量
MT8852B mt8852b = new MT8852B();
List listTxCase = new List();
List listRxCase = new List();
TxRxLimitCase txrxLimitCase = new TxRxLimitCase();
C_Instr cInstr = new C_Instr(); Emdoor_DUT EDut = new Emdoor_DUT(); string strCOM = ""; Thread t1 = null; string strSN = ""; string strToalRst = "Fail"; //总的结果 //通过率计算 string sPass = ""; string sFail = ""; string sTotal = ""; string sFYP = ""; //float fFpy = 0.0f; //测试时间 string sTestRunTime = ""; //多少秒 Stopwatch sw = new Stopwatch(); #endregion #region //FormMain 构造函数 public FormMain() { InitializeComponent(); } #endregion #region //加载配置文件TestSrcipt.xml public bool LoadTxXmlFile(ref string strMsg) { XmlTextReader xml = null; bool bRet = true; try { strMsg = ""; listTxCase.Clear(); listRxCase.Clear(); txrxLimitCase.fPavg_Limit_Max = 0.0f; txrxLimitCase.fPavg_Limit_Min = 0.0f; txrxLimitCase.fPpk_Limit_Min = 0.0f; txrxLimitCase.fDeltaf1_Avg_Limit_Max = 0.0f; txrxLimitCase.fDeltaf1_Avg_Limit_Min = 0.0f; txrxLimitCase.fDeltaf1_Max_Limit_Max = 0.0f; txrxLimitCase.fDeltaf1_Max_Limit_Min = 0.0f; txrxLimitCase.fDeltaf2_Avg_Limit_Max = 0.0f; txrxLimitCase.fDeltaf2_Avg_Limit_Min = 0.0f; txrxLimitCase.fDeltaf2_Max_Limit_Max = 0.0f; txrxLimitCase.fDeltaf2_Max_Limit_Min = 0.0f; txrxLimitCase.fMax_PVe_Offset_Limit = 0.0f; txrxLimitCase.fMax_NVe_Offset_Limit = 0.0f; txrxLimitCase.fAvg_Offset_Limit_Max = 0.0f; txrxLimitCase.fAvg_Offset_Limit_Min = 0.0f; txrxLimitCase.fMax_Drift_Limit = 0.0f; txrxLimitCase.fAvg_Drift_Limit_Max = 0.0f; txrxLimitCase.fAvg_Drift_Limit_Min = 0.0f; txrxLimitCase.fDrift_Rate_Limit = 0.0f; txrxLimitCase.fRx_Limit = 0.0f; string strTmp = ""; string strJsonfile = System.Environment.CurrentDirectory + "\\TestSrcipt.xml"; xml = new XmlTextReader(strJsonfile); xml.WhitespaceHandling = WhitespaceHandling.None; while (xml.Read()) { if (xml.NodeType == XmlNodeType.Element) { TxTestCase mTxTestCase = new TxTestCase(); RxTestCase mRxTestCase = new RxTestCase(); if (xml.Name == "COM") { strCOM = xml.ReadString(); } if (xml.Name == "INSTR") { cInstr.sInstr = xml.ReadString(); } if (xml.Name == "GPIB_Index") { cInstr.iGPIBIndex = Convert.ToInt16(xml.ReadString()); } if (xml.Name == "GPIB_Address") { cInstr.iGPIBAddr = Convert.ToInt16(xml.ReadString()); } if (xml.Name == "TestCase1" || xml.Name == "TestCase2" || xml.Name == "TestCase3") { mTxTestCase.sTestCase = xml.GetAttribute("Name"); strTmp = xml.GetAttribute("Value"); List<string> list = new List<string>(strTmp.Split(',')); if (list[1] == "CH0") { mTxTestCase.channel = E_Channel.CH0; } else if (list[1] == "CH19") { mTxTestCase.channel = E_Channel.CH19; } else if (list[1] == "CH39") { mTxTestCase.channel = E_Channel.CH39; } mTxTestCase.fFixedOffset = Convert.ToSingle(list[2]); if (list[3] == "PRBS9") { mTxTestCase.payload = E_Payload.Payload_PRBS9; } else if (list[3] == "FFHEX") { mTxTestCase.payload = E_Payload.Payload_11110000; } else if (list[3] == "AAHEX") { mTxTestCase.payload = E_Payload.Payload_10101010; } bool bTestRX = false; for (int i = 4; i < list.Count; i++) { if (list[i] == "Ppk") { mTxTestCase.IsTest_Ppk = true; } if (list[i] == "Pavg") { mTxTestCase.IsTest_Pavg = true; } if (list[i] == "RX") { bTestRX = true; } } strTmp = xml.GetAttribute("Enable"); if (strTmp == "1") mTxTestCase.bCaseEnable = true; else mTxTestCase.bCaseEnable = false; listTxCase.Add(mTxTestCase); if (bTestRX) { mRxTestCase.IsTest_Rx = true; if (list[list.Count - 4] == "CH0") { mRxTestCase.channel = E_Channel.CH0; } else if (list[list.Count - 4] == "CH19") { mRxTestCase.channel = E_Channel.CH19; } else if (list[list.Count - 4] == "CH39") { mRxTestCase.channel = E_Channel.CH39; } mRxTestCase.fPowerLevel = Convert.ToSingle(list[list.Count - 3]); mRxTestCase.fLoss = Convert.ToSingle(list[list.Count - 2]); mRxTestCase.iPackets = Convert.ToInt32(list[list.Count - 1]); listRxCase.Add(mRxTestCase); } } if (xml.Name == "TestCase4" || xml.Name == "TestCase5" || xml.Name == "TestCase6") { mTxTestCase.sTestCase = xml.GetAttribute("Name"); strTmp = xml.GetAttribute("Value"); List<string> list = new List<string>(strTmp.Split(',')); if (list[1] == "CH0") { mTxTestCase.channel = E_Channel.CH0; } else if (list[1] == "CH19") { mTxTestCase.channel = E_Channel.CH19; } else if (list[1] == "CH39") { mTxTestCase.channel = E_Channel.CH39; } mTxTestCase.fFixedOffset = Convert.ToSingle(list[2]); if (list[3] == "PRBS9") { mTxTestCase.payload = E_Payload.Payload_PRBS9; } else if (list[3] == "FFHEX") { mTxTestCase.payload = E_Payload.Payload_11110000; } else if (list[3] == "AAHEX") { mTxTestCase.payload = E_Payload.Payload_10101010; } //bool bTestRX = false; for (int i = 4; i < list.Count; i++) { if (list[i] == "Ppk") { mTxTestCase.IsTest_Ppk = true; } if (list[i] == "Pavg") { mTxTestCase.IsTest_Pavg = true; } if (list[i] == "Deltaf1_Max") { mTxTestCase.IsTest_Deltaf1_Max = true; } if (list[i] == "Deltaf1_Avg") { mTxTestCase.IsTest_Deltaf1_Avg = true; } } strTmp = xml.GetAttribute("Enable"); if (strTmp == "1") mTxTestCase.bCaseEnable = true; else mTxTestCase.bCaseEnable = false; listTxCase.Add(mTxTestCase); } if (xml.Name == "TestCase7" || xml.Name == "TestCase8" || xml.Name == "TestCase9") { mTxTestCase.sTestCase = xml.GetAttribute("Name"); strTmp = xml.GetAttribute("Value"); List<string> list = new List<string>(strTmp.Split(',')); if (list[1] == "CH0") { mTxTestCase.channel = E_Channel.CH0; } else if (list[1] == "CH19") { mTxTestCase.channel = E_Channel.CH19; } else if (list[1] == "CH39") { mTxTestCase.channel = E_Channel.CH39; } mTxTestCase.fFixedOffset = Convert.ToSingle(list[2]); if (list[3] == "PRBS9") { mTxTestCase.payload = E_Payload.Payload_PRBS9; } else if (list[3] == "FFHEX") { mTxTestCase.payload = E_Payload.Payload_11110000; } else if (list[3] == "AAHEX") { mTxTestCase.payload = E_Payload.Payload_10101010; } for (int i = 4; i < list.Count; i++) { if (list[i] == "Ppk") { mTxTestCase.IsTest_Ppk = true; } if (list[i] == "Pavg") { mTxTestCase.IsTest_Pavg = true; } if (list[i] == "Deltaf2_Max") { mTxTestCase.IsTest_Deltaf2_Max = true; } if (list[i] == "Deltaf2_Avg") { mTxTestCase.IsTest_Deltaf2_Avg = true; } if (list[i] == "Max_PVe_Offset") { mTxTestCase.IsTest_Max_PVe_Offset = true; } if (list[i] == "Max_NVe_Offset") { mTxTestCase.IsTest_Max_NVe_Offset = true; } if (list[i] == "Avg_Offset") { mTxTestCase.IsTest_Avg_Offset = true; } if (list[i] == "Max_Drift") { mTxTestCase.IsTest_Max_Drift = true; } if (list[i] == "Avg_Drift") { mTxTestCase.IsTest_Avg_Drift = true; } if (list[i] == "Drift_Rate") { mTxTestCase.IsTest_Drift_Rate = true; } } strTmp = xml.GetAttribute("Enable"); if (strTmp == "1") mTxTestCase.bCaseEnable = true; else mTxTestCase.bCaseEnable = false; listTxCase.Add(mTxTestCase); } if ("Pavg_Limit" == xml.Name) { strTmp = xml.GetAttribute("Value"); List<string> list = new List<string>(strTmp.Split(',')); txrxLimitCase.fPavg_Limit_Min = Convert.ToSingle(list[0]); txrxLimitCase.fPavg_Limit_Max = Convert.ToSingle(list[1]); } if ("Ppk_Limit" == xml.Name) { strTmp = xml.GetAttribute("Value"); List<string> list = new List<string>(strTmp.Split(',')); txrxLimitCase.fPpk_Limit_Min = Convert.ToSingle(list[0]); //txrxLimitCase.fPpk_Limit_Max = Convert.ToSingle(list[1]); } if ("Deltaf1_Avg_Limit" == xml.Name) { strTmp = xml.GetAttribute("Value"); List<string> list = new List<string>(strTmp.Split(',')); txrxLimitCase.fDeltaf1_Avg_Limit_Min = Convert.ToSingle(list[0]); txrxLimitCase.fDeltaf1_Avg_Limit_Max = Convert.ToSingle(list[1]); } if ("Deltaf1_Max_Limit" == xml.Name) { strTmp = xml.GetAttribute("Value"); List<string> list = new List<string>(strTmp.Split(',')); txrxLimitCase.fDeltaf1_Max_Limit_Min = Convert.ToSingle(list[0]); txrxLimitCase.fDeltaf1_Max_Limit_Max = Convert.ToSingle(list[1]); } if ("Deltaf2_Avg_Limit" == xml.Name) { strTmp = xml.GetAttribute("Value"); List<string> list = new List<string>(strTmp.Split(',')); txrxLimitCase.fDeltaf2_Avg_Limit_Min = Convert.ToSingle(list[0]); txrxLimitCase.fDeltaf2_Avg_Limit_Max = Convert.ToSingle(list[1]); } if ("Deltaf2_Max_Limit" == xml.Name) { strTmp = xml.GetAttribute("Value"); List<string> list = new List<string>(strTmp.Split(',')); txrxLimitCase.fDeltaf2_Max_Limit_Min = Convert.ToSingle(list[0]); txrxLimitCase.fDeltaf2_Max_Limit_Max = Convert.ToSingle(list[1]); } if ("Max_PVe_Offset_Limit" == xml.Name) { strTmp = xml.GetAttribute("Value"); List<string> list = new List<string>(strTmp.Split(',')); txrxLimitCase.fMax_PVe_Offset_Limit = Convert.ToSingle(list[0]); //txrxLimitCase.fDeltaf2_Max_Limit_Max = Convert.ToSingle(list[1]); } if ("Max_NVe_Offset_Limit" == xml.Name) { strTmp = xml.GetAttribute("Value"); List<string> list = new List<string>(strTmp.Split(',')); txrxLimitCase.fMax_NVe_Offset_Limit = Convert.ToSingle(list[0]); //txrxLimitCase.fDeltaf2_Max_Limit_Max = Convert.ToSingle(list[1]); } if ("Avg_Offset_Limit" == xml.Name) { strTmp = xml.GetAttribute("Value"); List<string> list = new List<string>(strTmp.Split(',')); txrxLimitCase.fAvg_Offset_Limit_Min = Convert.ToSingle(list[0]); txrxLimitCase.fAvg_Offset_Limit_Max = Convert.ToSingle(list[1]); } if ("Max_Drift_Limit" == xml.Name) { strTmp = xml.GetAttribute("Value"); List<string> list = new List<string>(strTmp.Split(',')); txrxLimitCase.fMax_Drift_Limit = Convert.ToSingle(list[0]); //txrxLimitCase.fMax_Drift_Limit_Max = Convert.ToSingle(list[1]); } if ("Avg_Drift_Limit" == xml.Name) { strTmp = xml.GetAttribute("Value"); List<string> list = new List<string>(strTmp.Split(',')); txrxLimitCase.fAvg_Drift_Limit_Min = Convert.ToSingle(list[0]); txrxLimitCase.fAvg_Drift_Limit_Max = Convert.ToSingle(list[1]); } if ("Drift_Rate_Limit" == xml.Name) { strTmp = xml.GetAttribute("Value"); List<string> list = new List<string>(strTmp.Split(',')); txrxLimitCase.fDrift_Rate_Limit = Convert.ToSingle(list[0]); } if ("Rx_Limit" == xml.Name) { strTmp = xml.GetAttribute("Value"); List<string> list = new List<string>(strTmp.Split(',')); txrxLimitCase.fRx_Limit = Convert.ToSingle(list[0]); } } } } catch (XmlException xmlEx) { strMsg = xmlEx.Message.ToString(); bRet = false; } catch (DataException dataEx) { strMsg = dataEx.Message.ToString(); bRet = false; } catch (SystemException sysEx) { strMsg = sysEx.Message.ToString(); bRet = false; } finally { xml.Close(); } return bRet; } #endregion #region //读数据加载统计文件FPY.XML public bool LoadCollectData(ref string strMsg) { bool bRet = true; XmlTextReader xml = null; try { sPass = ""; sFail = ""; sTotal = ""; sFYP = ""; string strJsonfile = System.Environment.CurrentDirectory + "\\FPY.xml"; xml = new XmlTextReader(strJsonfile); xml.WhitespaceHandling = WhitespaceHandling.None; while (xml.Read()) { if (xml.NodeType == XmlNodeType.Element) { if (xml.Name == "PASS") { sPass = xml.ReadString(); } if (xml.Name == "FAIL") { sFail = xml.ReadString(); } if (xml.Name == "TOTAL") { sTotal = xml.ReadString(); } if (xml.Name == "FYP") { sFYP = xml.ReadString(); } } } } catch (XmlException xmlEx) { strMsg = xmlEx.Message.ToString(); bRet = false; } catch (DataException dataEx) { strMsg = dataEx.Message.ToString(); bRet = false; } catch (SystemException sysEx) { strMsg = sysEx.Message.ToString(); bRet = false; } finally { xml.Close(); } return bRet; } #endregion #region //写数据到统计文件FPY.XML public bool WriteCollectData(ref string strMsg) { XmlDocument xml = null; bool bRet = true; try { string strJsonfile = System.Environment.CurrentDirectory + "\\FPY.XML"; xml = new XmlDocument(); xml.Load(strJsonfile); XmlElement pXmlElement = xml.SelectSingleNode(@"Node/Option/PASS") as XmlElement; pXmlElement.InnerText = sPass; pXmlElement = xml.SelectSingleNode(@"Node/Option/FAIL") as XmlElement; pXmlElement.InnerText = sFail; pXmlElement = xml.SelectSingleNode(@"Node/Option/TOTAL") as XmlElement; pXmlElement.InnerText = sTotal; pXmlElement = xml.SelectSingleNode(@"Node/Option/FYP") as XmlElement; pXmlElement.InnerText = sFYP; xml.Save(strJsonfile); } catch (XmlException xmlEx) { strMsg = xmlEx.Message.ToString(); bRet = false; } catch (DataException dataEx) { strMsg = dataEx.Message.ToString(); bRet = false; } catch (SystemException sysEx) { strMsg = sysEx.Message.ToString(); bRet = false; } finally { //xml.Close(); } return bRet; } #endregion public void ResetFYP() { sPass = "0"; sFail = "0"; sTotal = "0"; sFYP = "100%"; string strErrMsg = ""; if (!WriteCollectData(ref strErrMsg)) { MessageBox.Show("WriteCollectData Fail:{0}", strErrMsg); return; } tbPass.Text = sPass; tbFail.Text = sFail; tbTotal.Text = sTotal; tbFYP.Text = sFYP; } private void FpyDataToUI() { this.Invoke(new Action(() => { tbPass.Text = sPass; tbFail.Text = sFail ; tbTotal.Text = sTotal; tbFYP.Text = sFYP; } )); } private void SaveTextLog(string sSN) { string strTmp = string.Format("{0}{1}.Log",sSN,DateTime.Now.ToString("_yyyy_MM_dd_HH_mm_ss")); string fullPath = System.Environment.CurrentDirectory + @"\Log\" + strTmp; try { rLog.SaveFile(fullPath, RichTextBoxStreamType.PlainText); } catch (Exception ee) { MessageBox.Show("" + ee.Message); } finally { } } private void SaveDataToCSV(string sSN) { string strTmp = string.Format("{0}{1}.Log", sSN, DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss")); string fileName = System.Environment.CurrentDirectory + @"\CSV\Test_Report.csv"; string[] strFreq ={"","","","","","","","",""}; string[] strPlayload = { "", "", "", "", "", "", "", "", "" }; for(int i = 0;i<9;i++) { if(listTxCase[i].channel == E_Channel.CH0) { strFreq[i] = "2402"; } else if (listTxCase[i].channel == E_Channel.CH19) { strFreq[i] = "2440"; } else if (listTxCase[i].channel == E_Channel.CH39) { strFreq[i] = "2480"; } if (listTxCase[i].payload == E_Payload.Payload_PRBS9) { strPlayload[i] = "PRBS9"; } else if (listTxCase[i].payload == E_Payload.Payload_10101010) { strPlayload[i] = "10101010"; } else if (listTxCase[i].payload == E_Payload.Payload_11110000) { strPlayload[i] = "11110000"; } } int[] GetPackets = { 0, 0, 0, 0, 0, 0, 0, 0, 0 }; for (int i = 0; i < 9; i++) { if(i < 3) GetPackets[i] = listRxCase[i].iGetPackets; } if (!File.Exists(fileName)) //当文件不存在时创建文件 { //创建文件流(创建文件) FileStream fs = new FileStream(fileName, FileMode.Create, FileAccess.Write); //创建流写入对象,并绑定文件流 StreamWriter sw = new StreamWriter(fs); //实例化字符串流 StringBuilder sb = new StringBuilder(); //增加头部 sb.Append("SN").Append(",").Append("TestTime").Append(",").Append("Result").Append(","); sb.Append("Freq(MHz)").Append(",").Append("Playload").Append(",").Append("Pavg(dBm)").Append(",").Append("deltaf1 max (kHz)").Append(",").Append("deltaf1 avg (kHz)").Append(",").Append("deltaf2 max (kHz)").Append(",").Append("deltaf2 avg (kHz)").Append(",").Append("max +ve offset (kHz)").Append(",").Append("max -ve offset (kHz)").Append(",").Append("avg offset (kHz)").Append(",").Append("max drift (kHz)").Append(",").Append("avg drift (kHz)").Append(",").Append("drift rate (kHz)").Append(",").Append("RX_PacketNum").Append("\n"); sb.Append(sSN).Append(",").Append(DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss")).Append(",").Append(strToalRst).Append(","); //将数据添加进字符串流中(如果数据标题有变更,修改此处) for (int i = 0; i < 9; i++) { if (!listTxCase[i].bCaseEnable) continue; if (i == 0) { sb.Append(strFreq[i]).Append(",").Append(strPlayload[i]).Append(",").Append(listTxCase[i].fPavg).Append(",").Append(listTxCase[i].fDeltaf1_Max).Append(",").Append(listTxCase[i].fDeltaf1_Avg).Append(",").Append(listTxCase[i].fDeltaf2_Max).Append(",").Append(listTxCase[i].fDeltaf2_Avg).Append(",").Append(listTxCase[i].fMax_PVe_Offset).Append(",").Append(listTxCase[i].fMax_NVe_Offset).Append(",").Append(listTxCase[i].fAvg_Offset).Append(",").Append(listTxCase[i].fMax_Drift).Append(",").Append(listTxCase[i].fAvg_Drift).Append(",").Append(listTxCase[i].fDrift_Rate).Append(",").Append(GetPackets[i]).Append("\n"); } else { sb.Append(",").Append(",").Append(",").Append(strFreq[i]).Append(",").Append(strPlayload[i]).Append(",").Append(listTxCase[i].fPavg).Append(",").Append(listTxCase[i].fDeltaf1_Max).Append(",").Append(listTxCase[i].fDeltaf1_Avg).Append(",").Append(listTxCase[i].fDeltaf2_Max).Append(",").Append(listTxCase[i].fDeltaf2_Avg).Append(",").Append(listTxCase[i].fMax_PVe_Offset).Append(",").Append(listTxCase[i].fMax_NVe_Offset).Append(",").Append(listTxCase[i].fAvg_Offset).Append(",").Append(listTxCase[i].fMax_Drift).Append(",").Append(listTxCase[i].fAvg_Drift).Append(",").Append(listTxCase[i].fDrift_Rate).Append(",").Append(GetPackets[i]).Append("\n"); } } //将字符串流数据写入文件 sw.WriteLine(sb); //刷新文件流 sw.Flush(); sw.Close(); fs.Close(); return; } else { //创建文件流(创建文件) FileStream fs = new FileStream(fileName, FileMode.Append, FileAccess.Write); //创建流写入对象,并绑定文件流 StreamWriter sw = new StreamWriter(fs); //实例化字符串流 StringBuilder sb = new StringBuilder(); //增加头部 sb.Append("SN").Append(",").Append("TestTime").Append(",").Append("Result").Append(","); sb.Append("Freq(MHz)").Append(",").Append("Playload").Append(",").Append("Pavg(dBm)").Append(",").Append("deltaf1 max (kHz)").Append(",").Append("deltaf1 avg (kHz)").Append(",").Append("deltaf2 max (kHz)").Append(",").Append("deltaf2 avg (kHz)").Append(",").Append("max +ve offset (kHz)").Append(",").Append("max -ve offset (kHz)").Append(",").Append("avg offset (kHz)").Append(",").Append("max drift (kHz)").Append(",").Append("avg drift (kHz)").Append(",").Append("drift rate (kHz)").Append(",").Append("RX_PacketNum").Append("\n"); sb.Append(sSN).Append(",").Append(DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss")).Append(",").Append(strToalRst).Append(","); //将数据添加进字符串流中(如果数据标题有变更,修改此处) for (int i = 0; i < 9; i++) { if (!listTxCase[i].bCaseEnable) continue; if (i == 0) { sb.Append(strFreq[i]).Append(",").Append(strPlayload[i]).Append(",").Append(listTxCase[i].fPavg).Append(",").Append(listTxCase[i].fDeltaf1_Max).Append(",").Append(listTxCase[i].fDeltaf1_Avg).Append(",").Append(listTxCase[i].fDeltaf2_Max).Append(",").Append(listTxCase[i].fDeltaf2_Avg).Append(",").Append(listTxCase[i].fMax_PVe_Offset).Append(",").Append(listTxCase[i].fMax_NVe_Offset).Append(",").Append(listTxCase[i].fAvg_Offset).Append(",").Append(listTxCase[i].fMax_Drift).Append(",").Append(listTxCase[i].fAvg_Drift).Append(",").Append(listTxCase[i].fDrift_Rate).Append(",").Append(GetPackets[i]).Append("\n"); } else { sb.Append(",").Append(",").Append(",").Append(strFreq[i]).Append(",").Append(strPlayload[i]).Append(",").Append(listTxCase[i].fPavg).Append(",").Append(listTxCase[i].fDeltaf1_Max).Append(",").Append(listTxCase[i].fDeltaf1_Avg).Append(",").Append(listTxCase[i].fDeltaf2_Max).Append(",").Append(listTxCase[i].fDeltaf2_Avg).Append(",").Append(listTxCase[i].fMax_PVe_Offset).Append(",").Append(listTxCase[i].fMax_NVe_Offset).Append(",").Append(listTxCase[i].fAvg_Offset).Append(",").Append(listTxCase[i].fMax_Drift).Append(",").Append(listTxCase[i].fAvg_Drift).Append(",").Append(listTxCase[i].fDrift_Rate).Append(",").Append(GetPackets[i]).Append("\n"); } } //将字符串流数据写入文件 sw.WriteLine(sb); //刷新文件流 sw.Flush(); sw.Close(); fs.Close(); return; } } private void ShowMsg(Color color, string msg) { this.Invoke(new Action(() => { rLog.Select(rLog.TextLength, 0); //滚动到控件光标处 rLog.ScrollToCaret(); rLog.SelectionColor = color; rLog.AppendText(DateTime.Now.ToString("HH:mm:ss ") + msg + "\r\n"); if (color == Color.Red) { ShowTestResult(color, "FAIL"); StartButtonEnable(true); StopButtonEnable(false); t1.Abort(); SaveTextLog(strSN); SaveDataToCSV(strSN); strToalRst = "Fail"; } } )); } private void SetRunTime(string strTime) { this.Invoke(new Action(() => { tbRunTime.Text = strTime; } )); } private void ShowTestResult(Color color, string msg) { this.Invoke(new Action(() => { btResultShow.Visible = true; btResultShow.BackColor = color; btResultShow.Text = msg; if (msg == "PASS") { strToalRst = "Pass"; sPass = (Convert.ToInt32(sPass) + 1).ToString(); } if (msg == "FAIL") { sFail = (Convert.ToInt32(sFail) + 1).ToString(); } sTotal = (Convert.ToInt32(sTotal) + 1).ToString(); sFYP = ((float)Convert.ToInt32(sPass) / Convert.ToInt32(sTotal)) * 100 + "%"; FpyDataToUI(); sw.Stop(); TimeSpan ts = sw.Elapsed; sTestRunTime = String.Format("{0:00}:{1:00}:{2:00}", ts.Hours, ts.Minutes, ts.Seconds); SetRunTime(sTestRunTime); } )); } private void StartButtonEnable(bool bEnable) { this.Invoke(new Action(() => { btStart.Enabled = bEnable; } )); } private void StopButtonEnable(bool bEnable) { this.Invoke(new Action(() => { btStop.Enabled = bEnable; } )); } public void TestThreadMethod() { string strMsg = ""; strSN = ""; sTestRunTime = ""; sw.Start(); ShowMsg(Color.Green, "加载测试配置文件..."); if (!LoadTxXmlFile(ref strMsg)) { ShowMsg(Color.Red, "加载测试配置文件失败!"); return; } ShowMsg(Color.Green, "加载测试配置文件成功"); //串口打开 ShowMsg(Color.Green, "打开DUT串口..."); if (!EDut.UE_Init(strCOM, "NRF52382")) { ShowMsg(Color.Red, "打开DUT串口失败!"); return; } ShowMsg(Color.Green, "打开DUT串口成功!"); Thread.Sleep(1000); ShowMsg(Color.Green, "DUT Enter ok!"); ShowMsg(Color.Green, "DUT Reset..."); DUT_MODE.Com_Status status = EDut.UE_Reset(); if (status != DUT_MODE.Com_Status.ComOK) { Thread.Sleep(1000); status = EDut.UE_Reset(); if (status != DUT_MODE.Com_Status.ComOK) { Thread.Sleep(1000); status = EDut.UE_Reset(); if (status != DUT_MODE.Com_Status.ComOK) { ShowMsg(Color.Red, "DUT Reset Fail!"); return; } } } Thread.Sleep(1000); ShowMsg(Color.Green, "DUT Reset ok!"); ShowMsg(Color.Green, "Read SN..."); strSN = ""; if (EDut.UE_ReadSN(ref strSN) != DUT_MODE.Com_Status.ComOK) { ShowMsg(Color.Red, "Read SN失败!"); return; } ShowMsg(Color.Green, "Read SN成功!"); strMsg = string.Format("SN:{0}", strSN); ShowMsg(Color.Green, strMsg); if (strSN == "") { ShowMsg(Color.Red, "PCBA SN is null."); return; } ShowMsg(Color.Green, "连接仪器..."); if (mt8852b.ConnectInstr(cInstr, 5000) != 1) { ShowMsg(Color.Red, "连接仪器失败!"); return; } ShowMsg(Color.Green, "连接仪器成功"); ShowMsg(Color.Green, "初始化仪器..."); if (mt8852b.InstrTxInit() != 1) { ShowMsg(Color.Red, "初始化仪器失败!"); return; } ShowMsg(Color.Green, "初始化仪器成功"); //发送AT指令 /* ShowMsg(Color.Green, "打开DUT串口..."); if (!EDut.UE_Init(strCOM, "NRF52382")) { ShowMsg(Color.Red, "打开DUT串口失败!"); return; } ShowMsg(Color.Green, "打开DUT串口成功!");
*/
//在这里可以循环. for (int i = 0; i < 9; i++) { //if(i == 0) break;//用于调试 if (!listTxCase[i].bCaseEnable) continue; DUT_MODE.Payload pl = (DUT_MODE.Payload)listTxCase[i].payload; DUT_MODE.Channel ch = (DUT_MODE.Channel)listTxCase[i].channel; strMsg = "DUT Set "; if (ch == DUT_MODE.Channel.CH0) { strMsg += "CH0_"; } else if (ch == DUT_MODE.Channel.CH19) { strMsg += "CH19_"; } else if (ch == DUT_MODE.Channel.CH39) { strMsg += "CH39_"; } if (pl == DUT_MODE.Payload.Payload_PRBS9) { strMsg += "PRBS9"; } else if (pl == DUT_MODE.Payload.Payload_10101010) { strMsg += "10101010"; } else if (pl == DUT_MODE.Payload.Payload_11110000) { strMsg += "11110000"; } //ShowMsg(Color.Green, strMsg + "..."); string strTXTmp = strMsg; strMsg = string.Format("===============TX[{0}]:{1} START===============", listTxCase[i].sTestCase, strMsg); ShowMsg(Color.Green, strMsg); ShowMsg(Color.Green, "DUT Enter..."); if (EDut.UE_Enter() != DUT_MODE.Com_Status.ComOK) { ShowMsg(Color.Red, "DUT Enter Fail!"); return; } Thread.Sleep(1000); ShowMsg(Color.Green, "DUT Enter ok!"); ShowMsg(Color.Green, listTxCase[i].sTestCase + " Start..."); ShowMsg(Color.Green, "DUT Reset..."); DUT_MODE.Com_Status statusReset = EDut.UE_Reset(); if (statusReset != DUT_MODE.Com_Status.ComOK) { Thread.Sleep(1000); statusReset = EDut.UE_Reset(); if (statusReset != DUT_MODE.Com_Status.ComOK) { Thread.Sleep(1000); statusReset = EDut.UE_Reset(); if (statusReset != DUT_MODE.Com_Status.ComOK) { ShowMsg(Color.Red, "DUT Reset Fail!"); return; } } } Thread.Sleep(1000); ShowMsg(Color.Green, "DUT Reset ok!"); //DUT_MODE.Payload pl = DUT_MODE.Payload.Payload_PRBS9; //DUT_MODE.Channel ch = DUT_MODE.Channel.CH0; strMsg = string.Format("Set {0} TX", strTXTmp); if (EDut.UE_TxPCmd(pl, ch) != DUT_MODE.Com_Status.ComOK) { ShowMsg(Color.Green, strMsg + "Fail!"); return; } Thread.Sleep(1000); ShowMsg(Color.Green, strMsg + " 成功!"); ShowMsg(Color.Green, "Case Config Tx..."); Thread.Sleep(1000); if (mt8852b.CaseTxConfig(listTxCase[i]) != 1) { ShowMsg(Color.Red, "Case Config Tx Fail!"); return; } Thread.Sleep(1000); ShowMsg(Color.Green, strMsg + " Case Config Tx ok!"); strMsg = string.Format("===============TX[{0}]:{1} END===============\n", listTxCase[i].sTestCase, strMsg); ShowMsg(Color.Green, strMsg); strMsg = string.Format("================TX Result:{0},{1} START================", listTxCase[i].sTestCase, strTXTmp); ShowMsg(Color.Green, strMsg); //分析数据 //if(pl == DUT_MODE.Payload.Payload_PRBS9) if (listTxCase[i].IsTest_Pavg || listTxCase[i].IsTest_Ppk) { //strMsg = string.Format("Pavg:{0} Limit[{1},{2}] Ppk:{3} Limit[<={4}]",listTxCase[i].fPavg,txrxLimitCase.fPavg_Limit_Min,txrxLimitCase.fPavg_Limit_Max,listTxCase[i].fPpk,(3+listTxCase[i].fPavg)); strMsg = string.Format("Pavg:{0} Limit[{1},{2}] Ppk:<=>{3}", listTxCase[i].fPavg, txrxLimitCase.fPavg_Limit_Min, txrxLimitCase.fPavg_Limit_Max, listTxCase[i].fPpk); if (listTxCase[i].fPavg < txrxLimitCase.fPavg_Limit_Min || listTxCase[i].fPavg > txrxLimitCase.fPavg_Limit_Max) { ShowMsg(Color.Red, strMsg + "==>Fail!"); } if (listTxCase[i].fPpk > txrxLimitCase.fPpk_Limit_Min) //工程师说Ppk <= 6即可 { ShowMsg(Color.Red, strMsg + "==>Fail!"); } ShowMsg(Color.Green, strMsg + "==>OK!"); } if (listTxCase[i].IsTest_Deltaf1_Max || listTxCase[i].IsTest_Deltaf1_Avg) { strMsg = string.Format("deltaf1 max:{0} Limit[{1},{2}] deltaf1 avg:{3} Limit[{4},{5}]", listTxCase[i].fDeltaf1_Max, txrxLimitCase.fDeltaf1_Max_Limit_Min, txrxLimitCase.fDeltaf1_Max_Limit_Max, listTxCase[i].fDeltaf1_Avg, txrxLimitCase.fDeltaf1_Avg_Limit_Min, txrxLimitCase.fDeltaf1_Avg_Limit_Max); if (listTxCase[i].fDeltaf1_Max < txrxLimitCase.fDeltaf1_Max_Limit_Min || listTxCase[i].fDeltaf1_Avg > txrxLimitCase.fDeltaf1_Max_Limit_Max) { ShowMsg(Color.Red, strMsg + "==>Fail!"); } if (listTxCase[i].fDeltaf1_Avg < txrxLimitCase.fDeltaf1_Avg_Limit_Min || listTxCase[i].fDeltaf1_Avg > txrxLimitCase.fDeltaf1_Avg_Limit_Max) { ShowMsg(Color.Red, strMsg + "==>Fail!"); } ShowMsg(Color.Green, strMsg + "==>OK!"); } if (listTxCase[i].IsTest_Max_PVe_Offset || listTxCase[i].IsTest_Max_NVe_Offset || listTxCase[i].IsTest_Avg_Offset || listTxCase[i].IsTest_Max_Drift || listTxCase[i].IsTest_Avg_Drift || listTxCase[i].IsTest_Drift_Rate) { if (listTxCase[i].IsTest_Max_PVe_Offset) { strMsg = string.Format("Max +ve Offset:{0} Limit: <= {1} kHz", listTxCase[i].fMax_PVe_Offset, txrxLimitCase.fMax_PVe_Offset_Limit); if (listTxCase[i].fMax_PVe_Offset > txrxLimitCase.fMax_PVe_Offset_Limit) { ShowMsg(Color.Red, strMsg + "==>Fail!"); } ShowMsg(Color.Green, strMsg + "==>OK!"); } if (listTxCase[i].IsTest_Max_NVe_Offset) { strMsg = string.Format("Max -ve Offset:{0} Limit: <= {1} kHz", listTxCase[i].fMax_NVe_Offset, txrxLimitCase.fMax_NVe_Offset_Limit); if (listTxCase[i].fMax_NVe_Offset > txrxLimitCase.fMax_NVe_Offset_Limit) { ShowMsg(Color.Red, strMsg + "==>Fail!"); } ShowMsg(Color.Green, strMsg + "==>OK!"); } if (listTxCase[i].IsTest_Avg_Offset) { strMsg = string.Format("Average Offset:{0} Limit:[{1},{2}]", listTxCase[i].fAvg_Offset, txrxLimitCase.fAvg_Offset_Limit_Min, txrxLimitCase.fAvg_Offset_Limit_Max); if (listTxCase[i].fAvg_Offset > txrxLimitCase.fAvg_Offset_Limit_Max || listTxCase[i].fAvg_Offset < txrxLimitCase.fAvg_Offset_Limit_Min) { ShowMsg(Color.Red, strMsg + "==>Fail!"); } ShowMsg(Color.Green, strMsg + "==>OK!"); } if (listTxCase[i].IsTest_Max_Drift) { strMsg = string.Format("Max Drift: {0} kHz. Limit: < {1} kHz", listTxCase[i].fMax_Drift, txrxLimitCase.fMax_Drift_Limit); if (listTxCase[i].fMax_Drift > txrxLimitCase.fMax_Drift_Limit) { ShowMsg(Color.Red, strMsg + "==>Fail!"); } ShowMsg(Color.Green, strMsg + "==>OK!"); } if (listTxCase[i].IsTest_Avg_Drift) { strMsg = string.Format("Average Drift: {0} kHz. Limit:[{1},{2}]", listTxCase[i].fAvg_Drift, txrxLimitCase.fAvg_Drift_Limit_Min, txrxLimitCase.fAvg_Drift_Limit_Max); if (listTxCase[i].fAvg_Drift > txrxLimitCase.fAvg_Drift_Limit_Max || listTxCase[i].fAvg_Drift < txrxLimitCase.fAvg_Drift_Limit_Min) { ShowMsg(Color.Red, strMsg + "==>Fail!"); } ShowMsg(Color.Green, strMsg + "==>OK!"); } if (listTxCase[i].IsTest_Drift_Rate) { strMsg = string.Format("Drift Rate: {0} kHz. Limit: < {1} kHz / 50us", listTxCase[i].fDrift_Rate, txrxLimitCase.fDrift_Rate_Limit); if (listTxCase[i].fDrift_Rate > txrxLimitCase.fDrift_Rate_Limit) { ShowMsg(Color.Red, strMsg + "==>Fail!"); } ShowMsg(Color.Green, strMsg + "==>OK!"); } } if (listTxCase[i].IsTest_Deltaf2_Max || listTxCase[i].IsTest_Deltaf2_Avg) { strMsg = string.Format("deltaf2 max:{0} Limit[{1},{2}] deltaf2 avg:{3} Limit[{4},{5}]", listTxCase[i].fDeltaf2_Max, txrxLimitCase.fDeltaf2_Max_Limit_Min, txrxLimitCase.fDeltaf2_Max_Limit_Max, listTxCase[i].fDeltaf2_Avg, txrxLimitCase.fDeltaf2_Avg_Limit_Min, txrxLimitCase.fDeltaf2_Avg_Limit_Max); if (listTxCase[i].fDeltaf2_Max < txrxLimitCase.fDeltaf2_Max_Limit_Min || listTxCase[i].fDeltaf2_Avg > txrxLimitCase.fDeltaf2_Max_Limit_Max) { ShowMsg(Color.Red, strMsg + "==>Fail!"); } if (listTxCase[i].fDeltaf2_Avg < txrxLimitCase.fDeltaf2_Avg_Limit_Min || listTxCase[i].fDeltaf2_Avg > txrxLimitCase.fDeltaf2_Avg_Limit_Max) { ShowMsg(Color.Red, strMsg + "==>Fail!"); } ShowMsg(Color.Green, strMsg + "==>OK!"); } strMsg = string.Format("================TX Result:{0},{1} END================", listTxCase[i].sTestCase, strTXTmp); ShowMsg(Color.Green, strMsg); ShowMsg(Color.Green, listTxCase[i].sTestCase + " End\n"); } //========================================RX for (int i = 0; i < 3; i++) { DUT_MODE.Payload pl = (DUT_MODE.Payload)listTxCase[i].payload; DUT_MODE.Channel ch = (DUT_MODE.Channel)listTxCase[i].channel; strMsg = "DUT Set "; if (ch == DUT_MODE.Channel.CH0) { strMsg += "CH0_"; } else if (ch == DUT_MODE.Channel.CH19) { strMsg += "CH19_"; } else if (ch == DUT_MODE.Channel.CH39) { strMsg += "CH39_"; } if (pl == DUT_MODE.Payload.Payload_PRBS9) { strMsg += "PRBS9"; } else if (pl == DUT_MODE.Payload.Payload_10101010) { strMsg += "10101010"; } else if (pl == DUT_MODE.Payload.Payload_11110000) { strMsg += "11110000"; } //ShowMsg(Color.Green, strMsg + "..."); string strTXTmp = strMsg; if (pl == DUT_MODE.Payload.Payload_PRBS9 && listRxCase[i].IsTest_Rx) { ShowMsg(Color.Green, "=====RX Start====="); ShowMsg(Color.Green, "RX Start..."); ShowMsg(Color.Green, "DUT Enter..."); if (EDut.UE_Enter() != DUT_MODE.Com_Status.ComOK) { ShowMsg(Color.Red, "DUT Enter Fail!"); return; } Thread.Sleep(1000); ShowMsg(Color.Green, "DUT Enter ok!"); ShowMsg(Color.Green, "DUT Reset..."); DUT_MODE.Com_Status statusResultxRX = EDut.UE_Reset(); if (statusResultxRX != DUT_MODE.Com_Status.ComOK) { Thread.Sleep(1000); statusResultxRX = EDut.UE_Reset(); if (statusResultxRX != DUT_MODE.Com_Status.ComOK) { Thread.Sleep(1000); statusResultxRX = EDut.UE_Reset(); if (statusResultxRX != DUT_MODE.Com_Status.ComOK) { ShowMsg(Color.Red, "DUT Reset Fail!"); return; } } } Thread.Sleep(1000); ShowMsg(Color.Green, "DUT Reset ok!"); ShowMsg(Color.Green, "RX初始化仪器..."); if (mt8852b.InstrRxInit() != 1) { ShowMsg(Color.Red, "RX初始化仪器失败!"); return; } Thread.Sleep(1000); ShowMsg(Color.Green, "RX初始化仪器成功"); strMsg = "DUT Set "; if (ch == DUT_MODE.Channel.CH0) { strMsg += "CH0"; } else if (ch == DUT_MODE.Channel.CH19) { strMsg += "CH19"; } else if (ch == DUT_MODE.Channel.CH39) { strMsg += "CH39"; } strTXTmp = strMsg; strMsg = string.Format("================RX Config:{0},{1} START================", listTxCase[i].sTestCase, strTXTmp); ShowMsg(Color.Green, strMsg); strMsg = string.Format("Set {0} RX", strTXTmp); ShowMsg(Color.Green, strMsg); if (EDut.UE_RxSetCmd(ch) != DUT_MODE.Com_Status.ComOK) { ShowMsg(Color.Green, strMsg + "Fail!"); return; } Thread.Sleep(1000); ShowMsg(Color.Green, strMsg + " 成功!"); //listRxCase ShowMsg(Color.Green, "Case Config Rx..."); Thread.Sleep(500); if (mt8852b.CaseRxConfig(listRxCase[i]) != 1) { ShowMsg(Color.Red, "Case Config Rx Fail!"); return; } Thread.Sleep(500); ShowMsg(Color.Green, strMsg + " Case Config Rx ok!"); float fPacketLossRate = 0.0f; int iGetPacetsNum = 0; ShowMsg(Color.Green, "Rx Get PacketRate..."); Thread.Sleep(2000); if (EDut.UE_RxPCmd(listRxCase[i].iPackets,ref iGetPacetsNum, ref fPacketLossRate) != DUT_MODE.Com_Status.ComOK) { ShowMsg(Color.Red, "Rx Get PacketRate Fail!"); return; } listRxCase[i].fRxLevel = fPacketLossRate; listRxCase[i].iGetPackets = iGetPacetsNum; ShowMsg(Color.Green, strMsg + " Rx Get PacketRate ok!"); strMsg = string.Format("================RX Config:{0},{1} END================", listTxCase[i].sTestCase, strTXTmp); ShowMsg(Color.Green, strMsg); } strMsg = string.Format("================RX Result:{0},{1} START================", listTxCase[i].sTestCase, strTXTmp); ShowMsg(Color.Green, strMsg); if (pl == DUT_MODE.Payload.Payload_PRBS9 && listRxCase[i].IsTest_Rx) { strMsg = string.Format("Rx packets Num:{0} Rx packets Rate:{1} Limit: <= {2}", listRxCase[i].iGetPackets,listRxCase[i].fRxLevel, listRxCase[i].fRxLimit); if (listRxCase[i].fRxLevel > listRxCase[i].fRxLimit) { ShowMsg(Color.Red, strMsg + "==>Fail!"); } ShowMsg(Color.Green, strMsg + "==>OK!"); } strMsg = string.Format("================RX Result:{0},{1} END================", listTxCase[i].sTestCase, strTXTmp); ShowMsg(Color.Green, strMsg); } EDut.UE_Close(); ShowTestResult(Color.Green, "PASS"); StartButtonEnable(true); StopButtonEnable(false); SaveDataToCSV(strSN); } private void btStart_Click(object sender, EventArgs e) { rLog.Clear(); btResultShow.Visible = false; btStart.Enabled = false; btStop.Enabled = true; //Test //SaveLog("123456789"); if (t1 == null) { t1 = new Thread(new ThreadStart(TestThreadMethod)); t1.Start(); } else { if (t1.ThreadState == System.Threading.ThreadState.Aborted || t1.ThreadState == System.Threading.ThreadState.Stopped) { t1 = new Thread(new ThreadStart(TestThreadMethod)); t1.Start(); } else { t1.Start(); } } } private void btStop_Click(object sender, EventArgs e) { btStart.Enabled = true; btStop.Enabled = false; t1.Abort(); } private void cleanTestReportToolStripMenuItem1_Click(object sender, EventArgs e) { FormConfig formCfg = new FormConfig(this); formCfg.ShowDialog(); //formCfg.Show(); //FormLogin formLogin = new FormLogin(); //formLogin.Show(); } private void FormMain_Load(object sender, EventArgs e) { btResultShow.Visible = false; btStart.Enabled = true; btStop.Enabled = false; string strErrMsg = ""; if (!LoadCollectData(ref strErrMsg)) { MessageBox.Show("LoadCollectData Fail:{0}", strErrMsg); return; } tbPass.Text = sPass; tbFail.Text = sFail; tbTotal.Text = sTotal; tbFYP.Text = sFYP; } }
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。