#pragma once #include "JAxis.h" #include "CAxis.h" #include "dt.h" #include #include "CMachineCalibration.h" #include "CManageDB.h" #include "CMath.h" #include "CIO.h" /* * 力控类,包含标定和测高功能 * 标定:通过一系列操作得到力和电流之间的线性表达式 * 注意:压合距离需要和测高时保持相同!!!!!! * 疑问:寻压测高等应该先判断力控位置? * 增加测试界面 */ //#define BufferNo 6 using namespace ns_db; // 使用 __declspec(dllexport) 声明该类为导出类,可用于动态链接库导出 class __declspec(dllexport) CForceControl { public: /** * @brief 构造函数 * @param HeadID 头部的 ID,用于标识不同的力控设备 * @param xAxis X 轴对象指针,用于控制 X 方向的运动 * @param yAxis Y 轴对象指针,用于控制 Y 方向的运动 * @param zAxis Z 轴对象指针,用于控制 Z 方向的运动 * @param forceAxis 力轴对象指针,用于控制与力相关的操作 */ CForceControl(int HeadID, std::string headName, CAxis* xAxis, CAxis* yAxis, CAxis* zAxis, CIO* forceAxis, CIO* forceScale = nullptr); /** * @brief 析构函数 * 用于释放类中动态分配的资源 */ ~CForceControl(); /** * @brief 力控测试函数 * @param current 输入的电流值 * @param force 输出的力值,通过引用传递 * @return 操作结果,LONG 类型,通常 0 表示成功,非 0 表示失败 * 该函数根据给定的电流值,返回对应的力值 */ LONG ForceTest(double current, double& force); /** * @brief 高度测试函数 * @param force 测试时所需的力值 * @param searchPos 搜索的起始位置 * @param hight 输出的高度值,通过引用传递 * @return 操作结果,LONG 类型,通常 0 表示成功,非 0 表示失败 * 该函数只控制 Z 轴进行高度测试,不控制 XY 轴,使用前应先控制 XY 轴到位 */ LONG HightTest(/*double force, */double givenForce, double searchPos, double& hight); //寻高 LONG FindForce(double actForce, double searchForce = 500, double givenForceZ = 4000); /** * @brief 顶针高度测试函数 * @param force 测试时所需的力值 * @param hight 输出的顶针高度值,通过引用传递 * @return 操作结果,LONG 类型,通常 0 表示成功,非 0 表示失败 */ LONG EjectorHightTest(double givenForceZ, double searchPos, double& hight); /** * @brief 更新力值的函数 * @param force 要更新的力值 * @return 操作结果,LONG 类型,通常 0 表示成功,非 0 表示失败 * 该函数用于更新力控系统中的力值 */ LONG UpdateForce(double force, double givenForceZ); /** * @brief 移动到测试位置的函数 * @param pos 目标位置,XY_DOUBLE_STRUCT 结构体包含 X 和 Y 坐标 * @return 操作结果,LONG 类型,通常 0 表示成功,非 0 表示失败 * 该函数会控制设备移动到指定的测试位置,并等待到位 */ LONG ToTestPos(XY_DOUBLE_STRUCT pos); LONG MoveToTestPos(); //电流力控标定 LONG CurrentForceCalib(); //弹簧力控标定 LONG SpringForceCalib(); //寻压力为0对应的电流 LONG FindZeroForceCurrent(); /** * @brief 进行标定计算的函数 * 该函数根据标定过程中获取的数据,计算力和电流之间的线性表达式 */ void Calibration(); /** * @brief 获取力控参数的函数 * 该函数用于从数据库或其他存储位置获取力控相关的参数 */ LONG GetParam(); LONG SetParam(); /** * @brief 力值转换为电流值的函数 * @param force 输入的力值 * @return 转换后的电流值 * 该函数根据标定得到的线性表达式,将力值转换为对应的电流值 */ double ChangeForceToCurrent(double force, double givenForceZ = 4180); /** * @brief 电流值转换为力值的函数 * @param current 输入的电流值 * @return 转换后的力值 * 该函数根据标定得到的线性表达式,将电流值转换为对应的力值 */ double ChangeCurrentToForce(double current, double givenForceZ); //给定电流,转换力控到力控轴反馈位置 //double ChangeForceToForcerZPos(); void Stop() { m_bStop = true; } std::string GetLineExpression(); //void SetAI(CIO* AI) { // m_pForceScale = AI; //}、 private: void DataChangNotice(string strDbName, string strTableName); private: vector m_vecConfigStruct; CAxis* m_pAxisX = nullptr; // X 轴对象指针,用于控制 X 方向的运动 CAxis* m_pAxisY = nullptr; // Y 轴对象指针,用于控制 Y 方向的运动 CAxis* m_pAxisZ = nullptr; // Z 轴对象指针,用于控制 Z 方向的运动 //CAxis* m_pAxisForce = nullptr; // 力轴对象指针,用于控制与力相关的操作 CIO* m_pForcerAO = nullptr; CIO* m_pForceScale = nullptr; CCalibrationConfig* m_pMcCalibDB = nullptr; // 机器标定数据库对象指针,用于存储和获取标定数据 FORCE_CONTROL m_stParam; // 力控参数结构体,存储力控系统的相关参数 // 测高数据,不同的测高,只有搜索位置和搜索距离不同,力的大小通过传参 int m_nHeadId = 0; // 头部的 ID,用于标识不同的力控设备 std::string m_sHeadName = ""; int m_nForcerBufferNO = 6; string m_sParamName = ""; bool m_bStop = false; };