public static bool IsTestPlanEqual(TestPlan plan1, TestPlan plan2) { //bool bEquals = true; byte[] bytes1 = Interface.SerializerStateModel(plan1); byte[] bytes2 = Interface.SerializerStateModel(plan2); return(GeneFun.ArraysEqual <byte>(bytes1, bytes2)); }
public override void GeneSimulatedData() { foreach (SParamTestTrace tr in ItemList) { tr.ResultData.Clear(); double[] freqList = GeneFun.GenerateIndexedArray(StartFreq, StopFreq, SweepPoints); foreach (var freq in freqList) { tr.ResultData.Add(new XYData { X = freq, Y = GeneFun.GetRand(-1, 1) }); } } }
private void updateResultData(int stepIndex) { TestStep step = TestPlan.ManualConnectionList[TestPlan.currentConnIndex].TestStepList[stepIndex]; if (step is LoopTestStep) { return; } for (int i = 0; i < step.ItemList.Count(); i++) { var item = step.ItemList[i]; string sn = TestPlan.ManualConnectionList[TestPlan.currentConnIndex].SN; if (item is TestTrace) { TestTrace trace = item as TestTrace; if (trace.ResultData.Count() == 0) { continue; } double ymaxValue = trace.ResultData.Select(x => x.Y).Max(); double yminValue = trace.ResultData.Select(x => x.Y).Min(); double maxValue = Convert.ToDouble(ymaxValue.ToDigits(GeneTestSetup.Instance.DataDisplayDigits)); double minValue = Convert.ToDouble(yminValue.ToDigits(GeneTestSetup.Instance.DataDisplayDigits)); string xmaxValue = (new FreqStringConverter()).Convert(trace.ResultData.Find(x => x.Y == ymaxValue).X, null, null, null).ToString(); string xminValue = (new FreqStringConverter()).Convert(trace.ResultData.Find(x => x.Y == yminValue).X, null, null, null).ToString(); string tracePassFail = trace.PassFail == false ? "Fail" : "Pass"; for (int j = 0; j < TestPlan.TestSpecs.Count(); j++) { vm.TestResultTable.Rows.Add(new object[] { false, TestPlan.currentConnIndex + "," + stepIndex + "," + i, sn, trace.TypeName, TestPlan.TestSpecs[j].SpecName, trace.UserDefName, trace.TestConfigDesciption, trace.XDescription, trace.TestSpecList[j].LimitDescription, xmaxValue + "," + xminValue, maxValue + "," + minValue, tracePassFail }); foreach (XYTestMarker marker in trace.TestSpecList[j].TestMarkerList) { string markerPassFail = marker.PassFail == false ? "Fail" : "Pass"; double valueY = Convert.ToDouble(marker.MarkerResult[0].Y.ToDigits(GeneTestSetup.Instance.DataDisplayDigits)); string valueX = (new FreqStringConverter()).Convert(marker.MarkerResult[0].X, null, null, null).ToString(); vm.TestResultTable.Rows.Add(new object[] { false, "", sn, "Marker", TestPlan.TestSpecs[j].SpecName, marker.UserDefName, marker.TestConfigDesciption, marker.XDescription, trace.TestSpecList[j].LimitDescription, valueX, valueY, markerPassFail }); } } } else if (item is PointTestItem) { PointTestItem pointItem = item as PointTestItem; double valueY = Convert.ToDouble(pointItem.Y.ToDigits(GeneTestSetup.Instance.DataDisplayDigits)); string valueX = (new FreqStringConverter()).Convert(pointItem.X, null, null, null).ToString(); string pointItemPassFail = pointItem.PassFail == false ? "Fail" : "Pass"; for (int j = 0; j < TestPlan.TestSpecs.Count(); j++) { vm.TestResultTable.Rows.Add(new object[] { false, "", sn, pointItem.TypeName, TestPlan.TestSpecs[j].SpecName, pointItem.UserDefName, pointItem.TestConfigDesciption, pointItem.XDescription, pointItem.TestSpecList[j].LimitDescription, valueX, valueY, pointItemPassFail }); } } else if (item is TRTestItem) { TRTestItem trTestItem = item as TRTestItem; if (trTestItem.Data == null) { return; } if (trTestItem.FreqList == null || trTestItem.FreqList.Count() == 0) { return; } if (trTestItem.StateList == null || trTestItem.StateList.Count() == 0) { return; } double?maxValue; double?minValue; int maxRowIndex; int maxColumnIndex; int minRowIndex; int minColumnIndex; GeneFun.GetArrayMax(out maxRowIndex, out maxColumnIndex, out maxValue, trTestItem.Data); GeneFun.GetArrayMin(out minRowIndex, out minColumnIndex, out minValue, trTestItem.Data); maxValue = Convert.ToDouble(Convert.ToDouble(maxValue).ToDigits(GeneTestSetup.Instance.DataDisplayDigits)); minValue = Convert.ToDouble(Convert.ToDouble(minValue).ToDigits(GeneTestSetup.Instance.DataDisplayDigits)); int maxAtt = trTestItem.StateList[maxRowIndex].Att; int maxPhase = trTestItem.StateList[maxRowIndex].Phase; double maxFreq = trTestItem.FreqList[maxColumnIndex]; int minAtt = trTestItem.StateList[minRowIndex].Att; int minPhase = trTestItem.StateList[minRowIndex].Phase; double minFreq = trTestItem.FreqList[minColumnIndex]; for (int j = 0; j < TestPlan.TestSpecs.Count(); j++) { string maxValueStr = "最大值:att =" + maxAtt + "phase = " + maxPhase + "freq = " + maxFreq; string minValueStr = "最小值:att =" + minAtt + "phase = " + minPhase + "freq = " + minFreq; string trTestItemPassFail = trTestItem.TestSpecList[j].PassFail == false ? "Fail" : "Pass"; vm.TestResultTable.Rows.Add(new object[] { false, TestPlan.currentConnIndex + "," + stepIndex + "," + i, sn, trTestItem.TypeName, TestPlan.TestSpecs[j].SpecName, trTestItem.UserDefName, trTestItem.TestConfigDesciption, trTestItem.XDescription, trTestItem.TestSpecList[j].LimitDescription, maxValueStr + "\r\n" + minValueStr, maxValue + "," + minValue, trTestItemPassFail }); } } } this.Dispatcher.Invoke(new Action(() => { bindGridControl(); })); }
public void CalcInfo() { if (Data == null || Data.Length == 0) { foreach (var spec in TestSpecList) { spec.PassFail = null; } return; } foreach (var spec in TestSpecList) { #region foreach (var marker in spec.TestMarkerList) { if (marker is XYTestMarker) { var xyMarker = marker as XYTestMarker; xyMarker.MarkerResult.Clear(); switch (xyMarker.Type) { case XYTestMarkerTypeEnum.ABSMax: double yAbsMax = GeneFun.GetTwoArraryMax(Data, true); double xAbsMax = FreqList[0]; xyMarker.MarkerResult.Add(new XYData(xAbsMax, yAbsMax)); break; case XYTestMarkerTypeEnum.ABSMin: double yAbsMin = GeneFun.GetTwoArrayMin(Data, true); double xAbsMin = FreqList[0]; xyMarker.MarkerResult.Add(new XYData(xAbsMin, yAbsMin)); break; case XYTestMarkerTypeEnum.Max: double yMax = GeneFun.GetTwoArraryMax(Data, false); double xMax = FreqList[0]; xyMarker.MarkerResult.Add(new XYData(xMax, yMax)); break; case XYTestMarkerTypeEnum.Min: double yMin = GeneFun.GetTwoArrayMin(Data, false); double xMin = FreqList[0]; xyMarker.MarkerResult.Add(new XYData(xMin, yMin)); break; case XYTestMarkerTypeEnum.Peak: double y1Max = GeneFun.GetTwoArraryMax(Data, false); double y1Min = GeneFun.GetTwoArrayMin(Data, false); if (Math.Abs(y1Max) >= Math.Abs(y1Min)) { xyMarker.MarkerResult.Add(new XYData(FreqList[0], y1Max)); } else { xyMarker.MarkerResult.Add(new XYData(FreqList[0], y1Min)); } break; default: break; } } marker.JudgePassFail(); } #endregion #region List <bool> boolList = new List <bool>(); CalcEngine.CalcEngine ce = new CalcEngine.CalcEngine(); ce.Variables.Add("att", null); ce.Variables.Add("phase", null); ce.Variables.Add("freq", null); for (int i = 0; i < Data.GetLength(0); i++) { for (int j = 0; j < Data.GetLength(1); j++) { ce.Variables["att"] = StateList[i].Att; ce.Variables["phase"] = StateList[i].Phase; ce.Variables["freq"] = FreqList[j]; object highLimitStr; object lowLimitStr; if (string.IsNullOrWhiteSpace(spec.HighLimit)) { highLimitStr = null; } else { highLimitStr = ce.Evaluate(spec.HighLimit); } if (string.IsNullOrWhiteSpace(spec.LowLimit)) { lowLimitStr = null; } else { lowLimitStr = ce.Evaluate(spec.LowLimit); } double?highLimitValue = highLimitStr.ToNullDouble(); double?lowLimitValue = lowLimitStr.ToNullDouble(); bool passFail = GeneFun.IsPassFail(Data[i, j], highLimitValue, lowLimitValue); boolList.Add(passFail); } } spec.PassFail = GeneFun.NullBoolAndList(boolList); spec.PassFail = GeneFun.NullBoolAnd(GeneFun.NullBoolAndList(spec.TestMarkerList.Select(x => x.PassFail).ToList()), spec.PassFail); #endregion } PassFail = GeneFun.NullBoolAndList(TestSpecList.Select(x => x.PassFail).ToList()); }
//[System.Xml.Serialization.XmlIgnore] //public bool IsTest { get; set; } //[System.Xml.Serialization.XmlIgnore] //[Newtonsoft.Json.JsonIgnore] //public bool? PassFail { get; set; } //public string Unit { get; set; } public void CalcInfo() { if (ResultData == null || ResultData.Count == 0) { return; } for (int i = 0; i < ResultData.Count(); i++) { ResultData[i] = new XYData() { X = ResultData[i].X, Y = ResultData[i].Y + Compensation }; } foreach (var spec in TestSpecList) { foreach (var marker in spec.TestMarkerList) { #region if (marker is XYTestMarker) { var xyMarker = marker as XYTestMarker; xyMarker.MarkerResult.Clear(); switch (xyMarker.Type) { case XYTestMarkerTypeEnum.Normal: double[] lstXData = ResultData.Select(x => x.X).ToArray(); double[] lstYData = ResultData.Select(x => x.Y).ToArray(); double xData = xyMarker.Start; double yData = GeneFun.LinearInterp(lstXData, lstYData, xData); xyMarker.MarkerResult.Add(new XYData(xData, yData)); break; case XYTestMarkerTypeEnum.Max: double ymax = ResultData.Select(x => x.Y).Max(); double xmax = ResultData.Find(x => x.Y == ymax).X; xyMarker.MarkerResult.Add(new XYData(xmax, ymax)); break; case XYTestMarkerTypeEnum.Min: double ymin = ResultData.Select(x => x.Y).Min(); double xmin = ResultData.Find(x => x.Y == ymin).X; xyMarker.MarkerResult.Add(new XYData(xmin, ymin)); break; case XYTestMarkerTypeEnum.ABSMax: double yAbsmax = ResultData.Select(x => Math.Abs(x.Y)).Max(); double xAbsmax = ResultData.Find(x => Math.Abs(x.Y) == yAbsmax).X; xyMarker.MarkerResult.Add(new XYData(xAbsmax, yAbsmax)); break; case XYTestMarkerTypeEnum.ABSMin: double yAbsmin = ResultData.Select(x => Math.Abs(x.Y)).Min(); double xAbsmin = ResultData.Find(x => Math.Abs(x.Y) == yAbsmin).X; xyMarker.MarkerResult.Add(new XYData(xAbsmin, yAbsmin)); break; case XYTestMarkerTypeEnum.Peak: double y1Max = ResultData.Select(x => x.Y).Max(); double x1Max = ResultData.Find(x => x.Y == y1Max).X; double y1Min = ResultData.Select(x => x.Y).Min(); double x1Min = ResultData.Find(x => x.Y == y1Min).X; if (Math.Abs(y1Max) >= Math.Abs(y1Min)) { xyMarker.MarkerResult.Add(new XYData(x1Max, y1Max)); } else { xyMarker.MarkerResult.Add(new XYData(x1Min, y1Max)); } break; case XYTestMarkerTypeEnum.Mean: double avg = ResultData.Select(x => x.Y).Average(); double xx = ResultData.Select(x => x.X).First(); xyMarker.MarkerResult.Add(new XYData(xx, avg)); break; case XYTestMarkerTypeEnum.PhaseRipple: double phaseNolin = GeneFun.CalcPhaseNonlin(ResultData.Select(x => x.Y).ToArray(), 10000, 0.01); xyMarker.MarkerResult.Add(new XYData(ResultData.Select(x => x.X).First(), phaseNolin)); break; case XYTestMarkerTypeEnum.Ripple: double ymin1 = ResultData.Select(x => x.Y).Min(); double ymax1 = ResultData.Select(x => x.Y).Max(); xyMarker.MarkerResult.Add(new XYData(ResultData.Select(x => x.X).First(), ymax1 - ymin1)); break; case XYTestMarkerTypeEnum.InRange: xyMarker.MarkerResult.Add(new XYData(0, 0)); break; case XYTestMarkerTypeEnum.Target: xyMarker.MarkerResult.Add(new XYData(0, 0)); break; case XYTestMarkerTypeEnum.Q_Value: xyMarker.MarkerResult.Add(new XYData(0, 0)); break; case XYTestMarkerTypeEnum.BandWidth: xyMarker.MarkerResult.Add(new XYData(0, 0)); break; case XYTestMarkerTypeEnum.LeftFreq: xyMarker.MarkerResult.Add(new XYData(0, 0)); break; case XYTestMarkerTypeEnum.RightFreq: xyMarker.MarkerResult.Add(new XYData(0, 0)); break; case XYTestMarkerTypeEnum.CenterFreq: xyMarker.MarkerResult.Add(new XYData(0, 0)); break; case XYTestMarkerTypeEnum.InsertionLoss: xyMarker.MarkerResult.Add(new XYData(0, 0)); break; case XYTestMarkerTypeEnum.Pin_NdB: xyMarker.MarkerResult.Add(new XYData(0, 0)); break; case XYTestMarkerTypeEnum.Po_NdB: xyMarker.MarkerResult.Add(new XYData(0, 0)); break; case XYTestMarkerTypeEnum.RippleInRange: xyMarker.MarkerResult.Add(new XYData(0, 0)); break; case XYTestMarkerTypeEnum.RippleHalf: double ymin2 = ResultData.Select(x => x.Y).Min(); double ymax2 = ResultData.Select(x => x.Y).Max(); xyMarker.MarkerResult.Add(new XYData(ResultData.Select(x => x.X).First(), (ymax2 - ymin2) / 2)); break; case XYTestMarkerTypeEnum.PowerMean: double avg1 = ResultData.Select(x => Math.Pow(10, ((x.Y - 30) / 10))).Average(); double xx1 = ResultData.Select(x => x.Y).First(); xyMarker.MarkerResult.Add(new XYData(xx1, avg1)); break; default: break; } } marker.JudgePassFail(); #endregion } if (!spec.TestLimit.Enable) { bool?specPassFail = null; if (spec.UpLimit != null && spec.LowLimit != null) { int upCount = ResultData.Where(x => x.Y > spec.UpLimit).Count(); int lowCount = ResultData.Where(x => x.Y < spec.LowLimit).Count(); if (upCount > 0 || lowCount > 0) { specPassFail = false; } else { specPassFail = true; } } else if (spec.UpLimit != null && spec.LowLimit == null) { int upCount = ResultData.Where(x => x.Y > spec.UpLimit).Count(); if (upCount > 0) { specPassFail = false; } else { specPassFail = true; } } else if (spec.UpLimit == null && spec.LowLimit != null) { int lowCount = ResultData.Where(x => x.Y < spec.LowLimit).Count(); if (lowCount > 0) { specPassFail = false; } else { specPassFail = true; } } else { specPassFail = null; } spec.PassFail = GeneFun.NullBoolAnd(GeneFun.NullBoolAndList(spec.TestMarkerList.Select(x => x.PassFail).ToList()), specPassFail); } } PassFail = GeneFun.NullBoolAndList(TestSpecList.Select(x => x.PassFail).ToList()); }
public override void Single() { if (GeneTestSetup.Instance.IsSimulated) { foreach (TestTrace tr in ItemList) { tr.ResultData.Clear(); double[] freqList = GeneFun.GenerateIndexedArray(StartFreq, StopFreq, SweepPoints); foreach (var freq in freqList) { tr.ResultData.Add(new XYData { X = freq, Y = GeneFun.GetRand(1, 2) }); } tr.XAxisInfo.Start = StartFreq.ToRFFreqStr(); tr.XAxisInfo.Stop = StopFreq.ToRFFreqStr(); tr.XAxisInfo.Unit = "Hz"; tr.XAxisInfo.Center = MeasBandwidth.ToString(); } } else { if (CorrectionEnable && (CorrData.StateFile != null)) { //nfa.ResetInterface(); //(nfa as InstruDriver).Wait(10000); //nfa.SendFileToInstru(CorrData.StateFile, "symt"); //(nfa as InstruDriver).Wait(10000); //如果当前加载的状态文件没有变化,那么不重新加载 if (CurrentStateFile != "symt" + IndexInSeq) { nfa.RecallState("symt" + IndexInSeq); (nfa as InstruDriver).Wait(10000); CurrentStateFile = "symt" + IndexInSeq; } } else//without correction set nfa with settings { InitSettings(); } //load correction nfa.Init(); (nfa as Symtant.InstruDriver.InstruDriver).Wait(SweepPoints * 1000); double[] nfRes; if (CorrectionEnable) { nfRes = nfa.GetCorrNF(); } else { nfRes = nfa.GetUnCorrNF(); } //add user correction to test result foreach (TestTrace tr in ItemList) { tr.ResultData.Clear(); double[] freqList = GeneFun.GenerateIndexedArray(StartFreq, StopFreq, SweepPoints); if (freqList.Count() == nfRes.Count()) { for (int i = 0; i < freqList.Count(); i++) { tr.ResultData.Add(new XYData { X = freqList[i], Y = nfRes[i] }); } } else { throw (new Exception("wrong nf test result")); } } } }
public override void Single() { foreach (PIMTestTrace tr in ItemList) { (tr.TestResult as XYTraceResult).ResultData.Clear(); } if (GeneTestSetup.Instance.IsSimulated) { switch (CalType) { case PIMCalType.Point: foreach (PIMTestTrace tr in ItemList) { (tr.TestResult as XYTraceResult).ResultData.Clear(); if (tr.TypeName == PIMTestTraceType.PIMTrace1) { (tr.TestResult as XYTraceResult).ResultData.Add(new XYData { X = 0, Y = GeneFun.GetRand(-140, -100) }); } if (tr.TypeName == PIMTestTraceType.PIMTrace2) { (tr.TestResult as XYTraceResult).ResultData.Add(new XYData { X = 0, Y = GeneFun.GetRand(-140, -100) }); } } PIMPower1 = GeneFun.GetRand(42, 44); PIMPower2 = GeneFun.GetRand(42, 44); break; case PIMCalType.Sweep: foreach (PIMTestTrace tr in ItemList) { (tr.TestResult as XYTraceResult).ResultData.Clear(); if (tr.SweepSource == PIMSweepSourceEnum.F1) { double[] freqList = GeneFun.GenerateIndexedArray(StartFreq1, StopFreq1, points1); foreach (var freq in freqList) { (tr.TestResult as XYTraceResult).ResultData.Add(new XYData { X = freq, Y = GeneFun.GetRand(-140, -100) }); } } if (tr.SweepSource == PIMSweepSourceEnum.F2) { double[] freqList = GeneFun.GenerateIndexedArray(StartFreq2, StopFreq2, points2); foreach (var freq in freqList) { (tr.TestResult as XYTraceResult).ResultData.Add(new XYData { X = freq, Y = GeneFun.GetRand(-140, -100) }); } } } PIMPower1 = GeneFun.GetRand(42, 44); PIMPower2 = GeneFun.GetRand(42, 44); break; case PIMCalType.TimeDomain: int num = PIMOrder / 2; double dblIMF = (((num + 1) * CWFreq1) - (num * CWFreq2)); foreach (PIMTestTrace tr in ItemList) { (tr.TestResult as XYTraceResult).ResultData.Clear(); if (tr.SweepSource == PIMSweepSourceEnum.F1) { for (int i = 0; i < 50; i++) { (tr.TestResult as XYTraceResult).ResultData.Add(new XYData { X = i, Y = GeneFun.GetRand(-140, -100) }); } } if (tr.SweepSource == PIMSweepSourceEnum.F2) { for (int i = 0; i < 50; i++) { (tr.TestResult as XYTraceResult).ResultData.Add(new XYData { X = i, Y = GeneFun.GetRand(-140, -100) }); } } } PIMPower1 = GeneFun.GetRand(42, 44); PIMPower2 = GeneFun.GetRand(42, 44); break; default: break; } } else { //setting to instru MeasInfo.InstruInfoList[0].InstruDriver.Reset(); PIMTester.setFreq(CWFreq1, CWFreq2); PIMTester.setPow(CWPOW1, CWPOW2); PIMTester.setMeasMode(MeasMode.ToString()); PIMTester.setUnit(ResultUnit.ToString()); PIMTester.setIMOrder(PIMOrder); PIMTester.setPort(PortName.ToString()); if (CalType == PIMCalType.Point) { int num = PIMOrder / 2; double dblIMF = ((num + 1) * CWFreq1) - (num * CWFreq2); PIMTester.setModeStandard(dblIMF); PIMTester.setPowOn(true, true); List <XYData> lstRes = new List <XYData>(); double[] strRes = new double[3]; if (ResultUnit == ResultUnit.dBm) { strRes = PIMTester.getPointIMPow(0); } else { strRes = PIMTester.getPointIMPow(CWPOW1); } PIMPower1 = strRes[0]; PIMPower2 = strRes[1]; //XYData xyData = new XYData(); ////赋值 //xyData.X = dblIMF; //xyData.Y = strRes[2]; //lstRes.Add(xyData); //PIMTestResult1 = (XYDataArr)lstRes; foreach (PIMTestTrace tr in ItemList) { if (tr.TypeName == PIMTestTraceType.PIMTrace1) { (tr.TestResult as XYTraceResult).ResultData.Add(new XYData { X = dblIMF, Y = strRes[2] }); } if (tr.TypeName == PIMTestTraceType.PIMTrace2) { (tr.TestResult as XYTraceResult).ResultData.Add(new XYData { X = dblIMF, Y = strRes[2] }); } } } else if (CalType == PIMCalType.Sweep) { SweepFlag = PIMTester.getSweepFlag(); //int number = (PIMOrder / 2); //double dblTestStep1 = TestStepper * (number + 1f); //double dblTestStep2 = TestStepper * number; int intTotalCount1 = (SweepFlag == "F1UP" ? (int)((StopFreq1 - StartFreq1) / TestStepper) : (int)((StopFreq2 - StartFreq2) / TestStepper)); int intTotalCount2 = (SweepFlag == "F1UP" ? (int)((StopFreq2 - StartFreq2) / TestStepper) : (int)((StopFreq1 - StartFreq1) / TestStepper)); PIMTester.setModeSweepTx(TestStepper, CWFreq1, CWFreq2); PIMTester.setPowOn(true, true); double newData1 = -200; double newData2 = -200; double dblIMF1 = 0; double dblIMF2 = 0; for (int i = 0; i < (intTotalCount1 + intTotalCount2 + 2); i++) { bool bRunState = GetRunState(); if (!bRunState) { PIMTester.setPowOn(false, false); foreach (PIMTestTrace tr in ItemList) { (tr.TestResult as XYTraceResult).ResultData.Clear(); } return; } double dblNowFreq1 = 0; double dblNowFreq2 = 0; int j = 0; if (i <= intTotalCount1) { j = i; dblNowFreq1 = (SweepFlag == "F1UP" ? (StartFreq1 + i * TestStepper) : StartFreq1); dblNowFreq2 = (SweepFlag == "F1UP" ? StopFreq2 : (StopFreq2 - j * TestStepper)); } else { j = (i - intTotalCount1 - 1); dblNowFreq1 = (SweepFlag == "F1UP" ? StartFreq1 : (StartFreq1 + i * TestStepper)); dblNowFreq2 = (SweepFlag == "F1UP" ? (StopFreq2 - j * TestStepper) : StopFreq2); } PIMTester.setPowATT("CARR1", CWPOW1); PIMTester.setPowATT("CARR2", CWPOW2); double[] strRes = new double[4]; if (ResultUnit == ResultUnit.dBm) { strRes = PIMTester.getSweepIMPow(PIMOrder, dblNowFreq1, dblNowFreq2, 0); } else { strRes = PIMTester.getSweepIMPow(PIMOrder, dblNowFreq1, dblNowFreq2, CWPOW1); } PIMPower1 = strRes[0]; PIMPower2 = strRes[1]; if (i <= intTotalCount1) { if (SweepFlag == "F1UP") { foreach (PIMTestTrace tr in ItemList) { if (tr.TypeName == PIMTestTraceType.PIMTrace1) { (tr.TestResult as XYTraceResult).ResultData.Add(new XYData { X = strRes[2], Y = strRes[3] }); } } if (newData1 < strRes[3]) { dblIMF1 = strRes[2]; newData1 = strRes[3]; } } else { foreach (PIMTestTrace tr in ItemList) { if (tr.TypeName == PIMTestTraceType.PIMTrace2) { (tr.TestResult as XYTraceResult).ResultData.Add(new XYData { X = strRes[2], Y = strRes[3] }); } } if (newData2 < strRes[3]) { dblIMF2 = strRes[2]; newData2 = strRes[3]; } } } else { if (SweepFlag == "F1UP") { foreach (PIMTestTrace tr in ItemList) { if (tr.TypeName == PIMTestTraceType.PIMTrace2) { (tr.TestResult as XYTraceResult).ResultData.Add(new XYData { X = strRes[2], Y = strRes[3] }); } } if (newData2 < strRes[3]) { dblIMF2 = strRes[2]; newData2 = strRes[3]; } } else { foreach (PIMTestTrace tr in ItemList) { if (tr.TypeName == PIMTestTraceType.PIMTrace1) { (tr.TestResult as XYTraceResult).ResultData.Add(new XYData { X = strRes[2], Y = strRes[3] }); } } if (newData1 < strRes[3]) { dblIMF1 = strRes[2]; newData1 = strRes[3]; } } } } } else { int num = PIMOrder / 2; double dblIMF = (((num + 1) * CWFreq1) - (num * CWFreq2)); PIMTester.setModeStandard(dblIMF); PIMTester.setPowOn(true, true); List <XYData> lstRes = new List <XYData>(); DateTime TimeOld = System.DateTime.Now; int i = 0; while (System.DateTime.Now.Subtract(TimeOld).TotalSeconds < TestTime) { bool bRunState = GetRunState(); if (!bRunState) { PIMTester.setPowOn(false, false); return; } PIMTester.setPowATT("CARR1", CWPOW1); PIMTester.setPowATT("CARR2", CWPOW2); double[] strRes = new double[3]; if (ResultUnit == ResultUnit.dBm) { strRes = PIMTester.getPointIMPow(0); } else { strRes = PIMTester.getPointIMPow(CWPOW1); } PIMPower1 = strRes[0]; PIMPower2 = strRes[1]; foreach (PIMTestTrace tr in ItemList) { if (tr.TypeName == PIMTestTraceType.PIMTrace1) { (tr.TestResult as XYTraceResult).ResultData.Add(new XYData { X = i, Y = strRes[2] }); } if (tr.TypeName == PIMTestTraceType.PIMTrace2) { (tr.TestResult as XYTraceResult).ResultData.Add(new XYData { X = i, Y = strRes[2] }); } } i++; } } PIMTester.setPowOn(false, false); } SingleDBTime = DataUtils.StaticInfo.DBTime; }
public override void Single() { if (GeneTestSetup.Instance.IsSimulated) { foreach (TestTrace tr in ItemList) { tr.ResultData.Clear(); tr.ResultData.Add(new XYData { X = 0, Y = GeneFun.GetRand(-100, -50) }); } } else { double fMeas1 = 1e9; double fMeas2 = 1e9; double IMD = 0; double OIP3 = 0; switch (Order) { case 3: fMeas1 = 2 * F1 - F2; fMeas2 = 2 * F2 - F1; break; case 5: fMeas1 = 3 * F1 - 2 * F2; fMeas2 = 3 * F2 - 2 * F1; break; default: break; } double measSpan = (F2 - F1) / 4; sg1.ResetInterface(); sg2.ResetInterface(); sa.ResetInterface(); sg1.Freq = F1; sg2.Freq = F2; //sg1.PowerLevel = F1Power; //sg2.PowerLevel = F2Power; sg1.PowerLevel = F1Power + PowerErr1; sg2.PowerLevel = F2Power + PowerErr2; sg1.OutputEnable = true; sg2.OutputEnable = true; (sg1 as InstruDriver).Wait(); (sg2 as InstruDriver).Wait(); (sa as InstruDriver).Wait(); switch (Sideband) { case IMDSidebandEnum.Low: double res1 = MeasPeak(fMeas1, measSpan); double p1 = MeasPeak(F1, measSpan); //double p2 = MeasPeak(F2, measSpan); IMD = (res1 - p1) / 2; OIP3 = p1 - IMD; break; case IMDSidebandEnum.High: double res2 = MeasPeak(fMeas2, measSpan); double p2 = MeasPeak(F2, measSpan); //double p2 = MeasPeak(F2, measSpan); IMD = (res2 - p2) / 2; OIP3 = p2 - IMD; break; case IMDSidebandEnum.Avg: res1 = MeasPeak(fMeas1, measSpan); res2 = MeasPeak(fMeas2, measSpan); p1 = MeasPeak(F1, measSpan); p2 = MeasPeak(F2, measSpan); //double p2 = MeasPeak(F2, measSpan); IMD = (res1 + res2 - p1 - p2) / 4; OIP3 = (p1 + p2) / 2 - IMD; break; case IMDSidebandEnum.Worst: res1 = MeasPeak(fMeas1, measSpan); res2 = MeasPeak(fMeas2, measSpan); if (res1 >= res2) { p1 = MeasPeak(F1, measSpan); IMD = (res1 - p1) / 2; OIP3 = p1 - IMD; } else { p2 = MeasPeak(F2, measSpan); IMD = (res2 - p2) / 2; OIP3 = p2 - IMD; } break; default: break; } double IIP3 = (F1Power + F2Power) / 2 - IMD; foreach (TestTrace tr in ItemList) { var tRes = tr; if (tRes != null) { tRes.ResultData.Clear(); switch (tr.TypeName) { case IMDTestTraceType.IMD: tRes.ResultData.Add(new XYData() { X = (F1 + F2) / 2, Y = IMD }); break; case IMDTestTraceType.IIP3: tRes.ResultData.Add(new XYData() { X = (F1 + F2) / 2, Y = IIP3 }); break; case IMDTestTraceType.OIP3: tRes.ResultData.Add(new XYData() { X = (F1 + F2) / 2, Y = OIP3 }); break; default: break; } } } } }