Ejemplo n.º 1
0
 public EditGrayCheckForm(GrayCheckPrm grayCheckPrm, Pattern pattern) : base(pattern == null ? new PointD(0, 0) : pattern.GetOriginPos())
 {
     InitializeComponent();
     this.Init();
     this.UpdateByFlag();
     this.camera = Machine.Instance.Camera;
     this.light  = Machine.Instance.Light;
     if (grayCheckPrm == null)
     {
         grayCheckPrm = new GrayCheckPrm();
     }
     this.grayCheckPrm = grayCheckPrm;
     this.grayCheckPrm.ExposureTime = this.camera.Prm.Exposure;
     this.grayCheckPrm.Gain         = this.camera.Prm.Gain;
     //this.grayCheckPrm.LightType = this.camera.Prm.LightType;
     this.grayCheckPrm.ExecutePrm = (ExecutePrm)this.light.ExecutePrm.Clone();
     //this.grayCheckPrm.ImgWidth = this.camera.Executor.ImageWidth;
     //this.grayCheckPrm.ImgHeight = this.camera.Executor.ImageHeight;
     this.Setup(this.grayCheckPrm);
     this.pattern = pattern;
     if (this.grayCheckPrm != null)
     {
         this.grayCheckPrmBackUP = (GrayCheckPrm)this.grayCheckPrm.Clone();
     }
 }
Ejemplo n.º 2
0
        private void Setup(GrayCheckPrm grayCheckPrm)
        {
            if (!grayCheckPrm.IsCreated)
            {
                grayCheckPrm.ModelTopLeftX   = this.CamCtrl.ImgCenter.X - 50;
                grayCheckPrm.ModelTopLeftY   = this.CamCtrl.ImgCenter.Y - 50;
                grayCheckPrm.ModelWidth      = 100;
                grayCheckPrm.ModelHeight     = 100;
                grayCheckPrm.SearchTopLeftX  = 100;
                grayCheckPrm.SearchTopLeftY  = 100;
                grayCheckPrm.SearchWidth     = this.CamCtrl.ImgWidth - 200;
                grayCheckPrm.SearchHeight    = this.CamCtrl.ImgHeight - 200;
                grayCheckPrm.SettlingTime    = 50;
                grayCheckPrm.AcceptTolerance = 20;
            }

            this.CamCtrl.HideROI();
            this.CamCtrl.SetExposure(this.grayCheckPrm.ExposureTime).SetGain(this.grayCheckPrm.Gain);
            //this.CamCtrl.SelectLight(this.grayCheckPrm.LightType);
            this.CamCtrl.SelectLight(this.grayCheckPrm.ExecutePrm);
            this.SetupLight(this.grayCheckPrm.ExecutePrm);

            this.nudModelSizeWidth.Maximum     = this.camera.Executor.ImageWidth;
            this.nudModelSizeHeight.Maximum    = this.camera.Executor.ImageHeight;
            this.nudSearchWindowWidth.Maximum  = this.camera.Executor.ImageWidth;
            this.nudSearchWindowHeight.Maximum = this.camera.Executor.ImageHeight;

            this.nudSearchWindowWidth.Value  = MathUtils.Limit(this.grayCheckPrm.SearchWidth, 0, this.camera.Executor.ImageWidth);
            this.nudSearchWindowHeight.Value = MathUtils.Limit(this.grayCheckPrm.SearchHeight, 0, this.camera.Executor.ImageHeight);
            this.nudModelSizeWidth.Value     = MathUtils.Limit(this.grayCheckPrm.ModelWidth, 0, this.camera.Executor.ImageWidth);
            this.nudModelSizeHeight.Value    = MathUtils.Limit(this.grayCheckPrm.ModelHeight, 0, this.camera.Executor.ImageHeight);
            this.nudSettlingTime.Value       = MathUtils.Limit(this.grayCheckPrm.SettlingTime, 0, (int)this.nudSettlingTime.Maximum);
            this.nudGrayTolerance.Value      = MathUtils.Limit(this.grayCheckPrm.AcceptTolerance, 0, (int)this.nudGrayTolerance.Maximum);
        }
