Ответ
 
Опции темы Поиск в этой теме
Старый 06.05.2022, 09:44   #1
СамоучкаРобот
Бывалый
 
Регистрация: 23.04.2022
Сообщения: 28
Сказал Спасибо: 4
Сказали Спасибо 1 раз(а) в 1 сообщении
По умолчанию формуляры, их коррекция и чистый код

Снова всем здравствуйте.
вопрос про формуляры, можно ли их корректировать програмно.
Я стараюсь их использовать только тогда, когда нужна коррекция положения ключевых точек, либо движение с нужной ориентацией. не разобрался пока как им задавать не из формуляров.

Моя программа пишется, довольно успешно, стараюсь делать так, что бы функции можно было использовать для разных проектов, не переписывая для каждого отдельно. но теперь появилась проблема.
есть у меня функция приезда в точку, указанную ранее, которая потом поворачивается вместе с базой. в этой точке актуальная позиция обнуляет базу [32]( в этой базе будут основная работа, центрирование отверстия, обварка и тд). сейчас, тестовая базу у меня [21]. И соответственно в этой функции формуляры с базой [21].
но, база в зависимости от изделия будет меняться, при том дважды, сначала варится одна сторона, с осью Е1-90, например [7], затем другая сторона, с осью Е2+90, и [8].


ну и ас вопрос. можно как то изменить автоматом базу в формуляре?
Я открывая формуляр (наподобии fold), перед самым движением к точке, например, lin xp1, дописывал "$base=base_data[numberOfBase](которая естественно передаётся как интовый входящий аргумент)".
вот этот нумберОфБазе есть на текущий момент 21 база. а нужно менять в зависимости от ситуации.
как то ак объяснил
СамоучкаРобот вне форума   Ответить с цитированием
Старый 06.05.2022, 21:15   #2
Pavel_T
Гуру
 
Регистрация: 04.08.2016
Сообщения: 81
Сказал Спасибо: 0
Сказали Спасибо 29 раз(а) в 19 сообщении
По умолчанию

в принципе подход верный, я примерно также делаю.
сначала определяю сколько будет баз и инструментов
(у меня грипперов). затем вручную, с пульта, беру все необходимые
основные точки с актуальными для них базами и инструментами.
эти точки естественно будут сохранятся в свои фолды в один или
несколько файлов. затем делаю такой трюк.
например все точки которые я взял вручную, сохранены в созданном файле
positions.src который имеет такую структуру(реальный код):

DEF positions ( )
;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)

