Beispiel #1
0
        public bool CalibRotateCenter(string cellName, Point2D pt2Mark1, Point2D pt2Mark2,
                                      double rotateAngle, BaseParComprehensive parComprehensive)
        {
            try
            {
                //获取旋转中心cell
                BaseParCalibrate baseParComprehensive = parComprehensive.GetCellParCalibrate(cellName);
                //获取旋转中心算子
                ParCalibRotate parCalibRotate = (ParCalibRotate)baseParComprehensive;
                //根据参数求旋转中心
                Point2D rc = new FunCalibRotate().GetOriginPoint(rotateAngle, pt2Mark1, pt2Mark2);
                //把旋转中心存入算子
                parCalibRotate.XRC = rc.DblValue1;
                parCalibRotate.YRC = rc.DblValue2;
                //讲计算结果写入xml
                parComprehensive.WriteXmlDoc(cellName);
                //将参数保存到结果类
                new FunCalibRotate().SaveParToResult(HtResult_Cam1, parCalibRotate);
                //输出计算结果
                string info = string.Format("相机{0}旋转中心标定完成,X:{1},Y:{2}", g_NoCamera,
                                            parCalibRotate.XRC.ToString(), parCalibRotate.YRC.ToString());
                ShowState(info);

                return(true);
            }
            catch (Exception ex)
            {
                Log.L_I.WriteError(NameClass, ex);
                return(false);
            }
        }
        /// <summary>
        /// 此相机算法单元结果
        /// </summary>
        /// <param name="par"></param>
        /// <param name="baseParCalibrate"></param>
        /// <param name="fun"></param>
        public void GetCellResultValue(ParGetResultFromCell par, BaseParCalibrate baseParCalibrate, HashAction fun)
        {
            try
            {
                Hashtable           htResult = null;
                ParCellExeReference parCellExecuteReferenceForMult = baseParCalibrate.g_ParCellExecuteReferenceForMult;

                g_BaseDealComprehensive.DealComprehensivePosCell_ForTestRun(g_UCDisplayCamera, baseParCalibrate.g_ParCellExecuteReferenceForMult, parCellExecuteReferenceForMult.g_CellExecute_L, out htResult);//执行算法但不显示

                if (fun != null)
                {
                    fun(htResult);//刷新列表显示
                }

                ////刷新当前图像
                //g_BaseDealComprehensive.RefreshCurrImage();

                //foreach (CellReference cellReference in baseParCalibrate.g_ParCellExecuteReferenceForMult.g_CellExecute_L)
                //{
                //    g_BaseDealComprehensive.RefreshHobject(cellReference.NameCell);
                //    g_BaseDealComprehensive.RefreshShape(cellReference.NameCell);
                //    g_BaseDealComprehensive.RefreshResultInfo(cellReference.NameCell);
                //}
            }
            catch (Exception ex)
            {
                Log.L_I.WriteError(NameClass, ex);
            }
        }
