public static ProductDataEntity ToEntity(this Thermo1Product data)
        {
            var en = new ProductDataEntity();

            en.StartTime  = data.StartTime.ToString("yyyyMMdd-HHmmss.fff");
            en.FinishTime = data.FinishTime.ToString("yyyyMMdd-HHmmss");

            en.Status  = data.Status.ToString();
            en.Error   = data.Error;
            en.CT      = decimal.Parse(data.CT.ToString("F1"));
            en.Barcode = data.Barcode;

            en.ProductType = data.ProductType;
            en.Description = data.Description;


            en.Spcs = string.Join(",", data.SPCItems.Select(f => $"{f.SPC}:{f.Value:F3}"));

            var sb = new StringBuilder();

            sb.Append(string.Join(",", data.RawDataUp.Select(p => $"{p.Z:F3}:{p.Status}")));
            sb.Append(",");
            sb.Append(string.Join(",", data.RawDataDown.Select(p => $"{p.Z:F3}:{p.Status}")));

            en.Raws = sb.ToString();


            return(en);
        }
示例#2
0
 public void UpdateRTestResult(Thermo1Product data)
 {
     if (InvokeRequired)
     {
         BeginInvoke(new Action <Thermo1Product>(UpdateRTestResult), data);
     }
     else
     {
         _thermoProductDisplayControl2.UpdateResult(data);
     }
 }
示例#3
0
        private void cORRTagToolStripMenuItem_Click(object sender, EventArgs e)
        {
            var p = new Thermo1Product()
            {
                StartTime = DateTime.Now,
                Barcode   = "CORR TEST START",
            };

            p.Save("LeftData");
            p.Save("RightData");
        }
示例#4
0
 public void UpdateRStart(Thermo1Product product)
 {
     if (InvokeRequired)
     {
         BeginInvoke(new Action <Thermo1Product>(UpdateRStart), product);
     }
     else
     {
         _thermoProductDisplayControl2.UpdateStart();
     }
 }
示例#5
0
 public void UpdateLTesting(Thermo1Product data)
 {
     if (InvokeRequired)
     {
         BeginInvoke(new Action <Thermo1Product>(UpdateLTesting), data);
     }
     else
     {
         _thermoProductDisplayControl1.UpdateTesting(data);
     }
 }
示例#6
0
        /// <summary>
        /// 转换GT读数到产品坐标系
        /// </summary>
        /// <param name="station"></param>
        /// <param name="calib"></param>
        /// <param name="productData"></param>
        public static void TransformRawData(string station, CalibrationConfig calib, Thermo1Product productData)
        {
            foreach (var p in productData.RawDataUp)
            {
                p.Z = TransGtRaw(station, calib, p);
            }

            foreach (var p in productData.RawDataDown)
            {
                p.Z = TransGtRaw(station, calib, p);
            }
        }
        public static string ToSQL(this Thermo1Product data)
        {
            var en = new StringBuilder();

            en.Append(" Values('" + data.StartTime.ToString("yyyy-MM-dd HH:mm:ss.fff") + "',");
            en.Append("'" + data.FinishTime.ToString("yyyy-MM-dd HH:mm:ss") + "',");
            en.Append("'" + data.Barcode + "',");
            en.Append("'" + data.Status.ToString() + "',");
            en.Append("'" + data.MachineName + "',");
            en.Append("'" + data.Error + "',");
            en.Append("'" + data.ProductType + "',");
            en.Append("'" + data.Description + "',");
            en.Append("'" + string.Join(",", data.SPCItems.Select(f => $"{f.SPC}:{f.Value:F3}")) + "',");
            en.Append("'" + decimal.Parse(data.CT.ToString("F1")) + "')");

            return(en.ToString());
        }
