Ejemplo n.º 1
0
        private static double TestCWLAccuracy(ReferenceData referenceData, TestDataCollection testDataCollection, string testType, string temp, int port, string pSetting)
        {
            var testData = testDataCollection.GetTestData(testType, "Swept", "SweptPDL");

            if (testData == null)
            {
                throw new MeasuringException("没有计算CWL所需测试数据");
            }
            var list = testData.GetDataList(temp, port);

            if (list.Count < 1)
            {
                throw new MeasuringException("没有计算CWL所需测试数据");
            }

            var items = MeasuringManager.GetItemSettings(pSetting);
            var type  = GetSettingType(items);
            var cw    = GetSettingCenterWaveLength(items);
            var db    = GetSettingDB(items);
            var wl    = GetCenterWaveLength(list.ToList(), type, cw, db, bwSetting);

            if (cw < 1 || wl == double.MinValue)
            {
                return(double.MinValue);
            }

            return(Math.Round(Math.Abs(wl - cw), 3));
        }
Ejemplo n.º 2
0
        private static List <double> GetRangeData(List <PointTestItem> data, string[] settings, int dataType)
        {
            var tempData = new List <double>();
            var wls      = new double[1];
            var ranges   = MeasuringManager.GetRangeSettings(settings[0]);

            for (int i = 0; i < ranges.Length; i++)
            {
                var range = ranges[i];
                if (range.Equals("itu", StringComparison.OrdinalIgnoreCase))
                {
                    var type = GetSettingType(settings);
                    var cw   = GetSettingCenterWaveLength(settings);
                    var db   = GetSettingDB(settings);
                    var wl   = GetCenterWaveLength(data, type, cw, db, bwSetting);
                    if (wl == double.MinValue)
                    {
                        throw new MeasuringException("ITU计算错误");
                    }

                    ranges[i] = wl.ToString();
                }
            }

            if (ranges.Length > 1)
            {
                wls    = new double[2];
                wls[0] = MeasuringManager.GetWavelengthNm(ranges[0]);
                if (settings[0].IndexOf("±") > -1)
                {
                    wls = MeasuringManager.GetWavelengthRange(wls[0], "±", ranges[1]);
                }
                else
                {
                    wls[1] = MeasuringManager.GetWavelengthNm(ranges[1]);
                }
            }
            else
            {
                wls[0] = MeasuringManager.GetWavelengthNm(ranges[0]);
            }


            if (wls.Length > 1)
            {
                var wl1      = wls.Min();
                var wl2      = wls.Max();
                var taskData = TakeData(data, wl1, wl2);
                tempData.AddRange(taskData.Select(q => GetPointItemValue(q, dataType)));
            }
            else
            {
                var wl       = wls[0];
                var taskData = GetPointItemSlopeValue(data, wl, dataType);
                tempData.Add(taskData);
            }

            return(tempData);
        }
Ejemplo n.º 3
0
        private static double TestPointRL(ReferenceData referenceData, TestDataCollection testDataCollection, string testType, string temp, int port, string pSetting)
        {
            var rlTestData = testDataCollection.GetTestData(testType, "Point");

            if (rlTestData == null)
            {
                throw new MeasuringException("没有计算RL所需测试数据");
            }

            var wl = pSetting.CastTo(double.MaxValue);

            if (wl == double.MinValue)
            {
                throw new MeasuringException("波长设置错误");
            }

            var item = rlTestData.GetDataItem(temp, port, wl);
            var refR = referenceData.GetReference(2, 1, wl);

            if (item == null || refR == null)
            {
                throw new MeasuringException("没有计算RL所需测试数据");
            }

            var value  = double.MinValue;  //回损结果
            var valueR = item.IL;          //读取回损
            var valueS = refR.IL;          //系统回损
            var AbsS   = Math.Abs(valueS); //系统回损绝对值

            if (Math.Abs(valueR) > AbsS)
            {
                //RL读取值小于系统值时候,
                if (AbsS >= 60D)
                {
                    value = 60d;
                }
                else if (AbsS >= 58D)
                {
                    value = 58d;
                }
                else
                {
                    value = Math.Round(AbsS, 1);
                }
            }
            else
            {
                var cR = MeasuringManager.Convert_dBm2mW(valueR + Windows.IniProfile <BusinessLogic.Setting.SystemSetting> .Instance.Profile.RetrunLosssCompensation);
                var cS = MeasuringManager.Convert_dBm2mW(valueS + Windows.IniProfile <BusinessLogic.Setting.SystemSetting> .Instance.Profile.RetrunLosssCompensation);
                var rl = MeasuringManager.Convert_mW2dBm(cR - cS);

                value = Math.Round(
                    Math.Min(Math.Abs(rl), AbsS),
                    1);
            }
            return(value);
        }
