找回密码
 立即注册

QQ登录

只需一步,快速开始

微信扫码登录

搜索
查看: 46|回复: 0

[原创] 四轴刀尖跟随RTCP宏程序

[复制链接]

22

主题

125

回帖

1439

积分

六级士官

积分
1439
发表于 1 小时前 | 显示全部楼层 |阅读模式
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;
}





您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

咨询QQ:1359218528|发帖须知!|Archiver|手机版|小黑屋|UG爱好者论坛 ( 京ICP备10217105号-2 )

GMT+8, 2025-12-2 11:34

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表