Esempio n. 1
0
        /// <summary>
        /// 三轴阻塞检测运动完成函数,调用Axis类中的MotionDone函数
        /// </summary>
        /// <param name="axis">轴号,0-based</param>
        /// <returns>0表示成功,非0值表示错误码</returns>
        public static int MotionDone(Point3i axis)
        {
            var axis_ = new List <int>()
            {
                axis.x, axis.y, axis.z
            };

            return(MotionDone(axis_));
        }
Esempio n. 2
0
        /// <summary>
        /// 三轴直线插补运动指令,不检测完成
        /// </summary>
        /// <param name="axis">轴ID, 0-based</param>
        /// <param name="pos">目标位置</param>
        /// <param name="resultantVel">运动合速度,单位m/s</param>
        /// <param name="resultantAcc">运动合加速度,单位m/s^2</param>
        /// <returns>0表示成功,非零值表示错误码</returns>
        public static int Line(Point3i axis, Point3d pos, double resultantVel, double resultantAcc)
        {
            int err_ = 0;

            if (!online_)
            {
                return(0);
            }
            if (!_isIdNormal(axis.x) || !_isIdNormal(axis.y) || !_isIdNormal(axis.z))
            {
                return((int)(Error.IdOutOfRange));
            }
            if (axisList_[axis.x].cardId != axisList_[axis.y].cardId ||
                axisList_[axis.x].cardId != axisList_[axis.z].cardId ||
                axisList_[axis.y].cardId != axisList_[axis.z].cardId)
            {
                return((int)(Error.AxesNotInOneCard));
            }
            lhmtc.CrdCfg crdCfg_ = new lhmtc.CrdCfg();
            crdCfg_.dimension = 3;
            crdCfg_.profile   = new short[8] {
                axisList_[axis.x].id, axisList_[axis.y].id, axisList_[axis.z].id, 0, 0, 0, 0, 0
            };
            crdCfg_.orignPos = new int[8] {
                0, 0, 0, 0, 0, 0, 0, 0
            };
            crdCfg_.setOriginFlag = 1;
            crdCfg_.evenTime      = 10;
            crdCfg_.synAccMax     = 720; //[0-750]
            crdCfg_.synVelMax     = 720; //[0-750]
            crdCfg_.synDecSmooth  = 1;
            crdCfg_.synDecAbrupt  = 500;

            if ((err_ = lhmtc.LH_SetCrdPrm(crdSys_, ref crdCfg_, false)) != 0)
            {
                return(err_);
            }
            if ((err_ = lhmtc.LH_CrdClear(crdSys_, 1, fifo_, false)) != 0)
            {
                return(err_);
            }

            if ((err_ = lhmtc.LH_LnXYZ(crdSys_,
                                       axisList_[axis.x]._mm2pls(pos.x), axisList_[axis.y]._mm2pls(pos.y), axisList_[axis.z]._mm2pls(pos.z),
                                       axisList_[axis.x]._vel2pls(resultantVel), axisList_[axis.x]._acc2pls(resultantAcc),
                                       0, fifo_)) != 0)
            {
                return(err_);
            }
            if ((err_ = lhmtc.LH_CrdStart(crdSys_, fifo_, false)) != 0)
            {
                return(err_);
            }
            return(0);
        }
Esempio n. 3
0
        /// <summary>
        /// 三轴直线插补运动,发指令后,阻塞检测完成。
        /// </summary>
        /// <param name="axis">轴ID,0-based</param>
        /// <param name="pos">目标位置</param>
        /// <param name="resultantVel">运动合速度,单位m/s</param>
        /// <param name="resultantAcc">运动合加速度,单位m/s^2</param>
        /// <param name="maxSeconds">最大检测完成时间,超时时间,单位秒</param>
        /// <returns>0表示成功,非零值表示错误码</returns>
        public static int LineOver(Point3i axis, Point3d pos, double resultantVel, double resultantAcc, double maxSeconds = 20)
        {
            int err_ = 0;

            if ((err_ = Line(axis, pos, resultantVel, resultantAcc)) != 0)
            {
                return(err_);
            }
            Thread.Sleep(100);
            return(err_ = LineDone(maxSeconds));
        }
Esempio n. 4
0
        /// <summary>
        /// 三轴绝对位置移动指令,阻塞检测完成,调用Axis类中AbsMove+Done方法
        /// </summary>
        /// <param name="axis">轴号,0-based</param>
        /// <param name="pos">目标位置,单位mm</param>
        /// <param name="spd_ratio">运动速率,正数,可以大于1</param>
        /// <returns>0表示成功,非0值表示错误码</returns>
        public static int AbsMoveOver(Point3i axis, Point3d pos, double spd_ratio)
        {
            var axis_ = new List <int>()
            {
                axis.x, axis.y, axis.z
            };
            var pos_ = new List <double>()
            {
                pos.x, pos.y, pos.z
            };

            return(AbsMoveOver(axis_, pos_, spd_ratio));
        }