HorizMeasure.h 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  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, std::string, 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. LONG Pos1HighTest();
  45. LONG Pos2HighTest();
  46. LONG Pos3HighTest();
  47. /**
  48. * @brief 从数据库中获取水平度校准所需的参数
  49. *
  50. * 这些参数包括测试点的坐标、搜索高度等,会存储在 m_stParam 成员变量中
  51. */
  52. LONG GetParam();
  53. /**
  54. * @brief 将校准结果参数设置到数据库中
  55. *
  56. * 目前函数体为空,后续可实现将校准得到的 X 轴和 Y 轴倾斜角度等参数保存到数据库的逻辑
  57. */
  58. LONG SetParam();
  59. /**
  60. * @brief 获取水平度校准后 X 轴方向的倾斜角度结果
  61. *
  62. * @return double X 轴方向的倾斜角度,以绑头坐标系为基准
  63. */
  64. double GetAngleXResult() { return m_stParam.dAngleX; }
  65. /**
  66. * @brief 获取水平度校准后 Y 轴方向的倾斜角度结果
  67. *
  68. * @return double Y 轴方向的倾斜角度,以绑头坐标系为基准
  69. */
  70. double GetAngleYResult() { return m_stParam.dAngleY; }
  71. void Stop() { m_bStop = true; }
  72. void GetAngleResult(double& angleX, double& angleY)
  73. {
  74. angleX = m_stParam.dAngleX;
  75. angleY = m_stParam.dAngleY;
  76. }
  77. private:
  78. CForceControl* m_pForceControl = nullptr; // 指向力控制对象的指针,用于控制和获取力相关的数据
  79. CMachineCalibration* m_pMcCalibDB = nullptr; // 指向机器校准数据库对象的指针,用于参数的读取和存储
  80. HORIZ_MEASURE m_stParam; // 存储水平度校准所需的参数和校准结果
  81. int m_nTableID = 0; // 表格的唯一标识符
  82. bool m_bStop = false;
  83. std::string m_sName = "";
  84. CManageDB* m_pManageDB = nullptr;
  85. // 以下成员变量已合并到 m_stParam 中,不再单独使用
  86. // double m_dTestPosX1 = 0;
  87. // double m_dTestPosY1 = 0;
  88. // double m_dTestPosX2 = 0;
  89. // double m_dTestPosY2 = 0;
  90. // double m_dTestPosX3 = 0;
  91. // double m_dTestPosY3 = 0;
  92. // double m_dSearchPosZ = 0;
  93. // double m_dAngleX = 0; // 校准后的结果,X 方向的倾斜角度
  94. // double m_dAngleY = 0; // 校准后的结果,Y 方向的倾斜角度
  95. private:
  96. /**
  97. * @brief 辅助函数,用于移动到指定位置并进行高度测试
  98. *
  99. * @param pos 要移动到的测试位置的二维坐标
  100. * @param searchPosZ 搜索高度,用于高度测试的参数
  101. * @param outZ 用于存储测量得到的实际高度值
  102. * @return LONG 操作结果,成功返回 OK,失败返回相应的错误码
  103. */
  104. LONG MoveAndTest(const XY_DOUBLE_STRUCT& pos, double searchPosZ, double& outZ);
  105. vector<MODULE_CONFIG_STRUCT> m_vecConfigStruct;
  106. };