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