IF FALSE THEN
;********* into mold position ***********
;FOLD PTP take_pos0 Vel=100 % PDAT16 Tool[1]:BaseTool Base[1];%{PE}%R 8.3.43,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:take_pos0, 3:, 5:100, 7:PDAT16
$BWDSTART=FALSE
PDAT_ACT=PPDAT16
FDAT_ACT=Ftake_pos0
BAS(#PTP_PARAMS,100)
PTP Xtake_pos0
;ENDFOLD
;FOLD LIN take_pos0 Vel=2 m/s CPDAT10 Tool[1]:BaseTool Base[1];%{PE}%R 8.3.43,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:take_pos0, 3:, 5:2, 7:CPDAT10
$BWDSTART=FALSE
LDAT_ACT=LCPDAT10
FDAT_ACT=Ftake_pos0
BAS(#CP_PARAMS,2)
LIN Xtake_pos0
;ENDFOLD

;FOLD PTP infront_take0 Vel=100 % PDAT15 Tool[1]:BaseTool Base[1];%{PE}%R 8.3.43,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:infront_take0, 3:, 5:100, 7:PDAT15
$BWDSTART=FALSE
PDAT_ACT=PPDAT15
FDAT_ACT=Finfront_take0
BAS(#PTP_PARAMS,100)
PTP Xinfront_take0
;ENDFOLD
;FOLD LIN infront_take0 Vel=2 m/s CPDAT11 Tool[1]:BaseTool Base[1];%{PE}%R 8.3.43,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:infront_take0, 3:, 5:2, 7:CPDAT11
$BWDSTART=FALSE
LDAT_ACT=LCPDAT11
FDAT_ACT=Finfront_take0
BAS(#CP_PARAMS,2)
LIN Xinfront_take0
;ENDFOLD

;FOLD PTP infront_take1 Vel=100 % PDAT13 Tool[1]:BaseTool Base[1];%{PE}%R 8.3.43,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:infront_take1, 3:, 5:100, 7:PDAT13
$BWDSTART=FALSE
PDAT_ACT=PPDAT13
FDAT_ACT=Finfront_take1
BAS(#PTP_PARAMS,100)
PTP Xinfront_take1
;ENDFOLD
;FOLD PTP infront_take2 Vel=100 % PDAT14 Tool[1]:BaseTool Base[1];%{PE}%R 8.3.43,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:infront_take2, 3:, 5:100, 7:PDAT14
$BWDSTART=FALSE
PDAT_ACT=PPDAT14
FDAT_ACT=Finfront_take2
BAS(#PTP_PARAMS,100)
PTP Xinfront_take2
;ENDFOLD

;FOLD PTP before_take_pos1 Vel=100 % PDAT4 Tool[1]:BaseTool Base[0];%{PE}%R 8.3.43,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:before_take_pos1, 3:, 5:100, 7:PDAT4
$BWDSTART=FALSE
PDAT_ACT=PPDAT4
FDAT_ACT=Fbefore_take_pos1
BAS(#PTP_PARAMS,100)
PTP Xbefore_take_pos1
;ENDFOLD
;FOLD LIN before_take_pos1 Vel=2 m/s CPDAT8 Tool[1]:BaseTool Base[0];%{PE}%R 8.3.43,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:before_take_pos1, 3:, 5:2, 7:CPDAT8
$BWDSTART=FALSE
LDAT_ACT=LCPDAT8
FDAT_ACT=Fbefore_take_pos1
BAS(#CP_PARAMS,2)
LIN Xbefore_take_pos1
;ENDFOLD

;FOLD PTP before_take_pos2 Vel=100 % PDAT3 Tool[1]:BaseTool Base[0];%{PE}%R 8.3.43,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:before_take_pos2, 3:, 5:100, 7:PDAT3
$BWDSTART=FALSE
PDAT_ACT=PPDAT3
FDAT_ACT=Fbefore_take_pos2
BAS(#PTP_PARAMS,100)
PTP Xbefore_take_pos2
;ENDFOLD
;FOLD PTP before_take_pos3 Vel=100 % PDAT5 Tool[1]:BaseTool Base[0];%{PE}%R 8.3.43,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:before_take_pos3, 3:, 5:100, 7:PDAT5
$BWDSTART=FALSE
PDAT_ACT=PPDAT5
FDAT_ACT=Fbefore_take_pos3
BAS(#PTP_PARAMS,100)
PTP Xbefore_take_pos3
;ENDFOLD
;FOLD PTP before_put_pos Vel=100 % PDAT8 Tool[1]:BaseTool Base[0];%{PE}%R 8.3.43,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:before_put_pos, 3:, 5:100, 7:PDAT8
$BWDSTART=FALSE
PDAT_ACT=PPDAT8
FDAT_ACT=Fbefore_put_pos
BAS(#PTP_PARAMS,100)
PTP Xbefore_put_pos
;ENDFOLD

;********* box placed position ****************
;FOLD PTP PLACE_PART Vel=100 % PDAT7 Tool[2]:BoxGripper Base[2]:PalletBase;%{PE}%R 8.3.43,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:PLACE_PART, 3:, 5:100, 7:PDAT7
$BWDSTART=FALSE
PDAT_ACT=PPDAT7
FDAT_ACT=FPLACE_PART
BAS(#PTP_PARAMS,100)
PTP XPLACE_PART
;ENDFOLD

;**** pallet positions ****
;FOLD PTP before_robot Vel=100 % PDAT18 Tool[1]:BaseTool Base[0];%{PE}%R 8.3.43,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:before_robot, 3:, 5:100, 7:PDAT18
$BWDSTART=FALSE
PDAT_ACT=PPDAT18
FDAT_ACT=Fbefore_robot
BAS(#PTP_PARAMS,100)
PTP Xbefore_robot
;ENDFOLD

;FOLD PTP above_pallet_stack Vel=100 % PDAT20 Tool[1]:BaseTool Base[0];%{PE}%R 8.3.43,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:above_pallet_stack, 3:, 5:100, 7:PDAT20
$BWDSTART=FALSE
PDAT_ACT=PPDAT20
FDAT_ACT=Fabove_pallet_stack
BAS(#PTP_PARAMS,100)
PTP Xabove_pallet_stack
;ENDFOLD
;FOLD PTP take_pallet_base Vel=100 % PDAT19 Tool[1]:BaseTool Base[0];%{PE}%R 8.3.43,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:take_pallet_base, 3:, 5:100, 7:PDAT19
$BWDSTART=FALSE
PDAT_ACT=PPDAT19
FDAT_ACT=Ftake_pallet_base
BAS(#PTP_PARAMS,100)
PTP Xtake_pallet_base
;ENDFOLD

;FOLD PTP above_put_pallet Vel=100 % PDAT17 Tool[1]:BaseTool Base[0];%{PE}%R 8.3.43,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:above_put_pallet, 3:, 5:100, 7:PDAT17
$BWDSTART=FALSE
PDAT_ACT=PPDAT17
FDAT_ACT=Fabove_put_pallet
BAS(#PTP_PARAMS,100)
PTP Xabove_put_pallet
;ENDFOLD
;FOLD PTP put_pallet Vel=100 % PDAT10 Tool[1]:BaseTool Base[0];%{PE}%R 8.3.43,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2ut_pallet, 3:, 5:100, 7:PDAT10
$BWDSTART=FALSE
PDAT_ACT=PPDAT10
FDAT_ACT=Fput_pallet
BAS(#PTP_PARAMS,100)
PTP Xput_pallet
;ENDFOLD
ENDIF

InitPositions()

END

DEF InitPositions()
ptake_pos = Xtake_pos
pinfront_take = Xinfront_take
pbefore_take_pos1 = Xbefore_take_pos1
pbefore_take_pos2 = Xbefore_take_pos2
pbefore_take_pos3 = Xbefore_take_pos3
pbefore_put_pos = Xbefore_put_pos
pplace_part = XPLACE_PART


ptake_pos0 = Xtake_pos0
pinfront_take0 = Xinfront_take0
pinfront_take1 = Xinfront_take1
pinfront_take2 = Xinfront_take2

pbefore_robot = Xbefore_robot;
pabove_pallet_stack = Xabove_pallet_stack;
ptake_pallet_base = Xtake_pallet_base;
pabove_put_pallet = Xabove_put_pallet;
pput_pallet = Xput_pallet
END

здесь важно два момента.
первый: все фолды для точек находятся внутри конструкции
IF FALSE THEN
...
ENDIF
и при вызове процедуры positions() выполняться не будут,
а выполнится созданная нами процедура инициализации переменных
InitPositions()
переменные: ptake_pos, pinfront_take... это пользовательские
переменные типа E6POS, которые задаются в config.dat и видимы
во всех фалах проекта.

второй: из главного файла проекта при инициализации данных,
вызываем positions() (или несколько аналогичных процедур)
для инициализации внутренних переменнх и используем их в коде
типа PTP ptake_pos или LIN pplace_part

естественно, что при таком подходе надо заботиться о корректных
параметрах базы, инструмента и скорости. я обычно разбиваю код
движения на множество логических процедур которые начинаются
с установки базы, инструмента и скорости.
менять базу в формуляре нет необходимости.
Pavel_T вне форума   Ответить с цитированием
Старый 07.05.2022, 03:38   #3
СамоучкаРобот
Бывалый
 
Регистрация: 23.04.2022
Сообщения: 28
Сказал Спасибо: 4
Сказали Спасибо 1 раз(а) в 1 сообщении
По умолчанию

Сообщение от Pavel_T Посмотреть сообщение
в принципе подход верный, я примерно также делаю.

,
,
,
,
,
,

естественно, что при таком подходе надо заботиться о корректных
параметрах базы, инструмента и скорости. я обычно разбиваю код
движения на множество логических процедур которые начинаются
с установки базы, инструмента и скорости.
менять базу в формуляре нет необходимости.
сразу первый вопрос. КАК и ГДЕ ты это пишешь? Я задавал вопрос где можно писать код. а потом его заливать в робота, сказали что эти программы дорогие и тд. а тут ты берёшь и весь код спокойно вставляешь. Я сомневаюсь что ты взял контроллер, положил его перед собой и реально, для меня, весь перепечатал сюда.

по поводу самого кода. Я вроде понял, но не совсем.
Я честно распечатаю на выходных литературу, у тебя из маны, роботёк прислал на почту 3 книжки.
ты говоришь хранишь во внешнем файле .СРЦ.
Я пока не умею их создавать. мясяц назад Я таких видел в интернете у Маска на заводе, а сегодня у меня уже почти готова бета программа для сварки.

Я распишу этапы
1. в 0 базу, найти центр круглого диска по 3 точкам и прописать там ноль 21 базы( у меня для теста)( при том, что свободно можно корректировать только первую точку, вторая точка привязана к первой, только по Х корректируется, а третья точка привязана на середине между двумя, и корректируется только У)
2. в базе 21 подойти к первому отверстию(соответственно там все формуляры в 21 базу), опустить горелку в на нужную глубину, скорректировать формуляр

дальше всё разбито по модулям

3. [21] вызвать функцию, в которой через ФОР с шагом 1 по переданному в эту функцию значению Е6ПОС и количеству отверстий вычисляется угол поворота(эта та проблема где не хотел считать правильно угол, решение, напомню, было не 360(целыми), а 360.0( с запятой) делить на количество отверстий)
4. функция приезда в точку, через промежуточную точку безопасной высоты
5. функция привязки текущего положения в базу [32]. (Я решил сделать её основной рабочей, первой с конца.)
далее до следующей итерации в цикле ФОР от i=0 до количества отверстий, всё работает в [32].
6. замер отверстия и нахождение центра (тут уже оператор ничего не корректирует, всё берётся только относительно базы [32]
7. визуальное "рисование" круга.
пока всё.
теперь надо сделать так, что бы горелка всегда смотрела в центр круга, при движении (ну сварка же), понять как он варит, отработать настройки шва и тд.

так вот. этот самый модуль из пункта 2, меня и смущает. пока получается следующее. мне. что бы переделать на новую базу, новая деталь, надо этот модуль скопировать, переименовать, и уже внутри вручную все формуляры скорректировать на базу, ну, например [8].
потому и спросил, а можно ли передать в неё нужную базу, и работать будет в ней, включая формуляры?
в этом случае мне не придётся создавать для каждого изделия это модуль.

и ещё. те программы которые есть, корявые, их сделали, показали как включать, и уехали. а подправить некому. там точек за пол тыщи. это вообще нормально? у меня самое большое количество, включая и формулярные, и самописные, это 25 точек, в функции поиска отверстия по 12 касаниям. Я так понял, что там прога была создана в КАМ, и залита в робота.
СамоучкаРобот вне форума   Ответить с цитированием
Старый 07.05.2022, 03:45   #4
СамоучкаРобот
Бывалый
 
Регистрация: 23.04.2022
Сообщения: 28
Сказал Спасибо: 4
Сказали Спасибо 1 раз(а) в 1 сообщении
По умолчанию

Сообщение от Pavel_T Посмотреть сообщение
в принципе подход верный, я примерно также делаю.
.
.
.
.

естественно, что при таком подходе надо заботиться о корректных
параметрах базы, инструмента и скорости. я обычно разбиваю код
движения на множество логических процедур которые начинаются
с установки базы, инструмента и скорости.
менять базу в формуляре нет необходимости.
много интересного и непонятного. Я чую что после книг, мне станет многое понятно. у нас как раз 4 дня выходных.
в частности у тебя фолды выглядят как фолды для формуляров, если их открыть в эксперте. Я пока могу создавать фолды простенькие. спрятать кусок кода, вычисления и тд. только вчера научился управлять вручную скоростью и ускорением.
СамоучкаРобот вне форума   Ответить с цитированием
Старый 07.05.2022, 07:26   #5
Pavel_T
Гуру
 
Регистрация: 04.08.2016
Сообщения: 81
Сказал Спасибо: 0
Сказали Спасибо 29 раз(а) в 19 сообщении
По умолчанию

я если честно, не очень понял процесс и смысл частой смены баз.
но это не важно. просто перед началом движения надо задать
корректную базу и убедиться, что робот прийдет в точку без столкновения.
смена базы в куке это просто замена значения в системной переменной $BASE
перед началом движения. обычно это делается записью туда данных из системного
массива баз BASE_DATA (заранее откалиброванных вручную) по индексу ячейки массива.
естественно, что этот индекс и дожен быть переменной при смене баз. также ничто
не мешает менять текущее значение в самой переменной $BASE напрямую.

что касается своего модуля на деталь, то я думаю, что это стандартный подход.
довольно удобно допиливать потом подпрограмму для конкретной детали.

среда программирования для куки, это WorkVisual. приходит вместе с роботом
на дисках или флешке. также сетап лежит на диске робота. скачивается на PC
и ставится. последнюю версию всегда можно скачать на сайте куки: Kuka Xpert.
Там требуется простенькая регистрация. Сам WorkVisual абсолютно безплатный.

если есть программа для сварки созданная каким-то КАМом, то имеет смысл выяснить
каким и где его взять. я сам со сваркой не работал. тут люди на форуме чего нибудь
посоветуют.
Pavel_T вне форума   Ответить с цитированием
Старый 07.05.2022, 10:28   #6
СамоучкаРобот
Бывалый
 
Регистрация: 23.04.2022
Сообщения: 28
Сказал Спасибо: 4
Сказали Спасибо 1 раз(а) в 1 сообщении
По умолчанию

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

что касается своего модуля на деталь, то я думаю, что это стандартный подход.
довольно удобно допиливать потом подпрограмму для конкретной детали.

среда программирования для куки, это WorkVisual. приходит вместе с роботом
на дисках или флешке. также сетап лежит на диске робота. скачивается на PC
и ставится. последнюю версию всегда можно скачать на сайте куки: Kuka Xpert.
Там требуется простенькая регистрация. Сам WorkVisual абсолютно безплатный.

если есть программа для сварки созданная каким-то КАМом, то имеет смысл выяснить
каким и где его взять. я сам со сваркой не работал. тут люди на форуме чего нибудь
посоветуют.
смена баз не частая. просто изделия разные, и по габаритам, и по конструктиву.
а хотя. блин. а ведь гениально. все изделия до чёртиков в своей структуре одинаковые. замерить круг, найти дырки, проварить. разные диаметры труб, но Я уже предусмотрел передачу диаметра в качестве аргумента.
а зачем мне собственно делать разные программы то? если одну откатать. то под любую подойдёт.
по поводу смены баз.
уже просто как коммент. база то мменяется в коде. пока по самописным типа ЛИН. или ПТП инструмент мотается. но как только в дело вступает формуляр, у него то прописана своя база. и как Я понял. системная переменная $base это модальная переменная. и пока она не переписана, она продолжает действовать.
ну да ладно, на данный момент надо литературу прочитать. как ты написал, 80% узнаю оттуда. скорее всего, куча вопросов отпадёт сама по себе.
единственное что пока мне не понятно, как он щупает контур сложной детали? например проварить контур кривой детали к основанию. Я опасаюсь что как только Я робота запущу, у меня не будет времени с ним экспериментировать. монотонно одни и те же процедуры.
СамоучкаРобот вне форума   Ответить с цитированием
Ответ
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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


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

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