CForceControl.h 4.8 KB

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