public static int ExecuteTest(SystemHardware inSys, CalStructParameter m_Parameter, out CalResult result)
        {
            try
            {
                if (m_Parameter.isInput)
                {
                    MessageBox.Show("请将信号源输出线与频谱仪连接!");
                }
                else
                {
                    MessageBox.Show("将信号源与输入DUT连接线,DUT输出RF线连接到频谱仪!");
                }
                CalResult resultnew = new CalResult();
                //信号源初始化
                m_SG = SystemHardware.Hardware <SignalGenerator> .GetElmentByName("RackSys.TestLab.Instrument.SignalGenerator1");

                m_SG.Preset();
                m_SG.RFOutputEnabled = false;
                //频谱仪复位
                inSys.SpectrumAnalyzer.AutoAlignEnabled = false;
                inSys.SpectrumAnalyzer.WaitOpc();
                inSys.SpectrumAnalyzer.Preset();
                inSys.SpectrumAnalyzer.WaitOpc();
                inSys.SpectrumAnalyzer.ModePreset();
                inSys.SpectrumAnalyzer.Set_RefLvlOffsetByWindow(1, 0);
                inSys.SpectrumAnalyzer.AMP_Offset = 0;
                inSys.SpectrumAnalyzer.WaitOpc();
                inSys.SpectrumAnalyzer.Span            = 1 * 1e7;//固定为10Mhz
                inSys.SpectrumAnalyzer.CenterFrequency = m_Parameter.M_SAFreqList[0];
                m_SG.RFPower = 0;
                //inSys.SpectrumAnalyzer.SweepPoints = m_NFParameter.m_SweepPoints;
                //inSys.SpectrumAnalyzer.  = m_Parameter.m_RBW;
                //inSys.SpectrumAnalyzer.WaitOpc();
                //inSys.SpectrumAnalyzer.VBW = m_Parameter.m_VBW;
                //关闭连续扫描
                inSys.SpectrumAnalyzer.ContinuousSweepEnabled = false;
                m_SG.ModOutputEnabled = false;
                m_SG.RFOutputEnabled  = true;
                List <offsetFreq> INputLosss = new List <offsetFreq>();
                for (int i = 0; i < m_Parameter.M_SGFreqList.Count; i++)
                {
                    offsetFreq offset = new offsetFreq();
                    offset.FreqInMHz = m_Parameter.M_SGFreqList[i] * 1e-6;

                    m_SG.RFFrequency = m_Parameter.M_SGFreqList[i];
                    Thread.Sleep(100);
                    inSys.SpectrumAnalyzer.CenterFrequency = m_Parameter.M_SGFreqList[i];
                    inSys.SpectrumAnalyzer.Sweep();
                    inSys.SpectrumAnalyzer.WaitOpc(20000);
                    inSys.SpectrumAnalyzer.MarkerToCenterFreq(1);
                    inSys.SpectrumAnalyzer.MarkerPeakSearch(1);
                    inSys.SpectrumAnalyzer.Marker1Mode = SpectrumAnalyzer.MarkerModeType.Position;
                    offset.ReceiverOffsetFreqInMHz     = inSys.SpectrumAnalyzer.Marker1Value;
                    INputLosss.Add(offset);
                }
                resultnew.RouteLoss = INputLosss;

                result = resultnew;
                m_SG.RFOutputEnabled = false;
                m_SG.RFPower         = -100;
                return(0);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
Beispiel #2
0
        public int ExecuteTestSpurious(SystemHardware inSys, TestStructParameters m_Parameters, out TestStructResults m_Results)
        {
#if Simulate
            m_Results = new TestStructResults();
            m_Results.m_MonitorInfo = new DUTMonitorInfo();
            #region 获取遥测数据
            DUTCtrl.CaptureDUTMonitorinfo(out m_Results.m_MonitorInfo);
            #endregion
            m_Results.m_SpuriousSuppression = 30;//杂波抑制度
            m_Results.m_CarrierPower        = m_Parameters.m_InputPower;
            m_Results.m_SpuriousPower       = m_Parameters.m_InputPower + 30;
            m_Results.m_SpuriousFreq        = m_Parameters.m_Freq + 100 * 1e6;
            m_Results.m_TraceData           = new KeyValuePair <double, double> [201];
            for (int i = 0; i < 201; i++)
            {
                m_Results.m_TraceData[i] = new KeyValuePair <double, double>(10 * 1e6 + 200 * 1e6 * i, 10 * Math.Tan(Math.PI * i / 100));
            }
            return(0);
#endif
            try
            {
                double m_StartFreq = m_Parameters.m_StartFreq;
                double m_StopFreq  = m_Parameters.m_StopFreq;
                double Temp_LeftSideSpuriousFreq   = -999;
                double Temp_LeftSideSpuriousPower  = -999;
                double Temp_RightSideSpuriousFreq  = -999;
                double Temp_RightSideSpuriousPower = -999;
                double Temp_RefLevle = -999; //参考功率,调节时功率测量时使用
                double Temp_MaxPower = -999; //频谱中出现的最大功率
                double Temp_Scale    = 10;   //频谱仪当前垂直尺度
                double Temp_MarkerValue;     //当前游标值
                string Temp_SAFDOList = string.Empty;

                m_Results = new TestStructResults();

                #region 设备复位
                m_SG = SystemHardware.Hardware <SignalGenerator> .GetElmentByName("RackSys.TestLab.Instrument.SignalGenerator1");

                if (m_Parameters.m_FirstTest)
                {
                    //信号源复位
                    //inSys.AnalogSignalGenerator.Preset();
                    //inSys.CurrentInstruments
                    m_SG.Preset();
                    //频谱仪复位
                    inSys.SpectrumAnalyzer.AutoAlignEnabled = false;
                    inSys.SpectrumAnalyzer.WaitOpc();
                    inSys.SpectrumAnalyzer.ModePreset();
                    inSys.SpectrumAnalyzer.WaitOpc();
                }
                #endregion 设备复位

                #region 设备基础设置

                //信号源设置
                if (m_Parameters.m_FirstTest)
                {
                    m_SG.RFFrequency = m_Parameters.m_SGFreq;
                    m_SG.AmplOffset  = m_Parameters.m_SGOffsetValue;
                    m_SG.RFPower     = m_Parameters.m_InputPower;
                }
                inSys.SpectrumAnalyzer.StartFrequency = m_Parameters.m_StartFreq;
                inSys.SpectrumAnalyzer.StopFrequency  = m_Parameters.m_StopFreq;
                //频谱仪设置
                if (m_Parameters.m_FirstTest)
                {
                    //RBW设置
                    if (!m_Parameters.m_AutoRBW)
                    {
                        inSys.SpectrumAnalyzer.RBW = m_Parameters.m_RBW;
                    }

                    //VBW设置
                    if (!m_Parameters.m_AutoVBW)
                    {
                        inSys.SpectrumAnalyzer.VBW = m_Parameters.m_VBW;
                    }

                    //Scale设置
                    if (m_Parameters.m_AutoScale)
                    {
                        inSys.SpectrumAnalyzer.dBperDiv = 10;
                    }
                    else
                    {
                        inSys.SpectrumAnalyzer.dBperDiv = m_Parameters.m_Scale;
                    }
                    Temp_Scale = inSys.SpectrumAnalyzer.dBperDiv;//记录实际垂直标尺

                    //补偿表设置
                    for (int i = 0; i < 6; i++)
                    {
                        inSys.SpectrumAnalyzer.Set_CorrectionState(i + 1, false);
                    }
                    inSys.SpectrumAnalyzer.Set_CorrectionState(1, true);

                    //inSys.SpectrumAnalyzer.SetTraceMode(1, SpectrumAnalyzer.TriggerMode.);
                    inSys.SpectrumAnalyzer.SetDetectorMode(1, SpectrumAnalyzer.DetectorMode.POS);
                    inSys.SpectrumAnalyzer.SetMarkerModeByIndex(SpectrumAnalyzer.MarkerModeType.Position, 1);
                    //inSys.SpectrumAnalyzer.PeakExcursionStateOfNxtPkCriteria = false;

                    //扫描时间设置
                    if (m_Parameters.m_AutoSweepTime)
                    {
                    }
                    else
                    {
                        inSys.SpectrumAnalyzer.SweepTime = m_Parameters.m_SweepTime;
                    }

                    inSys.SpectrumAnalyzer.ContinuousSweepEnabled = true;
                }

                #endregion 设备基础设置

                #region 设置变更
                //偏置与补偿变更设置
                if (m_Parameters.m_EditSGOffset)
                {
                    m_SG.AmplOffset = -m_Parameters.m_SGOffsetValue;
                    m_SG.RFPower    = m_Parameters.m_InputPower;
                    //m_DUTProtection.Sg_RFPower(inSys.AnalogSignalGenerator, m_Parameters.m_InputPower);
                }
                //频率变更设置
                m_SG.RFFrequency = m_Parameters.m_SGFreq;
                double ampoffset = m_Parameters.m_SAGlobalOffset;
                inSys.SpectrumAnalyzer.AMP_Offset = -ampoffset;

                #endregion
                //inSys.SpectrumAnalyzer.MarkerToCenterFreq(1);
                //inSys.SpectrumAnalyzer.ContinuousSweepEnabled = false;
                inSys.SpectrumAnalyzer.Sweep(100000);
                inSys.SpectrumAnalyzer.WaitOpc();
                inSys.SpectrumAnalyzer.MarkerPeakSearch(1);
                m_Results.m_NOSourcePower = inSys.SpectrumAnalyzer.Marker1Value;
                m_SG.RFOutputEnabled      = true;
                inSys.SpectrumAnalyzer.WaitOpc();
                Thread.Sleep(50);
                //inSys.SpectrumAnalyzer.MarkerPeakSearch(1);
                #region 测试载波参数
                //inSys.SpectrumAnalyzer.CenterFrequency = m_Parameters.m_Freq;
                //inSys.SpectrumAnalyzer.Span = m_Parameters.m_IgnoreBWidth;
                //inSys.SpectrumAnalyzer.SetMarkerPositionByIndex(m_Parameters., 1);

                #region 关闭平均以快速调整RefLvl
                inSys.SpectrumAnalyzer.Averages = 1;
                inSys.SpectrumAnalyzer.WaitOpc();

                inSys.SpectrumAnalyzer.Sweep(100000);
                inSys.SpectrumAnalyzer.WaitOpc();

                for (int i = 0; i < 20; i++)
                {
                    inSys.SpectrumAnalyzer.MarkerPeakSearch(1);
                    Temp_RefLevle = inSys.SpectrumAnalyzer.Marker1Value;
                    if (Temp_RefLevle < -170)
                    {
                        Temp_RefLevle = -170;
                    }
                    inSys.SpectrumAnalyzer.ReferenceLevel = Temp_RefLevle;

                    inSys.SpectrumAnalyzer.Sweep(100000);
                    inSys.SpectrumAnalyzer.WaitOpc();
                    Temp_MarkerValue = inSys.SpectrumAnalyzer.Marker1Value;
                    //检查markertoRef功能,是都已经调整到位。
                    if ((Temp_RefLevle - Temp_MarkerValue) > (Temp_Scale * -0.25) && (Temp_RefLevle - Temp_MarkerValue) < (Temp_Scale * 0.5))
                    {
                        break;
                    }
                }
                Temp_RefLevle = inSys.SpectrumAnalyzer.ReferenceLevel;
                inSys.SpectrumAnalyzer.ReferenceLevel = Temp_RefLevle + Temp_Scale;
                #endregion

                //平均设置
                if (m_Parameters.m_AverageFactor > 0)
                {
                    inSys.SpectrumAnalyzer.Averages = (uint)m_Parameters.m_AverageFactor;
                }
                inSys.SpectrumAnalyzer.ContinuousSweepEnabled = false;
                //扫描测量
                inSys.SpectrumAnalyzer.Sweep(100000);
                inSys.SpectrumAnalyzer.WaitOpc();
                Thread.Sleep(50);
                inSys.SpectrumAnalyzer.MarkerPeakSearch(1);
                m_Results.m_CarrierPower = inSys.SpectrumAnalyzer.Marker1Value;
                #endregion 测试载波参数
                //通过计算获取杂波信号
                //double[] Ytracedate=inSys.SpectrumAnalyzer.TraceDataByIndex(1);
                //double[] Xtracedata= inSys.SpectrumAnalyzer.TraceXaxis;
                //List<double> SpuriousList = new List<double>();

                //for (int i = 0; i < Xtracedata.Count(); i++)
                //{
                //    if (Xtracedata[i]< m_Parameters.m_SAFreq - m_Parameters.m_IgnoreBWidth / 2||
                //        Xtracedata[i] > m_Parameters.m_SAFreq + m_Parameters.m_IgnoreBWidth / 2)
                //    {
                //        SpuriousList.Add(Ytracedate[i]);
                //    }
                //}
                //m_Results.m_SpuriousPower = SpuriousList.Max();
                //#region 测试左侧参数

                if (m_StartFreq < (m_Parameters.m_SAFreq - m_Parameters.m_IgnoreBWidth / 2))
                {
                    inSys.SpectrumAnalyzer.StartFrequency = m_StartFreq;
                    inSys.SpectrumAnalyzer.StopFrequency  = m_Parameters.m_SAFreq - m_Parameters.m_IgnoreBWidth / 2;
                    if (m_Parameters.m_SweepPoints > 1001)
                    {
                        inSys.SpectrumAnalyzer.SweepPoints = 1001;
                    }
                    else
                    {
                        inSys.SpectrumAnalyzer.SweepPoints = m_Parameters.m_SweepPoints;
                    }

                    inSys.SpectrumAnalyzer.Sweep(100000 * (int)m_Parameters.m_AverageFactor);
                    inSys.SpectrumAnalyzer.WaitOpc();

                    inSys.SpectrumAnalyzer.MarkerPeakSearch(1);
                    Temp_LeftSideSpuriousPower = inSys.SpectrumAnalyzer.Marker1Value;
                    Temp_LeftSideSpuriousFreq  = inSys.SpectrumAnalyzer.Marker1Position;
                }
                #endregion 测试左侧参数

                #region 测试右侧参数
                if (m_StopFreq > (m_Parameters.m_SAFreq + m_Parameters.m_IgnoreBWidth / 2))
                {
                    inSys.SpectrumAnalyzer.StartFrequency = m_Parameters.m_SAFreq + m_Parameters.m_IgnoreBWidth / 2;
                    inSys.SpectrumAnalyzer.StopFrequency  = m_StopFreq;
                    if (m_Parameters.m_SweepPoints > 1001)
                    {
                        inSys.SpectrumAnalyzer.SweepPoints = 1001;
                    }
                    else
                    {
                        inSys.SpectrumAnalyzer.SweepPoints = m_Parameters.m_SweepPoints;
                    }

                    inSys.SpectrumAnalyzer.Sweep(100000 * (int)m_Parameters.m_AverageFactor);
                    inSys.SpectrumAnalyzer.WaitOpc();

                    inSys.SpectrumAnalyzer.MarkerPeakSearch(1);
                    Temp_RightSideSpuriousPower = inSys.SpectrumAnalyzer.Marker1Value;
                    Temp_RightSideSpuriousFreq  = inSys.SpectrumAnalyzer.Marker1Position;
                }
                #endregion 测试右侧参数

                m_SG.RFOutputEnabled = false;

                //#region 完成测试
                //if (m_Parameters.m_LastTest)
                //{
                //    if (m_Parameters.m_ContinueMeasAfterTest)//继续测量
                //    {
                //        inSys.SpectrumAnalyzer.ContinuousSweepEnabled = true;
                //        m_SG.RFOutputEnabled = true;
                //    }
                //    else//关闭信号源输出
                //    {
                //        m_SG.RFOutputEnabled = false;
                //    }
                //}
                //#endregion

                #region 计算抑制度
                if (Temp_LeftSideSpuriousPower >= Temp_RightSideSpuriousPower)
                {
                    m_Results.m_SpuriousPower = Temp_LeftSideSpuriousPower;
                    m_Results.m_SpuriousFreq  = Temp_LeftSideSpuriousFreq;
                }
                else
                {
                    m_Results.m_SpuriousPower = Temp_RightSideSpuriousPower;
                    m_Results.m_SpuriousFreq  = Temp_RightSideSpuriousFreq;
                }
                m_Results.m_SpuriousSuppression = m_Results.m_CarrierPower - m_Results.m_SpuriousPower;
                #endregion 计算抑制度

                return(0);
            }
            catch (Exception ex)
            {
                GlobalStatusReport.ReportError("[信号源 + 频谱仪] 杂波特性 核心测试异常:" + ex.StackTrace, ex);
                throw ex;
            }
        }