示例#1
0
 private static void GenerateEvoReport(HelixEvoSensor sensor, bool openFolder = false)
 {
     if (sensor.VDE.CheckComplete() && sensor.RectData.CheckComplete() && sensor.AccuracyResult.CheckComplete())
     {
         List <string> reportLines = new()
         {
             "==============================================================================",
             "\tSENSOR PERFORMANCE RESULTS",
             "\t--------------------------",
             $"\tSENSOR PART NUMBER:    {sensor.PartNumber}",
             $"\tSENSOR REVISION LEVEL: {sensor.SensorRev}",
             $"\tLASER CLASS:           {sensor.LaserClass}\n",
             "------------------------------------------------------------------------------",
             $"\tSensor Serial Number:   {sensor.SerialNumber}",
             $"\tSensor Type:            ALS",
             $"\tPeceptron Part Number:  {sensor.PartNumber}",
             $"\tPerceptron Revision:    {sensor.SensorRev}",
             $"\tRectification Revision: {sensor.RectRev}",
             "------------------------------------------------------------------------------",
             $"\tTime:    {sensor.RectData.Timestamp:M/d/yyyy h:m:s tt}\n",
             "VALIDATION DATA:",
             "\tResidual Sigma                  Actual  Limit",
             "\t--------------                  ------  -----",
             $"\tMax. Linearity Error (microns)  {string.Format("{0,6:F2}", sensor.RectData.ZeroDegreeMaxLinearity)}   {sensor.RectData.ZeroDegreeLinearityLimit}",
             $"\tMax. Flatness Sigma (microns)   {string.Format("{0,6:F2}", sensor.RectData.ZeroDegreeMaxFlatness)}   {sensor.RectData.ZeroDegreeFlatnessLimit}\n",
             $"\tSensor " +
             (sensor.RectData.ZeroDegreeMaxFlatness < sensor.RectData.ZeroDegreeFlatnessLimit &&
              sensor.RectData.ZeroDegreeMaxLinearity < sensor.RectData.ZeroDegreeLinearityLimit ? "PASSES" : "FAILS") +
             $" Residual Specification\n",
             "ACCURACY DATA: B89\n",
             $"\tSensor {(sensor.AccuracyResult.ZeroDegree2Rms < sensor.AccuracyResult.ZeroDegree2RmsLimit ? "PASSES" : "FAILS")} 0 Degree De-rectification Test\n\n",
             $"ACCURACY DATA: VDE-2634",
             "\tVDE-2634 Accuracy Test: Inspection Results\n",
             "\tPoint Deviation Statistic: Maximum Average Point-to-Fit Distance",
             "\tTest                                Measured    Limit    Test",
             "\t--------------------------------    ---------   -----    ----",
             $"\tSphere Spacing Error (SD)           {string.Format("{0,6:F2}", (sensor.VDE.SphereSpacingError * 1000f))}" +
             $"       {sensor.VDE.SphereSpacingErrorLimit * 1000f}" +
             $"     {(sensor.VDE.SphereSpacingError * 1000f < sensor.VDE.SphereSpacingErrorLimit * 1000f ? "PASS" : "FAIL")}",
             $"\tSphere Probing Error - Size (Ps)    {string.Format("{0,6:F2}", (sensor.VDE.SphereProbingErrorSize * 1000f))}" +
             $"       {sensor.VDE.SphereProbingErrorSizeLimit * 1000f}" +
             $"     {(sensor.VDE.SphereProbingErrorSize * 1000f < sensor.VDE.SphereProbingErrorSizeLimit * 1000f ? "PASS" : "FAIL")}",
             $"\tSphere Probing Error - Form (Pf)    {string.Format("{0,6:F2}", (sensor.VDE.SphereProbingErrorForm * 1000f))}" +
             $"       {sensor.VDE.SphereProbingErrorFormLimit * 1000f}" +
             $"     {(sensor.VDE.SphereProbingErrorForm * 1000f < sensor.VDE.SphereProbingErrorFormLimit * 1000f ? "PASS" : "FAIL")}",
             $"\tPlane Probing Error - Form (F)      {string.Format("{0,6:F2}", (sensor.VDE.PlaneProbingError * 1000f))}" +
             $"       {sensor.VDE.PlaneProbingErrorFormLimit * 1000f}" +
             $"     {(sensor.VDE.PlaneProbingError * 1000f < sensor.VDE.PlaneProbingErrorFormLimit * 1000f ? "PASS" : "FAIL")}"
         };
         string folder = GetReportResultsFolder(sensor.RectDataFolder);
         string file   = Path.Join(folder, $"SN{sensor.SerialNumber}.txt");
         WriteFile(folder, file, reportLines, openFolder);
     }
 }
