private void bUpdate2Set_Click(object sender, EventArgs e) { for (uint nz = 0; nz < Variable.NOZZLE_NUM; ++nz) { try { var ctl = (TextBox)(this.Controls.Find($"tZ{nz + 1}", true)[0]); Z_RunParam zparam = Form_Main.Instance.Z_RunParamMap[nz]; zparam.PasteHeight = double.Parse(ctl.Text); Form_Main.Instance.Ini_Sys.IniWriteNumber("Position", $"PasteHeightZ{nz + 1}", zparam.PasteHeight); } catch { return; } } }
private void CalPasueHeight(Z_RunParam zParam, ref PointF cur, ref Variable.VelMode vel) { zParam.MoveTrim(zParam.MoveDir * 0.5, vel); Thread.Sleep(500); if (!zParam.Check_vaccum.GetIO()) { this.CalPasueHeight(zParam, ref cur, ref vel); } else { return; } }
private void CalLoop() { while (!Exit) { if (!this.calQueue.IsEmpty) { ResultItem item = null; try { #region 计算 if (this.calQueue.TryDequeue(out item)) { Stopwatch watch = new Stopwatch(); watch.Restart(); // 如果已有该吸嘴得计算结果顶替掉 Z_RunParam zParam = Form_Main.Instance.Z_RunParamMap[item.Nozzle]; var camera = Form_Main.Nozzle2Cam((int)item.Nozzle); // 算法 zParam.CamResult = Form_Main.Instance.Auto_Detect1(ref Form_Main.Instance.Feeder[zParam.RUN_Nozzle_FeederIndex - 1].Label, zParam.CaptureImage, camera.Item1, (int)item.Nozzle); Form_Main.Instance.CalNozzle(item.Nozzle, camera.Item1, camera.Item2); zParam.CalFinished = true; Form_Main.Instance.ShowVisionStatus((int)(item.Nozzle + 1), zParam.CamResult, zParam.CaptureImage); Debug.WriteLine($"下视觉计算时间:{watch.ElapsedMilliseconds} ms"); } #endregion } catch (Exception ex) { if (item != null) { // 如果已有该吸嘴得计算结果顶替掉 Z_RunParam zParam = Form_Main.Instance.Z_RunParamMap[item.Nozzle]; zParam.CalFinished = true; zParam.RUN_dNozzleDownVisionED = 4; Form_Main.Instance.PutInLog("D://下视觉//", "Log", $"下视觉计算错误 {ex.Message} \n 错误所在:{ex.StackTrace} 吸嘴{item.Nozzle + 1},贴附信息{zParam.RUN_PasteInfoIndex},{zParam.RUN_PastePointIndex}");// } } } else { Thread.Sleep(1); } } }
private void bAutoSet_Click(object sender, EventArgs e) { if (MessageBox.Show("是否以当前位置为贴附点进行,贴附高度确认!!", "Tips", MessageBoxButtons.YesNo) == DialogResult.Yes) { PointF cur = new PointF(); cur.X = (float)Form_Main.Instance.X.Pos; cur.Y = (float)Form_Main.Instance.Y.Pos; Variable.VelMode vel = new Variable.VelMode(0, 100, 300, 300); for (uint nz = 0; nz < Variable.NOZZLE_NUM; ++nz) { Form_Main.Instance.XYGoPosTillStop(30000, Form_Main.Instance.NozzleToCamPoint(cur, (int)nz), vel); Z_RunParam zparam = Form_Main.Instance.Z_RunParamMap[nz]; zparam.XI_vaccum.SetIO(); this.CalPasueHeight(zparam, ref cur, ref vel); Thread.Sleep(500); var ctl = (TextBox)(this.Controls.Find($"tZ{nz + 1}", true)[0]); ctl.Text = zparam.Pos.ToString("f3"); zparam.GoSafePos(vel); Thread.Sleep(2000); zparam.XI_vaccum.ResetIO(); } } }
private void bAutoSet_Click(object sender, EventArgs e) { if (this.cbLabelIndex.SelectedIndex < 0) { return; } int labelIndex = this.cbLabelIndex.SelectedIndex; //Task.Factory.StartNew(() => //{ try { var vel = Form_Main.VariableSys.VelMode_Current_Manual; parent.All_ZGoSafeTillStop(3000, vel); parent.XYGoPosTillStop(5000, Form_Main.VariableSys.pReadyPoint, vel); parent.Turn.GoPosTillStop(5000, Form_Main.VariableSys.dTurnXIAngle, vel); PointF camPt = new PointF(); camPt.X = float.Parse(this.FeederCtrl.Rows[labelIndex].Cells[0].Value.ToString()); camPt.Y = float.Parse(this.FeederCtrl.Rows[labelIndex].Cells[1].Value.ToString()); PointF nzPt = parent.Nz1ToOther(camPt, this.Nozzle); double zHeight = this.Feeder.XIHeight[labelIndex][this.Nozzle]; double xiAngle = this.Feeder.XI_Degree[this.Nozzle]; Z_RunParam zParam = parent.Z_RunParamMap[(uint)this.Nozzle]; R_RunParam rParam = parent.R_RunParamMap[(uint)this.Nozzle]; zParam.PO_vaccum.ResetIO(); zParam.XI_vaccum.ResetIO(); parent.XYGoPosTillStop(5000, nzPt, vel); rParam.GoPosTillStop(5000, xiAngle, vel); if (this.Feeder.bReachXI) { zParam.XI_vaccum.SetIO(); } else { zParam.XI_vaccum.ResetIO(); } zParam.GoPosTillStop(5000, zHeight, vel); zParam.XI_vaccum.SetIO(); Thread.Sleep(Form_Main.VariableSys.iDelay_BeforeXI); var camera = Form_Main.Nozzle2Cam(this.Nozzle); parent.LightON_Down_PASTE1(ref this.Feeder.Label); parent.SetShutter((int)this.Feeder.Label.Shutter1, camera.Item1); parent.All_ZGoSafeTillStop(5000, vel); if (!parent.All_ZReachOrg()) { return; } parent.XYGoPosTillStop(5000, Form_Main.VariableSys.pReadyPoint, vel); parent.Turn.GoPosTillStop(5000, Form_Main.VariableSys.dTurnPasteAngle, vel); // 拍照 Thread.Sleep(Form_Main.VariableSys.iDownCamDelay); PointF curPos = Form_Main.VariableSys.pReadyPoint; CameraDefine.Instance[camera.Item1]._Session.Snap(parent.imageSet.Image); Variable.CamReturn cam = Form_Main.Instance.Auto_Detect1(ref this.Feeder.Label, parent.imageSet.Image, camera.Item1, this.Nozzle); if (cam.IsOK) { // 识别出来的位置 PointF temp = parent.Point2CCDCenter(curPos, new PointContour(cam.X, cam.Y), camera.Item1, camera.Item2); PointF rotateCenter = parent.Point2CCDCenter(curPos, Form_Main.VariableSys.pDownRotateCenter[0], camera.Item1, camera.Item2); /// 识别与吸嘴旋转中心的误差 PointF offset = new PointF(); offset.X = temp.X - rotateCenter.X; offset.Y = temp.Y - rotateCenter.Y; this.nOffsetX.Value = (decimal)offset.X; this.nOffsetY.Value = (decimal)offset.Y; } } catch { } //}); }