Ejemplo n.º 1
0
 /// <summary>
 /// 坐标转换(倾斜状态): 喷嘴距离基板高度 -> Z轴坐标
 /// </summary>
 /// <param name="needleBoard">距板高度</param>
 /// <param name="boardHeight">基板测高值</param>
 /// <returns></returns>
 public static double NeedleBoard2Z(double needleBoard, double boardHeight, TiltType tiltType)
 {
     Log.Dprint("NeedleBoard2Z  needleBoard=" + needleBoard + ", boardHeight=" + boardHeight
                + ", StandardZ=" + Machine.Instance.Robot.CalibPrm.StandardZ + ", StandardHeight=" + Machine.Instance.Robot.CalibPrm.StandardHeight);
     if (tiltType == TiltType.NoTilt)
     {
         return(needleBoard + Machine.Instance.Robot.CalibPrm.StandardZ + (boardHeight - Machine.Instance.Robot.CalibPrm.StandardHeight));
     }
     else
     {
         List <AngleHeightPosOffset> curTiltCalibPrms = Machine.Instance.Robot.CalibPrm.AngleHeightPosOffsetList.FindAll(t => t.TiltType.Equals(tiltType));
         if (curTiltCalibPrms.Count <= 0)
         {
             return(0);
         }
         AngleHeightPosOffset curTiltCalibPrm = curTiltCalibPrms.Find(t => t.Gap.Equals(needleBoard));
         if (curTiltCalibPrm == null)
         {
             return(0);
         }
         else
         {
             if (curTiltCalibPrm.Gap <= 0.0001)
             {
                 return(0);
             }
             else
             {
                 return(curTiltCalibPrm.Gap + curTiltCalibPrm.StandardZ + (boardHeight - Machine.Instance.Robot.CalibPrm.StandardHeight));
             }
         }
     }
 }
Ejemplo n.º 2
0
        /// <summary>
        /// 相机坐标转换倾斜喷嘴坐标
        /// </summary>
        /// <param name="point"></param>
        /// <param name="valveType"></param>
        /// <param name="tiltType"></param>
        /// <returns></returns>
        public static PointD ToNeedle(this PointD point, ValveType valveType, TiltType tiltType)
        {
            PointD rtn = null;

            if (valveType == ValveType.Valve1 || valveType == ValveType.Both)
            {
                if (tiltType == TiltType.NoTilt)
                {
                    return(rtn = (point.ToSystem() + Machine.Instance.Robot.CalibPrm.NeedleCamera1 - Machine.Instance.Robot.CalibPrm.NeedleJet1).ToPoint().ToMachine());
                }
                AngleHeightPosOffset curTiltCalibPrm = Machine.Instance.Robot.CalibPrm.AngleHeightPosOffsetList.Find(t => t.TiltType.Equals(tiltType));
                if (curTiltCalibPrm == null)
                {
                    return(null);
                }
                rtn = (point.ToSystem() + curTiltCalibPrm.ValveCameraOffset - curTiltCalibPrm.DispenseOffset).ToPoint().ToMachine();
            }
            else
            {
                if (Machine.Instance.Setting.DualValveMode != DualValveMode.跟随)
                {
                    rtn = new PointD(
                        point.X + Machine.Instance.Robot.CalibPrm.NeedleCamera2.X - Machine.Instance.Robot.CalibPrm.NeedleJet2.X + Math.Abs(Machine.Instance.Robot.PosA),
                        point.Y + Machine.Instance.Robot.CalibPrm.NeedleCamera2.Y - Machine.Instance.Robot.CalibPrm.NeedleJet2.Y + Math.Abs(Machine.Instance.Robot.PosB));
                }
                else
                {
                    rtn = new PointD(
                        point.X + Machine.Instance.Robot.CalibPrm.NeedleCamera2.X - Machine.Instance.Robot.CalibPrm.NeedleJet2.X,
                        point.Y + Machine.Instance.Robot.CalibPrm.NeedleCamera2.Y - Machine.Instance.Robot.CalibPrm.NeedleJet2.Y);
                }
            }
            return(rtn);
        }
Ejemplo n.º 3
0
        public TestTypeCoreectAngleForm()
        {
            InitializeComponent();
            this.StartPosition = FormStartPosition.CenterScreen;

            this.angleHeightPosOffset = new AngleHeightPosOffset();

            this.Init();
            this.UpdateByIndex();
            this.FormClosed += TestTypeCoreectAngleForm_FormClosed;
        }
Ejemplo n.º 4
0
        /// <summary>
        /// 胶阀倾斜到位
        /// </summary>
        /// <param name="tiltType"></param>
        /// <param name="velU"></param>
        /// <param name="accU"></param>
        /// <returns></returns>
        public Result ChangeValveTiltStatus(TiltType tiltType, double velU, double accU)
        {
            Result ret = Result.OK;

            // 倾斜到位(胶阀当前倾斜状态不等于轨迹倾斜状态时执行)
            if (tiltType != Machine.Instance.Valve1.CurTilt && (Machine.Instance.Robot.RobotIsXYZU || Machine.Instance.Robot.RobotIsXYZUV))
            {
                // 回到安全高度再变方向
                if (Machine.Instance.Robot.PosZ < Machine.Instance.Robot.CalibPrm.SafeZ)
                {
                    ret = Machine.Instance.Robot.MoveSafeZAndReply();
                    if (!ret.IsOk)
                    {
                        return(ret);
                    }
                }
                if (Machine.Instance.Robot.RobotIsXYZUV)
                {
                    // todo 四方位旋转气缸动作
                }
                //U轴倾斜
                AngleHeightPosOffset tiltValvePrm = Machine.Instance.Robot.CalibPrm.AngleHeightPosOffsetList.Find(t => t.TiltType.Equals(tiltType));
                if (tiltValvePrm == null)
                {
                    return(Result.FAILED);
                }
                if (velU == 0 || accU == 0)
                {
                    return(Result.FAILED);
                }
                ret = Machine.Instance.Robot.MovePosUAndReply(tiltValvePrm.ValveAngle, velU, accU);
                if (!ret.IsOk)
                {
                    return(ret);
                }
                else
                {
                    Machine.Instance.Valve1.CurTilt = tiltType;
                }
            }
            return(ret);
        }