示例#1
0
        public DialogCalibCamera Setup()
        {
            this.CamCtrl.HideROI();

            this.prm.ModelWidth     = 200;
            this.prm.ModelHeight    = 200;
            this.prm.ModelTopLeftX  = this.CamCtrl.ImgCenter.X - this.prm.ModelWidth / 2;
            this.prm.ModelTopLeftY  = this.CamCtrl.ImgCenter.Y - this.prm.ModelHeight / 2;
            this.prm.SearchTopLeftX = 0;
            this.prm.SearchTopLeftY = 0;
            this.prm.SearchWidth    = this.CamCtrl.ImgWidth;
            this.prm.SearchHeight   = this.CamCtrl.ImgHeight;

            this.nudRoiWidth.Maximum  = this.CamCtrl.ImgWidth;
            this.nudRoiHeight.Maximum = this.CamCtrl.ImgHeight;
            this.nudRoiWidth.Value    = this.prm.ModelWidth;
            this.nudRoiHeight.Value   = this.prm.ModelHeight;

            this.lblAngle.Text   = Machine.Instance.Robot.CalibBy9dPrm.Angle.ToString();
            this.lblScale.Text   = Machine.Instance.Robot.CalibBy9dPrm.Scale.ToString();
            this.lblOffsetX.Text = Machine.Instance.Robot.CalibBy9dPrm.OffsetX.ToString();
            this.lblOffsetY.Text = Machine.Instance.Robot.CalibBy9dPrm.OffsetY.ToString();

            this.prmBackUp = (ModelFindPrm)this.prm?.Clone();
            return(this);
        }
示例#2
0
        public MarkCmd(RunnableModule runnableModule, MarkCmdLine markCmdLine) : base(runnableModule, markCmdLine)
        {
            // 转换成机械坐标
            var structure = runnableModule.CommandsModule.program.ModuleStructure;

            position        = structure.ToMachine(runnableModule, markCmdLine.PosInPattern);
            modelFindPrm    = markCmdLine.ModelFindPrm;
            this.IsFromFile = markCmdLine.IsFromFile;
        }
示例#3
0
        public BadMarkCmd(RunnableModule runnableModule, BadMarkCmdLine badMarkCmdLine) : base(runnableModule, badMarkCmdLine)
        {
            // 转换成机械坐标
            var structure = runnableModule.CommandsModule.program.ModuleStructure;

            position      = structure.ToMachine(runnableModule, badMarkCmdLine.Position);
            modelFindPrm  = badMarkCmdLine.ModelFindPrm;
            GrayCheckPrm  = badMarkCmdLine.GrayCheckPrm;
            this.FindType = badMarkCmdLine.FindType;
            this.IsOkSkip = badMarkCmdLine.IsOkSkip;
        }
示例#4
0
 public Result FlyMarksInit(ModelFindPrm modelFindPrm, int gain, int ExpExposureTime)
 {
     //高速IO设备的切换
     DOMgr.Instance.FindBy(2).Set(true);
     //光源设置
     //Machine.Instance.Light.SetLight(lightType);
     Machine.Instance.Light.SetLight(modelFindPrm.ExecutePrm);
     //相机参数设置
     Machine.Instance.Camera.StopGrabing();
     Machine.Instance.Camera.SetTriggerMode(true);
     Machine.Instance.Camera.SetGain(gain);
     Machine.Instance.Camera.SetExposure(ExpExposureTime);
     Machine.Instance.Camera.StartGrabing();
     return(Result.OK);
 }
示例#5
0
        public EditModelFindForm(ModelFindPrm modelFindPrm, Pattern pattern, bool isManual = false)
            : 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 (modelFindPrm == null)
            {
                modelFindPrm = new ModelFindPrm();
            }
            else
            {
                if (modelFindPrm.ExecutePrm.PrmOPT.ListCls.Count == 0)
                {
                    modelFindPrm.ExecutePrm.PrmOPT = this.light.ExecutePrm.PrmOPT;
                }
                this.light.SetLight(modelFindPrm.ExecutePrm);
                this.SetupLight(modelFindPrm.ExecutePrm);
            }
            this.modelFindPrm = modelFindPrm;
            this.modelFindPrm.ExposureTime = this.camera.Prm.Exposure;
            this.modelFindPrm.Gain         = this.camera.Prm.Gain;
            //this.modelFindPrm.LightType = this.camera.Prm.LightType;
            this.modelFindPrm.ExecutePrm = this.light.ExecutePrm.Clone() as ExecutePrm;
            this.Setup(this.modelFindPrm);
            this.pattern  = pattern;
            this.isManual = isManual;

            this.ckbFrmFile.Checked = modelFindPrm.IsFromFile;
            if (this.isManual)
            {
                this.gbxContent.Enabled = false;
                this.BtnPrev.Enabled    = false;
                this.BtnNext.Enabled    = false;
                this.BtnTeach.Enabled   = false;
                this.BtnDone.Enabled    = true;
                this.BtnCancel.Enabled  = true;
            }
            this.UpdateByFlag();
            this.ReadLanguageResources();
            if (this.modelFindPrm != null)
            {
                this.modelFindPrmBackUp = (ModelFindPrm)this.modelFindPrm.Clone();
            }
        }