Ejemplo n.º 4
0
        public void SetSetting(string setting)
        {
            var testSetting = MeasuringManager.GetSettings(tbSetting.Text).ToList();

            if (!testSetting.Exists(q => q.IndexOf(setting, StringComparison.OrdinalIgnoreCase) != -1))
            {
                testSetting.Add(setting);
            }
            tbSetting.Text = string.Join(",", testSetting);
        }
Ejemplo n.º 5
0
        private static List <double> GetSettingData(List <PointTestItem> data, string pSetting, int dataType = 0)
        {
            var datas = new List <double>();

            foreach (var setting in MeasuringManager.GetParallelSettings(pSetting))
            {
                var items = MeasuringManager.GetItemSettings(setting);
                datas.AddRange(GetRangeData(data, items, dataType));
            }

            return(datas);
        }
        private string FormatDefaultSetting(string setting, double[] wls, SpecInfo specInfo)
        {
            var newSetting = setting;
            var matchs     = setting.Matches(@"\{([^{]*)\}");

            foreach (System.Text.RegularExpressions.Match match in matchs)
            {
                var text  = match.Groups[0].Value;
                var tag   = match.Groups[1].Value;
                var value = MeasuringManager.GetFormatTag(tag, wls);
                newSetting = newSetting.Replace(text, value);
            }
            return(newSetting);
        }
Ejemplo n.º 7
0
        private static double GetSettingDB(string[] settings)
        {
            var setting = settings.FirstOrDefault(
                q => q.EndsWith("db", StringComparison.OrdinalIgnoreCase));

            if (string.IsNullOrEmpty(setting))
            {
                setting = settings.FirstOrDefault(q => q.IsDouble() && q.CastTo(double.MinValue) <= 100D);
            }

            if (string.IsNullOrEmpty(setting))
            {
                return(3D);
            }

            return(MeasuringManager.FormatSetting(setting).CastTo(3D));
        }
Ejemplo n.º 8
0
        public static void Regisry()
        {
            if (IsRegisred)
            {
                return;
            }

            IsRegisred = true;
            MeasuringManager.RegisryCalculate("TestPointIL", TestPointIL);
            MeasuringManager.RegisryCalculate("TestPointPDL", TestPointPDL);
            MeasuringManager.RegisryCalculate("TestPointEL", TestPointEL);
            MeasuringManager.RegisryCalculate("TestPointCR", TestPointCR);
            MeasuringManager.RegisryCalculate("TestPointUniformity", TestPointUniformity);
            MeasuringManager.RegisryCalculate("TestPointWDL", TestPointWDL);
            MeasuringManager.RegisryCalculate("TestPointTDL", TestPointTDL);
            MeasuringManager.RegisryCalculate("TestPointRL", TestPointRL);
        }
Ejemplo n.º 9
0
        private static double GetPointItemSlopeValue(List <PointTestItem> data, double wl, int dataType)
        {
            if (data.Count < 2)
            {
                return(double.MinValue);
            }

            var waveLengthStep = Math.Round(data[1].WaveLength - data[0].WaveLength, 3);
            var minWaveLength  = data[0].WaveLength;
            var maxWaveLength  = data[data.Count - 1].WaveLength;

            if (wl < minWaveLength || wl > maxWaveLength || waveLengthStep == 0D)
            {
                return(double.MinValue);
            }

            var interval = Math.Round(wl - minWaveLength, 3);
            var diffWL   = Math.Round((interval * 1000D) % (waveLengthStep * 1000D) / 1000D, 3);
            var index    = (int)Math.Truncate(interval / waveLengthStep);
            var result   = double.MinValue;

            if (diffWL == 0D)
            {
                result = GetPointItemValue(data[index], dataType);
            }
            else
            {
                if (index + 1 >= data.Count)
                {
                    result = GetPointItemValue(data[data.Count - 1], 0);
                }
                else
                {
                    result = MeasuringManager.GetSlopeValue(
                        0,
                        GetPointItemValue(data[index], dataType),
                        waveLengthStep,
                        GetPointItemValue(data[index + 1], dataType),
                        diffWL);
                }
            }

            return(result == double.MinValue ? result : Math.Round(result, 3));
        }
