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