|
|
#pragma once
|
|
|
#include "axis.h"
|
|
|
|
|
|
enum EM_CRDID
|
|
|
{//坐标ID,每个卡只能有2个
|
|
|
EM_CRD_FST = 1,
|
|
|
EM_CRD_SEC,
|
|
|
};
|
|
|
|
|
|
struct CrdData;
|
|
|
struct TCrd
|
|
|
{//坐标系数据
|
|
|
bool buse; //是否使用中
|
|
|
char crd; //坐标系ID
|
|
|
ushort axisCnt;
|
|
|
ushort axisIndex[MAXAXIS];
|
|
|
CrdData *pCrdData;
|
|
|
};
|
|
|
|
|
|
enum EM_ARC_TYPE
|
|
|
{//圆弧插补类型
|
|
|
EM_ARC_XY = 0, //xy 平面圆弧
|
|
|
EM_ARC_YZ,
|
|
|
EM_ARC_ZX,
|
|
|
};
|
|
|
|
|
|
class CCard
|
|
|
{
|
|
|
public:
|
|
|
CCard(ushort cardIndex);
|
|
|
virtual ~CCard();
|
|
|
|
|
|
int Open();
|
|
|
int Close();
|
|
|
int Reset();
|
|
|
|
|
|
//单轴点位运动
|
|
|
int AxisReset(ushort axisIndex);
|
|
|
int AxisZeroPos(ushort axisIndex); //单轴清零位置
|
|
|
int AxisIsMoving(ushort axisIndex); //1运动中 0就绪
|
|
|
int AxisStop(ushort axisIndex, int stopType);
|
|
|
int AxisSetSpeed(ushort axisIndex, double vel);
|
|
|
|
|
|
int AxisSetPos(ushort axisIndex, long pos);
|
|
|
int AxisGetPos(ushort axisIndex, EMPosType postype, double* pval);
|
|
|
//dir 0 负方向 1 正方向
|
|
|
int AxisMoveJog(ushort axisIndex, int dir, double vel, double acc, double dec);
|
|
|
int AxisMovePos(ushort axisIndex, long pos, double vel, double acc, double dec);
|
|
|
int AxisHome(ushort axisIndex, ushort homeType, long pos, long offset, double vel);
|
|
|
int AxisMoveOffset(ushort axisIndex, long offset, double vel, double acc, double dec);
|
|
|
|
|
|
//IO操作
|
|
|
int ReadBit(ushort in_index, EIOType di_type);
|
|
|
int ReadOutBit(ushort out_index, EIOType do_type);
|
|
|
int WriteOutBit(ushort out_index, ushort val, EIOType do_type);
|
|
|
|
|
|
//AD
|
|
|
int ReadADC(ushort index, double* pval);
|
|
|
int WriteADC(ushort index, double val);
|
|
|
|
|
|
//插补运动
|
|
|
int CreateCrd(ushort *pAxisIndex, ushort nsize, int& crd); //成功返回坐标系ID 失败返回-1
|
|
|
int CloseCrd(int index);
|
|
|
int AddLinePos(int index, double *ppos, double vel, double acc, double dec);
|
|
|
int AddArcPos(int index, double *ppos1, double *ppos2, double *ppos3, double vel, double acc, double dec);
|
|
|
int CrdStartMove(int index);
|
|
|
int CrdStatus(int index, int *progress);
|
|
|
|
|
|
//命令行 接口
|
|
|
int SendCustomCommand(const char* msg, char* res/* = 0*/);
|
|
|
int RecvCustomCommand(const char* msg, char* res/* = 0*/, int timeout/* = 0*/);
|
|
|
|
|
|
int ComparePos(ushort axisCnt, short time, long *pBuf1, short count1, long *pBuf2, short count2);
|
|
|
|
|
|
bool _bOpened; //是否已经打开
|
|
|
ushort _cardIndex; //卡索引
|
|
|
CAxis* _pAxis[MAXAXIS]; //轴数组类指针
|
|
|
|
|
|
protected:
|
|
|
|
|
|
void CloseAllAxis(); //关闭所有轴
|
|
|
|
|
|
int GetExistCrd(); //获取空闲坐标系索引
|
|
|
int SetCrd(TCrd& crdData); //设置坐标系参数并创建
|
|
|
|
|
|
//IO
|
|
|
int ReadIn(EIOType di_type, long& val);
|
|
|
int ReadOut(EIOType do_type, long& val);
|
|
|
|
|
|
bool IsSamePos(long* pos1, long* pos2, int axisCnt); //判断两个位置是否一样
|
|
|
bool IsSameLine(long* pos1, long* pos2, long* pos3); //判断三点是否共线
|
|
|
int CalcArcType(long* pos1, long* pos2, long* pos3, int axisCnt, int &arcType); //通过位置计算圆弧插补类型 arcType EM_ARC_TYPE
|
|
|
void CalcCenter(long* pos1, long* pos2, long* pos3, double &x, double &y, double&r); //3个点计算圆心,数组只取前两个
|
|
|
bool CalcDir(long *pos1, long* pos2, long* pos3); //判断一段圆弧方向,true 顺时针 false 逆时针
|
|
|
|
|
|
short TransfIOType(short di_type); //把io读取/写入类型转换成固高卡的IO类型
|
|
|
|
|
|
int ParseGearMove(char* param);
|
|
|
|
|
|
//电子齿轮运动,主轴自己设置,这里只设置从轴运动
|
|
|
//masterAxis 主轴索引
|
|
|
//slaveAxis 从轴索引
|
|
|
//iGearType 传动模式 参考 EM_GEAR_TYPE
|
|
|
//ratio 传动比 主轴位移/从轴位移 比例
|
|
|
//masterSlope 缓冲区 从轴到达传动比时主轴的位移量
|
|
|
int GearMove(ushort masterAxis, ushort slaveAxis,
|
|
|
int iGearType, double ratio, long masterSlope = 0);
|
|
|
|
|
|
int SetBacklash(char* param); //设置反向间隙补偿
|
|
|
int SetArrive(char* param); //设置到位信号
|
|
|
int SetAD(char* param); //设置电压值
|
|
|
int ParseCompare(char* param); //0,1高速IO口号;0,1一维/二维模式;0,1 set/start;个数/轴号
|
|
|
int SetComparePrm(short chn, short mode, short encx, short ency);//0:高速IO口0 0:一维模式 0:设置位置比较参数,位置比较关联X轴(一维位置比较只能比Y轴,若想比较X轴,只能将其关联到Y轴上)
|
|
|
int StartCompare(short chn, short mode, int count, long *px, long *py);
|
|
|
|
|
|
private:
|
|
|
|
|
|
TCrd _crd[MAXCRD]; //最多2个坐标系
|
|
|
};
|
|
|
|