123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 |
- #pragma once
- #include <mutex>
- #include "JAxis.h"
- #include <vector>
- //#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<std::string,int> &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<double> vAxisPos) = 0;
- protected:
- bool m_bIsCrdMode = 0;
- int m_nSegNum = 0;
- CoordPara m_stCrdPara;
- int m_nAxisNum = 0;
- std::mutex m_mutex; //定义一个互斥锁变量
- };
|