private void GetPointTestData(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 = "Point"; 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, double>); if (!MeasurementController.RunPointTest( false, currentWavelength, () => { return(!IsStop); }, () => { var setting = TestPortSetting.Get(currentChannel); pws = MeasurementController.GetMeterAllChannelPower(setting.DeviceID, setting.SwitchID); })) { 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 = 0D; var c = TestPortSetting.Get(testItem.PortSetting).ChannelID; if (!pws.TryGetValue(c, out pw)) { continue; } if (pw == double.MinValue) { throw new Exception($"读取功率失败,{MeasurementController.ErrorString}"); } AddPointTestData(testTask, type, temp, testItem.PortSetting, currentWavelength, pw); } }
/// <summary> /// 注册测试信息 /// </summary> /// <param name="controller"></param> /// <param name="job"></param> /// <param name="testChannel"></param> public void Register(MeasurementController controller, MeasurementJobInformation job, bool[] testChannel) { MeasurementController = controller; MeasurementJob = job; //点测测试组 var ILgroups = job.SpecData.TestSystemGroups.Where(q => q.TestGroupTestType == "Point" || q.TestGroupTestType == "PointPDL").Select(q => q.TestGroupID).ToList(); //回损测试组 var RLgroups = job.SpecData.TestSystemGroups.Where(q => q.TestGroupTestType == "RL").Select(q => q.TestGroupID).ToList(); //点测测试项 var ilTestItems = job.SpecData.WorkInfoSpecItems.Where(q => ILgroups.Any(g => g == q.TestGroupID) || RLgroups.Any(g => g == q.TestGroupID)).ToList(); //插损 //回损测试项 var rl1TestItems = job.SpecData.WorkInfoSpecItems.Where(q => RLgroups.Any(g => g == q.TestGroupID)).ToList(); //按端口归组 var portILGroup = ilTestItems.GroupBy(q => q.PortSetting % TestPortSetting.DataDivide).ToList(); TestItems.Clear(); TestItems.Add(new ReferenceTestItem() { ItemID = Guid.NewGuid(), TestTypeID = TestTypes[0], ItemName = "连接仪器", Wavelenght = 0D, Channel = 0, ReferenceType = -1, ReferenceData = default(List <TPointTestItem>), LastValueString = "", ValueString = "", ReferenceResult = -1, OrderID = TestItems.Count + 1 }); Wavelengths.Clear(); Channels.Clear(); for (int i = 0; i < Framework.MeasurementSystemSetting.SystemData.Setting.Profile.SimultaneousNumber; i++) { if (testChannel.Length > i && !testChannel[i]) { continue; } foreach (var port in portILGroup) { if (port.Key == 0) { continue; } var list = port.ToList(); if (list.Count < 1) { continue; } var channel = MeasurementController.GetSimultaneityPort(i, port.Key); string name = MeasurementController.GetPortName(channel); var wlGroup = list.Where(q => q.TestSetting.IsDouble()).GroupBy(q => q.TestSetting.CastTo <double>()); foreach (var wlItem in wlGroup) { var wl = wlItem.Key; var refData = ""; var oldRef = job.ReferenceData.GetReference(1, channel, wl); if (oldRef != null) { refData = oldRef.Power.ToString("F3"); } TestItems.Add(new ReferenceTestItem() { ItemID = Guid.NewGuid(), TestTypeID = TestTypes[1], ItemName = $"获取 IL (功率计 {name}, 波长 {wl}) 归零值", Wavelenght = wl, Channel = channel, ReferenceType = 1, ReferenceData = new List <TPointTestItem>(), LastValueString = refData, ValueString = "", ReferenceResult = -1, OrderID = TestItems.Count + 1 }); if (!Wavelengths.Contains(wl)) { Wavelengths.Add(wl); } if (!Channels.Contains(channel)) { Channels.Add(channel); } } } } //按端口归组 var portRLGroup = rl1TestItems.GroupBy(q => q.PortSetting % TestPortSetting.DataDivide).ToList(); for (int i = 0; i < Framework.MeasurementSystemSetting.SystemData.Setting.Profile.SimultaneousNumber; i++) { if (testChannel.Length > i && !testChannel[i]) { continue; } foreach (var port in portRLGroup) { if (port.Key == 0) { continue; } var list = port.ToList(); if (list.Count < 1) { continue; } var channel = MeasurementController.GetSimultaneityPort(i, port.Key); string name = MeasurementController.GetPortName(channel); var wlGroup = list.Where(q => q.TestSetting.IsDouble()).GroupBy(q => q.TestSetting.CastTo <double>()); foreach (var wlItem in wlGroup) { var wl = wlItem.Key; var refData = ""; var oldRef = job.ReferenceData.GetReference(2, channel, wl); if (oldRef != null) { refData = oldRef.Power.ToString("F3"); } TestItems.Add(new ReferenceTestItem() { ItemID = Guid.NewGuid(), TestTypeID = TestTypes[2], ItemName = $"获取 ({name},波长 {wl}) 的系统回损", Wavelenght = wl, Channel = channel, ReferenceType = 2, ReferenceData = new List <TPointTestItem>(), LastValueString = refData, ValueString = "", ReferenceResult = -1, OrderID = TestItems.Count + 1 }); if (!Wavelengths.Contains(wl)) { Wavelengths.Add(wl); } if (!Channels.Contains(channel)) { Channels.Add(channel); } } } } TestItems.Add(new ReferenceTestItem() { ItemID = Guid.NewGuid(), TestTypeID = TestTypes[TestTypes.Length - 1], ItemName = "保存数据", Wavelenght = 0D, Channel = 0, ReferenceType = -1, ReferenceData = new List <TPointTestItem>(), LastValueString = "", ValueString = "", ReferenceResult = -1, OrderID = TestItems.Count + 1 }); }
private void GetManualPointPDLPointPDLTestData(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 = new Dictionary <int, List <double> >(); if (!MeasurementController.ChangeWaveLength(currentWavelength)) { throw new Exception($"切换波长失败,{MeasurementController.ErrorString}"); } FormMessageBox.SetShow(null, "正在测试", "请摇动手摇偏振控制器,完成后点击[继续测试]进行测试", 0); var setting = TestPortSetting.Get(currentChannel); while (FormMessageBox.MessageBoxResult == 0) { if (IsStop) { FormMessageBox.SetClose(2); break; } var powers = MeasurementController.GetMeterAllChannelPower(setting.DeviceID, setting.SwitchID); if (powers.Count < 1) { continue; } var max = new StringBuilder(); var min = new StringBuilder(); foreach (var pw in powers) { if (!pws.ContainsKey(pw.Key)) { pws[pw.Key] = new List <double>(); } if (pw.Value != double.MinValue) { pws[pw.Key].Add(pw.Value); } var maxP = pws[pw.Key].Max(); var minP = pws[pw.Key].Min(); if (maxP == double.MinValue || minP == double.MinValue) { max.Append($"{pw.Key}: -\r\n"); min.Append("-\r\n"); } else { max.Append($"{pw.Key}: {maxP:F3}\r\n"); min.Append($"{minP:F3}\r\n"); } } readingCallback?.Invoke( "-", max.ToString(), min.ToString() ); } readingCallback?.Invoke("-", "-", "-"); if (FormMessageBox.MessageBoxResult != 1) { IsStop = true; return; } 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); } }