VerticalMeasure.h 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  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, 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. /**
  37. * @brief 从机器校准数据库中获取垂直测量所需的参数。
  38. */
  39. void GetParam();
  40. /**
  41. * @brief 将垂直测量得到的参数保存到机器校准数据库中。
  42. *
  43. * 目前该函数为空,可根据需求进行实现。
  44. */
  45. void SaveParam();
  46. void Stop() { m_bStop = true; }
  47. void GetAngleResult(double& ZAxisAngleX, double& ZAxisAngleY)
  48. {
  49. ZAxisAngleX = m_calibrationParams.dZAxisAngleX;
  50. ZAxisAngleY = m_calibrationParams.dZAxisAngleY;
  51. }
  52. private:
  53. /**
  54. * @brief 辅助函数,移动到测试位置并进行高度测量。
  55. *
  56. * @param testPosition 测试位置的二维坐标。
  57. * @param searchHeight 搜索高度,用于高度测试的参考值。
  58. * @param measuredHeight 输出的实际测量高度值。
  59. * @return LONG 操作结果,成功返回 OK,失败返回相应的错误码。
  60. */
  61. LONG MoveToTestPositionAndMeasureHeight(const XY_DOUBLE_STRUCT& testPosition, double searchHeight, double& measuredHeight);
  62. /**
  63. * @brief 辅助函数,将旋转轴旋转到指定角度。
  64. *
  65. * @param targetAngle 要旋转到的目标角度。
  66. * @return LONG 操作结果,成功返回 OK,失败返回相应的错误码。
  67. */
  68. LONG RotateAxisToAngle(double targetAngle);
  69. int m_headId; // 头部的唯一标识符
  70. CForceControl* m_forceController = nullptr; // 力控制对象指针
  71. CAxis* m_rotationAxis = nullptr; // 旋转轴对象指针
  72. CMachineCalibration* m_machineCalibrationDB = nullptr; // 机器校准数据库对象指针
  73. VERTICAL_MEASURE m_calibrationParams; // 垂直测量的参数结构体
  74. bool m_bStop = false;
  75. };