Постпроцессор для робота ABB IRB 2400 WaterJet.

 

Апрель 2011. Робот для водяной резки ABB IRB 2400.

Для робота водяной резки потребовался постпроцессор для NX7.5 с возможностью пересчета подачи (скорости) резания в зависимости от толщины разрезаемого материала. Поставленная задача была успешно решена при помощи специальной DLL, в которой в процессе постпроцессирования вычисляется толщина детали в точке резания и по соответствующим зависимостям вычисляется скорость резания. Эти вычисления производятся как для 3-осевой резки, так и для произвольной ориентации резака в постранстве. Постпроцессор выводит как отдельную операцию, так и группу операций, решена задача круговой интерполяции.

 

Пример управляющей программы:

MODULE WJ1
CONST robtarget Target_2:=[[0.000,-30.000,30.000],[0.000000000000,1.000000000000,0.000000000000,0.000000000000],[-1,-1,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]];
CONST robtarget Target_4:=[[0.000,-30.000,3.000],[0.000000000000,1.000000000000,0.000000000000,0.000000000000],[-1,-1,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]];
CONST robtarget Target_6:=[[0.000,-30.000,0.000],[0.000000000000,1.000000000000,0.000000000000,0.000000000000],[-1,-1,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]];
CONST robtarget Target_8:=[[0.000,0.000,0.000],[0.000000000000,1.000000000000,0.000000000000,0.000000000000],[-1,-1,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]];
CONST robtarget Target_10:=[[0.000,150.000,0.000],[0.000000000000,1.000000000000,0.000000000000,0.000000000000],[-1,-1,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]];
CONST robtarget Target_12:=[[14.645,185.355,0.000],[0.000000000000,1.000000000000,0.000000000000,0.000000000000],[-1,-1,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]];
CONST robtarget Target_14:=[[50.000,200.000,0.000],[0.000000000000,1.000000000000,0.000000000000,0.000000000000],[-1,-1,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]];
CONST robtarget Target_16:=[[201.018,200.000,0.000],[0.000000000000,1.000000000000,0.000000000000,0.000000000000],[-1,-1,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]];
CONST robtarget Target_18:=[[271.729,170.710,0.000],[0.000000000000,1.000000000000,0.000000000000,0.000000000000],[-1,-1,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]];
CONST robtarget Target_20:=[[301.018,100.000,0.000],[0.000000000000,1.000000000000,0.000000000000,0.000000000000],[-1,-1,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]];
CONST robtarget Target_22:=[[271.729,29.290,0.000],[0.000000000000,1.000000000000,0.000000000000,0.000000000000],[-1,-1,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]];
CONST robtarget Target_24:=[[201.018,0.000,0.000],[0.000000000000,1.000000000000,0.000000000000,0.000000000000],[-1,-1,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]];
CONST robtarget Target_26:=[[130.307,29.289,0.000],[0.000000000000,1.000000000000,0.000000000000,0.000000000000],[-1,-1,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]];
CONST robtarget Target_28:=[[101.018,100.000,0.000],[0.000000000000,1.000000000000,0.000000000000,0.000000000000],[-1,-1,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]];
CONST robtarget Target_30:=[[109.998,141.417,0.000],[0.000000000000,1.000000000000,0.000000000000,0.000000000000],[-1,-1,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]];
CONST robtarget Target_32:=[[135.324,175.395,0.000],[0.000000000000,1.000000000000,0.000000000000,0.000000000000],[-1,-1,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]];
CONST robtarget Target_34:=[[85.324,175.395,0.000],[0.000000000000,1.000000000000,0.000000000000,0.000000000000],[-1,-1,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]];
CONST robtarget Target_36:=[[64.111,166.608,0.000],[0.000000000000,1.000000000000,0.000000000000,0.000000000000],[-1,-1,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]];
CONST robtarget Target_38:=[[55.324,145.395,0.000],[0.000000000000,1.000000000000,0.000000000000,0.000000000000],[-1,-1,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]];
CONST robtarget Target_40:=[[55.324,0.443,0.000],[0.000000000000,1.000000000000,0.000000000000,0.000000000000],[-1,-1,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]];
CONST robtarget Target_42:=[[47.222,-19.119,0.000],[0.000000000000,1.000000000000,0.000000000000,0.000000000000],[-1,-1,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]];
CONST robtarget Target_44:=[[27.660,-27.221,0.000],[0.000000000000,1.000000000000,0.000000000000,0.000000000000],[-1,-1,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]];
CONST robtarget Target_46:=[[8.256,-19.274,0.000],[0.000000000000,1.000000000000,0.000000000000,0.000000000000],[-1,-1,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]];
CONST robtarget Target_48:=[[0.000,0.000,0.000],[0.000000000000,1.000000000000,0.000000000000,0.000000000000],[-1,-1,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]];
CONST robtarget Target_50:=[[-1.858,29.942,0.000],[0.000000000000,1.000000000000,0.000000000000,0.000000000000],[-1,-1,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]];
CONST robtarget Target_52:=[[-1.858,29.942,3.000],[0.000000000000,1.000000000000,0.000000000000,0.000000000000],[-1,-1,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]];
PROC ARC3 ()
MoveJ Target_2,vAirSlow,fine,TOOL2\WObj:=WOBJ;
MoveJ Target_4,v200,fine,TOOL2\WObj:=WOBJ;
MoveL Target_6,v200,fine,TOOL2\WObj:=WOBJ;
Abrasive\On, nCarmelSandRate;
MoveL Target_8,v200,fine,TOOL2\WObj:=WOBJ;
Abrasive\On, nCarmelSandRate;
MoveL Target_10,v250,fine,tJet6Abr\WObj:=obPSTable1;
MoveC Target_12, Target_14,v200,fine,TOOL2\WObj:=WOBJ;
MoveL Target_16,v250,fine,tJet6Abr\WObj:=obPSTable1;
MoveC Target_18, Target_20,v200,fine,TOOL2\WObj:=WOBJ;
MoveC Target_22, Target_24,v200,fine,TOOL2\WObj:=WOBJ;
MoveC Target_26, Target_28,v200,fine,TOOL2\WObj:=WOBJ;
MoveC Target_30, Target_32,v200,fine,TOOL2\WObj:=WOBJ;
MoveL Target_34,v250,fine,tJet6Abr\WObj:=obPSTable1;
MoveC Target_36, Target_38,v200,fine,TOOL2\WObj:=WOBJ;
MoveL Target_40,v250,fine,tJet6Abr\WObj:=obPSTable1;
MoveC Target_42, Target_44,v200,fine,TOOL2\WObj:=WOBJ;
MoveC Target_46, Target_48,v200,fine,TOOL2\WObj:=WOBJ;
Abrasive\Off, 0;
MoveJ Target_50,vAirSlow,fine,TOOL2\WObj:=WOBJ;
Abrasive\Off, 0;
MoveJ Target_52,vAirSlow,fine,TOOL2\WObj:=WOBJ;
ENDPROC