示例#8
0
        public void Test_GT_HEIGHT()
        {
            var settings = MachineSettings.Load(@".\Config\settings.cfg");

            var project = FlatnessProject.Load(@".\Config\A117WithFinNewCalib.fprj");


            var data = File.ReadAllLines(@".\Config\20180807.csv");


            var calc = Thermo1CalculatorMgr.Ins.New(project.ProductSettings.ProductName);


            var prodata = new Thermo1Product()
            {
                RawDataUp   = project.ProductSettings.UpTestPositions,
                RawDataDown = project.ProductSettings.DownTestPositions,
                SPCItems    = project.ProductSettings.SPCItems,
                ProductType = project.ProductSettings.ProductName,
            };


            for (int data1Index = 0; data1Index < data.Length; data1Index++)
            {
                {
                    //
                    //var data1Index = 11;
                    var buffer = data[data1Index].Split(',');

                    var up = 17;
                    for (int i = 0; i < prodata.RawDataUp.Count; i++)
                    {
                        prodata.RawDataUp[i].Z = double.Parse(buffer[up + i]);
                    }
                    var down = 26;
                    for (int i = 0; i < prodata.RawDataDown.Count; i++)
                    {
                        prodata.RawDataDown[i].Z = double.Parse(buffer[down + i]);
                    }

                    //prodata.RawUpGtWorkPos = new PosXYZ(
                    //    prodata.RawDataUp.Select(p => p.X).Average(),
                    //    prodata.RawDataUp.Select(p => p.Y).Average(),
                    //    settings.AxisPos.RUpPlatformPos.Find(p => p.Name == "GtWork").Z - project.ProductSettings.Height);

                    //prodata.RawDownGt1WorkPos = new PosXYZ(
                    //    prodata.RawDataDown.FindAll(p => p.Name == "cpu").Select(p => p.X).Average(),
                    //    prodata.RawDataDown.FindAll(p => p.Name == "cpu").Select(p => p.Y).Average(),
                    //    settings.AxisPos.RDownPlatformPos.Find(p => p.Name == "GtWork1").Z);


                    //prodata.RawDownGt2WorkPos = new PosXYZ(
                    //    prodata.RawDataDown.FindAll(p => p.Name == "pin").Select(p => p.X).Average(),
                    //    prodata.RawDataDown.FindAll(p => p.Name == "pin").Select(p => p.Y).Average(),
                    //    settings.AxisPos.RDownPlatformPos.Find(p => p.Name == "GtWork2").Z);

                    if (data1Index == 9)
                    {
                        data1Index = 9;
                    }

                    calc.Calculate(prodata);

                    //Console.WriteLine("up:\r\n");
                    //Console.WriteLine(string.Join("\r\n", prodata.RawDataUp));
                    //Console.WriteLine("down:\r\n");
                    //Console.WriteLine(string.Join("\r\n", prodata.RawDataDown));

                    //Console.WriteLine($"data1:");
                }
            }
        }
