#pragma once #include "dt.h" #include #include "CMath.h" #include "JAxis.h" #include "CForceControl.h" #include "CMachineCalibration.h" /* 1、水平度校准:测高三个点,三点确定一个平面,求平面法向量,根据法向量求出角度 注意:该水平度校准结果以绑头坐标系为基准坐标系。 如:X轴若为负数,则正方向向上翘,若为正,则负方向向上翘 */ class __declspec(dllexport) CHorizMeasure { public: /** * @brief 构造函数,用于创建 CHorizMeasure 对象 * * @param id 表格的唯一标识符,用于区分不同的校准表格 * @param forceControl 指向 CForceControl 对象的指针,用于控制和获取力相关的数据 */ CHorizMeasure(int id, CForceControl* forceControl); /** * @brief 析构函数,用于销毁 CHorizMeasure 对象,释放相关资源 */ ~CHorizMeasure(); // /** // * @brief 高度测试函数,测量当前位置的高度 // * // * @param hight 用于存储测量得到的高度值 // * @return LONG 操作结果,成功返回 OK,失败返回相应的错误码 // */ // LONG HightTest(double& hight); /** * @brief 开始水平度校准操作 * * 该函数会控制设备移动到三个预设的测试位置,进行高度测试, * 根据三个测试点的坐标和高度确定一个平面,计算该平面的法向量, * 进而求出该平面相对于绑头坐标系在 X 轴和 Y 轴方向的倾斜角度 * * @return LONG 校准操作的结果,成功返回 OK,失败返回相应的错误码 */ LONG StartCalib(); /** * @brief 从数据库中获取水平度校准所需的参数 * * 这些参数包括测试点的坐标、搜索高度等,会存储在 m_stParam 成员变量中 */ void GetParam(); /** * @brief 将校准结果参数设置到数据库中 * * 目前函数体为空,后续可实现将校准得到的 X 轴和 Y 轴倾斜角度等参数保存到数据库的逻辑 */ void SetParam(); /** * @brief 获取水平度校准后 X 轴方向的倾斜角度结果 * * @return double X 轴方向的倾斜角度,以绑头坐标系为基准 */ double GetAngleXResult() { return m_stParam.dAngleX; } /** * @brief 获取水平度校准后 Y 轴方向的倾斜角度结果 * * @return double Y 轴方向的倾斜角度,以绑头坐标系为基准 */ double GetAngleYResult() { return m_stParam.dAngleY; } void Stop() { m_bStop = true; } void GetAngleResult(double& angleX, double& angleY) { angleX = m_stParam.dAngleX; angleY = m_stParam.dAngleY; } private: CForceControl* m_pForceControl = nullptr; // 指向力控制对象的指针,用于控制和获取力相关的数据 CMachineCalibration* m_pMcCalibDB = nullptr; // 指向机器校准数据库对象的指针,用于参数的读取和存储 HORIZ_MEASURE m_stParam; // 存储水平度校准所需的参数和校准结果 int m_nTableID = 0; // 表格的唯一标识符 bool m_bStop = false; // 以下成员变量已合并到 m_stParam 中,不再单独使用 // double m_dTestPosX1 = 0; // double m_dTestPosY1 = 0; // double m_dTestPosX2 = 0; // double m_dTestPosY2 = 0; // double m_dTestPosX3 = 0; // double m_dTestPosY3 = 0; // double m_dSearchPosZ = 0; // double m_dAngleX = 0; // 校准后的结果,X 方向的倾斜角度 // double m_dAngleY = 0; // 校准后的结果,Y 方向的倾斜角度 private: /** * @brief 辅助函数,用于移动到指定位置并进行高度测试 * * @param pos 要移动到的测试位置的二维坐标 * @param searchPosZ 搜索高度,用于高度测试的参数 * @param outZ 用于存储测量得到的实际高度值 * @return LONG 操作结果,成功返回 OK,失败返回相应的错误码 */ LONG MoveAndTest(const XY_DOUBLE_STRUCT& pos, double searchPosZ, double& outZ); };