#pragma once #include #include "JAxis.h" #include //#include "config.h" //#include "LookAheadEx.h" //#include "src/Common/JFile.h" //#include "3rd/json/json.h" struct CoordPara { int m_nCoordNo; //坐标系号 std::string m_sCoordName;//坐标系名称 int m_nCardType; //卡的类型 int m_nCardIndex; //卡号 std::string stAxisName[4]={};//坐标系中各轴名 double dMaxCoordVel; double dMaxCoordAcc; bool bAxisLimitMode = true; double dJerkCoef = 0; double dJerkTime = 5; double dRadiusRatio = 50; double dLookAheadTime = 0.01; }; enum enum_Coord_Axis { enum_CoordX = 0, enum_CoordY, enum_CoordZ, enum_CoordR }; //坐标系运动的基类,不同的控制卡都是继承于该基类 class ICoord { public: //2024/10/10 19:18添加,解决ICoord不存在默认构造函数的问题(在GTSCoord.cpp中) ICoord() {}; virtual bool InitCoord(/*const std::map &mpInit,*/HANDLE hCtrlComm) = 0; virtual void SetCrdPrm(CoordPara& stCoordPara) { m_stCrdPara = stCoordPara; } virtual CoordPara GetCrdPara() { return m_stCrdPara; } virtual int GetAxisNum() { return m_nAxisNum; } //ICoord(int crdNo, JAxis* x, JAxis* y, JAxis* z, JAxis* r) {}; //析构缺实现 virtual ~ICoord() {}; //! 使能坐标系运动, virtual int SetToCrdMode() = 0;//double dRadiusRatio) = 0; //关闭插补模式 virtual int SetToPTPMode() = 0; //! 停止坐标系运动 virtual int StopAll() = 0; //开始坐标系运动 virtual int CrdStart() = 0; virtual int CrdClear() = 0; virtual int SetCrdJerk(double dJerk/*, double dJerkCoef*/) = 0; //XY/XYZ/XYZR直线运动 //指定同步速度,加速度,加加速度 virtual int LnXY(double dX, double dY, double dSynVel, double dSynAcc, double dSynJerk, double dEndVel = 0) = 0; virtual int LnXYG0(double dX, double y, double dSynVel, double dSynAcc, double dSynJerk) = 0; virtual int LnXYZ(double dX, double dY, double dZ, double dSynVel, double dSynAcc, double dSynJerk, double dEndVel = 0) = 0; virtual int LnXYZG0(double dX, double dY, double dZ, double dSynVel, double dSynAcc,double dSynJerk) = 0; virtual int LnXYZR(double dX, double dY, double dZ, double dR,double dSynVel, double dSynAcc,double dSynJerk,double dEndVel = 0) = 0; virtual int LnXYZRG0(double dX, double dY, double dZ, double dR,double dSynVel, double dSynAcc,double dSynJerk) = 0; //指定速度比例 virtual int LnXY(double dX, double dY, double dVelRatio = 1.0) = 0; virtual int LnXYG0(double dX, double dY, double dVelRatio = 1.0) = 0; virtual int LnXYZ(double dX, double dY, double dZ, double dVelRatio = 1.0) = 0; virtual int LnXYZG0(double dX, double dY, double dZ, double dVelRatio = 1.0) = 0; virtual int LnXYZR(double dX, double dY, double dZ, double dR, double dVelRatio = 1.0) = 0; virtual int LnXYZRG0(double dX, double dY, double dZ, double dR, double dVelRatio = 1.0) = 0; //XY圆弧运动 //指定同步速度,加速度,加加速度 virtual int ArcXYC(double dXCenter, double dYCenter, double dXEnd, double dYEnd, double dSynVel, double dSynAcc, double dSynJerk, double dEndVel = 0) = 0; virtual int ArcXYCGO(double dXCenter, double dYCenter, double dXEnd, double dYEnd, double dsynVel, double dSynAcc, double dSynJerk) = 0; virtual int ArcXY(double dXStart, double dYStart, double dXEnd, double dYEnd, double dSynVel, double dSynAcc, double dSynJerk, double dEndVel = 0) = 0; virtual int ArcXYG0(double dXStart, double dYStart, double dXEnd, double dYEnd, double dSynVel, double dSynAcc, double dSynJerk) = 0; //指定速度比例 virtual int ArcXYC(double dXCenter, double dYCenter, double dXEnd, double dYEnd, double dVelRatio = 1.0) = 0; virtual int ArcXYCGO(double dXCenter, double dYCenter, double dXEnd, double dYEnd, double dVelRatio = 1.0) = 0; virtual int ArcXY(double dXStart, double dYStart, double dXEnd, double dYEnd, double dVelRatio = 1.0) = 0; virtual int ArcXYG0(double dXStart, double dYStart, double dXEnd, double dYEnd, double dVelRatio = 1.0) = 0; //XYZ圆弧运动 //指定同步速度,加速度,加加速度 virtual int ArcXYZC(double dXCenter, double dYCenter, double dZCenter, double dXEnd, double dYEnd, double dZEnd, double dSynVel, double dSynAcc, double dSynJerk, double dEndVel = 0) = 0; virtual int ArcXYZCGO(double dXCenter, double dYCenter, double dZCenter, double dXEnd, double dYEnd, double dZEnd, double dSynVel, double dSynAcc, double dSynJerk) = 0; virtual int ArcXYZ(double dXStart, double dYStart, double dZStart, double dXEnd, double dYEnd, double dZEnd, double dSynVel, double dSynAcc, double dSynJerk, double dEndVel = 0) = 0; virtual int ArcXYZG0(double dXStart, double dYStart, double dZStart, double dXEnd, double dYEnd, double dZEnd, double dSynVel, double dSynAcc, double dSynJerk) = 0; //指定速度比例 virtual int ArcXYZC(double dXCenter, double dYCenter, double dZCenter, double dXEnd, double dYEnd, double dZEnd, double dVelRatio = 1.0) = 0; virtual int ArcXYZCGO(double dXCenter, double dYCenter, double dZCenter, double dXEnd, double dYEnd, double dZEnd, double dVelRatio = 1.0) = 0; virtual int ArcXYZ(double dXStart, double dYStart, double dZStart, double dXEnd, double dYEnd, double dZEnd, double dVelRatio = 1.0) = 0; virtual int ArcXYZG0(double dXStart, double dYStart, double dZStart, double dXEnd, double dYEnd, double dZEnd, double dVelRatio = 1.0) = 0; //缓冲区延时 virtual int BufDelay(int nTimeMs) = 0; //缓冲区移动 virtual int BufMove(int nAxis, double dPos, double dVel, double dAcc, double dJerk, bool bWaitMove) = 0; //缓冲区电子齿轮移动 virtual int BufGear(int nAxis, double dStartPos, double dMoveDist) = 0; //缓冲区IO动作 virtual int BufDO(unsigned short doMask, unsigned short doValue) = 0; //缓冲区DA输出 virtual int BufDA(short channel,short daValue) = 0; //对于错误码返回值的解释 virtual std::string ErrCodeTransfer(int nRtn){return "";}; //! 查看坐标系运动是否在运动 virtual bool IsCrdMoving() = 0; virtual bool InICoordMode() { return m_bIsCrdMode; }; public: JAxis* m_jAxis[4] = {nullptr}; protected: //验证参考系内所有轴是否在软限位内 virtual int CheckRange(std::vector vAxisPos) = 0; protected: bool m_bIsCrdMode = 0; int m_nSegNum = 0; CoordPara m_stCrdPara; int m_nAxisNum = 0; std::mutex m_mutex; //定义一个互斥锁变量 };