Ответ
 
Опции темы Поиск в этой теме
Старый 02.08.2016, 21:06   #1
AnShk
Бывалый
 
Регистрация: 02.08.2016
Сообщения: 19
Сказал Спасибо: 2
Сказали Спасибо 3 раз(а) в 3 сообщении
По умолчанию программирование

необходимо получить движение инструмента по спирали или/и по концентрическим окружностям с шагом по радиусу. прошу помощи: алгоритм или минимальный пример.

Последний раз редактировалось AnShk, 02.08.2016 в 21:28
AnShk вне форума   Ответить с цитированием
Старый 05.08.2016, 13:55   #2
Pavel_T
Гуру
 
Регистрация: 04.08.2016
Сообщения: 81
Сказал Спасибо: 0
Сказали Спасибо 29 раз(а) в 19 сообщении
По умолчанию

Всем привет!

В качестве примера движения инструмента по спирали, привожу
пример программы и два маленьких клипа. На первом клипе показано
как примерно выглядит спираль. Здесь стоит отметить два момента:
1. Спираль сходится к центру (задаем радиус 50см и
уменьшаем его на итерациях цикла). Так сделано для того, что бы
не ударить робот.
2. После того как спираль сошлась вцентре, она нaчинает
разширятся. Видно, как она выходит за пределы белого прямоугольника.
Если белый прямоугольник, это пределы рабочей, безопасной зоны,
то выход за нее даст краш. По этому с экспериментми надо быть
осторожным.
На втором клипе виден результат работы программы с роботом.
Первый цикл это движение точка к точке, второй линеарное.

1
https://yadi.sk/d/ehqr4VxTtwuJf

2
https://yadi.sk/d/bbfdgjRUtwuQ3

Что же касается самой программы, то там все просто.
Робот начинает с домашней позиции. Затем выходит на стартовую
позицию перед началом спирального движения (скажем край белого
прямоугольника). После этого по спирали движется к центру от
тчки к точки (РТР). По завершении первого цикла возвращается
снова на стартовую позицию. Начинаем второй цикл движения по
спирали, но теперь движемся линеарно. После второго цикла робот
возвращается на домашнюю позицию.

В качестве примечания отмечу что вначале программы скорость
работы снижена до 30% ($OV_PRO = 30) для предотвращения столкновений.

Рад был помочь.
Павел.

Программа:

DEF Spiral ( )
DECL INT i
DECL REAL angle
DECL REAL radius
DECL REAL c
DECL REAL s
DECL REAL startX
DECL REAL startY