Ejemplo n.º 10
0
        private static double TestChannelUniformity(ReferenceData referenceData, TestDataCollection testDataCollection, string testType, string temp, int port, string pSetting)
        {
            var testData = testDataCollection.GetTestData(testType, "Swept", "SweptPDL");

            if (testData == null)
            {
                throw new MeasuringException("没有计算Uniformity所需测试数据");
            }
            var list      = new List <double>();
            var parallels = MeasuringManager.GetParallelSettings(pSetting);

            foreach (var parallel in parallels)
            {
                var items = MeasuringManager.GetItemSettings(parallel);
                var sport = GetSetingPort(items);
                var data  = testData.GetData(temp, sport).Values.ToList();
                if (data.Count < 1)
                {
                    throw new MeasuringException("没有计算Uniformity所需测试数据");
                }

                var tempData = GetRangeData(data, items, 0);

                if (tempData.Count < 1)
                {
                    throw new MeasuringException("没有计算Uniformity所需测试数据");
                }
                list.Add(tempData.Min());
            }

            if (list.Count < 1)
            {
                throw new MeasuringException("没有计算Uniformity所需测试数据");
            }
            var max = list.Max();
            var min = list.Min();

            if (max == double.MinValue || min == double.MinValue)
            {
                return(double.MinValue);
            }
            return(Math.Abs(Math.Round(max - min, 3)));
        }
Ejemplo n.º 11
0
        public string[] GetSetting(bool withCheck = true)
        {
            var settings = MeasuringManager.GetSettings(tbSetting.Text);

            if (!withCheck)
            {
                return(settings);
            }

            foreach (var setting in settings)
            {
                var errorString = string.Empty;
                if (!MeasuringManager.CheckSetting(BindingTestSystem.SystemTypeID, setting, out errorString))
                {
                    tbSetting.Focus();
                    throw new Exception(string.Format("{0} 设置 {1} 格式错误,\r\n{2},请检查设置。", BindingTestSystem.SystemName, setting, errorString));
                }
            }
            return(settings);
        }
Ejemplo n.º 12
0
        public static void Regisry()
        {
            if (IsRegisred)
            {
                return;
            }

            IsRegisred = true;

            MeasuringManager.RegisryCalculate("TestCWL", TestCWL);
            MeasuringManager.RegisryCalculate("TestCWLAccuracy", TestCWLAccuracy);
            MeasuringManager.RegisryCalculate("TestBandwidth", TestBandwidth);
            MeasuringManager.RegisryCalculate("TestRipple", TestRipple);
            MeasuringManager.RegisryCalculate("TestInsertionLoss", TestInsertionLoss);
            MeasuringManager.RegisryCalculate("TestPeakIL", TestPeakIL);
            MeasuringManager.RegisryCalculate("TestIsolation", TestIsolation);
            MeasuringManager.RegisryCalculate("TestChannelUniformity", TestChannelUniformity);
            MeasuringManager.RegisryCalculate("TestChipUniformity", TestChipUniformity);
            MeasuringManager.RegisryCalculate("TestPolarizationDependentLoss", TestPolarizationDependentLoss);
            MeasuringManager.RegisryCalculate("TestReturnLossOut", TestReturnLoss);
        }
