/// <summary> /// 更新设备信息 /// </summary> /// <param name="tmpInstrumentInfo"></param> private static void UpdateInstrumentInfo(InstrumentInfo tmpInstrumentInfo) { try { GlobalStatusReport.Report(string.Format("UpdateInstrumentInfo 仪表名称:{0} 地址:{1},开始连接", tmpInstrumentInfo.InstrumentName, tmpInstrumentInfo.IpAddress)); tmpInstrumentInfo.DevInfoState = devState.ischeck; string Identity = ""; string ModelNo = ""; string InstSN = ""; string Firmware = ""; string Options = ""; string Manufactor = ""; ModelNo = ScpiInstrument.DetermineInstrumentInfo(tmpInstrumentInfo.IpAddress, out Identity, out InstSN, out Options, out Firmware, out Manufactor); if ((ModelNo == null) || (ModelNo == string.Empty)) { tmpInstrumentInfo.ConnectOK = devState.error; tmpInstrumentInfo.DevInfoState = devState.error; #if Simulate tmpInstrumentInfo.ConnectOK = devState.connect; tmpInstrumentInfo.DevInfoState = devState.connect; #endif } else { tmpInstrumentInfo.ConnectOK = devState.connect; tmpInstrumentInfo.DevInfoState = devState.connect; tmpInstrumentInfo.ModelNo = ModelNo; tmpInstrumentInfo.Identity = Identity; tmpInstrumentInfo.SN = InstSN; tmpInstrumentInfo.OptionList = Options; tmpInstrumentInfo.Manufacter = Manufactor; } GlobalStatusReport.Report(string.Format("UpdateInstrumentInfo 仪表名称:{0} 地址:{1},连接结束!", tmpInstrumentInfo.InstrumentName, tmpInstrumentInfo.IpAddress)); } catch (Exception ex) { tmpInstrumentInfo.ConnectOK = devState.error; } }
/// <summary> /// 执行测试过程 /// </summary> /// <param name="inSys">SystemHardware</param> /// <param name="m_NoiseFigureParameter">参数</param> /// <param name="m_NoiseFigureTestResult">结果</param> /// <returns>0:正常返回,,,,-1:强制中断</returns> public static int ExecuteTest( SystemHardware inSys, NoiseFigureTestStructParameter m_NoiseFigureParameter, out NoiseFigureTestStructResult m_NoiseFigureTestResult ) { try { #if Simulate m_NoiseFigureTestResult = new NoiseFigureTestStructResult(); m_NoiseFigureTestResult.m_FreqList = m_NoiseFigureParameter.m_FreqList; m_NoiseFigureTestResult.m_Gain = new double[m_NoiseFigureParameter.m_FreqList.Length]; m_NoiseFigureTestResult.m_NoiseFigure = new double[m_NoiseFigureParameter.m_FreqList.Length]; for (int i = 0; i < m_NoiseFigureTestResult.m_NoiseFigure.Length; i++) { m_NoiseFigureTestResult.m_NoiseFigure[i] = 3 + 0.1 * i; } //噪声系数最大值的仿真处理 m_NoiseFigureTestResult.m_NoiseFigureMax = 3 + 0.1 * (m_NoiseFigureTestResult.m_NoiseFigure.Length - 1); //最大值频点位置 m_NoiseFigureTestResult.m_FreqForNoiseFigureMax = m_NoiseFigureTestResult.m_FreqList[m_NoiseFigureTestResult.m_FreqList.Length - 1]; string ImagefileName = AppDomain.CurrentDomain.BaseDirectory + @"\屏幕截图仿真\噪声系数测试样图.png"; m_NoiseFigureTestResult.m_ScreenImage = Image.FromFile(ImagefileName); Thread.Sleep(100); DUTCtrl.CaptureDUTMonitorinfo(out tmpDutMonitorInfo); GlobalStatusReport.Report("噪声系数测试:仿真测试结果"); return(0); #endif m_NoiseFigureTestResult = new NoiseFigureTestStructResult(); m_NoiseFigureTestResult.m_FreqList = m_NoiseFigureParameter.m_FreqList; m_NoiseFigureTestResult.m_NoiseFigure = new double[m_NoiseFigureParameter.m_FreqList.Length]; m_NoiseFigureTestResult.m_Gain = new double[m_NoiseFigureParameter.m_FreqList.Length]; inSys.SpectrumAnalyzer.Timeout = 30 * 1000; //inSys.SpectrumAnalyzer.SaveStateToPath("D:/User_My_Documents/Instrument/My Documents/SA/state/CalStateTemp.state"); //inSys.SpectrumAnalyzer.WaitOpc(); //频谱仪复位 inSys.SpectrumAnalyzer.AutoAlignEnabled = false; inSys.SpectrumAnalyzer.WaitOpc(); inSys.SpectrumAnalyzer.Preset(); inSys.SpectrumAnalyzer.WaitOpc(); inSys.SpectrumAnalyzer.NoiseFigureMode(); inSys.SpectrumAnalyzer.WaitOpc(); inSys.SpectrumAnalyzer.ModePreset(); inSys.SpectrumAnalyzer.WaitOpc(); if (m_NoiseFigureParameter.m_RecallStateFileEnable) { inSys.SpectrumAnalyzer.LoadStateFromPath(m_NoiseFigureParameter.m_RecallStateFileName); } else { //无需调用原有的状态文件时,则重新调用当前状态,抵消仪表reset带来的影响。 inSys.SpectrumAnalyzer.LoadState("CalStateTemp"); } inSys.SpectrumAnalyzer.SendSCPI(":NFIG:CAL:STAT ON"); inSys.SpectrumAnalyzer.WaitOpc(); //次数设置测试所使用的参数 //频谱仪设置 inSys.SpectrumAnalyzer.StartFrequency = m_NoiseFigureParameter.m_StartFerq; inSys.SpectrumAnalyzer.WaitOpc(); inSys.SpectrumAnalyzer.StopFrequency = m_NoiseFigureParameter.m_StopFerq; inSys.SpectrumAnalyzer.WaitOpc(); inSys.SpectrumAnalyzer.NF_RBW = m_NoiseFigureParameter.m_RBW; inSys.SpectrumAnalyzer.WaitOpc(); inSys.SpectrumAnalyzer.Averages = m_NoiseFigureParameter.m_AverageNum; inSys.SpectrumAnalyzer.WaitOpc(); inSys.SpectrumAnalyzer.SweepPoints = m_NoiseFigureParameter.m_SweepPoints; inSys.SpectrumAnalyzer.WaitOpc(); //关闭连续扫描 inSys.SpectrumAnalyzer.ContinuousSweepEnabled = false; inSys.SpectrumAnalyzer.WaitOpc(); //设置显示窗口Zoom,将Gain的曲线隐藏,调试时请屏蔽代码,用于观察信号。 //inSys.SpectrumAnalyzer.SelectDisplayWindow(1); //inSys.SpectrumAnalyzer.WaitOpc(); //inSys.SpectrumAnalyzer.SetWindowZoom(true); //inSys.SpectrumAnalyzer.WaitOpc(); inSys.SpectrumAnalyzer.SetNFWindowAutoScale(1, true); inSys.SpectrumAnalyzer.WaitOpc(); inSys.SpectrumAnalyzer.SetNFWindowAutoScale(2, true); inSys.SpectrumAnalyzer.WaitOpc(); inSys.SpectrumAnalyzer.SetDisPlayFormat(SpectrumAnalyzer.DisPlayModeType.GRAPh); inSys.SpectrumAnalyzer.WaitOpc(); //路径补偿数据 //inSys.SpectrumAnalyzer.NoiseFigureLossCompModeBeforeDUT(SpectrumAnalyzer.NoiseFigureLossCompMode.TABL); //inSys.SpectrumAnalyzer.WaitOpc(); //inSys.SpectrumAnalyzer.NoiseFigureLossCompModeAfterDUT(SpectrumAnalyzer.NoiseFigureLossCompMode.TABL); //inSys.SpectrumAnalyzer.WaitOpc(); //inSys.SpectrumAnalyzer.SetLossCompTableBeforeDUT(m_NoiseFigureParameter.m_LossCompTabelBeforeDUT); //2014.3.11改变噪声系数补偿方式,不采用beforeDUT,afterDUT的补偿方式,改为程序自己计算。苏渊红。 //inSys.SpectrumAnalyzer.WaitOpc(); //inSys.SpectrumAnalyzer.SetLossCompTableAfterDUT(m_NoiseFigureParameter.m_LossCompTabelAfterDUT); //inSys.SpectrumAnalyzer.WaitOpc(); //启动扫描一次 inSys.SpectrumAnalyzer.Sweep(); //inSys.SpectrumAnalyzer.WaitOpc(); inSys.SpectrumAnalyzer.WaitOpc(Convert.ToInt32(m_NoiseFigureParameter.m_SweepPoints * m_NoiseFigureParameter.m_AverageNum * 1000)); //读取噪声系数测试结果 inSys.SpectrumAnalyzer.SetMarkerModeByIndex(SpectrumAnalyzer.MarkerModeType.Position, 1); inSys.SpectrumAnalyzer.WaitOpc(); double temp_maxNF = 0; double temp_maxNFFreq = 0; for (int i = 0; i < m_NoiseFigureParameter.m_FreqList.Length; i++) { inSys.SpectrumAnalyzer.SetMarkerPositionByIndex(m_NoiseFigureParameter.m_FreqList[i], 1); inSys.SpectrumAnalyzer.WaitOpc(); double tempNF = inSys.SpectrumAnalyzer.GetMarkerNFValueByIndex(1); inSys.SpectrumAnalyzer.WaitOpc(); double tempGain = inSys.SpectrumAnalyzer.GetMarkerGainValueByIndex(1); inSys.SpectrumAnalyzer.WaitOpc(); m_NoiseFigureTestResult.m_NoiseFigure[i] = Math.Round(tempNF, 2); m_NoiseFigureTestResult.m_Gain[i] = Math.Round(tempGain, 2); //add 2014.03.11,噪声系数计算公式--根据总的噪声系数和增益,计算被测DUT实际的噪声系数 #region 真实噪声系数计算 NoseFigureCalResult RealNFResult = new NoseFigureCalResult(); //todo double inputRouteLossIndB = 0; //m_NoiseFigureParameter.m_InputRouteLossCalResultForOnePath.GetRouteLossIndBAtFreq(m_NoiseFigureParameter.m_FreqList[i]); double outputRouteLossIndB = 0; NoisFigureCalculation(inputRouteLossIndB, outputRouteLossIndB, tempNF, tempGain, out RealNFResult); m_NoiseFigureTestResult.m_NoiseFigure[i] = Math.Round(RealNFResult.RealNoiseFigure, 2); m_NoiseFigureTestResult.m_Gain[i] = Math.Round(RealNFResult.RealGain, 2); if (m_NoiseFigureTestResult.m_NoiseFigure[i] > temp_maxNF)//追踪最大噪声系数的点 { temp_maxNF = m_NoiseFigureTestResult.m_NoiseFigure[i]; temp_maxNFFreq = m_NoiseFigureParameter.m_FreqList[i]; } #endregion 真实噪声系数计算 } if (m_NoiseFigureParameter.m_IsReadMaxNoiseFigure) { m_NoiseFigureTestResult.m_NoiseFigureMax = temp_maxNF; m_NoiseFigureTestResult.m_FreqForNoiseFigureMax = temp_maxNFFreq; } if (m_NoiseFigureParameter.Yscale > 0) // Scale大于零这进行设置,如果不是大于0,代表采用Auto { string YscaleString = m_NoiseFigureParameter.Yscale.ToString(); inSys.SpectrumAnalyzer.SendSCPI("DISP:WIND:TRAC:Y:PDIV " + YscaleString); inSys.SpectrumAnalyzer.WaitOpc(); } m_NoiseFigureTestResult.m_ScreenImage = inSys.SpectrumAnalyzer.CaptureScreenImage(); //重置仪表 //inSys.SpectrumAnalyzer.Preset(); //inSys.SpectrumAnalyzer.WaitOpc(); //判断是否进行调试模式,如果是,则不关闭激励,并且将仪器扫描方式改成连续扫描 if (m_NoiseFigureParameter.m_NeedContinuousScanning) { inSys.SpectrumAnalyzer.ContinuousSweepEnabled = true; inSys.SpectrumAnalyzer.WaitOpc(); } inSys.SpectrumAnalyzer.Timeout = 10 * 1000; return(0); } catch (Exception ex) { GlobalStatusReport.ReportError(ex); throw ex; } }
/// <summary> /// 更新仪表控制对象 /// </summary> /// <param name="tmpDCPowers"></param> /// <param name="tmpInstrumentInfo"></param> private void CreateInstrumentCtrlObj(List <DCPowerBase> tmpDCPowers, InstrumentInfo tmpInstrumentInfo) { GlobalStatusReport.Report(string.Format("UpdateInstrumentInfo 仪表名称:{0} 地址:{1},开始连接", tmpInstrumentInfo.InstrumentName, tmpInstrumentInfo.IpAddress)); switch (tmpInstrumentInfo.InstrumentTypeID) { case InstrumentType.Pna: try { //置为巡检状态 tmpInstrumentInfo.DevInfoState = devState.ischeck; this.m_PNAScpiObj = NetworkAnalyzer.Connect(tmpInstrumentInfo.IpAddress, null , false); if (this.m_PNAScpiObj != null) { //判断对应的连接License选件是否有,如果有,则继续,没有,报告错误; LicenseCheckingResult tmpResult = this.Check_Pna_Connectivity_Licenses(this.m_PNAScpiObj.Model, this.m_PNAScpiObj.SerialNumber); /// tmpResult = LicenseCheckingResult.PNAPassed; /// if (tmpResult != LicenseCheckingResult.PNAPassed) { ///设置异常信息 this.SetInstrumentErrorInfo( tmpInstrumentInfo, string.Format("没有找到矢网{0}-{1}连接选件RAC1200-001", new object[] { this.m_PNAScpiObj.Model, this.m_PNAScpiObj.SerialNumber })); this.m_PNAScpiObj = null; this.m_PNAApp = null; this.m_PNASCPIParser = null; throw new Exception(string.Format("没有找到矢网{0}-{1}的连接选件RAC1200-001", new object[] { this.m_PNAScpiObj.Model, this.m_PNAScpiObj.SerialNumber })); } else { ///创建PNA对象 string tmpPnaIpAddr; int port = 5025; VisaServices.GetLanConnectionInfo(tmpInstrumentInfo.IpAddress, out tmpPnaIpAddr, out port); Type t = Type.GetTypeFromProgID("AgilentPNA835x.Application", tmpPnaIpAddr, true); m_PNAApp = (AgilentPNA835x.Application)Activator.CreateInstance(t); m_PNASCPIParser = (AgilentPNA835x.ScpiStringParser)m_PNAApp.ScpiStringParser; UpdateInstrumentIdentity(tmpInstrumentInfo, this.m_PNAScpiObj); } //设置PNASource mathmatical on/off if (PowerMode.NormalPower == ProjectName.CurrentPowerMode) { this.m_PNAScpiObj.SendSCPI("system:preferences:item:offset:src ON"); } else if (PowerMode.HighPower == ProjectName.CurrentPowerMode) { this.m_PNAScpiObj.SendSCPI("system:preferences:item:offset:src OFF"); } else { } } } catch (Exception ex) { this.SetInstrumentErrorInfo(tmpInstrumentInfo, /*"连接错误,异常信息:"+*/ ex.Message); //置为错误状态 tmpInstrumentInfo.DevInfoState = devState.error; } break; case InstrumentType.InputMatrix: try { //置为巡检状态 tmpInstrumentInfo.DevInfoState = devState.ischeck; this.m_InputMatrix = Matrix.Connect(tmpInstrumentInfo.IpAddress, true, false); UpdateInstrumentIdentity(tmpInstrumentInfo, m_InputMatrix); } catch (Exception ex) { this.SetInstrumentErrorInfo(tmpInstrumentInfo, /*"连接错误,异常信息:"+*/ ex.Message); //置为错误状态 tmpInstrumentInfo.DevInfoState = devState.error; } break; case InstrumentType.OutputMatrix: try { //置为巡检状态 tmpInstrumentInfo.DevInfoState = devState.ischeck; this.m_OutputMatrix = Matrix.Connect(tmpInstrumentInfo.IpAddress, false, false); //this.m_OutputMatrix = Matrix.Connect(tmpInstrumentInfo.IpAddress, false); UpdateInstrumentIdentity(tmpInstrumentInfo, this.m_OutputMatrix); } catch (Exception ex) { this.SetInstrumentErrorInfo(tmpInstrumentInfo, /*"连接错误,异常信息:"+*/ ex.Message); //置为错误状态 tmpInstrumentInfo.DevInfoState = devState.error; } break; } GlobalStatusReport.Report(string.Format("UpdateInstrumentInfo 仪表名称:{0} 地址:{1},连接结束", tmpInstrumentInfo.InstrumentName, tmpInstrumentInfo.IpAddress)); }