HorizMeasure.h 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  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. 1、水平度校准:测高三个点,三点确定一个平面,求平面法向量,根据法向量求出角度
  10. 注意:该水平度校准结果以绑头坐标系为基准坐标系。
  11. 如:X轴若为负数,则正方向向上翘,若为正,则负方向向上翘
  12. */
  13. class __declspec(dllexport) CHorizMeasure
  14. {
  15. public:
  16. /**
  17. * @brief 构造函数,用于创建 CHorizMeasure 对象
  18. *
  19. * @param id 表格的唯一标识符,用于区分不同的校准表格
  20. * @param forceControl 指向 CForceControl 对象的指针,用于控制和获取力相关的数据
  21. */
  22. CHorizMeasure(int id, CForceControl* forceControl);
  23. /**
  24. * @brief 析构函数,用于销毁 CHorizMeasure 对象,释放相关资源
  25. */
  26. ~CHorizMeasure();
  27. // /**
  28. // * @brief 高度测试函数,测量当前位置的高度
  29. // *
  30. // * @param hight 用于存储测量得到的高度值
  31. // * @return LONG 操作结果,成功返回 OK,失败返回相应的错误码
  32. // */
  33. // LONG HightTest(double& hight);
  34. /**
  35. * @brief 开始水平度校准操作
  36. *
  37. * 该函数会控制设备移动到三个预设的测试位置,进行高度测试,
  38. * 根据三个测试点的坐标和高度确定一个平面,计算该平面的法向量,
  39. * 进而求出该平面相对于绑头坐标系在 X 轴和 Y 轴方向的倾斜角度
  40. *
  41. * @return LONG 校准操作的结果,成功返回 OK,失败返回相应的错误码
  42. */
  43. LONG StartCalib();
  44. /**
  45. * @brief 从数据库中获取水平度校准所需的参数
  46. *
  47. * 这些参数包括测试点的坐标、搜索高度等,会存储在 m_stParam 成员变量中
  48. */
  49. void GetParam();
  50. /**
  51. * @brief 将校准结果参数设置到数据库中
  52. *
  53. * 目前函数体为空,后续可实现将校准得到的 X 轴和 Y 轴倾斜角度等参数保存到数据库的逻辑
  54. */
  55. void SetParam();
  56. /**
  57. * @brief 获取水平度校准后 X 轴方向的倾斜角度结果
  58. *
  59. * @return double X 轴方向的倾斜角度,以绑头坐标系为基准
  60. */
  61. double GetAngleXResult() { return m_stParam.dAngleX; }
  62. /**
  63. * @brief 获取水平度校准后 Y 轴方向的倾斜角度结果
  64. *
  65. * @return double Y 轴方向的倾斜角度,以绑头坐标系为基准
  66. */
  67. double GetAngleYResult() { return m_stParam.dAngleY; }
  68. void Stop() { m_bStop = true; }
  69. void GetAngleResult(double& angleX, double& angleY)
  70. {
  71. angleX = m_stParam.dAngleX;
  72. angleY = m_stParam.dAngleY;
  73. }
  74. private:
  75. CForceControl* m_pForceControl = nullptr; // 指向力控制对象的指针,用于控制和获取力相关的数据
  76. CMachineCalibration* m_pMcCalibDB = nullptr; // 指向机器校准数据库对象的指针,用于参数的读取和存储
  77. HORIZ_MEASURE m_stParam; // 存储水平度校准所需的参数和校准结果
  78. int m_nTableID = 0; // 表格的唯一标识符
  79. bool m_bStop = false;
  80. // 以下成员变量已合并到 m_stParam 中,不再单独使用
  81. // double m_dTestPosX1 = 0;
  82. // double m_dTestPosY1 = 0;
  83. // double m_dTestPosX2 = 0;
  84. // double m_dTestPosY2 = 0;
  85. // double m_dTestPosX3 = 0;
  86. // double m_dTestPosY3 = 0;
  87. // double m_dSearchPosZ = 0;
  88. // double m_dAngleX = 0; // 校准后的结果,X 方向的倾斜角度
  89. // double m_dAngleY = 0; // 校准后的结果,Y 方向的倾斜角度
  90. private:
  91. /**
  92. * @brief 辅助函数,用于移动到指定位置并进行高度测试
  93. *
  94. * @param pos 要移动到的测试位置的二维坐标
  95. * @param searchPosZ 搜索高度,用于高度测试的参数
  96. * @param outZ 用于存储测量得到的实际高度值
  97. * @return LONG 操作结果,成功返回 OK,失败返回相应的错误码
  98. */
  99. LONG MoveAndTest(const XY_DOUBLE_STRUCT& pos, double searchPosZ, double& outZ);
  100. };