示例#1
0
        private void bOutputCailb_Click(object sender, EventArgs e)
        {
            if (CailbResult != null)
            {
                #region 导出到Excel表
                int    row   = int.Parse(this.tJigRow.Text); // 行
                int    col   = int.Parse(this.tJigCol.Text); // 列
                double distX = float.Parse(this.tJigDx.Text);
                double distY = float.Parse(this.tJigDy.Text);
                // 计算 间距
                for (int i = 0; i < row; i++)
                {
                    for (int j = 0; j < col; j++)
                    {
                        if (CailbResult[i, j].Real_CircleCenter.X == 0 && CailbResult[i, j].Real_CircleCenter.Y == 0)
                        {
                            CailbResult[i, j].RightDist = 0;
                            CailbResult[i, j].DownDist  = 0;
                            continue;
                        }

                        if (j != 0 && j < col)// 右间距
                        {
                            if (CailbResult[i, 0].Real_CircleCenter.X != 0 && CailbResult[i, 0].Real_CircleCenter.Y != 0)
                            {
                                CailbResult[i, j].RightDist = CPKTools.GetDist(ref CailbResult[i, j].Real_CircleCenter, ref CailbResult[i, 0].Real_CircleCenter) - j * distX;
                            }
                            else
                            {
                                CailbResult[i, j].RightDist = 0;
                            }
                        }

                        if (i != 0 && i < row)// 下间距
                        {
                            if (CailbResult[0, j].Real_CircleCenter.X != 0 && CailbResult[0, j].Real_CircleCenter.Y != 0)
                            {
                                CailbResult[i, j].DownDist = CPKTools.GetDist(ref CailbResult[i, j].Real_CircleCenter, ref CailbResult[0, j].Real_CircleCenter) - i * distY;
                            }
                            else
                            {
                                CailbResult[i, j].DownDist = 0;
                            }
                        }
                    }
                }

                CPKTools.SaveCailbReport(ref CailbResult, row, col);
                #endregion
            }
        }
示例#2
0
        private void bStartChkCailb_Click(object sender, EventArgs e)
        {
            if (Thd_Cailb == null || !Thd_Cailb.IsAlive)
            {
                Thd_Cailb = new Thread(() =>
                {
                    #region 开始测量
                    try
                    {
                        Form_Main.Instance.StartGrabImage();

                        int row               = int.Parse(this.tJigRow.Text); // 行
                        int col               = int.Parse(this.tJigCol.Text); // 列
                        CailbResult           = new Jig_ResultItem[row, col];
                        PointF basePoint      = new PointF();
                        basePoint.X           = float.Parse(this.tCailbBaseX.Text);
                        basePoint.Y           = float.Parse(this.tCailbBaseY.Text);
                        double distX          = float.Parse(this.tJigDx.Text);
                        double distY          = float.Parse(this.tJigDy.Text);
                        RectangleContour rect = (RectangleContour)Form_Main.Instance.imageSet.Roi[0].Shape;
                        short rMin            = short.Parse(this.upCircleRmin.Text);
                        short rMax            = short.Parse(this.upCircleRmax.Text);
                        PointContour center   = new PointContour();
                        double radius         = 0;


                        double gain   = 1;
                        double offset = 0;
                        double cycle  = 1;

                        gain   = double.Parse(this.tGainValue.Text);
                        offset = double.Parse(this.tOffsetValue.Text);
                        cycle  = double.Parse(this.tHanldeCycle.Text);

                        for (int i = 0; i < row; i++)
                        {
                            for (int j = 0; j < col; j++)
                            {
                                Jig_ResultItem item = new Jig_ResultItem();
                                item.MachinePos     = this.chkPoint[i * col + j];
                                //item.MachinePos.X = (float)(basePoint.X + distX * j);
                                //item.MachinePos.Y = (float)(basePoint.Y + distY * i);

                                // 移动到目标位
                                Form_Main.Instance.XYGoPosTillStop(20 * 1000, item.MachinePos, variable);

                                //Thread.Sleep(100);
                                // 获得上相机图像
                                VisionImage image = Form_Main.Instance.GrabImage2View(Camera.CAM.Top);

                                // 预处理
                                for (int time = 0; time < cycle; ++time)
                                {
                                    image = Form_Main.Instance.GainOffset(image, gain, offset);
                                }

                                Algorithms.Copy(image, Form_Main.Instance.imageSet.Image);

                                // 找圆
                                if (CPKTools.FindCircle(image, rect, rMin, rMax, ref center, ref radius, 0, 0, 0))
                                {
                                    item.Image_CircleCenter.X = (float)center.X;
                                    item.Image_CircleCenter.Y = (float)center.Y;
                                    item.Real_CircleCenter    = Camera.CameraDefine.Instance[Camera.CAM.Top].ImagePt2WorldPt(item.MachinePos, center, 0);
                                }

                                image.Dispose();
                                CailbResult[i, j] = item;
                            }
                        }

                        // 计算 间距
                        for (int i = 0; i < row; i++)
                        {
                            for (int j = 0; j < col; j++)
                            {
                                if (CailbResult[i, j].Real_CircleCenter.X == 0 && CailbResult[i, j].Real_CircleCenter.Y == 0)
                                {
                                    CailbResult[i, j].RightDist = 0;
                                    CailbResult[i, j].DownDist  = 0;
                                    continue;
                                }

                                if (j != 0 && j < col)// 右间距
                                {
                                    CailbResult[i, j].RightDist = CPKTools.GetDist(ref CailbResult[i, j].Real_CircleCenter, ref CailbResult[i, 0].Real_CircleCenter) - j * distX;
                                }

                                if (i != 0 && i < row)// 下间距
                                {
                                    CailbResult[i, j].DownDist = CPKTools.GetDist(ref CailbResult[i, j].Real_CircleCenter, ref CailbResult[0, j].Real_CircleCenter) - i * distY;
                                }
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                    #endregion
                });

                Thd_Cailb.Start();
            }
        }