CForceControl.h 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. #pragma once
  2. #include "JAxis.h"
  3. #include "CAxis.h"
  4. #include "dt.h"
  5. #include <vector>
  6. #include "CMachineCalibration.h"
  7. #include "CManageDB.h"
  8. #include "CMath.h"
  9. #include "CIO.h"
  10. /*
  11. * 力控类,包含标定和测高功能
  12. * 标定:通过一系列操作得到力和电流之间的线性表达式
  13. * 注意:压合距离需要和测高时保持相同!!!!!!
  14. */
  15. #define BufferNo 6
  16. using namespace ns_db;
  17. // 使用 __declspec(dllexport) 声明该类为导出类,可用于动态链接库导出
  18. class __declspec(dllexport) CForceControl {
  19. public:
  20. /**
  21. * @brief 构造函数
  22. * @param HeadID 头部的 ID,用于标识不同的力控设备
  23. * @param xAxis X 轴对象指针,用于控制 X 方向的运动
  24. * @param yAxis Y 轴对象指针,用于控制 Y 方向的运动
  25. * @param zAxis Z 轴对象指针,用于控制 Z 方向的运动
  26. * @param forceAxis 力轴对象指针,用于控制与力相关的操作
  27. */
  28. CForceControl(int HeadID, /*std::string headName,*/ CAxis* xAxis, CAxis* yAxis, CAxis* zAxis, CIO* forceAxis, CIO* forceScale = nullptr);
  29. /**
  30. * @brief 析构函数
  31. * 用于释放类中动态分配的资源
  32. */
  33. ~CForceControl();
  34. /**
  35. * @brief 力控测试函数
  36. * @param current 输入的电流值
  37. * @param force 输出的力值,通过引用传递
  38. * @return 操作结果,LONG 类型,通常 0 表示成功,非 0 表示失败
  39. * 该函数根据给定的电流值,返回对应的力值
  40. */
  41. LONG ForceTest(double current, double& force);
  42. /**
  43. * @brief 高度测试函数
  44. * @param force 测试时所需的力值
  45. * @param searchPos 搜索的起始位置
  46. * @param hight 输出的高度值,通过引用传递
  47. * @return 操作结果,LONG 类型,通常 0 表示成功,非 0 表示失败
  48. * 该函数只控制 Z 轴进行高度测试,不控制 XY 轴,使用前应先控制 XY 轴到位
  49. */
  50. LONG HightTest(/*double force, */double givenForceZ, double searchPos, double& hight);
  51. //寻高
  52. LONG FindForce(double searchForce, double actForce,double givenForceZ);
  53. /**
  54. * @brief 顶针高度测试函数
  55. * @param force 测试时所需的力值
  56. * @param hight 输出的顶针高度值,通过引用传递
  57. * @return 操作结果,LONG 类型,通常 0 表示成功,非 0 表示失败
  58. */
  59. LONG EjectorHightTest(double givenForceZ, double searchPos, double& hight);
  60. /**
  61. * @brief 更新力值的函数
  62. * @param force 要更新的力值
  63. * @return 操作结果,LONG 类型,通常 0 表示成功,非 0 表示失败
  64. * 该函数用于更新力控系统中的力值
  65. */
  66. LONG UpdateForce(double force, double givenForceZ);
  67. /**
  68. * @brief 移动到测试位置的函数
  69. * @param pos 目标位置,XY_DOUBLE_STRUCT 结构体包含 X 和 Y 坐标
  70. * @return 操作结果,LONG 类型,通常 0 表示成功,非 0 表示失败
  71. * 该函数会控制设备移动到指定的测试位置,并等待到位
  72. */
  73. LONG ToTestPos(XY_DOUBLE_STRUCT pos);
  74. LONG MoveToTestPos();
  75. //电流力控标定
  76. LONG CurrentForceCalib();
  77. //弹簧力控标定
  78. LONG SpringForceCalib();
  79. /**
  80. * @brief 进行标定计算的函数
  81. * 该函数根据标定过程中获取的数据,计算力和电流之间的线性表达式
  82. */
  83. void Calibration();
  84. /**
  85. * @brief 获取力控参数的函数
  86. * 该函数用于从数据库或其他存储位置获取力控相关的参数
  87. */
  88. LONG GetParam();
  89. /**
  90. * @brief 力值转换为电流值的函数
  91. * @param force 输入的力值
  92. * @return 转换后的电流值
  93. * 该函数根据标定得到的线性表达式,将力值转换为对应的电流值
  94. */
  95. double ChangeForceToCurrent(double force, double givenForceZ);
  96. /**
  97. * @brief 电流值转换为力值的函数
  98. * @param current 输入的电流值
  99. * @return 转换后的力值
  100. * 该函数根据标定得到的线性表达式,将电流值转换为对应的力值
  101. */
  102. double ChangeCurrentToForce(double current, double givenForceZ);
  103. //给定电流,转换力控到力控轴反馈位置
  104. double ChangeForceToForcerZPos();
  105. void Stop() { m_bStop = true; }
  106. std::string GetLineExpression();
  107. //void SetAI(CIO* AI) {
  108. // m_pForceScale = AI;
  109. //}
  110. private:
  111. CAxis* m_pAxisX = nullptr; // X 轴对象指针,用于控制 X 方向的运动
  112. CAxis* m_pAxisY = nullptr; // Y 轴对象指针,用于控制 Y 方向的运动
  113. CAxis* m_pAxisZ = nullptr; // Z 轴对象指针,用于控制 Z 方向的运动
  114. //CAxis* m_pAxisForce = nullptr; // 力轴对象指针,用于控制与力相关的操作
  115. CIO* m_pForcerAO = nullptr;
  116. CIO* m_pForceScale = nullptr;
  117. CMachineCalibration* m_pMcCalibDB = nullptr; // 机器标定数据库对象指针,用于存储和获取标定数据
  118. FORCE_CONTROL m_stParam; // 力控参数结构体,存储力控系统的相关参数
  119. // 测高数据,不同的测高,只有搜索位置和搜索距离不同,力的大小通过传参
  120. int m_nHeadId = 0; // 头部的 ID,用于标识不同的力控设备
  121. std::string m_sHeadName = "";
  122. int m_nForcerBufferNO = 0;
  123. int m_nSpringForcerBufferNO = 0;
  124. string m_sParamName = "";
  125. bool m_bStop = false;
  126. };