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