private void HandleInspect(SurfaceInspectInfo surfaceInspectInfo) { Debug.WriteLine("Inspect Finished. SurfaceTypeIndex: " + surfaceInspectInfo.SurfaceTypeIndex); if (surfaceInspectInfo.InspectInfo.DefectInfos.Count <= 0) { InspectionDomainService.HandleSurfaceInspectionInfo(surfaceInspectInfo); switch (surfaceInspectInfo.SurfaceTypeIndex) { case 0: Machine.Inspection_SurfaceFront_InspectionFinishedWithAcceptedPcEventDevice.WriteTrue(); Debug.WriteLine( "Inspect Finished. Inspection_SurfaceFront_InspectionFinishedWithAcceptedPcEventDevice.WriteTrue()"); break; case 1: Machine.Inspection_SurfaceBack_InspectionFinishedWithAcceptedPcEventDevice.WriteTrue(); Debug.WriteLine( "Inspect Finished. Inspection_SurfaceBack_InspectionFinishedWithAcceptedPcEventDevice.WriteTrue()"); break; } if (MachineConfigProvider.MachineConfig.MV_SimulationInspectorEnabled) { Machine.Production_TotalCountDevice.Value++; } } else { InspectionDomainService.HandleSurfaceInspectionInfo(surfaceInspectInfo); switch (surfaceInspectInfo.SurfaceTypeIndex) { case 0: Machine.Inspection_SurfaceFront_InspectionFinishedWithRejectedPcEventDevice.WriteTrue(); Debug.WriteLine( "Inspect Finished. Inspection_SurfaceFront_InspectionFinishedWithRejectedPcEventDevice.WriteTrue()"); break; case 1: Machine.Inspection_SurfaceBack_InspectionFinishedWithRejectedPcEventDevice.WriteTrue(); Debug.WriteLine( "Inspect Finished. Inspection_SurfaceBack_InspectionFinishedWithRejectedPcEventDevice.WriteTrue()"); break; } if (MachineConfigProvider.MachineConfig.MV_SimulationInspectorEnabled) { Machine.Production_TotalCountDevice.Value++; Machine.Production_TotalRejectCountDevice.Value++; } } _inspectCounter++; }
public void HandleSurfaceInspectionInfo(SurfaceInspectInfo inspectInfo) { Debug.WriteLine("InspectionDomainService.HandleSurfaceInspectionInfo(): " + inspectInfo.SurfaceTypeIndex); lock (locker) { WorkpieceInfo wi; wi = _workpieceInfos.SingleOrDefault(x => x.Index == inspectInfo.WorkpieceIndex); if (wi == null) { wi = new WorkpieceInfo { Index = inspectInfo.WorkpieceIndex, InspectDateTime = DateTime.Now, }; Repository.Add(wi); Repository.UnitOfWork.Commit(); _workpieceInfos.Enqueue(wi); } _surfaceInspectInfos.Enqueue(inspectInfo); var siis = new List <StoredImageInfo>(); wi.InspectDateTime = DateTime.Now; wi.DefectInfos.AddRange(_surfaceInspectInfos.SelectMany(x => x.InspectInfo.DefectInfos)); wi.MeasurementInfos.AddRange(_surfaceInspectInfos.SelectMany(x => x.InspectInfo.MeasurementInfos)); if (MachineConfigProvider.MachineConfig.Reporting_StoreAcceptedImageEnabled && !wi.DefectInfos.Any()) { foreach (var surfaceInspectInfo in _surfaceInspectInfos) { var sii = surfaceInspectInfo.SaveImage(); siis.Add(sii); } } if (MachineConfigProvider.MachineConfig.Reporting_StoreRejectedImageEnabled && wi.DefectInfos.Any()) { foreach (var surfaceInspectInfo in _surfaceInspectInfos) { var sii = surfaceInspectInfo.SaveImage(); siis.Add(sii); } } wi.StoredImageInfo.AddRange(siis); Repository.Update(wi); Repository.UnitOfWork.Commit(); _surfaceInspectInfos.Clear(); } }
// public static DefectInfo ToEntity(this Hdc.Mv.Inspection.DefectInfo ii) // { // var ii2 = new DefectInfo() // { // Index = ii.Index, // TypeCode = ii.TypeCode, // Type = (DefectType)ii.TypeCode, // X = ii.X, // Y = ii.Y, // Width = ii.Width, // Height = ii.Height, // Size = ii.Size, // // XActualValue = ii.X_Real, // YActualValue = ii.Y_Real, // WidthActualValue = ii.Width_Real, // HeightActualValue = ii.Height_Real, // SizeActualValue = ii.Size_Real, // }; // return ii2; // } // public static MeasurementInfo ToEntity(this Hdc.Mv.Inspection.MeasurementInfo ii) // { // var ii2 = new MeasurementInfo() // { // Index = ii.Index, // TypeCode = ii.TypeCode, // StartPointX = ii.StartPointX, // StartPointY = ii.StartPointY, // EndPointX = ii.EndPointX, // EndPointY = ii.EndPointY, // Value = ii.Value, // GroupIndex = ii.GroupIndex, // // StartPointXActualValue = ii.StartPointXActualValue, // StartPointYActualValue = ii.StartPointYActualValue, // EndPointXActualValue = ii.EndPointXActualValue, // EndPointYActualValue = ii.EndPointYActualValue, // ValueActualValue = ii.ValueActualValue, // }; // return ii2; // } public static StoredImageInfo SaveImage(this SurfaceInspectInfo surfaceInspectInfo) { var prefix = DateTime.Now.ToString( // @"yyyy-MM-dd_hh\Hmm\Mss\S") + "_" @"yyyy-MM-dd_HH.mm.ss") + "_" + "WI" + surfaceInspectInfo.WorkpieceIndex + "." + "SI" + surfaceInspectInfo.SurfaceTypeIndex + "." + "_"; var sii = ImageSaveLoadService.StoreImage( fileName => surfaceInspectInfo.BitmapSource .SaveToTiffAsync(fileName), prefix, ".tif"); sii.SurfaceTypeIndex = surfaceInspectInfo.SurfaceTypeIndex; return(sii); }
public async void InspectImageFile(int surfaceTypeIndex, string fileName) { Task.Run(() => _calibrationStartedEvent.OnNext(surfaceTypeIndex)); var sw = new NotifyStopwatch("InspectImageFile: new BitmapImage(fileName)"); BitmapImage bi = new BitmapImage(new Uri(fileName, UriKind.RelativeOrAbsolute)); sw.Dispose(); var sw1 = new NotifyStopwatch("InspectImageFile: BitmapImage.ToImageInfoWith8Bpp()"); Hdc.Mv.ImageInfo imageInfo = bi.ToImageInfoWith8Bpp(); sw1.Dispose(); imageInfo.Index = 0; imageInfo.SurfaceTypeIndex = surfaceTypeIndex; ImageInfo imageInfoEntity = imageInfo.ToEntity(); await Task.Run(() => _calibrationCompletedEvent.OnNext(imageInfoEntity)); Task.Run(() => _inspectionStartedEvent.OnNext(surfaceTypeIndex)); await Task.Run( () => { var sw4 = new NotifyStopwatch("imageInfo.To8BppHImage()"); var to8BppHImage = imageInfo.To8BppHImage(); sw4.Dispose(); InspectInfo inspectionInfo; if (MachineConfigProvider.MachineConfig.MV_SimulationInspectorEnabled) { inspectionInfo = new InspectInfo(); } else { var sw3 = new NotifyStopwatch("inspector.Inspect()"); inspectionInfo = _inspectionController .SetInspectionSchema() .SetImage(to8BppHImage) .CreateCoordinate() .Inspect() .GetInspectionInfo() ; sw3.Dispose(); } var surfaceInspectInfo = new SurfaceInspectInfo() { SurfaceTypeIndex = surfaceTypeIndex, BitmapSource = bi, InspectInfo = inspectionInfo, WorkpieceIndex = _inspectCounter / MachineConfigProvider.MachineConfig .MV_AcquisitionCountPerWorkpiece }; Task.Run(() => _inspectionCompletedEvent.OnNext(surfaceInspectInfo)); HandleInspect(surfaceInspectInfo); }); }
public async Task <int> AcquisitionAndInspectAsync(int surfaceTypeIndex) { // Acquisition Task.Run(() => _acquisitionStartedEvent.OnNext(surfaceTypeIndex)); var imageInfo = await _camera.AcquisitionAsync(); switch (surfaceTypeIndex) { case 0: Machine.Inspection_SurfaceFront_GrabFinishedPcEventDevice.WriteTrue(); break; case 1: Machine.Inspection_SurfaceBack_GrabFinishedPcEventDevice.WriteTrue(); break; } Task.Run(() => { _acquisitionCompletedEvent.OnNext(imageInfo.ToEntity()); _calibrationStartedEvent.OnNext(surfaceTypeIndex); }); // Calibration HImage calibImage; if (MachineConfig.MV_SimulationCalibrationEnabled) { calibImage = imageInfo.To8BppHImage(); } else { var swOriToHImageInfo = new NotifyStopwatch("imageInfo.To8BppHImage()"); HImage oriImage = imageInfo.To8BppHImage(); swOriToHImageInfo.Dispose(); // HImage reducedImage = oriImage.Rectangle1Domain(2000, 2000, 5000, 5000); var calib = new HalconImageCalibrator(); var swCalib = new NotifyStopwatch("AcquisitionAndInspectAsync.CalibrateImage(imageInfo)"); calibImage = calib.CalibrateImage(oriImage, MachineConfig.MV_CalibrationInterpolation); swCalib.Dispose(); oriImage.Dispose(); } var swCalibToImageInfo = new NotifyStopwatch("calibImage.ToImageInfo()"); var calibImageInfo = calibImage.ToImageInfo(); swCalibToImageInfo.Dispose(); calibImageInfo.SurfaceTypeIndex = surfaceTypeIndex; Debug.WriteLine("SurfaceType " + surfaceTypeIndex + ": StartGrabAsync() Finished"); Task.Run(() => { _calibrationCompletedEvent.OnNext(calibImageInfo.ToEntity()); _inspectionStartedEvent.OnNext(surfaceTypeIndex); }); Task.Run( () => { InspectInfo inspectionInfo; if (MachineConfigProvider.MachineConfig.MV_SimulationInspectorEnabled) { inspectionInfo = new InspectInfo(); calibImage.Dispose(); } else { InspectionResult inspectionResult; try { Debug.WriteLine("_inspectionController.Inspect() start"); var sw3 = new NotifyStopwatch("_inspectionController.Inspect()"); _inspectionController .SetInspectionSchema(_inspectionSchema.DeepClone()) .SetImage(calibImage) .CreateCoordinate() .Inspect(); Debug.WriteLine("_inspectionController.Inspect() OK"); sw3.Dispose(); calibImage.Dispose(); inspectionResult = _inspectionController.InspectionResult; } catch (Exception e) { MessageBox.Show("_inspectionController error.\n\n" + e.Message + "\n\n" + e.InnerException.Message); Debug.WriteLine("_inspectionController error.\n\n" + e.Message + "\n\n" + e.InnerException.Message); inspectionResult = new InspectionResult(); } Debug.WriteLine("_inspectionController.GetInspectionInfo() Start"); inspectionInfo = inspectionResult.GetInspectionInfo(_inspectionController.Coordinate); Debug.WriteLine("_inspectionController.GetInspectionInfo() OK"); } var surfaceInspectInfo = new SurfaceInspectInfo() { SurfaceTypeIndex = surfaceTypeIndex, ImageInfo = calibImageInfo.ToEntity(), InspectInfo = inspectionInfo, WorkpieceIndex = _inspectCounter / MachineConfigProvider.MachineConfig .MV_AcquisitionCountPerWorkpiece }; Task.Run(() => _inspectionCompletedEvent.OnNext(surfaceInspectInfo)); Debug.WriteLine("AcquisitionAndInspectAsync.HandleInspect() above"); HandleInspect(surfaceInspectInfo); }); return(calibImageInfo.Index); }