Esempio n. 1
0
        /// <summary>
        /// 单轴运动,运动指令加阻塞检测完成。
        /// </summary>
        /// <param name="pos">目标位置或距离,单位mm</param>
        /// <param name="abs">是否为绝对移动模式,true表示绝对移动,false表示相对移动(此时pos表示距离)</param>
        /// <param name="mp">运动参数</param>
        /// <returns>0表示成功,非零表示错误码</returns>
        public int MoveOver(double pos, bool abs, MotionPara mp)
        {
            int err = 0;

            if ((err = Move(pos, abs, mp)) != 0)
            {
                return(err);
            }
            return(err = MotionDone());
        }
Esempio n. 2
0
        /// <summary>
        /// 相对运动指令(为减少累积误差,尽量使用绝对运动方式),不检测完成
        /// </summary>
        /// <param name="distance">运动距离, 单位mm</param>
        /// <param name="spd_ratio">运动速率,正数可以超过1.0</param>
        /// <returns>0表示指令发送成功,负值表示错误码</returns>
        public int RelMove(double distance, double spd_ratio = 1.0)
        {
            var mp_ = new MotionPara
            {
                acc    = motionPara.acc * spd_ratio * spd_ratio,
                maxVel = motionPara.maxVel * Math.Abs(spd_ratio),
            };

            return(Move(distance, false, mp_));
        }
Esempio n. 3
0
        /// <summary>
        /// 绝对运动指令,不检测完成
        /// </summary>
        /// <param name="pos">目标位置,单位mm</param>
        /// <param name="spd_ratio">运动速率,正数可以超过1.0</param>
        /// <returns>0表示指令发送成功,负值表示错误码</returns>
        public int AbsMove(double pos, double spd_ratio = 1.0)
        {
            var mp_ = new MotionPara
            {
                acc    = motionPara.acc * spd_ratio * spd_ratio,
                maxVel = motionPara.maxVel * Math.Abs(spd_ratio),
            };

            return(Move(pos, true, mp_));
        }
Esempio n. 4
0
        /// <summary>
        /// 单轴点到点运动指令,不检测完成
        /// </summary>
        /// <param name="pos">目标位置</param>
        /// <param name="abs">true表示绝对运动,false表示相对运动</param>
        /// <param name="mp">运动参数,包含加速度mm/ms^2、速度mm/ms(m/s)</param>
        /// <returns>0表示指令发送成功,负值表示错误码</returns>
        public int Move(double pos, bool abs, MotionPara mp)
        {
            int    err_ = 0;
            double pos_ = pos;

            if (!online_)
            {
                if (!abs)
                {
                    pos_ += fbkPos_;
                }
                cmdPos_ = fbkPos_ = pos_;
                return(0);
            }
            var p_ = new lhmtc.TrapPrfPrm
            {
                acc        = _acc2pls(mp.acc),
                dec        = _acc2pls(mp.acc),
                velStart   = 0,
                smoothTime = 10
            };

            if ((err_ = lhmtc.LH_PrfTrap(id, false)) != 0)
            {
                return(err_);
            }

            if ((err_ = lhmtc.LH_SetTrapPrm(id, ref p_, false)) != 0)
            {
                return(err_);
            }
            if (!abs)
            {
                pos_ += FbkPos;
            }
            if ((err_ = lhmtc.LH_SetPos(id, _mm2pls(pos_), false)) != 0)
            {
                return(err_);
            }
            if ((err_ = lhmtc.LH_SetVel(id, _vel2pls(mp.maxVel), false)) != 0)
            {
                return(err_);
            }
            if ((err_ = lhmtc.LH_Update(1 << (id - 1), false)) != 0)
            {
                return(err_);
            }
            return(0);
        }