Пример #1
0
        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));
        }
Пример #2
0
 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)
             });
         }
     }
 }
Пример #3
0
        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(); }));
        }
Пример #4
0
        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());
        }
Пример #5
0
        //[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());
        }
Пример #6
0
        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"));
                    }
                }
            }
        }
Пример #7
0
        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;
        }
Пример #8
0
        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;
                        }
                    }
                }
            }
        }