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); }
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; }
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; }
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); }
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(); } }
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; }
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); }
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); }
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); }