1、原理
RTCP,在高档五轴数控系统里,认为RTCP即是Rotated Tool Center Point,也就是我们常说的刀尖点跟随功能。在五轴加工中,追求刀尖点轨迹及刀具与工件间的姿态时,由于回转运动,产生刀尖点的附加运动。数控系统控制点往往与刀尖点不重合,因此数控系统要自动修正控制点,以保证刀尖点按指令既定轨迹运动。业内也有将此技术称为TCPM、TCPC或者RPCP等功能。其实这些称呼的功能定义都与RTCP类似,严格意义上来说,RTCP功能是用在双摆头结构上,是应用摆头旋转中心点来进行补偿。而类似于RPCP功能主要是应用在双转台形式的机床上,补偿的是由于工件旋转所造成的的直线轴坐标的变化。其实这些功能殊途同归,都是为了保持刀具中心点和刀具与工件表面的实际接触点不变。所以为了表述方便,本文统一此类技术为RTCP技术。
如果运动控制卡没有该功能,旋转轴变化时,刀尖末端加工位置将跟随改变,整个上位机程序开发将变得异常困难。
本文已博派智能PMC系列以太网运动控制卡(具体型号位PMC_GAS_8)为例进行功能和代码说明。该控制卡支持RTCP功能,通过脉冲+方向接口控制机床电机运动,最高脉冲频率打2Mhz。该控制卡跟电脑上位机接口是以太网,普通网口即可,台式机,笔记本都可以。语言方面,支持VC++/C#/QT/Python/VC/Delphi/VB等等,支持Linux系统。
如果你的伺服/步进是EtherCAT总线接口,可以考虑PMC_ECAT_GA2_N, 这款是对应的总线型EtherCAT控制器,支持EtherCAT总线,并且支持RTCP功能。
2、5轴机床常见结构一览。
下图是双摆头

下图是双转台

下图是一转一摆

2、具体代码
这里以博派智能的ETH_GAS系列网口运动控制卡为例说明,该运动控制卡有2-16路步进/伺服控制接口,每路接口都有编码器/脉冲/方向/报警/使能等信号,支持自动回零/点位/直线/圆弧插补/PT运动等功能,支持高速硬件捕获、比较输出/飞拍、PSO。高端款PMC系列甚至支持RTCP五轴联动,Delta/Scara/6轴机器人算法。
RTCP五轴联动相关函数一览表
|--------------------|---------------|
| API | 说明 |
| MC_RobotSetPrm | 设置五轴机床参数 |
| MC_RobotSetForward | 设置五轴机床进入关节运动 |
| MC_RobotSetInverse | 设置五轴机床进入坐标系运动 |
参数详细说明:
|---------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| int MC_RobotSetPrm(unsigned short RobotID,unsigned long ulRobotType,short nJogAxisCount,short *pJogAxisList,short nVirAxisCount,short* pVirAxisList,void *RobotParm) ||
| RobotID | 机床ID,通常为1 |
| ulRobotType | 机床类型 50008为XYZ+AC双转台(双摇篮)结构(也适用于XYZ+单转台(单摇篮))
50011为XYZ+AC双摆头结构(也适用于XYZ+单摆头)
50013为XYZ+A摆头C转台结构
|
| nJogAxisCount | 机床关节轴数量 |
| pJogAxisList | 机床关节轴轴号列表 |
| nVirAxisCount | 机床虚拟轴数量 |
| pVirAxisList | 机床虚拟轴轴号列表 |
| RobotParm | 机床参数,类型不同,参数结构体不同 //50008
//XYZAC双摇篮参数 typedef struct _XYZAC_PRRA{ double dCX; //C轴旋转中心X坐标,单位毫米 double dCY; //C轴旋转中心Y坐标,单位毫米 double dAY; //A轴旋转中心Y坐标,单位毫米 double dAZ; //A轴旋转中心Z坐标,单位毫米 long lPlusePerCircle[5]; //各轴每圈脉冲数量 double dPitch[5]; //各轴螺距,单位毫米 }XYZAC_PARM; //50011
//XYZTATC双摆头参数 typedef struct _XYZTATC_PRRA{ double dDX; //C在零度时,旋转关节中心相对Z轴的距离X,单位毫米 double dDY; //C在零度时,旋转关节中心相对Z轴的距离Y,单位毫米 double dR; //末端旋转半径,单位毫米 double dOrgAngleC; //回零完成后,C轴角度,单位度,范围0~360 long lPlusePerCircle[5]; //各轴每圈脉冲数量 double dPitch[5]; //各轴螺距,单位毫米 }XYZTATC_PARM; //50013
//XYZTAC一摆头一转台参数 typedef struct _XYZTAC_PRRA{ double dCX; //C轴旋转中心X坐标,单位mm double dCY; //C轴旋转中心Y坐标,单位mm double dR; //末端旋转半径,单位mm long lPlusePerCircle[5]; //各轴每圈脉冲数量 double dPitch[5]; //各轴螺距 }XYZTAC_PARM; |
| int MC_RobotSetForward(unsigned short nRobotID) ||
| nRobotID | 机床ID,通常为1,调用该函数后,可以进行关节运动 |
| int MC_RobotSetInverse(unsigned short nRobotID) ||
| nRobotID | 机床ID,通常为1,调用该函数后,可以进行坐标系XYZ运动 |
例程代码:
//关节轴轴号
short nJogAxisList[5];
nJogAxisList[0] = 1;
nJogAxisList[1] = 2;
nJogAxisList[2] = 3;
nJogAxisList[3] = 4;
nJogAxisList[4] = 5;
//坐标系轴号
short nVirAxisList[5];
nVirAxisList[0] = 11;
nVirAxisList[1] = 12;
nVirAxisList[2] = 13;
nVirAxisList[3] = 14;
nVirAxisList[4] = 15;
//声明五轴机床参数结构体变量,设置机床参数
XYZTATC_PARM m_XYZTATC_PARM;
m_XYZTATC_PARM.dDX = 0;
m_XYZTATC_PARM.dDY = 0;
m_XYZTATC_PARM.dOrgAngleC = 0;
m_XYZTATC_PARM.dPitch[0] = 10;
m_XYZTATC_PARM.dPitch[1] = 10;
m_XYZTATC_PARM.dPitch[2] = 10;
m_XYZTATC_PARM.dPitch[3] = 10;
m_XYZTATC_PARM.dPitch[4] = 10;
//刀长
m_XYZTATC_PARM.dR = 100;
m_XYZTATC_PARM.lPlusePerCircle[0] = 10000;
m_XYZTATC_PARM.lPlusePerCircle[1] = 10000;
m_XYZTATC_PARM.lPlusePerCircle[2] = 10000;
m_XYZTATC_PARM.lPlusePerCircle[3] = 10000;
m_XYZTATC_PARM.lPlusePerCircle[4] = 10000;
//下发机床参数
iRes = g_MultiCard.MC_RobotSetPrm(1,50011,5,&nJogAxisList[0],5,&nVirAxisList[0],&m_XYZTATC_PARM);
博派智能ETH_GAS系列8轴运动控制卡接线示意图(4轴和16轴篇幅限制没有放上来)

博派智能ETH_GAS系列4轴运动控制卡应用示意图(8轴和16轴篇幅限制没有放上来)