Октябрь 2011

Продолжение последовало достаточно быстро и неожиданно, некая компания из Германии обратилась с вопросом о постпроцессоре для робота ABB, полирующего (шлифующего) лопатки. Для демонстрации возможности разработки такого постпроцессора на базе постпроцессора ABB WATER JET была построена "действующая модель" постпроцессора. В отличие от WaterJET постпроцессора в данном случае нет необходимости вычислять толщину разрезаемого мптериала, однако во внешней DLL производилось вычисление кватернионов исходя из положения ролика на поверхности лопатки.

 

Апрель 2012

Продолжение последовало на одном из предприятий авиационного двигателестроения, где при помощи робота ABB решили осуществить полировку лопаток. Траектория получается в NX8, в обычном CAM-модуле, для ролика заданного диаметра и ширины. Постпроцессор формирует управляющую программу для робота только с тем отличием, что в данной ситуации подвижна лопатка в "руке" у робота, а сам ролик - неподвижен. Для этого пришлось в постпроцессор ввести персчет координат из системы координат детали в систему координат инструмента, как если бы инструмент был неподвижен. То, что привожу в качестве иллюстраций - только первые наброски, движение робота происходит на скорости v10, чуть позже выложу более реальные примеры.

Траектория полировочного ролика в NXСимуляция обработки в ROBOT Studio

После первых "осмысленных" движений робота по управляющей программе возникло желание сделать перемещения полировочного ролика более сложными, если угодно - более приближенными к тем, которые совершает мастер-полировщик. Кроме этого, более разумными будут безотрывные перемещения ролика.

В качестве опорной кривой было решено взять параметрическую кривую вида x=x(t), y=y(t), вписанную в единичный квадрат, и в дальнейшем сделать перенос этого узора на (u, v) поверхность, вписывая этот узор в билинейную поверхность, заданную четверкой точек на поверхности. Законы для x(t) и y(t) пришлось выдумать и вывести на бумаге карандашиком, привожу несколько примеров:

N=1
N=3
N=15
N=1
N=3
N=15

После переноса узора на поверхность лопатки получилась вот такая картина:

Law curve on the blade

Для получения траектории ролика применен User Defined метод управления, при котором как положение ролика так и его ориентация в пространстве определяются внутри динамической DLL библиотеки. В отличие от MILL_USER операций при таком способе управления остаются доступны штатные механизмы NX для управления отходами-подходами, врезаниями, подачами и т.п.

Продолжение следует!

eXTReMe Tracker

Вернуться на главную страницу