Tualar 发表于 2025-12-2 10:01:03

四轴刀尖跟随RTCP宏程序

1. 立加四轴XYZA宏程序:(适用于发那科和三菱等数控系统)

    使用方法举例:
    ...........
T1 M6
G65 P7014 A-90.
G0 G54 G90 X0. Y0. A-90. S2000 M3
G43 Z50. H1
........
G49
G91 G28 Z0.
M30
%
宏程序如下:



%
O7014
(G56是用寻边器分中的加工坐标系,也就是UG软件编程时的坐标系)
#31=#5261
#32=#5262
#33=#5263

(G55是四轴旋转中心点在机床坐标系中的位置,X值可随意)
#4=#5241
#5=#5242
#6=#5243

(A是四轴定位角度)
#130=#1

(计算A轴旋转后,分中坐标系G56跑到哪里去了)
#24=#31
#25=[#32-#5]*COS[#130]+[#33-#6]*SIN[#130]+#5
#26=-[#32-#5]*SIN[#130]+[#33-#6]*COS[#130]+#6

(将计算结果写入G54,用于后面NC程序调用G0 G90 G54 ...加工)
G90 G10 L2 P1 X[#24] Y[#25] Z[#26]
M99
%


2. 卧加四轴XYZB宏程序:(适用于发那科和三菱等数控系统)

    使用方法举例:
    ...........
T1 M6
G65 P7015 B-90.
G0 G54 G90 X0. Y0. B-90. S2000 M3
G43 Z50. H1
........
G49
G91 G28 Z0.
M30
%
宏程序如下:



%
O7015
(G56是用寻边器分中的加工坐标系,也就是UG软件编程时的坐标系)
#31=#5261
#32=#5262
#33=#5263

(G55是四轴旋转中心点在机床坐标系中的位置,Y值可随意)
#4=#5241
#5=#5242
#6=#5243

(B是四轴定位角度)
#130=#2

(计算B轴旋转后,分中坐标系G56跑到哪里去了)

#24=[#31-#4]*COS[#130]-[#33-#6]*SIN[#130]+#4
#25=#32
#26=[#33-#6]*COS[#130]+[#31-#4]*SIN[#130]+#6


(将计算结果写入G54,用于后面NC程序调用G0 G90 G54 ...加工)
G90 G10 L2 P1 X[#24] Y[#25] Z[#26]
M99
%





3.四轴五轴通用刀尖跟随RTCP数学算法的C/C++语言描述:
/*计算基准点在是旋转中心点G55*/

#define AC                (UINT)1          /*五轴AC双转台机床*/
#define BC                (UINT)2         /*五轴BC双转台机床*/
#define A4                (UINT)3         /*四轴立加A转台机床*/
#define B4                (UINT)4         /*四轴卧加B转台机床*/


#define rad               ((double)0.01745329252)          /*角度转换为弧度π/180*/



typedef struct
{
      double ab, c;   //ab是主动轴(第四轴)旋转角度,c是被动轴(第五轴)旋转角度
      double X, Y, Z;          //保存RTCP最终计算结果,这个值写入G54
      double g55x, g55y, g55z; //保存旋转轴中心线交点的机床坐标位置G55
      double g56x, g56y, g56z; //保存用分中棒抓取的工件坐标位置G56
}g54_t;



BOOL g54_rtcp_algorithm(g54_t* p, UINT type)
{
      if (!p || type < AC || type > B4) return FALSE;

       double x, y, z, X, Y, Z;
      double sin4, cos4, sin5, cos5;

      sin4 = -1.0*sin(p->ab*rad);
      cos4 = cos(p->ab*rad);
      sin5 = -1.0*sin(p->c*rad);
      cos5 = cos(p->c*rad);

      if (type == A4 || type == B4)   //如果是四轴
   {
         sin5 =0.0;
         cos5=1.0;
    }

    x = p->g56x - p->g55x;
    y = p->g56y - p->g55y;
    z = p->g56z - p->g55z;

    //5 axis calclate:
    X = x*cos5 - y*sin5;
    Y = x*sin5 + y*cos5;
    Z = z;

    //4 axis calclate:
    switch (type)
    {
       case AC:
       cass A4:
            x = X;
             y = Y*cos4 - Z*sin4;
             z = Y*sin4 + Z*cos4;
             break;
   case BC:
   case B4:
            x = X*cos4 + Z*sin4;
            y = Y;
         z = Z*cos4 - X*sin4;
         break;
}

      p->X = x + p->g55x;   //写入G54坐标系的X机床坐标等于p->X
      p->Y = y + p->g55y;   //写入G54坐标系的Y机床坐标等于p->Y
      p->Z = z + p->g55z;      //写入G54坐标系的Z机床坐标等于p->Z

      return TRUE;
}





121244885 发表于 2025-12-2 16:05:09

谢谢分享· 学习一下

hegaoj3 发表于 2025-12-3 13:13:18

谢谢分享·

时间都去哪了? 发表于 2025-12-3 16:49:30

谢谢大佬分享,学习一下

y791046881 发表于 2025-12-4 08:26:13

感谢分享!

lianganlianhua 发表于 2025-12-9 11:38:23

谢谢大佬分享,学习一下
页: [1]
查看完整版本: 四轴刀尖跟随RTCP宏程序