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; } }
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; } }