Ejemplo n.º 1
0
        private List <double> GetMeterPowers(int channel, double time)
        {
            var powers = new List <double>();

            var setting = TestPortSetting.Get(channel);
            var pm      = MeasurementController.GetMeterIsMaxMin(setting.DeviceID);

            if (pm != null)
            {
                System.Threading.Thread.Sleep(10);
                TryAction(() => {
                    return(pm.SetPowerMaxMin(0, setting.ChannelID, 1));
                }, 10);
                var sw = System.Diagnostics.Stopwatch.StartNew();
                while (!IsStop)
                {
                    if (sw.ElapsedMilliseconds > time * 1000D)
                    {
                        sw.Stop();
                        break;
                    }
                    System.Threading.Thread.Sleep(10);
                }

                TryAction(() => {
                    return(pm.SetPowerMaxMin(0, setting.ChannelID, 0));
                }, 10);

                var pw = double.MinValue;
                TryAction(() => {
                    return(pm.GetMaxPower(0, setting.ChannelID, out pw) && pw != double.MinValue);
                }, 10);

                if (pw == 0D)
                {
                    return(new List <double>());
                }

                if (pw != double.MinValue)
                {
                    powers.Add(pw);
                }

                TryAction(() => {
                    return(pm.GetMinPower(0, setting.ChannelID, out pw) && pw != double.MinValue);
                }, 10);

                if (pw != double.MinValue)
                {
                    powers.Add(pw);
                }
            }
            else
            {
                var sw = System.Diagnostics.Stopwatch.StartNew();
                while (!IsStop)
                {
                    var power = MeasurementController.GetMeterPower(channel);
                    if (power == double.MinValue)
                    {
                        continue;
                    }

                    powers.Add(power);
                    if (sw.ElapsedMilliseconds > time * 1000D)
                    {
                        sw.Stop();
                        break;
                    }
                }
            }


            return(powers);
        }
Ejemplo n.º 2
0
        private void GetPointPDLTestData(IMeasurementTask testTask, string temp, TestSystemGroup systemGroup, WorkInfoSpecItem item, bool testAgain)
        {
            if (!item.TestSetting.IsDouble())
            {
                return;
            }
            var wl = item.TestSetting.CastTo(1550D);

            if (item.PortSetting == 0)
            {
                return;
            }

            var type = "PointPDL";

            if (!testAgain && testTask.ContainsTestData(type, temp, item.PortSetting, wl))
            {
                return;
            }

            currentChannel    = MeasurementController.GetSimultaneityPort(testTask.TestOrderID, item.PortSetting);
            currentWavelength = wl;
            testInfoCallback?.Invoke(currentWavelength, currentChannel, currentUnit);

            var pws = default(Dictionary <int, List <double> >);

            if (!MeasurementController.RunPointTest(
                    true,
                    currentWavelength,
                    () =>
            {
                return(!IsStop);
            },
                    () =>
            {
                var readTime = MeasurementController.PDLTestTime;
                var setting = TestPortSetting.Get(currentChannel);
                var pm = MeasurementController.GetMeterIsMaxMin(setting.DeviceID);
                if (pm != null)
                {
                    TryAction(() =>
                    {
                        pws = GetMinMaxPower(pm, readTime);
                        if (pws.Count < 1)
                        {
                            return(false);
                        }

                        return(true);
                    }, 10);
                }
                else
                {
                    pws = GetAllChannelMeterPowers(setting.DeviceID, setting.SwitchID, readTime);
                }
            }))
            {
                throw new Exception(MeasurementController.ErrorString);
            }

            if (pws == null || pws.Count < 1)
            {
                throw new Exception($"读取功率失败,{MeasurementController.ErrorString}");
            }
            var items = MeasurementJob.SpecData.GetTestGroupWorkInfoSpecItems(systemGroup.TestGroupID);

            foreach (var testItem in items)
            {
                var pw = default(List <double>);
                var c  = TestPortSetting.Get(testItem.PortSetting).ChannelID;
                if (!pws.TryGetValue(c, out pw))
                {
                    continue;
                }
                if (pw.Count < 2)
                {
                    throw new Exception($"读取功率失败,{MeasurementController.ErrorString}");
                }
                AddPointPDLTestData(testTask, type, temp, testItem.PortSetting, currentWavelength, pw);
            }
        }