VerticalMeasure.h 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. #pragma once
  2. #include "dt.h"
  3. #include <iostream>
  4. #include "CMath.h"
  5. #include "JAxis.h"
  6. #include "CForceControl.h"
  7. #include "CMachineCalibration.h"
  8. /*
  9. * 垂直测量类,用于进行垂直方向的校准测量操作。
  10. * 通过在不同角度下测量高度,计算出垂直轴相对于 X 轴和 Y 轴的倾斜角度。
  11. */
  12. class __declspec(dllexport) CVerticalMeasure
  13. {
  14. public:
  15. /**
  16. * @brief 构造函数,初始化垂直测量对象。
  17. *
  18. * @param headId 头部的唯一标识符,用于区分不同的测量单元。
  19. * @param forceController 指向力控制对象的指针,用于控制和执行力相关操作。
  20. * @param rotationAxis 指向旋转轴对象的指针,用于控制旋转轴的运动。
  21. */
  22. CVerticalMeasure(int headId, std::string name, CForceControl* forceController, CAxis* rotationAxis);
  23. /**
  24. * @brief 析构函数,释放垂直测量对象占用的资源。
  25. */
  26. ~CVerticalMeasure();
  27. /**
  28. * @brief 开始垂直测量校准操作。
  29. *
  30. * 该函数会控制旋转轴旋转到指定角度,移动到相应的测试位置进行高度测量,
  31. * 根据测量得到的三个点计算垂直轴相对于 X 轴和 Y 轴的倾斜角度。
  32. *
  33. * @return LONG 校准操作的结果,成功返回 OK,失败返回相应的错误码。
  34. */
  35. LONG StartCalib();
  36. LONG Angle1Test();
  37. LONG Angle2Test();
  38. LONG Angle3Test();
  39. LONG Calculate();
  40. /**
  41. * @brief 从机器校准数据库中获取垂直测量所需的参数。
  42. */
  43. LONG GetParam();
  44. /**
  45. * @brief 将垂直测量得到的参数保存到机器校准数据库中。
  46. *
  47. * 目前该函数为空,可根据需求进行实现。
  48. */
  49. LONG SetParam();
  50. void Stop() { m_bStop = true; }
  51. void GetAngleResult(double& ZAxisAngleX, double& ZAxisAngleY)
  52. {
  53. ZAxisAngleX = m_stParam.dZAxisAngleX;
  54. ZAxisAngleY = m_stParam.dZAxisAngleY;
  55. }
  56. private:
  57. /**
  58. * @brief 辅助函数,移动到测试位置并进行高度测量。
  59. *
  60. * @param testPosition 测试位置的二维坐标。
  61. * @param searchHeight 搜索高度,用于高度测试的参考值。
  62. * @param measuredHeight 输出的实际测量高度值。
  63. * @return LONG 操作结果,成功返回 OK,失败返回相应的错误码。
  64. */
  65. LONG MoveToTestPositionAndMeasureHeight(const XY_DOUBLE_STRUCT& testPosition, double searchHeight, double& measuredHeight);
  66. /**
  67. * @brief 辅助函数,将旋转轴旋转到指定角度。
  68. *
  69. * @param targetAngle 要旋转到的目标角度。
  70. * @return LONG 操作结果,成功返回 OK,失败返回相应的错误码。
  71. */
  72. LONG RotateAxisToAngle(double targetAngle);
  73. int m_headId; // 头部的唯一标识符
  74. CForceControl* m_forceController = nullptr; // 力控制对象指针
  75. CAxis* m_rotationAxis = nullptr; // 旋转轴对象指针
  76. CMachineCalibration* m_machineCalibrationDB = nullptr; // 机器校准数据库对象指针
  77. VERTICAL_MEASURE m_stParam; // 垂直测量的参数结构体
  78. bool m_bStop = false;
  79. std::string m_sName = "";
  80. std::vector<MODULE_CONFIG_STRUCT> m_vecConfigStruct;
  81. CManageDB* m_pManageDB = nullptr;
  82. };