Exemplo n.º 1
0
        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);
            }
        }
Exemplo n.º 2
0
        /// <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
            });
        }
Exemplo n.º 3
0
        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);
            }
        }