123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- #pragma once
- #include "JAxis.h"
- #include "CAxis.h"
- #include "dt.h"
- #include <vector>
- #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 givenForceZ, double searchPos, double& hight);
- //寻高
- LONG FindForce(double searchForce, double actForce,double givenForceZ);
- /**
- * @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();
- /**
- * @brief 进行标定计算的函数
- * 该函数根据标定过程中获取的数据,计算力和电流之间的线性表达式
- */
- void Calibration();
- /**
- * @brief 获取力控参数的函数
- * 该函数用于从数据库或其他存储位置获取力控相关的参数
- */
- LONG GetParam();
- /**
- * @brief 力值转换为电流值的函数
- * @param force 输入的力值
- * @return 转换后的电流值
- * 该函数根据标定得到的线性表达式,将力值转换为对应的电流值
- */
- double ChangeForceToCurrent(double force, double givenForceZ);
- /**
- * @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:
- 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;
- CMachineCalibration* m_pMcCalibDB = nullptr; // 机器标定数据库对象指针,用于存储和获取标定数据
- FORCE_CONTROL m_stParam; // 力控参数结构体,存储力控系统的相关参数
- // 测高数据,不同的测高,只有搜索位置和搜索距离不同,力的大小通过传参
- int m_nHeadId = 0; // 头部的 ID,用于标识不同的力控设备
- std::string m_sHeadName = "";
- int m_nForcerBufferNO = 0;
- int m_nSpringForcerBufferNO = 0;
- string m_sParamName = "";
- bool m_bStop = false;
- };
|