|
|
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;
}
|
|