Ejemplo n.º 3
0
        public override Result Execute()
        {
            if (Machine.Instance.Robot.IsSimulation)
            {
                return(Result.OK);
            }
            Log.Dprint("begin to execute Bad Mark");
            Log.Dprint("move to position : " + Position);
            // 移动到拍照位置
            Result ret = Machine.Instance.Robot.MoveSafeZAndReply();

            if (!ret.IsOk)
            {
                return(ret);
            }
            ret = Machine.Instance.Robot.MovePosXYAndReply(Position,
                                                           this.Program.MotionSettings.VelXYMark,
                                                           this.Program.MotionSettings.AccXY);
            if (!ret.IsOk)
            {
                return(ret);
            }

            Log.Dprint("capture Bad mark");
            VisionFindPrmBase visionFindPrm = null;

            switch (this.FindType)
            {
            case BadMarkType.ModelFind:
                visionFindPrm = this.ModelFindPrm;
                break;

            case BadMarkType.GrayScale:
                visionFindPrm = this.GrayCheckPrm;
                break;
            }
            visionFindPrm.PosInMachine = new PointD(Position.X, Position.Y);
            //Machine.Instance.Light.SetLight(visionFindPrm.LightType);
            Machine.Instance.Light.SetLight(visionFindPrm.ExecutePrm);
            Machine.Instance.Camera.SetExposure(visionFindPrm.ExposureTime);
            Machine.Instance.Camera.SetGain(visionFindPrm.Gain);
            Thread.Sleep(visionFindPrm.SettlingTime);
            byte[] bytes = Machine.Instance.Camera.TriggerAndGetBytes(TimeSpan.FromSeconds(1)).DeepClone();
            if (bytes == null)
            {
                return(Result.FAILED);
            }

            Result result = Result.OK;

            //移动到拍照高度
            if (Machine.Instance.Setting.MachineSelect == MachineSelection.RTV)
            {
                Machine.Instance.Robot.MoveToMarkZAndReply();
            }
            if (this.FindType == BadMarkType.ModelFind)
            {
                ModelFindPrm.ImgData   = bytes;
                ModelFindPrm.ImgWidth  = Machine.Instance.Camera.Executor.ImageWidth;
                ModelFindPrm.ImgHeight = Machine.Instance.Camera.Executor.ImageHeight;
                if (!ModelFindPrm.Execute())
                {
                    result = Result.FAILED;
                }
            }
            else if (this.FindType == BadMarkType.GrayScale)
            {
                GrayCheckPrm.CheckData   = GrayCheckPrm.GetROI(bytes, Machine.Instance.Camera.Executor.ImageWidth, Machine.Instance.Camera.Executor.ImageHeight);
                GrayCheckPrm.CheckWidth  = GrayCheckPrm.ModelWidth;
                GrayCheckPrm.CheckHeight = GrayCheckPrm.ModelHeight;
                if (!GrayCheckPrm.Execute())
                {
                    result = Result.FAILED;
                }
            }
            Log.Dprint(string.Format("bad mark result : {0}", result.IsOk));

            // save mark image
            if (this.Program.RuntimeSettings.SaveBadMarkImages)
            {
                bytes?.SaveMarkImage(
                    Machine.Instance.Camera.Executor.ImageWidth,
                    Machine.Instance.Camera.Executor.ImageHeight,
                    this.Program.Name, "BadMarks", "badmark");
            }

            ////如果OK跳过则结果取反
            //if (this.IsOkSkip)
            //{
            //    result = result.IsOk ? Result.FAILED : Result.OK;
            //}
            return(result);
        }
Ejemplo n.º 4
0
        private Result doCheck()
        {
            Log.Dprint("capture Bad mark");
            VisionFindPrmBase visionFindPrm = null;

            switch (this.CheckThm)
            {
            case CheckThm.GrayScale:
                visionFindPrm = this.GrayCheckPrm;
                break;

            case CheckThm.ModelFind:
                visionFindPrm = this.ModelFindPrm;
                break;
            }
            //设置拍照参数
            visionFindPrm.PosInMachine = new PointD(Position.X, Position.Y);
            //Machine.Instance.Light.SetLight(visionFindPrm.LightType);
            Machine.Instance.Light.SetLight(visionFindPrm.ExecutePrm);

            Machine.Instance.Camera.SetExposure(visionFindPrm.ExposureTime);
            Machine.Instance.Camera.SetGain(visionFindPrm.Gain);
            //采集图像
            Thread.Sleep(visionFindPrm.SettlingTime);
            byte[] bytes = Machine.Instance.Camera.TriggerAndGetBytes(TimeSpan.FromSeconds(1)).DeepClone();
            if (bytes == null)
            {
                return(Result.FAILED);
            }

            //执行检测算法
            Result result = Result.OK;

            //移动到拍照高度
            if (Machine.Instance.Setting.MachineSelect == MachineSelection.RTV)
            {
                Machine.Instance.Robot.MoveToMarkZAndReply();
            }
            if (this.CheckThm == CheckThm.GrayScale)
            {
                GrayCheckPrm.CheckData   = GrayCheckPrm.GetROI(bytes, Machine.Instance.Camera.Executor.ImageWidth, Machine.Instance.Camera.Executor.ImageHeight);
                GrayCheckPrm.CheckWidth  = GrayCheckPrm.ModelWidth;
                GrayCheckPrm.CheckHeight = GrayCheckPrm.ModelHeight;
                if (!GrayCheckPrm.Execute())
                {
                    result = Result.FAILED;
                }
            }
            else if (this.CheckThm == CheckThm.ModelFind)
            {
                ModelFindPrm.ImgData   = bytes;
                ModelFindPrm.ImgWidth  = Machine.Instance.Camera.Executor.ImageWidth;
                ModelFindPrm.ImgHeight = Machine.Instance.Camera.Executor.ImageHeight;
                if (!ModelFindPrm.Execute())
                {
                    result = Result.FAILED;
                }
            }
            Log.Dprint(string.Format("bad mark result : {0}", result.IsOk));

            //如果OK跳过则结果取反
            if (this.IsOkAlarm)
            {
                result = result.IsOk ? Result.FAILED : Result.OK;
            }
            return(result);
        }