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); }
public void UpdateRTestResult(Thermo1Product data) { if (InvokeRequired) { BeginInvoke(new Action <Thermo1Product>(UpdateRTestResult), data); } else { _thermoProductDisplayControl2.UpdateResult(data); } }
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"); }
public void UpdateRStart(Thermo1Product product) { if (InvokeRequired) { BeginInvoke(new Action <Thermo1Product>(UpdateRStart), product); } else { _thermoProductDisplayControl2.UpdateStart(); } }
public void UpdateLTesting(Thermo1Product data) { if (InvokeRequired) { BeginInvoke(new Action <Thermo1Product>(UpdateLTesting), data); } else { _thermoProductDisplayControl1.UpdateTesting(data); } }
/// <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()); }
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:"); } } }
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()} }}); "); } } }
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); } }
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); }
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); }