示例#6
0
        public NozzleCheckCmd(RunnableModule runnableModule, NozzleCheckCmdLine nozzleCheckCmdLine, MeasureHeightCmd mhCmd) : base(runnableModule, nozzleCheckCmdLine)
        {
            // 转换成机械坐标
            var structure = runnableModule.CommandsModule.program.ModuleStructure;

            position     = structure.ToMachine(runnableModule, nozzleCheckCmdLine.Position);
            DotStyle     = nozzleCheckCmdLine.DotStyle;
            modelFindPrm = nozzleCheckCmdLine.ModelFindPrm;
            GrayCheckPrm = nozzleCheckCmdLine.GrayCheckPrm;
            CheckThm     = nozzleCheckCmdLine.CheckThm;
            IsOkAlarm    = nozzleCheckCmdLine.IsOkAlarm;
            this.associatedMeasureHeightCmd = mhCmd;
            IsWeightControl  = nozzleCheckCmdLine.IsWeightControl;
            Weight           = nozzleCheckCmdLine.Weight;
            this.nozzleStyle = nozzleCheckCmdLine.NozzleStyle;
            this.isGlobal    = nozzleCheckCmdLine.isGlobal;
        }
示例#7
0
        private EditModelFindForm Setup(ModelFindPrm modelFindPrm)
        {
            if (TempVisionData.Ins.TempModelFindPrm == null)
            {
                TempVisionData.Ins.TempModelFindPrm = new ModelFindPrm();
                TempVisionData.Ins.TempModelFindPrm.ModelTopLeftX  = this.CamCtrl.ImgCenter.X - 100;
                TempVisionData.Ins.TempModelFindPrm.ModelTopLeftY  = this.CamCtrl.ImgCenter.Y - 100;
                TempVisionData.Ins.TempModelFindPrm.ModelWidth     = 200;
                TempVisionData.Ins.TempModelFindPrm.ModelHeight    = 200;
                TempVisionData.Ins.TempModelFindPrm.SearchTopLeftX = 100;
                TempVisionData.Ins.TempModelFindPrm.SearchTopLeftY = 100;
                TempVisionData.Ins.TempModelFindPrm.SearchWidth    = this.CamCtrl.ImgWidth - 200;
                TempVisionData.Ins.TempModelFindPrm.SearchHeight   = this.CamCtrl.ImgHeight - 200;
                TempVisionData.Ins.TempModelFindPrm.AcceptScore    = 0.6;
                TempVisionData.Ins.TempModelFindPrm.SettlingTime   = 50;
                TempVisionData.Ins.TempModelFindPrm.Tolerance      = 2;
            }
            if (modelFindPrm.ModelId == 0)
            {
                TempVisionData.Ins.TempModelFindPrm.CopyTempDataTo(modelFindPrm);
            }

            this.CamCtrl.HideROI();
            this.CamCtrl.SetExposure(this.modelFindPrm.ExposureTime).SetGain(this.modelFindPrm.Gain);
            //this.CamCtrl.SelectLight(this.modelFindPrm.LightType);
            this.CamCtrl.SelectLight(this.modelFindPrm.ExecutePrm);
            this.SetupLight(this.modelFindPrm.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.modelFindPrm.SearchWidth, 0, this.camera.Executor.ImageWidth);
            this.nudSearchWindowHeight.Value = MathUtils.Limit(this.modelFindPrm.SearchHeight, 0, this.camera.Executor.ImageHeight);
            this.nudModelSizeWidth.Value     = MathUtils.Limit(this.modelFindPrm.ModelWidth, 0, this.camera.Executor.ImageWidth);
            this.nudModelSizeHeight.Value    = MathUtils.Limit(this.modelFindPrm.ModelHeight, 0, this.camera.Executor.ImageHeight);
            this.nudAcceptThreshold.Value    = (decimal)MathUtils.Limit(this.modelFindPrm.AcceptScore, 0, 1);
            this.nudTolerance.Value          = (decimal)MathUtils.Limit(this.modelFindPrm.Tolerance, (double)this.nudTolerance.Minimum, (double)this.nudTolerance.Maximum);
            this.nudSettlingTime.Value       = MathUtils.Limit(this.modelFindPrm.SettlingTime, 0, (int)this.nudSettlingTime.Maximum);
            return(this);
        }
示例#8
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);
        }
示例#9
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);
        }