Exemple #1
0
        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++;
        }
Exemple #2
0
        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();
            }
        }
Exemple #3
0
//        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);
        }
Exemple #4
0
        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);
            });
        }
Exemple #5
0
        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);
        }