;FOLD INI;%{PE}
;FOLD BASISTECH INI
GLOBAL INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( )
INTERRUPT ON 3
BAS (#INITMOV,0 )
;ENDFOLD (BASISTECH INI)
;FOLD USER INI
;Make your modifications here

;ENDFOLD (USER INI)
;ENDFOLD (INI)

;set programm speed to 30%
$OV_PRO = 30

;start from home position
GoHome()

i = 0
angle = 0
radius = 500 ;mm
c = 0
s = 0
startX = 0
startY = 0

$TOOL = TOOL_DATA[1]
$BASE = BASE_DATA[3]
TempPos = $NULLFRAME

;go to start position (spiral begining)
;FOLD PTP P1 Vel=100 % PDAT1 Tool[1]:Pash Base[2]:222;%{PE}%R 8.3.32,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:P1, 3:, 5:100, 7:PDAT1
$BWDSTART=FALSE
PDAT_ACT=PPDAT1
FDAT_ACT=FP1
BAS(#PTP_PARAMS,100)
PTP XP1
;ENDFOLD

TempPos = XP1

;save start XY pos.
startX = TempPos.X
startY = TempPos.X

;circle formula: x + r*cos(a) and y + r*sin(a).
FOR i = 1 TO 50 STEP 1
radius = radius - 10
angle = angle + 10

c = COS(angle)
s = SIN(angle)

;calc. new X pos
TempPos.X = startX + (radius * c)

;calc. new Y pos
TempPos.Y = startY + (radius * s)

;move robot to new pos as Point to Point
PTP TempPos
ENDFOR

;return robot to start position
TempPos = XP1
PTP TempPos

startX = TempPos.X
startY = TempPos.X
angle = 0
radius = 500 ;mm
FOR i = 1 TO 50 STEP 1
radius = radius - 10
angle = angle + 10

c = COS(angle)
s = SIN(angle)

;calc. new X pos
TempPos.X = startX + (radius * c)

;calc. new Y pos
TempPos.Y = startY + (radius * s)

;move robot to new pos Line to Line
LIN TempPos C_DIS
ENDFOR

;return robot to home
GoHome()
END

DEF GoHome()
;FOLD PTP HOME Vel= 100 % DEFAULT;%{PE}%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:HOME, 3:, 5:100, 7EFAULT$BWDSTART = FALSE
PDAT_ACT=PDEFAULT
FDAT_ACT=FHOME
BAS (#PTP_PARAMS,100 )
$H_POS=XHOME
PTP XHOME
END

Dat файл:

DEFDAT Spiral
;FOLD EXTERNAL DECLARATIONS;%{PE}%MKUKATPBASIS,%CEXT,%VCOMMON,%P
;FOLD BASISTECH EXT;%{PE}%MKUKATPBASIS,%CEXT,%VEXT,%P
EXT BAS (BAS_COMMAND :IN,REAL :IN )
;ENDFOLD (BASISTECH EXT)
;FOLD USER EXT;%{E}%MKUKATPUSER,%CEXT,%VEXT,%P
;Make your modifications here

;ENDFOLD (USER EXT)
;ENDFOLD (EXTERNAL DECLARATIONS)

DECL E6POS TempPos
DECL E6POS XP1={X -109.308006,Y -459.787598,Z 483.273438,A -26.8819447,B 89.9025955,C 155.420303,S 22,T 50,E1 0.0,E2 0.0,E3 0.0,E4 0.0,E5 0.0,E6 0.0}
DECL FDAT FP1={TOOL_NO 1,BASE_NO 2,IPO_FRAME #BASE,POINT2[] " ",TQ_STATE FALSE}
DECL PDAT PPDAT1={VEL 100.000,ACC 100.000,APO_DIST 100.000,GEAR_JERK 50.0000,EXAX_IGN 0}

ENDDAT
Pavel_T вне форума   Ответить с цитированием
Эти2 пользователи сказал Спасибо Pavel_T за это сообщение:
AnShk (05.08.2016), vvelikov (05.08.2016)
Старый 05.08.2016, 17:58   #3
AnShk
Бывалый
 
Регистрация: 02.08.2016
Сообщения: 19
Сказал Спасибо: 2
Сказали Спасибо 3 раз(а) в 3 сообщении
По умолчанию

большая благодарность! буду разбираться и наверное пытаться модернизировать....хотя бы удалось для начала запустить в том виде, нужна близкая к идеалу равномерность (лазерная наплавка)...наверное надо сплайн использовать. спасибо!!!
AnShk вне форума   Ответить с цитированием
Старый 08.08.2016, 07:31   #4
РОБОТ-Н
Гуру
 
Регистрация: 08.01.2014
Сообщения: 109
Сказал Спасибо: 0
Сказали Спасибо 3 раз(а) в 3 сообщении
По умолчанию

Могу предложить более оригинальное решение

DECL FRAME fROT //матрица поворота
DECL FRAME fR //матрица смещения

DECL REAL startR //начальный радиус
DECL REAL endR //конечный радиус
DECL REAL nowR //текущий радиус

DECL REAL stepR //уменьшение радиуса за оборот
DECL REAL pathA //длинна пути в градусах

fROT=$NULLFRAME
fR=$NULLFRAME

startR=100
endR=50
stepR=10

pathA=(startR-endR)/stepR*360 //находим длину пути в градусах

stepL=2 //шаг интерполяции одинаков на всех радиусах

R.x=startR //устанавливаем нач. радиус

while nowR<>endR //идём пока текущий не станет равен минимальному

fROT.a=fROT.a+L/nowR*180/3.14 //рассчитываем поворот

nowR=startR-(startR-endR)(fROT.a/pathA) //рассчитываем радиус
fR.x=nowR //подставляем радиус

IF nowR<endR THEN //если радиус меньше минимального то принимаем минимальный
nowR=endR
ENDIF

LIN fROT:fR c_dis //идём в точку

endwhile
__________________
РОБОТ-Н.РФ (Новосибирск) WhatsApp +7 913 902 5883
РОБОТ-Н вне форума   Ответить с цитированием
cказали "Спасибо" РОБОТ-Н за это сообщение:
AnShk (08.08.2016)
Ответ
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +2, время: 13:45.

vBulletin v3.6.2, Copyright ©2000-2024, Jelsoft Enterprises Ltd.
Русский перевод: zCarot, Vovan & Co