ICoord.h 7.0 KB

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