示例#2
0
        public static void LogTemplateApplication(HelixEvoSensor sensor, int numSensors, int months)
        {
            List <string> headers         = new() { "SerialNumber\tFilter\tDateGenerated\t#SensorsUsed\t#Months" };
            string        templateLogPath = Path.Join(Config.ResultsDir, "\\TComp_Templates\\Template.log");

            if (!File.Exists(templateLogPath))
            {
                File.WriteAllLines(templateLogPath, headers);
            }
            File.AppendAllText(templateLogPath,
                               $"\n{sensor.SerialNumber}\t{sensor.PartNumber.Substring(0,8)}\t{DateTime.Now:yyyy-MM-dd-HH-mm-ss}\t{numSensors}\t{months}");
        }
    }
示例#3
0
        public static void ApplyTemplate(string serialNumber, int months)
        {
            HelixEvoSensor         sensor       = AllEvoDataSingle(new() { SerialNumber = serialNumber });
            Tuple <TCompData, int> templateData = GenerateTemplate(sensor.PartNumber.Substring(0, 8), months); //Only get 920-0201 portion of PN
            TCompData     template      = templateData.Item1;
            List <string> lines         = template.GetLines();
            string        snGroupFolder = GetGroupFolder(Config.TcompDir, sensor.SerialNumber);

            string tcompPath = Path.Join(snGroupFolder, $"SN{sensor.SerialNumber}.txt");

            if (File.Exists(tcompPath))
            {
                TCompBackup(tcompPath);
            }
            WriteFile(snGroupFolder, tcompPath, lines, false);
            LogTemplateApplication(sensor, templateData.Item2, months);
            MessageBox.Show($"Template generated for SN{sensor.SerialNumber}, model {sensor.PartNumber}. Used data from {templateData.Item2} sensors" +
                            $" from the past {months} months.", "Template Applied", MessageBoxButton.OK, MessageBoxImage.Information);
        }
        public EvoDataPoint?ConvertNewData(HelixEvoSensor sensor)
        {
            //Return null if the new data point does not contain all needed values
            List <string> data       = sensor.GetDataList();
            List <double> doubleData = new List <double>();

            for (int i = 2; i < Columns.Count; i++)
            {
                if (data.Count < Columns[i])
                {
                    return(null);
                }
                if (double.TryParse(data[Columns[i]], out double dataPoint))
                {
                    doubleData.Add(dataPoint);
                }
            }
            if (double.TryParse(data[Columns[1]], out double label))
            {
                return(new EvoDataPoint(data[Columns[0]], label, doubleData));
            }
            return(null);
        }
示例#5
0
        public static HelixEvoSensor LinearityFlatnessResultsSingle(HelixEvoSensor sensor)
        {
            List <HelixEvoSensor> sensors = new() { sensor };
            Dictionary <string, List <string> > folders = GetEvoRectDataFolders(ref sensors);

            if (sensor.RectDataFolder != "" && folders.ContainsKey(sensor.RectDataFolder))
            {
                foreach (string folder in folders[sensor.RectDataFolder])
                {
                    if (folder.Contains(sensor.SerialNumber))
                    {
                        foreach (string file in Directory.GetFiles(folder))
                        {
                            if (file.Contains($"SN{sensor.SerialNumber}.log"))
                            {
                                sensor.GetRectData(file);
                            }
                        }
                    }
                }
            }
            return(sensor);
        }
        public Tuple <EvoDataPoint, List <Tuple <EvoDataPoint, double> > > GetNeighbors(HelixEvoSensor sensor, List <int> colOverride = null)
        {
            List <Tuple <EvoDataPoint, double> > distanceList = new List <Tuple <EvoDataPoint, double> >();
            EvoDataPoint?newData = ConvertNewData(sensor);

            if (newData == null)
            {
                return(new Tuple <EvoDataPoint, List <Tuple <EvoDataPoint, double> > >(new EvoDataPoint(), distanceList));
            }
            if (Scaled)
            {
                newData = ScaleNewData((EvoDataPoint)newData);
            }

            foreach (EvoDataPoint data in DataPoints) //Get minkowski for all data points
            {
                if (colOverride == null)
                {
                    distanceList.Add(new Tuple <EvoDataPoint, double>(data, GetMinkowski((EvoDataPoint)newData, data)));
                }
                else
                {
                    distanceList.Add(new Tuple <EvoDataPoint, double>(data, GetMinkowski((EvoDataPoint)newData, data, colOverride)));
                }
            }
            distanceList = SortDistanceList(distanceList);
            if (distanceList[0].Item1.Id == sensor.SerialNumber)
            {
                distanceList.RemoveAt(0);
            }
            return(new Tuple <EvoDataPoint, List <Tuple <EvoDataPoint, double> > >((EvoDataPoint)newData, distanceList));
        }