ICoord.h 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. #pragma once
  2. #include <mutex>
  3. #include "JAxis.h"
  4. #include <vector>
  5. //#include "config.h"
  6. //#include "LookAheadEx.h"
  7. //#include "src/Common/JFile.h"
  8. //#include "3rd/json/json.h"
  9. struct CoordPara
  10. {
  11. int m_nCoordNo; //坐标系号
  12. std::string m_sCoordName;//坐标系名称
  13. int m_nCardType; //卡的类型
  14. int m_nCardIndex; //卡号
  15. std::string stAxisName[4]={};//坐标系中各轴名
  16. double dMaxCoordVel;
  17. double dMaxCoordAcc;
  18. bool bAxisLimitMode = true;
  19. double dJerkCoef = 0;
  20. double dJerkTime = 5;
  21. double dRadiusRatio = 50;
  22. double dLookAheadTime = 0.01;
  23. };
  24. enum enum_Coord_Axis
  25. {
  26. enum_CoordX = 0,
  27. enum_CoordY,
  28. enum_CoordZ,
  29. enum_CoordR
  30. };
  31. //坐标系运动的基类,不同的控制卡都是继承于该基类
  32. class ICoord
  33. {
  34. public:
  35. //2024/10/10 19:18添加,解决ICoord不存在默认构造函数的问题(在GTSCoord.cpp中)
  36. ICoord() {};
  37. virtual bool InitCoord(/*const std::map<std::string,int> &mpInit,*/HANDLE hCtrlComm) = 0;
  38. virtual void SetCrdPrm(CoordPara& stCoordPara)
  39. {
  40. m_stCrdPara = stCoordPara;
  41. }
  42. virtual CoordPara GetCrdPara()
  43. {
  44. return m_stCrdPara;
  45. }
  46. virtual int GetAxisNum()
  47. {
  48. return m_nAxisNum;
  49. }
  50. //ICoord(int crdNo, JAxis* x, JAxis* y, JAxis* z, JAxis* r) {};
  51. //析构缺实现
  52. virtual ~ICoord() {};
  53. //! 使能坐标系运动,
  54. virtual int SetToCrdMode() = 0;//double dRadiusRatio) = 0;
  55. //关闭插补模式
  56. virtual int SetToPTPMode() = 0;
  57. //! 停止坐标系运动
  58. virtual int StopAll() = 0;
  59. //开始坐标系运动
  60. virtual int CrdStart() = 0;
  61. virtual int CrdClear() = 0;
  62. virtual int SetCrdJerk(double dJerk/*, double dJerkCoef*/) = 0;
  63. //XY/XYZ/XYZR直线运动
  64. //指定同步速度,加速度,加加速度
  65. virtual int LnXY(double dX, double dY, double dSynVel, double dSynAcc,
  66. double dSynJerk, double dEndVel = 0) = 0;
  67. virtual int LnXYG0(double dX, double y, double dSynVel, double dSynAcc,
  68. double dSynJerk) = 0;
  69. virtual int LnXYZ(double dX, double dY, double dZ, double dSynVel, double dSynAcc,
  70. double dSynJerk, double dEndVel = 0) = 0;
  71. virtual int LnXYZG0(double dX, double dY, double dZ, double dSynVel, double dSynAcc,double dSynJerk) = 0;
  72. virtual int LnXYZR(double dX, double dY, double dZ, double dR,double dSynVel,
  73. double dSynAcc,double dSynJerk,double dEndVel = 0) = 0;
  74. virtual int LnXYZRG0(double dX, double dY, double dZ, double dR,double dSynVel,
  75. double dSynAcc,double dSynJerk) = 0;
  76. //指定速度比例
  77. virtual int LnXY(double dX, double dY, double dVelRatio = 1.0) = 0;
  78. virtual int LnXYG0(double dX, double dY, double dVelRatio = 1.0) = 0;
  79. virtual int LnXYZ(double dX, double dY, double dZ, double dVelRatio = 1.0) = 0;
  80. virtual int LnXYZG0(double dX, double dY, double dZ, double dVelRatio = 1.0) = 0;
  81. virtual int LnXYZR(double dX, double dY, double dZ, double dR, double dVelRatio = 1.0) = 0;
  82. virtual int LnXYZRG0(double dX, double dY, double dZ, double dR, double dVelRatio = 1.0) = 0;
  83. //XY圆弧运动
  84. //指定同步速度,加速度,加加速度
  85. virtual int ArcXYC(double dXCenter, double dYCenter, double dXEnd, double dYEnd,
  86. double dSynVel, double dSynAcc, double dSynJerk, double dEndVel = 0) = 0;
  87. virtual int ArcXYCGO(double dXCenter, double dYCenter, double dXEnd, double dYEnd,
  88. double dsynVel, double dSynAcc, double dSynJerk) = 0;
  89. virtual int ArcXY(double dXStart, double dYStart, double dXEnd, double dYEnd,
  90. double dSynVel, double dSynAcc, double dSynJerk, double dEndVel = 0) = 0;
  91. virtual int ArcXYG0(double dXStart, double dYStart, double dXEnd, double dYEnd,
  92. double dSynVel, double dSynAcc, double dSynJerk) = 0;
  93. //指定速度比例
  94. virtual int ArcXYC(double dXCenter, double dYCenter, double dXEnd, double dYEnd,
  95. double dVelRatio = 1.0) = 0;
  96. virtual int ArcXYCGO(double dXCenter, double dYCenter, double dXEnd, double dYEnd,
  97. double dVelRatio = 1.0) = 0;
  98. virtual int ArcXY(double dXStart, double dYStart, double dXEnd, double dYEnd,
  99. double dVelRatio = 1.0) = 0;
  100. virtual int ArcXYG0(double dXStart, double dYStart, double dXEnd, double dYEnd,
  101. double dVelRatio = 1.0) = 0;
  102. //XYZ圆弧运动
  103. //指定同步速度,加速度,加加速度
  104. virtual int ArcXYZC(double dXCenter, double dYCenter, double dZCenter, double dXEnd,
  105. double dYEnd, double dZEnd, double dSynVel, double dSynAcc, double dSynJerk, double dEndVel = 0) = 0;
  106. virtual int ArcXYZCGO(double dXCenter, double dYCenter, double dZCenter, double dXEnd,
  107. double dYEnd, double dZEnd, double dSynVel, double dSynAcc, double dSynJerk) = 0;
  108. virtual int ArcXYZ(double dXStart, double dYStart, double dZStart, double dXEnd,
  109. double dYEnd, double dZEnd, double dSynVel, double dSynAcc, double dSynJerk, double dEndVel = 0) = 0;
  110. virtual int ArcXYZG0(double dXStart, double dYStart, double dZStart, double dXEnd,
  111. double dYEnd, double dZEnd, double dSynVel, double dSynAcc, double dSynJerk) = 0;
  112. //指定速度比例
  113. virtual int ArcXYZC(double dXCenter, double dYCenter, double dZCenter, double dXEnd,
  114. double dYEnd, double dZEnd, double dVelRatio = 1.0) = 0;
  115. virtual int ArcXYZCGO(double dXCenter, double dYCenter, double dZCenter, double dXEnd,
  116. double dYEnd, double dZEnd, double dVelRatio = 1.0) = 0;
  117. virtual int ArcXYZ(double dXStart, double dYStart, double dZStart, double dXEnd,
  118. double dYEnd, double dZEnd, double dVelRatio = 1.0) = 0;
  119. virtual int ArcXYZG0(double dXStart, double dYStart, double dZStart, double dXEnd,
  120. double dYEnd, double dZEnd, double dVelRatio = 1.0) = 0;
  121. //缓冲区延时
  122. virtual int BufDelay(int nTimeMs) = 0;
  123. //缓冲区移动
  124. virtual int BufMove(int nAxis, double dPos, double dVel, double dAcc, double dJerk, bool bWaitMove) = 0;
  125. //缓冲区电子齿轮移动
  126. virtual int BufGear(int nAxis, double dStartPos, double dMoveDist) = 0;
  127. //缓冲区IO动作
  128. virtual int BufDO(unsigned short doMask, unsigned short doValue) = 0;
  129. //缓冲区DA输出
  130. virtual int BufDA(short channel,short daValue) = 0;
  131. //对于错误码返回值的解释
  132. virtual std::string ErrCodeTransfer(int nRtn){return "";};
  133. //! 查看坐标系运动是否在运动
  134. virtual bool IsCrdMoving() = 0;
  135. virtual bool InICoordMode()
  136. {
  137. return m_bIsCrdMode;
  138. };
  139. public:
  140. JAxis* m_jAxis[4] = {nullptr};
  141. protected:
  142. //验证参考系内所有轴是否在软限位内
  143. virtual int CheckRange(std::vector<double> vAxisPos) = 0;
  144. protected:
  145. bool m_bIsCrdMode = 0;
  146. int m_nSegNum = 0;
  147. CoordPara m_stCrdPara;
  148. int m_nAxisNum = 0;
  149. std::mutex m_mutex; //定义一个互斥锁变量
  150. };