Beispiel #3
0
        public void DualLocation(int index)
        {
            if (Camera1Done & Camera2Done)
            {
                ShowState("开始计算工位" + index + "偏差");
                BaseParCalibrate baseParComprehensive = ParComprehensive2.P_I.GetCellParCalibrate(Camera2RC);
                ParCalibRotate   parCalibRotate       = (ParCalibRotate)baseParComprehensive;
                double           angle = Math.Atan(
                    (Pt2Mark2.DblValue2
                     - Pt2Mark1.DblValue2)
                    * AMP
                    / Protocols.confDisMark) * 180 / Math.PI
                                         - StationDataMngr.CalibPos_L[index - 1].DblValue4;
                ShowState("工位" + index + "逆时针角度偏差: " + angle);


                FunCalibRotate fcr             = new FunCalibRotate();
                Point2D        MarkAfterRotate = fcr.GetPoint_AfterRotation(
                    angle / 180 * Math.PI, parCalibRotate.PointRC, Pt2Mark2);

                double deltaY = MarkAfterRotate.DblValue1 - StationDataMngr.CalibPos_L[index - 1].DblValue1;
                double deltaX = MarkAfterRotate.DblValue2 - StationDataMngr.CalibPos_L[index - 1].DblValue2;
                deltaX *= AMP;
                deltaY *= -AMP;

                Point2D delta = TransDelta(new Point2D(deltaX, deltaY),
                                           Protocols.ConfPlaceAngle, Protocols.ConfPreciseAngle);
                ShowState(string.Format("工位{0}X方向补偿{1},Y方向补偿{2}", index, delta.DblValue1.ToString(ReserveDigits), delta.DblValue2.ToString(ReserveDigits)));

                int     num = (StationNum - 1) * 2 + index;
                Point4D pos = new Point4D
                {
                    DblValue1 = delta.DblValue1
                                + StationDataMngr.PlacePos_L[index - 1].DblValue1
                                + ParAdjust.Value1("adj" + num),

                    DblValue2 = delta.DblValue2
                                + StationDataMngr.PlacePos_L[index - 1].DblValue2
                                + ParAdjust.Value2("adj" + num),

                    DblValue3 = StationDataMngr.PlacePos_L[index - 1].DblValue3,
                    DblValue4 = Protocols.ConfPlaceAngle + angle + ParAdjust.Value3("adj" + num)
                };

                LogicRobot.L_I.WriteRobotCMD(pos, Protocols.BotCmd_StationPos);
                ShowState("发送机器人放片坐标:" + pos.DblValue1.ToString("f3") + @"/" + pos.DblValue2.ToString("f3"));
            }
        }
        /// <summary>
        /// 多相机执行
        /// </summary>
        /// <param name="par"></param>
        /// <param name="baseParCalibrate"></param>
        /// <param name="fun"></param>
        public void MainWindow_GetResultValueMult_event(ParGetResultFromCell par, BaseParCalibrate baseParCalibrate, HashAction fun)
        {
            try
            {
                BaseDealComprehensiveResult baseDealComprehensiveResult = null;
                int noCamera = par.NoCameraMult;//多相机序号
                switch (noCamera)
                {
                case 1:
                    baseDealComprehensiveResult = DealComprehensiveResult1;
                    break;

                case 2:
                    baseDealComprehensiveResult = DealComprehensiveResult2;
                    break;

                case 3:
                    baseDealComprehensiveResult = DealComprehensiveResult3;
                    break;

                case 4:
                    baseDealComprehensiveResult = DealComprehensiveResult4;
                    break;

                case 5:
                    baseDealComprehensiveResult = DealComprehensiveResult5;
                    break;

                case 6:
                    baseDealComprehensiveResult = DealComprehensiveResult6;
                    break;

                case 7:
                    baseDealComprehensiveResult = DealComprehensiveResult7;
                    break;

                case 8:
                    baseDealComprehensiveResult = DealComprehensiveResult8;
                    break;
                }
                baseDealComprehensiveResult.GetCellResultValue(par, baseParCalibrate, fun);
            }
            catch (Exception ex)
            {
                Log.L_I.WriteError(NameClass, ex);
            }
        }
Beispiel #5
0
 public static bool GetRcFromPar(string cellName, BaseParComprehensive parComprehensive, out Point2D rc)
 {
     rc = new Point2D();
     try
     {
         //获取单元格
         BaseParCalibrate baseParComprehensive = parComprehensive.GetCellParCalibrate(cellName);
         //获取旋转中心算子
         ParCalibRotate parCalibRotate = (ParCalibRotate)baseParComprehensive;
         //计算旋转之后的mark位置
         rc = parCalibRotate.PointRC;
     }
     catch (Exception ex)
     {
         Log.L_I.WriteError(ClassName, ex);
         return(false);
     }
     return(true);
 }
Beispiel #6
0
        public bool SetRotateCenter(string cellName, Point2D rc, BaseParComprehensive parComprehensive)
        {
            //获取旋转中心cell
            BaseParCalibrate baseParComprehensive = parComprehensive.GetCellParCalibrate(cellName);
            //获取旋转中心算子
            ParCalibRotate parCalibRotate = (ParCalibRotate)baseParComprehensive;

            //把旋转中心存入算子
            parCalibRotate.XRC = rc.DblValue1;
            parCalibRotate.YRC = rc.DblValue2;
            //讲计算结果写入xml
            parComprehensive.WriteXmlDoc(cellName);
            //将参数保存到结果类
            new FunCalibRotate().SaveParToResult(HtResult_Cam1, parCalibRotate);
            //输出计算结果
            string info = string.Format("相机{0}旋转中心标定完成,X:{1},Y:{2}", g_NoCamera,
                                        parCalibRotate.XRC.ToString(), parCalibRotate.YRC.ToString());

            ShowState(info);

            return(true);
        }