Ejemplo n.º 13
0
        private static double GetWaveLength(List <PointTestItem> data, double findIL, bool dir, int centerIndex)
        {
            var items = (dir ? data.Take(centerIndex).Reverse() : data.Skip(centerIndex)).ToList();

            var w1 = 0D;
            var l1 = 0D;
            var w2 = 0D;
            var l2 = 0D;

            var finded = false;

            w2 = items[0].WaveLength;
            l2 = GetPointItemValue(items[0], 0);

            foreach (var item in items)
            {
                w1     = item.WaveLength;
                l1     = GetPointItemValue(item, 0);
                finded =
                    findIL <= Math.Max(l1, l2) &&
                    findIL >= Math.Min(l1, l2);
                if (finded)
                {
                    break;
                }

                w2 = w1;
                l2 = l1;
            }

            if (!finded)
            {
                return(double.MinValue);
            }

            w1 = MeasuringManager.GetSlopeValue(l1, w1, l2, w2, findIL);
            return(Math.Round(w1, 3));
        }
Ejemplo n.º 14
0
        private static double TestBandwidth(ReferenceData referenceData, TestDataCollection testDataCollection, string testType, string temp, int port, string pSetting)
        {
            var testData = testDataCollection.GetTestData(testType, "Swept", "SweptPDL");

            if (testData == null)
            {
                throw new MeasuringException("没有计算Bandwidth所需测试数据");
            }
            var list = testData.GetDataList(temp, port);

            if (list.Count < 1)
            {
                throw new MeasuringException("没有计算Bandwidth所需测试数据");
            }

            var items = MeasuringManager.GetItemSettings(pSetting);
            var type  = GetSettingType(items);
            var cw    = GetSettingCenterWaveLength(items);
            var db    = GetSettingDB(items);
            var wl    = GetBandwidth(list.ToList(), type, cw, db, bwSetting);

            return(wl);
        }
Ejemplo n.º 15
0
        private MeasurementTestResult Calculate(Guid specItemID, out WorkInfoSpecItem item)
        {
            item = MeasurementJob.SpecData.WorkInfoSpecItems.FirstOrDefault(q => q.SpecItemID == specItemID);
            if (item == null)
            {
                return(new MeasurementTestResult()
                {
                    Result = -1,
                    Message = "规格异常",
                    Data = 0D
                });
            }

            var testResult = MeasuringManager.Calculate(
                MeasurementJob.ReferenceData,
                TestData,
                item.SystemTypeID,
                item.TestGroupTestType,
                item.TestTemp,
                item.PortSetting,
                item.TestSetting
                );

            if (testResult.Result < 1)
            {
                return(testResult);
            }

            if (testResult.Data == double.MinValue)
            {
                testResult.Result  = -1;
                testResult.Message = "计算结果出错";
                return(testResult);
            }

            testResult.Result = 0;
            foreach (var resultSetting in BaseSettingsManager.Get <ResultSettings>().NeedSettingResult.OrderBy(q => q.ResultID))
            {
                ComputeSettingItem computeItem = default(ComputeSettingItem);
                if (!item.ComputeSetting.TryGetValue(resultSetting.ResultID, out computeItem))
                {
                    testResult.Result  = -1;
                    testResult.Message = "规格判断标准设置错误";
                    return(testResult);
                }
                if (string.IsNullOrEmpty(computeItem.ComputeValue))
                {
                    continue;
                }

                if (OperatorManager.GetOperator(computeItem.ComputeSign).GetComputeResult(computeItem.ComputeValue, testResult.Data))
                {
                    testResult.Result  = resultSetting.ResultID;
                    testResult.Message = $"{item.ItemName} 通过";
                }
                else
                {
                    testResult.Message = "结果不符合规格";
                }
            }

            return(testResult);
        }
