博派智能-运动控制技术-RTCP-五轴联动

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 lPlusePerCircle5; //各轴每圈脉冲数量 double dPitch5; //各轴螺距,单位毫米 }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 lPlusePerCircle5; //各轴每圈脉冲数量 double dPitch5; //各轴螺距,单位毫米 }XYZTATC_PARM; //50013 //XYZTAC一摆头一转台参数 typedef struct _XYZTAC_PRRA{ double dCX; //C轴旋转中心X坐标,单位mm double dCY; //C轴旋转中心Y坐标,单位mm double dR; //末端旋转半径,单位mm long lPlusePerCircle5; //各轴每圈脉冲数量 double dPitch5; //各轴螺距 }XYZTAC_PARM; |
| int MC_RobotSetForward(unsigned short nRobotID) ||
| nRobotID | 机床ID,通常为1,调用该函数后,可以进行关节运动 |
| int MC_RobotSetInverse(unsigned short nRobotID) ||
| nRobotID | 机床ID,通常为1,调用该函数后,可以进行坐标系XYZ运动 |

例程代码:

//关节轴轴号

short nJogAxisList5;

nJogAxisList0 = 1;

nJogAxisList1 = 2;

nJogAxisList2 = 3;

nJogAxisList3 = 4;

nJogAxisList4 = 5;

//坐标系轴号

short nVirAxisList5;

nVirAxisList0 = 11;

nVirAxisList1 = 12;

nVirAxisList2 = 13;

nVirAxisList3 = 14;

nVirAxisList4 = 15;

//声明五轴机床参数结构体变量,设置机床参数

XYZTATC_PARM m_XYZTATC_PARM;

m_XYZTATC_PARM.dDX = 0;

m_XYZTATC_PARM.dDY = 0;

m_XYZTATC_PARM.dOrgAngleC = 0;

m_XYZTATC_PARM.dPitch0 = 10;

m_XYZTATC_PARM.dPitch1 = 10;

m_XYZTATC_PARM.dPitch2 = 10;

m_XYZTATC_PARM.dPitch3 = 10;

m_XYZTATC_PARM.dPitch4 = 10;

//刀长

m_XYZTATC_PARM.dR = 100;

m_XYZTATC_PARM.lPlusePerCircle0 = 10000;

m_XYZTATC_PARM.lPlusePerCircle1 = 10000;

m_XYZTATC_PARM.lPlusePerCircle2 = 10000;

m_XYZTATC_PARM.lPlusePerCircle3 = 10000;

m_XYZTATC_PARM.lPlusePerCircle4 = 10000;

//下发机床参数

iRes = g_MultiCard.MC_RobotSetPrm(1,50011,5,&nJogAxisList0,5,&nVirAxisList0,&m_XYZTATC_PARM);

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

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

相关推荐
不会就选b4 分钟前
算法日常・每日刷题--<队列,宽搜>4
算法
Augustzero9 分钟前
为什么高性能调度器都在“偷任务”?从无锁队列看懂工作窃取
c++·后端
(Charon)16 分钟前
【C++】线程安全队列(三):MPSC无锁队列、atomic与链表节点实现
c++·安全·链表
(Charon)16 分钟前
【C++】:使用 mutex + deque 实现一个简单的 LockedQueue
开发语言·c++
码字的特恩17 分钟前
微软确认暂不为 Windows 11 加入透明效果自定义功能,建议用户使用第三方工具
人工智能·windows·算法·microsoft·计算机·大模型·编程
星轨初途26 分钟前
LeetCode 热题 100——day10 和为 K 的子数组
开发语言·c++·算法·leetcode
数模竞赛Paid answer28 分钟前
2021年深圳杯数学建模C题配电网可靠性和故障软自愈研究解题全过程论文及程序
算法·数学建模·数据分析·深圳杯
sycmancia28 分钟前
Qt——自定义控件温度计
开发语言·qt
农村小镇哥30 分钟前
怎么把HTM格式转化成WORD
ui·c#·word
农村小镇哥31 分钟前
C#读取CSV文件的方法
服务器·数据库·c#