IAxisManager.h 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. #ifndef IAXISMANAGER_H
  2. #define IAXISMANAGER_H
  3. #include "JAxis.h"
  4. #include "ICoord.h"
  5. #include <map>
  6. //运动等待模式
  7. enum emum_Wait_Action
  8. {
  9. WAIT = 0,//等待所有移动结束
  10. NO_WAIT//不等待移动结束
  11. };
  12. enum Response_Status
  13. {
  14. Response_OK = 0,//过程OK
  15. Response_Abort,//过程取消
  16. Response_Error,//过程出错
  17. };
  18. struct ProcessResponse
  19. {
  20. Response_Status eStatus = Response_OK; //过程状态
  21. int ErrorCode = 0; //错误码
  22. std::string sErrorMessage = ""; //错误信息
  23. };
  24. //联锁轴状态
  25. enum emum_Interlock_Axis_Action
  26. {
  27. ALARM,//若联锁轴不在安全位置则取消移动并报警
  28. //ABORT,//若联锁轴不在安全位置则取消移动但不报警
  29. TRIGGER,//必须的情况下触发联锁轴移动到安全位置
  30. COMPEL//任何情况下强制联锁轴移动到安全位置
  31. };
  32. //自动避障枚举
  33. enum Collision_Detect_Mode
  34. {
  35. ColDetect_BothAvoid, //Go-Over和Go-Around NGZ均进行自动避让
  36. ColDetect_OverAvoid_AroundInhibit, //Go-Over NGZ自动避让,Go-Around NGZ禁止自动避让(禁止移动并报警)
  37. ColDetect_BothInhibit, //Go-Over和Go-Around NGZ均禁止自动避让(禁止移动并报警)
  38. ColDetect_BothInhibit_Manual, //用于手动鼠标移动,Go-Over和Go-Around NGZ均禁止自动避让(禁止移动并报警),但不考虑Highway和Bond的配置兼容性
  39. ColDetect_Disable //关闭碰撞识别(谨慎使用此模式,关闭碰撞识别可能造成碰撞!)
  40. };
  41. class IAxisManager
  42. {
  43. public:
  44. IAxisManager(){};
  45. ~IAxisManager(){};
  46. //初始化AxisManager
  47. virtual ProcessResponse Init(std::map<std::string,JAxis*> &mpAxis, std::map<std::string,ICoord*> &mpCoord) = 0;
  48. //退出AxisManager
  49. virtual ProcessResponse Exit() = 0;
  50. /*********************
  51. * 设置轴中的参数
  52. * *********************/
  53. /**
  54. * @brief SetMotionTimeout 设置运动超时时间(ms)
  55. * @brief ClearMotionTimeout 清除运动超时时间
  56. * 设置运动超时时间后,后续的WAIT运动都会以此时间进行运动超时判断及报警,直到清除运动超时时间为止,
  57. * 期间可再次调用SetMotionTimeout设置新的超时时间(对后续运动均生效)
  58. */
  59. virtual ProcessResponse SetMotionTimeOut(int nTime_ms) = 0;
  60. virtual ProcessResponse ClearMotionTimeOut() = 0;
  61. /**
  62. * @brief 设为true时设为急停状态并清除各轴已回零状态
  63. */
  64. virtual ProcessResponse SetEmergencyStopStatus(bool bStatus) = 0;
  65. /**
  66. * @brief 设置轴点位运动速度,设置的为速度比率
  67. */
  68. virtual ProcessResponse SetAxisVel(std::string sAxisName, double dVelRatio) = 0;
  69. /**
  70. * @brief 设置轴点位运动速度及加速度,设置的为速度比率,对Acc会乘dVelRatio*dVelRatio
  71. */
  72. virtual ProcessResponse SetAxisVelAcc(std::string sAxisName, double dVelRatio) = 0;
  73. /**
  74. * @brief 设置轴点位运动加速度,设置的为加速度比率
  75. * bIsAccRatio==false时输入的为速度比率,Acc乘dVelOrAccRatio*dVelOrAccRatio.
  76. * bIsAccRatio==true时输入的为加速度比率,Acc乘dVelOrAccRatio.
  77. */
  78. virtual ProcessResponse SetAxisAcc(std::string sAxisName, double dVelOrAccRatio, bool bIsAccRatio = false) = 0;
  79. /*********************
  80. * 参数获取
  81. * *********************/
  82. /**
  83. * @brief 获取轴状态,获取轴状态结构体
  84. */
  85. virtual ProcessResponse GetAxisStatus(std::string sAxisName,AxisStatus& stAxisStatus) = 0;
  86. /**
  87. * @brief 获取轴当前的位置
  88. */
  89. virtual double GetAxisActualPos(std::string sAxisName,ProcessResponse &stResponse) = 0;
  90. /**
  91. * @brief 获取轴当前的速度
  92. */
  93. virtual double GetAxisActualVel(std::string sAxisName,ProcessResponse &stResponse) = 0;
  94. /**
  95. * @brief 获取轴当前的加速度
  96. */
  97. virtual double GetAxisActualAcc(std::string sAxisName,ProcessResponse &stResponse) = 0;
  98. /**
  99. * @brief 监控并等待运动结束(单轴)
  100. * @param nMonitorInterval 运动状态监控及查询周期(ms),>0时优先使用该参数,设为<=0时会使用MachineConfigJson中的设置值
  101. * @param bInstantStopMode true=bStop变量为true时运动立即停止并返回Response_Abort,false=bStop变量为true时完成当前运动并返回Response_Abort
  102. */
  103. virtual ProcessResponse WaitForMotionComplete(JAxis* pAxis, int nMonitorInterval, const bool& bStop = false,
  104. bool bInstantStopMode = false) = 0;
  105. /**
  106. * @brief 检查轴故障、使能、回零等状态(单轴)
  107. * @param sAxisName 当前查询轴的名称
  108. */
  109. virtual ProcessResponse CheckAxisStatus(std::string sAxisName) = 0;
  110. /**
  111. * @brief 判断当前是否为急停状态
  112. */
  113. virtual bool isEmergencyStop(std::string sAxisName) = 0;
  114. /*********************
  115. * 单轴运动
  116. * *********************/
  117. /**
  118. * @brief 单轴运动一定距离,正常点位/点动模式
  119. */
  120. virtual ProcessResponse MoveToTrap( std::string sAxisName,double dPosOrDist,double dVelRatio,
  121. emum_Wait_Action eWaitAction,const bool& bStop = false) = 0;
  122. /**
  123. * @brief 单轴运动一定距离,Gear齿轮
  124. */
  125. virtual ProcessResponse MoveToGear(std::string sAxisName,std::string sMasterName,double dPosOrDist,
  126. long nMasterEven,long nSlaveEven,long nSlopeOrFollowDis = 0) = 0;
  127. /**
  128. * @brief 单轴运动一定距离,Follow凸轮
  129. */
  130. virtual ProcessResponse MoveToFollow(std::string sAxisName,std::string sMasterName,double dPosOrDist,
  131. long nMasterEven,long nSlaveEven,long nSlopeOrFollowDis = 0) = 0;
  132. /**
  133. * @brief 单轴运动一定距离,正常点位/点动模式
  134. */
  135. virtual ProcessResponse MoveTrap( std::string sAxisName,double dPosOrDist,double dVelRatio,emum_Wait_Action eWaitAction) = 0;
  136. /**
  137. * @brief 单轴运动,点动模式
  138. */
  139. virtual ProcessResponse Jog(std::string sAxisName,double dVelRatio) = 0;
  140. /**
  141. * @brief 单轴运动一定距离,Gear齿轮
  142. */
  143. virtual ProcessResponse MoveGear(std::string sAxisName,std::string sMasterName,double dPosOrDist,
  144. long nMasterEven,long nSlaveEven,long nSlopeOrFollowDis = 0) = 0;
  145. /**
  146. * @brief 单轴运动一定距离,Follow凸轮
  147. */
  148. virtual ProcessResponse MoveFollow(std::string sAxisName,std::string sMasterName,double dPosOrDist,
  149. long nMasterEven,long nSlaveEven,long nSlopeOrFollowDis = 0) = 0;
  150. /**
  151. * @brief 调用对应轴的回零运动
  152. */
  153. virtual ProcessResponse AxisHoming(std::string sAxisName, const bool& bStop = false) = 0;
  154. /*********************
  155. * 设置多轴(坐标系)参数
  156. **********************/
  157. /**
  158. * @brief 将轴的合成速度,加速度,加加速度一次性根据与VelRatio的关系设置
  159. */
  160. virtual ProcessResponse SetCrdSynAllRatio(double dVelRatio) = 0;
  161. /**
  162. * @brief 设置轴的合成速度
  163. */
  164. virtual ProcessResponse SetCrdSynVelRatio(double dVelRatio) = 0;
  165. /*********************
  166. * 多轴运动
  167. **********************/
  168. /*
  169. * 多轴协同点位运动(绝对位移)
  170. * 前面几种都使用坐标系实现,XYZRF五个轴需要自己加轴实现
  171. */
  172. virtual ProcessResponse XYMoveTo(std::string sCrdName,double dXPos, double dYPos, bool& bExit, bool bWaitStop) = 0;
  173. virtual ProcessResponse XYZMoveTo(std::string sCrdName,double dXPos, double dYPos, double dZPos, bool& bExit, bool bWaitStop) = 0;
  174. virtual ProcessResponse XYRMoveTo(std::string sCrdName,double dXPos, double dYPos, double dRPos,bool& bExit, bool bWaitStop) = 0;
  175. virtual ProcessResponse XYZRMoveTo(std::string sCrdName,double dXPos, double dYPos, double dZPos,double dRPos,bool& bExit,
  176. bool bWaitStop) = 0;
  177. virtual ProcessResponse XZMoveTo(std::string sCrdName,double dXPos, double dZPos, bool& bExit, bool bWaitStop) = 0;
  178. virtual ProcessResponse XRMoveTo(std::string sCrdName,double dXPos, double dRPos, bool& bExit, bool bWaitStop) = 0;
  179. virtual ProcessResponse XZRMoveTo(std::string sCrdName,double dXPos, double dZPos, double dRPos, bool& bExit, bool bWaitStop) = 0;
  180. virtual ProcessResponse YZMoveTo(std::string sCrdName,double dYPos, double dZPos, bool& bExit, bool bWaitStop) = 0;
  181. virtual ProcessResponse YRMoveTo(std::string sCrdName,double dYPos, double dRPos, bool& bExit, bool bWaitStop) = 0;
  182. virtual ProcessResponse YZRMoveTo(std::string sCrdName,double dYPos, double dZPos, double dRPos, bool& bExit, bool bWaitStop) = 0;
  183. virtual ProcessResponse ZRMoveTo(std::string sCrdName,double dZPos, double dRPos, bool& bExit, bool bWaitStop) = 0;
  184. };
  185. #endif // IAXISMANAGER_H