Пример #1
0
        /// <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;
            }
        }
Пример #2
0
        /// <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;
            }
        }
Пример #3
0
        /// <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));
        }