示例#9
0
        public void TestMethod_Calc_Method20180820()
        {
            //load settings
            var settings = MachineSettings.Load(@".\Config2\Settings.cfg");


            //load raw data
            List <Thermo1Product> rawDatas = new List <Thermo1Product>();
            {
                var fprj = FlatnessProject.Load(@".\Config2\A117NoFin_pf_30.fprj");


                var file  = @".\Config2\20180810 LEFT.csv";
                var lines = File.ReadAllLines(file);
                foreach (var line in lines)
                {
                    var testData = new Thermo1Product()
                    {
                        ProductType = fprj.ProductSettings.ProductName,
                        SPCItems    = fprj.ProductSettings.SPCItems,
                    };
                    var strs = line.Split(',');

                    //raw up
                    {
                        var gtZ = 0;// settings.AxisPos.LUpPlatformPos.First(p => p.Name == "GtWork").Z - fprj.ProductSettings.Height;

                        var strIndex = 13;
                        for (int i = 0; i < 8; i++)
                        {
                            var pos = new PosXYZ(fprj.ProductSettings.UpTestPositions[i].X, fprj.ProductSettings.UpTestPositions[i].Y, double.Parse(strs[i + strIndex]))
                            {
                                Name        = "up",
                                Description = "GT",
                                OffsetX     = double.Parse(strs[i + strIndex]),
                                OffsetZ     = gtZ,
                            };

                            testData.RawDataUp.Add(pos);
                        }
                    }

                    //raw ped1
                    {
                        var gtZ      = 0;// settings.AxisPos.LDownPlatformPos.First(p => p.Name == "GtWork1").Z;
                        var strIndex = 22;
                        for (int i = 0; i < 5; i++)
                        {
                            var pos = new PosXYZ(fprj.ProductSettings.DownTestPositions[i].X, fprj.ProductSettings.DownTestPositions[i].Y, double.Parse(strs[i + strIndex]))
                            {
                                Name        = "ped1",
                                Description = "GT1",
                                OffsetX     = double.Parse(strs[i + strIndex]),
                                OffsetZ     = gtZ,
                            };

                            testData.RawDataDown.Add(pos);
                        }
                    }



                    //raw inner standoff
                    {
                        var gtZ      = 0;// settings.AxisPos.LDownPlatformPos.First(p => p.Name == "GtWork2").Z;
                        var strIndex = 27;
                        for (int i = 0; i < 4; i++)
                        {
                            var pos = new PosXYZ(fprj.ProductSettings.DownTestPositions[i + 5].X, fprj.ProductSettings.DownTestPositions[i + 5].Y, double.Parse(strs[i + strIndex]))
                            {
                                Name        = "inner",
                                Description = "GT2",
                                OffsetX     = double.Parse(strs[i + strIndex]),
                                OffsetZ     = gtZ,
                            };

                            testData.RawDataDown.Add(pos);
                        }
                    }

                    rawDatas.Add(testData);
                }
            }



            {
                var p = rawDatas.Last();
                Console.WriteLine($"{string.Join(",", p.RawDataUp.Select(ps => ps.X.ToString("F3")))}");
                Console.WriteLine($"{string.Join(",", p.RawDataUp.Select(ps => ps.Y.ToString("F3")))}");
                Console.WriteLine($"{string.Join(",", p.RawDataDown.Select(ps => ps.X.ToString("F3")))}");
                Console.WriteLine($"{string.Join(",", p.RawDataDown.Select(ps => ps.Y.ToString("F3")))}");


                foreach (var data in p.RawDataUp)
                {
                    Console.WriteLine($"pos.Add(new PosXYZ({data.X},{data.Y},{data.Z}) {{ Status = {data.Status.ToString().ToLower()} }}); ");
                }
                foreach (var data in p.RawDataDown)
                {
                    Console.WriteLine($"pos.Add(new PosXYZ({data.X},{data.Y},{data.Z}) {{ Status = {data.Status.ToString().ToLower()} }}); ");
                }
            }
        }
示例#10
0
        public virtual Thermo1Product Calculate(Thermo1Product productData)
        {
            //no reentrant
            lock (this)
            {
                //clear
                foreach (var g in GeoCalcs)
                {
                    g.Clear();
                }

                if (productData.Description.Contains(ProductName))
                {
                    var rawPos = new List <PosXYZ>();
                    rawPos.AddRange(productData.RawDataUp);
                    rawPos.AddRange(productData.RawDataDown);

                    try
                    {
                        //calculate geometry

                        //calculate datum geos
                        var datumGeos = GeoCalcs.FindAll(g => g.IsDatum);
                        foreach (var datumGeo in datumGeos)
                        {
                            var pos = rawPos.FindAll(p => p.Name == datumGeo.SourcePos);
                            if (pos.Count > 0)
                            {
                                var spc = productData.SPCItems.FirstOrDefault(s => s.SPC == datumGeo.Name);
                                if (spc == null)
                                {
                                    throw new Exception($"{datumGeo.Name} DATUM SPC Error");
                                }

                                datumGeo.SetSpec(spc.SPEC, spc.UpLimit, spc.DownLimit);
                                datumGeo.DoCalc(pos);
                                datumGeo.UpdateValue(ref spc);
                            }
                        }

                        //calculate other geos
                        var otherGeos = GeoCalcs.FindAll(g => !g.IsDatum);
                        foreach (var otherGeo in otherGeos)
                        {
                            var pos = rawPos.FindAll(p => p.Name == otherGeo.SourcePos);
                            if (pos.Count > 0)
                            {
                                var spc = productData.SPCItems.FirstOrDefault(s => s.SPC == otherGeo.Name);
                                if (spc == null)
                                {
                                    throw new Exception($"{otherGeo.Name} SPC Error");
                                }

                                otherGeo.SetDatum(GeoCalcs.First(g => g.Name == otherGeo.DatumName).Datum);
                                otherGeo.SetSpec(spc.SPEC, spc.UpLimit, spc.DownLimit);
                                otherGeo.DoCalc(pos);
                                otherGeo.UpdateValue(ref spc);
                            }
                        }
                    }
                    catch (Exception)
                    {
                        productData.Error  = $"GeometryCalcError";
                        productData.Status = ProductStatus.ERROR;
                    }
                }
                else
                {
                    productData.Error  = $"GeometryCalcNameError";
                    productData.Status = ProductStatus.ERROR;
                }

                return(productData);
            }
        }
