Решили граждане приобрести станок с вакуумными присосками для
обработки тонколистовых (фюзеляжных) деталей. Статьи
журналов о Роботах Чертежи ( некоторые ): чертежи |
Гибкая инструментальная система POGO® (ПОГО) - готовое к использованию автоматизированное универсальное зажимное устройство, используемое для жесткого удержания контурных пластин из металла или композитов при различных производственных операциях (обработка краёв, сверление, водоструйная резка, обследование, лазерная разметка, сборка).
|
Лучше понять, что такое ПОГО, и как с ним работать, Вам поможет : Pogo_Programming_Manual_RU_final.zip |
История. |
Ну.... Во-общем, результат работы (по
копированию работы американца): программа работы с активаторами ПОГО: Pogo_application.zip Инструкция : Pogo_activator_user_instruction.doc (см. также фиксаторы, ниже) Авторы: Зелепухин М. и начальница Рогозина. Программа настроена на переменную Юга $UGII_VENDOR_DIR, если у вас иная , измените файл меню *.tbr Стоимость: около 50-80 тыс. рубл. В их нем контексте, Я лишь сделал, так называемую "обертку" ( opu_pogo_grip.zip )- программу которая делала более цивилизованный запуск программы для активаторов Пого, и возможность просмотреть инструкции и распечатать. Но от неё можно, и нужно отказаться.
|
Знаете, тут я хотел Вам выложить, исходники своей
работы. |
|||
Данное ПО было написано на
Grip. Оговорюсь.
Grip - не люблю. Но почему - то, он
используется в Unigraphic-e , причем иногда
очень глубоко. $$-------------Переменные----------------- entity/srf0(100),srf1(100) entity/pt0, ln0, prj number/u,v,x,y number/coord(3), vec(3) number/h number/x0,y0,dx,dy, number/num number/i,ix,iy number/nx,ny number/zH(43,8) number/norma(43,8,3) number/s,r,c string/str(132) $$ -------------Константы----------------- h = 19.05 x0 = 122 y0 = -1200 dx = 250 dy = 400 nx = 42 ny = 7 vec(1)=0 vec(2)=0 vec(3)=1 $$ ----------Выбор поверхности----------- Ниже , вышеприведенный алгоритм мы
слегка усложним. $$ -------- Анализ краев - для каждой стороны поверхности - 4 шт----- pt0 = POINT/x,y,0 Алгоритм: $$ -------------Переменные----------------- $$ -------------Константы----------------- step0: dtname = SUBSTR(&PNAME,7,4)+'_'+SUBSTR(&PNAME,12,3) h = 19.05 h2 = 67.31 diam = 80.264 diam1 = 30 diam2 = 20 x0 = 122 y0 = -1200 dx = 250 dy = 400 nx = 42 ny = 7 vec(1)=0 vec(2)=0 vec(3)=1 roff1 = 76.2 $$ Смещение от центра до присоски roff2 = 152.4 hoff = 118.87 $$----Выбор стола ПОГО-----------
step1:
mask/63
IDENT/'Выберите стол POGO',pogo,CNT,npogo,CURSOR,X,Y,Z,rsp
IFTHEN/(rsp==1) or (rsp==2)
JUMP/halt:
ENDIF
$$----Система координат----------- step2: wcs_sv = &WCS xaxs = &XAXIS(pogo) yaxs = &YAXIS(pogo) wcsofs=&ORIGIN(pogo) pt1=POINT/wcsofs wcsofs(1)=wcsofs(1)+xaxs(1) wcsofs(2)=wcsofs(2)+xaxs(2) wcsofs(3)=wcsofs(3)+xaxs(3) pt2=POINT/wcsofs wcsofs(1)=wcsofs(1)+yaxs(1) wcsofs(2)=wcsofs(2)+yaxs(2) wcsofs(3)=wcsofs(3)+yaxs(3) pt3=POINT/wcsofs &WCS = CSYS/pt1,pt2,pt3 DELETE/ pt1, pt2, pt3 $$----Выбор поверхности----------- step3: mask/71 IDENT/'Выберите поверхность (LINKED)',srf0,CNT,NUM,CURSOR,X,Y,Z,RSP IFTHEN/(RSP == 1) or (RSP==2) JUMP/ret: ENDIF $$----Находим точки пересечения ног --- $$----со сдвинутой поверх--- step4: $$-переменная была введена для реверса - если технолог (я) $$ выбирал поверхность иначе )) вообще эээ сделано не правильно $$ но я предположил, что этот человек сделает примерно так. dir = 1 DIRREV: $$ Создаем эквидистантную поверхность - отодвигаем на h i = 1 step41: IFTHEN/i<=NUM srf0of(i) = OFFSRF/srf0(i),h*dir i=i+1 JUMP/step41: ENDIF i = 1 step42: IFTHEN/i<=NUM ix=1 step43: iy=1 IFTHEN/ix<=nx step44: IFTHEN/iy<=ny x=(ix*dx-dx)+x0 y=(iy*dy-dy)+y0 srf1 = srf0of(i) srf2 = srf0(i) ln0 = POINT/x,y,0 prj1 = PROJ/ln0,ON,srf1,VECT,vec prj2 = PROJ/ln0,ON,srf2,VECT,vec IFTHEN/(prj1 == &NULENT) OR (prj2 == &NULENT) JUMP/JUMPDL: ENDIF coord1 = &point(prj1) coord2 = &point(prj2) dz = coord1(3)-coord2(3) IFTHEN/(dz<0) dir = -1 DELETE/ ln0, prj1, prj2 JUMP/DIRREV: ENDIF zH(ix,iy)=coord1(3) + h $$ Сохраним массив координат coordpts(ix,iy,1..3) = coord1(1..3) $$ Вычисляем U V - нужно для построения SPARF/srf1,prj1,u,v $$ Формируем массив нормалей norma(ix,iy,1..3) = SNORF(srf1,u,v) JUMPDL: DELETE/ ln0, prj1 , prj2 iy=iy+1 JUMP/step44: ENDIF ix=ix+1 JUMP/step43: ENDIF i = i + 1 JUMP/step42: ENDIF $$ Удаляем эквидистантную поверхность i = 1 step45: IFTHEN/i<=NUM DELETE/srf0of(i) i=i+1 JUMP/step45: ENDIF $$ ----высоту приспособления-1----- step6: mask/63 IDENT/'Выберите приспособление FIXED',fix,CNT,nfix,CURSOR,X,Y,Z,RSP IFTHEN/(RSP == 1) or (RSP == 2) JUMP/step7: ENDIF coord2 = &ORIGIN(fix) x = coord2(1) y = coord2(2) $$ решаем обратную задачу $$ x=(ix*dx-dx)+x0 $$ y=(iy*dy-dy)+y0 ix = (x-x0+dx)/dx iy = (y-y0+dy)/dy nfixx1 = INTF(ix - 1) nfixx2 = INTF(ix) coord = &XAXIS(fix) IFTHEN/coord(1)>0 nfixx1 = INTF(ix) nfixx2 = INTF(ix + 1) ENDIF nfixy = INTF(iy) IFTHEN/(nfixx1<0) OR (nfixx2<0) OR (nfixy<0) OR $ (nfixx1>nx) OR (nfixx2>nx) OR (nfixy>ny) MESSG/'Приспособление за пределами стола !' JUMP/step7: ENDIF zH(nfixx1,nfixy) = coord2(3) zH(nfixx2,nfixy) = coord2(3) $$ ----высоту приспособления-2-SLIDER---- step7: mask/63 IDENT/'Выберите приспособление SLIDER',sld,CNT,nsld,CURSOR,X,Y,Z,RSP IFTHEN/(RSP == 1) or (RSP == 2) JUMP/step5: ENDIF coord2 = &ORIGIN(sld) x = coord2(1) y = coord2(2) ix = (x-x0+dx)/dx iy = (y-y0+dy)/dy nsldx1 = INTF(ix-1) nsldx2 = INTF(ix) coord = &XAXIS(sld) IFTHEN/coord(1)>0 nsldx1 = INTF(ix) nsldx2 = INTF(ix+1) ENDIF nsldy = INTF(iy) IFTHEN/(nsldx1<0) OR (nsldx2<0) OR (nsldy<0) OR $ (nsldx1>nx) OR (nsldx2>nx) OR (nsldy>ny) MESSG/'Приспособление за пределами стола !' JUMP/step5: ENDIF zH(nsldx1,nsldy) = coord2(3) zH(nsldx2,nsldy) = coord2(3) step5: $$ --------Вывод ног-(построение геом обьектов)------ step51: ix=1 LFOR51: IFTHEN/ix<=nx iy=1 LFOR52: IFTHEN/iy<=ny IFTHEN/zH(ix,iy)==0 JUMP/LEND5: ENDIF x=(ix*dx-dx)+x0 y=(iy*dy-dy)+y0 $$----Вывод ног-для приспособ 1 IFTHEN/((ix==nfixx1) AND (iy==nfixy)) OR $ ((ix==nfixx2) AND (iy==nfixy)) ln1 = SOLCYL/ORIGIN,x,y,0,HEIGHT,zH(ix,iy),DIAMTR, diam1 JUMP/LEND5: ENDIF $$----Вывод ног-для приспособ 2 - слайдера IFTHEN/((nsldx1==ix) AND (nsldy==iy)) OR $ ((nsldx2==ix) AND (nsldy==iy)) ln2 = SOLCYL/ORIGIN,x,y,0,HEIGHT,zH(ix,iy),DIAMTR, diam1 JUMP/LEND5: ENDIF $$----Вывод ног-(построение геом обьектов) HT = zH(ix,iy) - h HT2 = zH(ix,iy) - h2 coord = -norma(ix,iy,1..3) ln3 = SOLCYL/ORIGIN,x,y,0,HEIGHT, HT, DIAMTR, diam2 ln4 = SOLCYL/ORIGIN,x,y,0,HEIGHT, HT2,DIAMTR, diam1 ln5 = SOLCYL/ORIGIN,x,y, HT ,HEIGHT, h*dir , DIAMTR,diam,AXIS,coord &COLOR(ln5) = &GREEN LEND5: iy = iy + 1 JUMP/LFOR52: ENDIF ix = ix + 1 JUMP/LFOR51: ENDIF $$ --------Вывод программы------ $$ --Нам необходимо вывести 3 программы: $$ --1 программы - для приспособ фиксатор+слайдер ------ $$ --2 программы - для поворотных приспособ ----- $$ --3 программы - для обшивки ----- step52: &FTYPE=&DECIM &DDECPL=4 &DECPT=&PERIOD &SUPRES=&NO $$ --1 программа -- Для приспособлений print/';'+ &PNAME print/'DEFINE_PRG P/'+dtname+'_N0001' ix = nfixx1 iy = nfixy s = INTF((ix-0.5)/6)+1 r = iy c = (ix-(INTF(ix/6))*6) IFTHEN/c==0 c = 6 ENDIF $$ проверка на угол в 45 градусов - присоска больше не держит coord = norma(ix,iy,1..3) angerr = '' IFTHEN/ACOSF(-coord(3))>45 angerr = '; ANGLE > 45 ' ENDIF str ='MOVE '+'S0'+ISTR(s)+'R0'+ISTR(r)+'C0'+ $ ISTR(c)+' ' + DFSTR(zH(ix,iy)) + angerr print/str ix = nfixx2 iy = nfixy s = INTF((ix-0.5)/6)+1 r = iy c = (ix-(INTF(ix/6))*6) IFTHEN/c==0 c = 6 ENDIF $$ проверка на угол в 45 градусов - присоска больше не держит coord = norma(ix,iy,1..3) angerr = '' IFTHEN/ACOSF(-coord(3))>45 angerr = '; ANGLE > 45 ' ENDIF str ='MOVE '+'S0'+ISTR(s)+'R0'+ISTR(r)+'C0'+ $ ISTR(c)+' ' + DFSTR(zH(ix,iy)) + angerr print/str ix = nsldx1 iy = nsldy s = INTF((ix-0.5)/6)+1 r = iy c = (ix-(INTF(ix/6))*6) IFTHEN/c==0 c = 6 ENDIF $$ проверка на угол в 45 градусов - присоска больше не держит coord = norma(ix,iy,1..3) angerr = '' IFTHEN/ACOSF(-coord(3))>45 angerr = '; ANGLE > 45 ' ENDIF str ='MOVE '+'S0'+ISTR(s)+'R0'+ISTR(r)+'C0'+ $ ISTR(c)+' ' + DFSTR(zH(ix,iy)) + angerr print/str ix = nsldx2 iy = nsldy s = INTF((ix-0.5)/6)+1 r = iy c = (ix-(INTF(ix/6))*6) IFTHEN/c==0 c = 6 ENDIF $$ проверка на угол в 45 градусов - присоска больше не держит coord = norma(ix,iy,1..3) angerr = '' IFTHEN/ACOSF(-coord(3))>45 angerr = '; ANGLE > 45 ' ENDIF str ='MOVE '+'S0'+ISTR(s)+'R0'+ISTR(r)+'C0'+ $ ISTR(c)+' ' + DFSTR(zH(ix,iy)) + angerr print/str print/'END_DEFINE_PRG' print/' ' print/' ' print/' ' $$ ---- Для остальных ног ( 3 программа ) print/';'+ &PNAME print/'DEFINE_PRG P/'+dtname+'_N0003' $$ выводить начинаем с приоритетом по оси Х iy=1 LFOR56: IFTHEN/iy<=ny ix=1 LFOR57: IFTHEN/ix<=nx IFTHEN/zH(ix,iy)==0 JUMP/LEND55: ENDIF x=(ix*dx-dx)+x0 y=(iy*dy-dy)+y0 s = INTF((ix-0.5)/6)+1 r = iy c = (ix-(INTF(ix/6))*6) IFTHEN/c==0 c = 6 ENDIF $$ проверка на угол в 45 градусов - присоска больше не держит coord = norma(ix,iy,1..3) angerr = '' IFTHEN/ACOSF(-coord(3))>45 angerr = '; ANGLE > 45 ' ENDIF HT2 = zH(ix,iy) - h2 str ='MOVE '+'S0'+ISTR(s)+'R0'+ISTR(r)+'C0'+ $ ISTR(c)+' ' + DFSTR(HT2) + angerr IFTHEN/((ix==nfixx1) AND (iy==nfixy) OR $ (ix==nfixx2) AND (iy==nfixy)) OR $ ((ix==nsldx1) AND (iy==nsldy) OR $ (ix==nsldx2) AND (iy==nsldy)) $$ print/'; fixture = ',ix, iy ELSE print/str ENDIF LEND55: ix = ix + 1 JUMP/LFOR57: ENDIF iy = iy + 1 JUMP/LFOR56: ENDIF print/'END_DEFINE_PRG' $$----Удаление ENT и возврат исхд значений------- ret: &WCS = wcs_sv DELETE/wcs_sv $$----Конец программы-----------
halt:
HALT
Вместо того, чтобы просто выводить в листинг результаты своей работы. Вы можете выводить их в файл, а потом выкинуть в листинг, примерно как показано ниже: /* This is the GRIP which prints a text file to the listing window */
|
Первая программа - строила стол :):):): я не
хател тянуть сборку. так как задачу пересечений надо было решать в
едином поле имен. Хотя допустил работу сборки..(( 2-ая, 3-я программа - устанавливали приспособы и формировали программы для выдвижения ног для их поддержки. 4-я - формировала программы для обшивки 5-ая была включена в ядро постпроцессора для проверки самопересечений фрезы и ног.
POPEN |
Полезные сборки : fixture.zip | Vstar с столом ПОГО: VSTAR_POGO.zip |
|
В цеху на станке возникла
проблема: операторы, часто ошибались, забывая уменьшать значение
точки настройки по Z на 6.3. Это радиус
шарика. Так как система координат программы ЧПУ стояла в центре шарика.
Простейшую во всех смыслах задачу, раздули до большого маразма:
просто сказали, чтобы оператор был внимательнее :):). Но это задачи не
решало, и операторы, угробили еще пару обшивок. :):)
Решение её стояло, с одной стороны, в ставке в УП для ПОГО, проверки,
какое значение вносили операторы.
С другой стороны, можно было написать подпрограмму, а в основной
вызывать CHECKPOGO. Я
написал, отдал операторам для тестирования ночью. Результатов не успел
дождаться. :):)
checkpogo.spf
; SOUS-PROGRAMME DE MEMORISATION DES HORLOGES CN ; OBJECTIF : MD18600: MM_FRAME_FINE_TRANS=1, on arrete la machine. ; PROC CHECKPOGO DEF REAL RCONST DEF REAL FINEX RCONST=-6.300 FINEX=$P_UIFR[$P_UIFRNUM,Z,FI] ;--------------- CASE ($P_UIFRNUM) OF 3 GOTOF _G56 DEFAULT GOTOF _G56 ;--------------- _G56: IF (RCONST<>FINEX) MSG("!Error! Z - Offset !!!!! Z="<<FINEX<<""<<" Set Z="<<RCONST) STOPRE ;SETAL(65001) M00 ;MSG() ENDIF M17