Ejemplo n.º 16
0
        private string GetTagValue(string tag)
        {
            var temp       = 0;
            var round      = -1;
            var port       = int.MinValue;
            var dataType   = 0;
            var tagString  = tag;
            var stringTemp = "";

            tagString = GetRound(tagString, out round);
            tagString = GetTemperature(tagString, out temp);
            tagString = GetPort(tagString, out port);
            tagString = GetDataType(tagString, out dataType);
            if (dataType == int.MinValue)
            {
                return(tagString);
            }
            if (temp > tempSetting.Length)
            {
                return("");
            }
            else if (temp >= 0)
            {
                stringTemp = tempSetting[temp];
            }

            //测试项目有相同项目
            var testedData = testInfo.TestItems.Where(
                q => q.ItemName == tagString &&
                (string.IsNullOrEmpty(stringTemp) || q.TestTemp == stringTemp) &&
                (port == int.MinValue || BaseSettingsManager.Get <SystemGroupSetting>().GetTestSystemItem(q.SystemID).PortSetting == port)
                ).ToList();

            if (testedData.Count > 0)
            {
                return(GetTestValue(testedData, dataType, round));
            }


            var setting    = "";
            var tagItem    = GetSetting(tagString, out setting);
            var testSystem = BaseSettingsManager.Get <SystemGroupSetting>().GetTestSystemItem(classID, tagItem, port);

            if (testSystem == null)
            {
                return("");
            }

            //测试项目设置符合条件
            testedData = testInfo.TestItems.Where(
                q =>
                q.SystemID == testSystem.SystemID &&
                (string.IsNullOrEmpty(setting) || q.TestInfo == setting) &&
                (string.IsNullOrEmpty(stringTemp) || q.TestTemp == stringTemp)).ToList();

            if (testedData != null)
            {
                return(GetTestValue(testedData, dataType, round));
            }

            //重新计算结果
            try
            {
                var testGroup = BaseSettingsManager.Get <SystemGroupSetting>().GetTestSystemGroup(testSystem.TestGroupID);
                if (testGroup == null)
                {
                    return("");
                }
                var value = MeasuringManager.Calculate(referenceData, collection, testSystem.SystemTypeID, testGroup.TestGroupTestType, stringTemp, testSystem.PortSetting, setting);
                if (value.Result > -1 && value.Data != double.MinValue)
                {
                    return(round < 0 ? value.Data.ToString() : Math.Round(value.Data, round).ToString());
                }
            }
            catch (Exception ex)
            {
                Incht.Common.Log.LogHelper.WriteLog("TemplateData", ex);
            }

            return("");
        }
Ejemplo n.º 17
0
        public void LoadData(Guid pSystemID, Guid pTestGroupID, Action cback = null)
        {
            this.GetService <ModifyTestSystem>().ExecuteAsync(
                c => c.GetData(pSystemID),
                (result) =>
            {
                if (!result.Status)
                {
                    AppFramework.Context.ShowError(result.Message);
                    this.Close();
                    return;
                }
                callback = cback;

                vm.Model.SystemID       = result.Data.SystemID;
                vm.Model.SystemName     = result.Data.SystemName;
                vm.Model.DisplayName    = result.Data.DisplayName;
                vm.Model.DefaultSetting = result.Data.DefaultSetting;
                vm.Model.PortSetting    = result.Data.PortSetting;
                vm.Model.OrderID        = result.Data.OrderID;

                //设置窗体标题
                if (pSystemID == Guid.Empty)
                {
                    result.Data.TestGroupID = pTestGroupID;
                    this.Text = "添加测试项";
                }
                else
                {
                    pTestGroupID = result.Data.TestGroupID;
                    this.Text    = $"修改测试项 - {result.Data.SystemName}";
                }

                vm.Render(panelContent, new Padding(0, 15, 15, 0), "30%", true,
                          (name, control) =>
                {
                    if (name == "OrderID")
                    {
                        (control as NumericUpDown).Maximum = 10000;
                    }
                },
                          (name, control) =>
                {
                    switch (name)
                    {
                    case "SystemTypeID":
                        (control as ComboBox).UpdateDataSource(MeasuringManager.GetCalculateDataSource(), result.Data.SystemTypeID, (value) => {
                            vm.Model.SystemTypeID = value;
                        });
                        break;

                    case "DefaultComputeSign":
                        (control as ComboBox).UpdateDataSource(OperatorManager.GetComputeDataSource(), result.Data.DefaultComputeSign, (value) => {
                            vm.Model.DefaultComputeSign = value;
                        });
                        break;

                    case "TestGroupID":

                        var cb = (control as ComboBox);
                        this.GetService <ModifyTestSystem>().ExecuteAsync(c => c.GetTestGroupDataSource(pTestGroupID)
                                                                          , (source) =>
                        {
                            if (!source.Status)
                            {
                                return;
                            }
                            cb.UpdateDataSource(source.Data, result.Data.TestGroupID, (value) => {
                                vm.Model.TestGroupID = value;
                            });
                        });
                        break;

                    case "TemperatureSetting":
                        var ds4 = new BindingList <KeyValuePair <int, string> >();
                        ds4.Add(new KeyValuePair <int, string>(0, "多温度测试"));
                        ds4.Add(new KeyValuePair <int, string>(1, "常温测试"));

                        (control as ComboBox).UpdateDataSource(ds4, result.Data.TemperatureSetting, (value) => {
                            vm.Model.TemperatureSetting = value;
                        });
                        break;
                    }
                });
            });
        }