示例#11
0
        protected override int RunLoop()
        {
            //in case of manual operations
            Platform.AssertAutoMode(this);


            //wait start
            while ((!DIStart1.GetDiSts() || !DIStart2.GetDiSts()))
            {
                Thread.Sleep(100);
                JoinIfPause();
                AbortIfCancel("cancel trans wait start");
                if (Station.Id == 1 && Machine.Ins.Settings.Common.LeftAutoTryRun)
                {
                    break;
                }

                if (Station.Id == 2 && Machine.Ins.Settings.Common.RightAutoTryRun)
                {
                    break;
                }
            }

            Log(string.Empty, LogLevel.None);


            if ((Station.Id == 1 && Machine.Ins.Settings.Common.LeftSensorCheck) ||
                (Station.Id == 2 && Machine.Ins.Settings.Common.RightSensorCheck))
            {
                //检查定位传感器
                if (!DISensorCheck1.GetDiSts() || !DISensorCheck2.GetDiSts())
                {
                    Station.Machine.Beep();
                    Log($"{Station.Name} - {Name} 定位传感器检测异常", LogLevel.Warning);
                    return(0);
                }
            }

            if ((Station.Id == 1 && Machine.Ins.Settings.Common.LeftFinSensorCheck) ||
                (Station.Id == 2 && Machine.Ins.Settings.Common.RightFinSensorCheck))
            {
                //检查fin传感器
                if (!CheckProductFin())
                {
                    //return to wait start
                    return(0);
                }
            }

            //new product
            Product = new Thermo1Product()
            {
                ProductType = Project.ThermoProductType.ToString(),
                Description = Station.Name + "-" + Project.ProductName + "-" + CfgSettings.Version,
                SPCItems    = Project.SPCItems,
            };
            Product.ClearSpc();
            //push data to measure tasks
            WaitTaskDown.Product = Product;
            WaitTaskUp.Product   = Product;
            TestProcessControl.OnTestStartEvent(Product);
            TestProcessControl.OnTestingEvent(Product);

            DOBtnLight1.SetDo();
            DOBtnLight2.SetDo();

            //cy clamp
            if (Project.ProjectName.Contains("HeightCalib"))
            {
                DoClampCylinderY.SetDo(this, true, 100, ignoreOrWaringOrError: null);
            }
            else if (Project.ThermoProductType == ThermoProductType.FullModule)
            {
                Clamper.ClampModule();
            }
            else if (Project.ThermoProductType == ThermoProductType.VaporChamber)
            {
                Clamper.ClampVC();
            }
            else
            {
                Clamp(true);
            }


            //move work
            Platform.MoveAbs(0, "Work");
            {
                VioTransInp.SetVio(this);

                //start waiting
                Log("Measure Start......\n-----------------------------------------------", LogLevel.Info);
                //set measure start
                VioTransFinishUp.SetVio(this);
                VioTransFinishDown.SetVio(this);
                {
                    //wait barcode finish update barcode
                    VioBarcodeFinish.WaitVioAndClear(this);
                    TestProcessControl.OnTestingEvent(Product);
                }
                //wait measure finish
                VioMeasureFinishUp.WaitVioAndClear(this);
                VioMeasureFinishDown.WaitVioAndClear(this);
                Log("Measure Finish......\n-----------------------------------------------", LogLevel.Info);
            }
            //move wait pos
            Platform.MoveAbs(0, "Wait");

            //update results
            //calc flatness
            if (Thermo1GeometryCalculator != null)
            {
                //transform raw data to same coord
                GTTransform.TransformRawData(Station.Name, CfgSettings.Calibration, Product);
                var data = Thermo1GeometryCalculator.Calculate(Product);
                Log($"Flatness Calc: {data.ToString()}");
            }

            SaveProductData();

            Clamper.Release();
            DOBtnLight1.SetDo(false);
            DOBtnLight2.SetDo(false);

            return(0);
        }