Beispiel #7
0
        public void CalibRC()
        {
            Thread.Sleep(500);
            //double curR= ModuleBase.GetCurAngleByY(Protocols.GlassXInPresize, AMP, Pt2Mark1, Pt2MarkRC);
            BaseParCalibrate baseParComprehensive = ParComprehensive2.P_I.GetCellParCalibrate(Camera2RC);
            ParCalibRotate   parCalibRotate       = (ParCalibRotate)baseParComprehensive;

            Point2D orgPoint = new FunCalibRotate().GetOriginPoint(Protocols.BotRCCalibAngle, Pt2Mark2, Pt2MarkRC);

            ShowState("计算旋转中心X:" + orgPoint.DblValue1 + ",Y:" + orgPoint.DblValue2);
            Point2D offset = new Point2D(Protocols.GlassXInPresize / 2 / AMP, Protocols.GlassYInPresize / 2 / AMP);
            double  r      = ModuleBase.GetCurAngleByY(Protocols.GlassXInPresize, AMP, Pt2Mark1, Pt2Mark2);

            offset = TransDelta(offset, r + 0.5, 0);
            Point2D rc = new Point2D(offset.DblValue1 + Pt2Mark2.DblValue1, offset.DblValue2 + Pt2Mark2.DblValue2);

            ShowState("理论旋转中心X:" + rc.DblValue1 + ",Y:" + rc.DblValue2);
            if (Math.Abs(orgPoint.DblValue1 - rc.DblValue1) < 1000 &&
                Math.Abs(orgPoint.DblValue2 - rc.DblValue2) < 1000)
            {
                ShowState("使用计算旋转中心");
                parCalibRotate.XRC = orgPoint.DblValue1;
                parCalibRotate.YRC = orgPoint.DblValue2;
            }
            else
            {
                ShowState("使用理论旋转中心");
                parCalibRotate.XRC = rc.DblValue1; // orgPoint.DblValue1;
                parCalibRotate.YRC = rc.DblValue2; // orgPoint.DblValue2;
            }

            ParComprehensive2.P_I.WriteXmlDoc(Camera2RC);
            //将参数保存到结果类
            new FunCalibRotate().SaveParToResult(HtResult_Cam2, parCalibRotate);

            ShowState(string.Format("旋转中心标定完成,X_{0},Y_{1}", parCalibRotate.XRC.ToString(), parCalibRotate.YRC.ToString()));

            LogicRobot.L_I.WriteRobotCMD(Protocols.BotCmd_CalibRC);
        }
Beispiel #8
0
        /// <summary>
        /// 获取指定相机中校准算子的引用值列表,
        /// </summary>
        /// <param name="noCamera_e">相机序号</param>
        /// <param name="pos">算子序号</param>
        /// <param name="nameType">算子名称</param>
        /// <returns></returns>
        public static List <Point2D> GetCalibCellRefValue2(NoCamera_enum noCamera_e, int pos, string nameType)
        {
            List <Point2D> p_L = new List <Point2D>();

            try
            {
                BaseParComprehensive par = GetParComphensive(noCamera_e);

                //获取对应算子的所有单元格名称
                List <string> nameCell_L = par.GetAllNameCellByType(nameType);
                if (nameCell_L.Count < pos)
                {
                    return(null);
                }
                string nameCell = nameCell_L[pos - 1];

                //校准基类
                BaseParCalibrate      baseParCalibrate = par.GetCellParCalibrate(nameCell);
                List <ResultforCalib> resultforCalib_L = baseParCalibrate.g_ParGetResultFromCell.ResultforCalib_L;
                if (nameType == "旋转中心变换")
                {
                    resultforCalib_L = ((ParCalibRotate)baseParCalibrate).g_ParGetResultFromCellForRC.ResultforCalib_L;
                }
                for (int i = 0; i < resultforCalib_L.Count; i++)
                {
                    if (resultforCalib_L[i].XResult * resultforCalib_L[i].YResult != 0)
                    {
                        p_L.Add(new Point2D(resultforCalib_L[i].XResult, resultforCalib_L[i].YResult));
                    }
                }
                return(p_L);
            }
            catch (Exception ex)
            {
                Log.L_I.WriteError("Main_EX", ex);
                return(null);
            }
        }