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