示例#12
0
        protected override int ResetLoop()
        {
            Clamper = new XyClamper()
            {
                Task = this,
                CyX  = DoClampCylinderX,
                CyY  = DoClampCylinderY,
            };

            Platform.AssertPosTeached("Wait", this);
            Platform.AssertPosTeached("Work", this);

            CfgSettings = Machine.Ins.Settings;


            if (!Project.CheckIfNormal())
            {
                ThrowException($"Project Error: {Project.ProductName}");
            }


            Thermo1GeometryCalculator = Thermo1CalculatorMgr.Ins.New(Project.ProductName);
            if (Thermo1GeometryCalculator == null || !Thermo1GeometryCalculator.CheckIfNormal())
            {
                ThrowException($"Station {Name} Load Thermo1GeometryCalculator for {Project.ProductName} Fail");
            }


            try
            {
                Product             = new Thermo1Product();
                Product.ProductType = Project.ThermoProductType.ToString();
                Product.Description = string.Join("-", new[] { Station.Name, Project.ProductName, CfgSettings.Version });
                Product.SPCItems    = Project.SPCItems;

                TestProcessControl.OnTestStartEvent(Product);


                //upload data
                if (CfgSettings.Uploader.Enable)
                {
                    //init uploader
                    UploadHelper = DataUploadFactory.Ins.Create(CfgSettings.Uploader.UploaderName, CfgSettings.Uploader);
                    if (UploadHelper == null)
                    {
                        Log($"创建上传模块失败: {CfgSettings.Uploader.UploaderName} 不存在", LogLevel.Error);
                    }
                    else
                    {
                        UploadData();
                    }
                }
            }
            catch (Exception ex)
            {
                Log($"连接FTP ERROR: {ex.Message}", LogLevel.Error);
            }


            DOBtnLight1.SetDo(false);
            DOBtnLight2.SetDo(false);
            Thread.Sleep(500);
            DOBtnLight1.SetDo();
            DOBtnLight2.SetDo();


            //reset vio
            VioTransInp.SetVio(this, false);
            VioBarcodeFinish.SetVio(this, false);
            VioTransFinishUp.SetVio(this, false);
            VioTransFinishDown.SetVio(this, false);

            //start resetting process
            //check air pressure
            //if (!DIAirPressure1.GetDiSts(MotionWrapper))
            //{
            //    return -1;
            //}

            //check gt controller
            try
            {
                if (GtController == null)
                {
                    ThrowException("GT Controller not Created");
                }

                if (GtController.Connected)
                {
                    GtController.Close();
                    GtController = new KeyenceGT();
                }

                GtController.Connect(GtAddress, GtPort);
            }
            catch (Exception e)
            {
                ThrowException($"GT Controller Connected Fail:{e.Message}");
            }


            //wait measure task
            WaitTaskDown.AssertNoNull(this);
            WaitTaskDown.WaitResetFinish(this);
            WaitTaskUp.AssertNoNull(this);
            WaitTaskUp.WaitResetFinish(this);


            WaitTaskUp.GtController   = GtController;
            WaitTaskDown.GtController = GtController;

            DOBrakeZPress.SetDo();

            Clamp(true);

            //home platform
            Platform.EnterAuto(this).Servo();
            Platform.EnterAuto(this).Home();
            Platform.EnterAuto(this).MoveAbs("Wait", checkLimit: false);

            //cy clamp
            Clamper.Release();

            //check sensor
            //while (!DISensorCheck1.GetDiSts( false) || !DISensorCheck2.GetDiSts( false))
            //{
            //    MessageBox.Show("product found");
            //}

            DOBtnLight1.SetDo(false);
            DOBtnLight2.SetDo(false);

            RunningState = RunningState.WaitRun;
            GtController.RunGtService(this);
            return(0);
        }