Ejemplo n.º 18
0
        private void GetTestSystemItemControlsSpecItems(List <SpecItem> newSpecItems)
        {
            var tempSetting      = specInfo.TempSetting.Split(",");
            var testSystemGroups = BaseSettingsManager.Get <SystemGroupSetting>().GetTestGroupByProductClass(classID);
            var groups           = SystemGroupSetting.GroupSystemByTempGroup(testSystemGroups);

            foreach (var group in groups)
            {     //规格组
                for (int temp = 0; temp < tempSetting.Length; temp++)
                { //温度
                    var tempstring = tempSetting[temp];
                    if (string.IsNullOrEmpty(tempstring))
                    {
                        continue;
                    }

                    foreach (var systemGroup in group.Value)
                    {//测试组
                        var list = new List <SpecItem>();
                        foreach (var testSystem in BaseSettingsManager.Get <SystemGroupSetting>().GetTestItemByGroup(systemGroup.TestGroupID))
                        {//测试指标
                            if (testSystem.TemperatureSetting != 0 && temp > 0)
                            {
                                continue;
                            }

                            var testSystemItemControl = GetTestSystemItemControl(testSystem.SystemID);
                            if (testSystemItemControl == null)
                            {
                                continue;
                            }

                            var settings = testSystemItemControl.GetSetting();
                            if (settings == null || settings.Length < 1)
                            {
                                continue;
                            }

                            var specs = testSystemItemControl.GetSpec(temp);
                            if (specs == null)
                            {
                                continue;
                            }

                            if (specs.Count < 1)
                            {
                                continue;
                            }

                            foreach (var setting in settings)
                            {
                                if (string.IsNullOrEmpty(setting))
                                {
                                    continue;
                                }

                                var olditem = specInfo.SpecItems.FirstOrDefault(
                                    q => q.SystemID == testSystem.SystemID &&
                                    q.TestTemp == tempstring &&
                                    q.TestInfo == setting
                                    );

                                if (olditem != null &&
                                    (newSpecItems.Any(q => q.SpecItemID == olditem.SpecItemID) ||
                                     list.Any(q => q.SpecItemID == olditem.SpecItemID)))
                                {
                                    olditem = null;
                                }

                                list.Add(
                                    new SpecItem()
                                {
                                    SpecItemID     = olditem == null ? Guid.NewGuid() : olditem.SpecItemID,
                                    SeqID          = specInfo.SeqID,
                                    SystemID       = testSystem.SystemID,
                                    ItemName       = MeasuringManager.GetSettingItemName(testSystem.DisplayName, setting, testSystem.PortSetting),
                                    TestTemp       = tempstring,
                                    TestInfo       = setting,
                                    ComputeSetting = specs.ToJsonString(),
                                    OrderID        = list.Count + 1
                                });
                            }
                        }

                        /*
                         * if (systemGroup.TestGroupTestType == "Point" ||
                         *  systemGroup.TestGroupTestType == "PointPDL" ||
                         *  systemGroup.TestGroupTestType == "RL")
                         * {
                         *  list.Sort((x, y) =>
                         *  {
                         *      var compare = x.TestInfo.CompareTo(y.TestInfo);
                         *      if (compare == 0)
                         *          compare = x.OrderID.CompareTo(y.OrderID);
                         *      return compare;
                         *  });
                         * }
                         */
                        foreach (var item in list)
                        {
                            item.OrderID = newSpecItems.Count + 1;
                            newSpecItems.Add(item);
                        }
                    }
                }
            }
        }
