CForceControl.h 4.6 KB

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