苏 展
(沈阳机床集团,辽宁 沈阳110000)
数控立式车床较多采用“斗笠式”刀库用以存放刀夹,如图1。
图1 “斗笠式”刀库
某客户定制的车铣机床,16种刀夹(如图2所示)在重量上差别很大,其中的轻型铣刀重10 kg,而铣削角度头为146 kg。若设计刀库转盘时刀夹随机摆放,则刀库整体重心就会根据刀夹的随机分布而产生差异,极端情况下重心偏移刀库旋转轴心最远,其旋转的惯量也会增大,这样会影响刀库的使用寿命及旋转定位精度。因此,设计出合力分布的车铣机床刀盘十分重要。
图2 刀库样式及刀具种类
本文着重讨论将16个刀夹合理分布在刀盘上的算法。
已知三维空间内,物体m1的三维重心在(x1,y1,z1);物体 m2的三维重心在(x2,y2,z2);............物体 mn的三维重心在(xn,yn,zn),整个系统的重心的位置在
假设转盘的重心位置与每把刀夹的重心在一个水平面上,则可以将此公式简化至平面中计算。由于转盘为旋转体,其理论重心应在圆心上,将此点作为原点,而刀夹是均匀的分布在转盘上的的分度圆(空位可以视刀夹的重量为0),所以建立极坐标更合适。应用Matlab编程结果如图3所示。
图3 转盘体及刀具种类
以现有一数控立式车铣床16工位刀库为例:8个铣削刀夹10 kg;1个车削刀夹15 kg;2个车削刀夹45 kg;2个车削刀夹50 kg;2个车削刀夹75 kg;1个铣削角度头146 kg。按照排列组合的思想,在不考虑重量的情况下,16把刀放在16个位置,共有16!=2.09e13个结果。将这些结果的每一组数值(即重量)分别与对应刀夹的坐标相乘,利用2.1节求解系统的重心公式,计算出各组排列重心,重心坐标距离圆心最小即为优化值。从而质量分布问题转变为数值矩阵问题[2]。
Matlab的排列组合函数perms(n)的n建议不要超过8个[3],所以要利用这个函数必须人工降次。思路是:将这16个数按升序排列,再平均分成2组(前8个一组,后8个一组),先将前一组质量小的数进行数值运算,将优化的第一组结果保留,在此基础上加入后一组数值进行第二次优化,最终得到最优解。此种方法同样适用于多数值点(n>20)的情况。以下是matlab程序流程图4。
图4 程序流程图
部分核心原程序如下:
n0= [10 10 10 10 10 10 10 10 146 15 45 50 75 75 50 45]
n_sort=sor(t n0)
n_result=zeros(size(n_sort
L_n_sort=size(n_sort);
n1=zeros(1,L_n_sor(t 2)/2);
n2=zeros(1,L_n_sor(t 2)/2);
n_sort_Search=1;
%部分内容省略,以下为核心算法
G_cal=sum(n0);
L_cal=0:pi/L:2*pi;
L_cal(length(L_cal))=[];
y0_cal=cos(L_cal);
x0_cal=sin(L_cal);
y_cal=reshape(y0_cal,length(L_cal),1);
x_cal=reshape(x0_cal,length(L_cal),1);
My_cal=n_result*y_cal;
Mx_cal=n_result*x_cal;
Gx_cal=My_cal/G_cal;
Gy_cal=Mx_cal/G_cal;
Gxy_cal=Gx_cal+i*Gy_cal;
R_cal=abs(Gxy_cal)
%部分内容省略,以下为核心算法
while text_i<=L_n_sort (2) text(y0_cal(text_i),x0_cal(text_i),[num2str(n_result(text_i))])
text_i=text_i+1;
以下是返回的数据,见图5:
a1_result=10 10 10 10 10 10 10 10%第一组优化结果
a2_result=146 15 50 75 75 50 45 45%在第一组的基础上第二组优化结果
n_result=10 146 10 15 10 50 10 75 10 75 10 50 10 45 10 45
图5 重心优化结果
再将分布结果布置到刀盘的三维模型中如图6所示,用质量除以密度得到不同体积的长方体摆放在各工位中(长方体的密度为45#钢)。这样就解决了在刀盘设计时平面分布不同重量刀夹问题。
图6 16个刀夹在刀盘上的最优结果
本文利用Matlab的程序,适当的加入人工算法,将繁琐的重复性的计算归结为求极值的问题;技术人员仅需输入多工位刀夹重量,便可解出刀盘平面内刀夹分布的最优解。