Ejemplo n.º 19
0
        private static double TestPointCR(ReferenceData referenceData, TestDataCollection testDataCollection, string testType, string temp, int port, string pSetting)
        {
            var pointTestData = testDataCollection.GetTestData(testType, "Point", "PointPDL");

            if (pointTestData == null)
            {
                throw new MeasuringException("没有计算CR所需测试数据");
            }

            /*
             * var wl = pSetting.CastTo(double.MinValue);
             * if (wl == double.MinValue)
             *  throw new MeasuringException("波长设置错误");
             *
             * var item = pointTestData.GetDataItem(temp, port, wl);
             * if (item == null)
             * {
             *  throw new MeasuringException("没有计算CR所需测试数据");
             * }
             * var refpower = referenceData.GetReference(1, port, wl);
             * var power = item.Power + Windows.IniProfile<BusinessLogic.Setting.SystemSetting>.Instance.Profile.ExtraLosssCompensation;
             * var cr = MeasuringManager.Convert_dBm2mW(power - refpower.Power);
             * cr = Math.Round(cr * 100D, 2);
             */

            var wl = pSetting.CastTo(double.MaxValue);

            if (wl == double.MinValue)
            {
                throw new MeasuringException("波长设置错误");
            }

            var testData = pointTestData.GetTestData();

            if (!testData.ContainsKey(temp))
            {
                throw new MeasuringException("没有计算CL所需测试数据");
            }
            var data     = testData[temp];
            var inPower  = 0D;
            var allPower = 0D;

            var setting = TestPortSetting.Get(port);

            foreach (var item in data)
            {
                var ch = item.Key;
                if (ch < 1 || !item.Value.ContainsKey(wl))
                {
                    continue;
                }

                var chSetting = TestPortSetting.Get(ch);
                if (chSetting.DataID != setting.DataID)
                {
                    continue;
                }

                var testItem = item.Value[wl];
                if (testItem.Power == double.MinValue)
                {
                    continue;
                }

                var power = MeasuringManager.Convert_dBm2mW(testItem.IL);
                if (port == ch)
                {
                    inPower = power;
                }

                allPower += power;
            }
            var cr = allPower == 0D ? 0D : inPower / allPower;

            cr = Math.Round(cr * 100D, 2);
            return(cr);
        }
Ejemplo n.º 20
0
        private void btSave_Click(object sender, EventArgs e)
        {
            var computeSetting = new Dictionary <int, ComputeSettingItem>();
            var sign           = cbSpec.SelectedValue;

            if (sign == null)
            {
                AppFramework.Context.ShowError("请选择规格符号!");
                return;
            }
            foreach (var item in tbSpecs)
            {
                var value       = item.Value.Text;
                var specCompute = OperatorManager.GetOperator(sign.ToString());
                if (!specCompute.Validation(value))
                {
                    AppFramework.Context.ShowError("规格设置格式错误,请检查。");
                    return;
                }
                computeSetting[item.Key] = new ComputeSettingItem()
                {
                    ComputeSign  = sign.ToString(),
                    ComputeValue = value
                };
            }
            vm.Model.ComputeSetting = computeSetting.ToJsonString();
            var testSystem = BaseSettingsManager.Get <SystemGroupSetting>().GetTestSystemItem(vm.Model.SystemID);

            if (testSystem == null)
            {
                AppFramework.Context.ShowError("测试系统不存在!");
                return;
            }
            var errroString = "";

            if (!MeasuringManager.CheckSetting(testSystem.SystemTypeID, vm.Model.TestInfo, out errroString))
            {
                AppFramework.Context.ShowError(errroString);
                return;
            }
            vm.Model.ItemName = MeasuringManager.GetSettingItemName(testSystem.DisplayName, vm.Model.TestInfo, testSystem.PortSetting);

            var validate = vm.Validate();

            if (validate.HasError)
            {
                validate.ShowErrorMessage("保存失败");
                return;
            }
            var specitem = new SpecItem();

            specitem.SpecItemID     = vm.Model.SpecItemID;
            specitem.SeqID          = vm.Model.SeqID;
            specitem.SystemID       = vm.Model.SystemID;
            specitem.ItemName       = vm.Model.ItemName;
            specitem.TestTemp       = vm.Model.TestTemp;
            specitem.TestInfo       = vm.Model.TestInfo;
            specitem.ComputeSetting = vm.Model.ComputeSetting;
            specitem.OrderID        = vm.Model.OrderID;
            AppFramework.Context.ShowAlert("更新成功", "更新项目");
            callback?.Invoke(specitem);
            this.Close();
        }
Ejemplo n.º 21
0
        private static double TestPointEL(ReferenceData referenceData, TestDataCollection testDataCollection, string testType, string temp, int port, string pSetting)
        {
            var pointTestData = testDataCollection.GetTestData(testType, "Point", "PointPDL");

            if (pointTestData == null)
            {
                throw new MeasuringException("没有计算EL所需测试数据");
            }

            var wl = pSetting.CastTo(double.MaxValue);

            if (wl == double.MinValue)
            {
                throw new MeasuringException("波长设置错误");
            }

            var testData = pointTestData.GetTestData();

            if (!testData.ContainsKey(temp))
            {
                throw new MeasuringException("没有计算EL所需测试数据");
            }
            var data     = testData[temp];
            var allPower = 0D;
            var inPower  = 0D;
            var count    = 0;
            var setting  = TestPortSetting.Get(port);

            foreach (var item in data)
            {
                var ch = item.Key;
                if (ch < 1 || !item.Value.ContainsKey(wl))
                {
                    continue;
                }

                var chSetting = TestPortSetting.Get(ch);
                if (chSetting.DataID != setting.DataID)
                {
                    continue;
                }

                var testItem = item.Value[wl];
                if (testItem.Power == double.MinValue)
                {
                    continue;
                }

                var refpower = referenceData.GetReference(1, ch % TestPortSetting.DataDivide, wl);
                allPower += MeasuringManager.Convert_dBm2mW(testItem.Power);
                inPower  += refpower.Power;
                count++;
            }
            allPower = MeasuringManager.Convert_mW2dBm(allPower) + Windows.IniProfile <BusinessLogic.Setting.SystemSetting> .Instance.Profile.ExtraLosssCompensation;
            inPower  = inPower / count;

            var value = inPower == double.MinValue ?
                        double.MinValue :
                        Math.Abs(Math.Round(allPower - inPower, 3));

            return(value);
        }
Ejemplo n.º 22
0
        private static double TestChipUniformity(ReferenceData referenceData, TestDataCollection testDataCollection, string testType, string temp, int port, string pSetting)
        {
            var testData = testDataCollection.GetTestData(testType, "Swept", "SweptPDL");

            if (testData == null)
            {
                throw new MeasuringException("没有计算Uniformity所需测试数据");
            }

            if (uniformity == null)
            {
                if (System.IO.File.Exists(uniformityFile))
                {
                    var data = System.IO.File.ReadAllText(uniformityFile);
                    try
                    {
                        uniformity = data.FromJsonString <Dictionary <string, List <double> > >();
                    }
                    catch
                    {
                    }
                }
                if (uniformity == null)
                {
                    uniformity = new Dictionary <string, List <double> >();
                }
            }
            if (!uniformity.ContainsKey(pSetting))
            {
                uniformity[pSetting] = new List <double>();
            }

            var list = uniformity[pSetting];

            if (list.Count >= Windows.IniProfile <BusinessLogic.Setting.SystemSetting> .Instance.Profile.ChipCount)
            {
                list.RemoveAt(0);
            }

            var parallels = MeasuringManager.GetParallelSettings(pSetting);

            foreach (var parallel in parallels)
            {
                var items = MeasuringManager.GetItemSettings(parallel);
                var sport = GetSetingPort(items);
                var data  = testData.GetData(temp, sport).Values.ToList();
                if (data.Count < 1)
                {
                    throw new MeasuringException("没有计算Uniformity所需测试数据");
                }

                var tempData = GetRangeData(data, items, 0);
                if (tempData.Count < 1)
                {
                    throw new MeasuringException("没有计算Uniformity所需测试数据");
                }
                list.Add(tempData.Min());
            }

            if (list.Count < 1)
            {
                throw new MeasuringException("没有计算Uniformity所需测试数据");
            }

            try
            {
                System.IO.File.WriteAllText(uniformityFile, uniformity.ToJsonString());
            }
            catch
            {
            }

            var max = list.Max();
            var min = list.Min();

            if (max == double.MinValue || min == double.MinValue)
            {
                return(double.MinValue);
            }
            return(Math.Abs(Math.Round(max - min, 3)));
        }