Форум

Форум (http://robotforum.ru/forum/index.php)
-   Роботы KUKA (http://robotforum.ru/forum/forumdisplay.php?f=65)
-   -   программирование цифровых входов/выходов (http://robotforum.ru/forum/showthread.php?t=5013)

Сергей-Олевс 18.04.2020 14:19

программирование цифровых входов/выходов
 
Здравствуйте. Подскажите пожалуйста кто может правильно написать код.
1) Необходимо написать строку кода по приходу в которую робот останавливается и стоит ждёт если к примеру на 1 входе ничего нет (false), а когда появляется (True) начинает выполнение программы с самого начала.
2) Когда к примеру на 2 вход приходит сигнал останавливался к примеру на 60 сёк, а далее продолжал программу.

andy_18 18.04.2020 17:22

По варианту "1" не понятно, что означает "начинает выполнение программы с самого начала", начало текущей (выбранной) программы или нужен возврат в программу cell ?

По поводу варианта "2" одной строчкой не получится, тут надо
а) активировать прерывание в программе Cell
б) создать подпрограмму задержки необходимого времени


а) кусок кода в программе Cell который нужно дописать до выбора рабочей программы.

INTERRUPT DECL 81 WHEN $in[2] DO wait_time()
INTERRUPT ON 81

б) Вновь созданная программа "wait_time" содержит всего одну команду

Wait sec 60

Сергей-Олевс 19.04.2020 07:04

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

Сергей-Олевс 19.04.2020 08:07

Вот собственно программа. После ее выполнения робот останавливается и стоит. Цель : оператор подходит и жмет на отдельно выведенную кнопку подключенную к входу и робот начинает выполнять программу снова. В этой программе как видите есть переходы на другие программы, а в них еще десяток подпрограмм, но в итоге он вернется обратно в эту программу и должен после нажатия на кнопку начать все с начала выполнять программу palete.
DEF palete( )
DECL POS PICKPOS [3,3]
DECL POS PREPOS [3,3]
DECL INT ROW,COL
DECL REAL DX,DY,DZ
DX=-80.0
DY=80.0
DZ=-136.0
FOR ROW= 1 TO 3
FOR COL= 1 TO 3
PICKPOS[ROW,COL] =XSTARTPOS
PICKPOS[ROW,COL].X=PICKPOS[ROW,COL].X+ (ROW-1)*DX
PICKPOS[ROW,COL].Y=PICKPOS[ROW,COL].Y+ (COL-1)*DY
ENDFOR
ENDFOR


FOR ROW= 1 TO 3
FOR COL= 1 TO 3
PREPOS[ROW,COL]=PICKPOS[ROW,COL]
PREPOS[ROW,COL].Z=PREPOS[ROW,COL].Z-DZ
ENDFOR
ENDFOR

;PALLETE
FOR ROW = 1 TO 3
FOR COL = 1 TO 3
PAL1_0()
$BASE=BASE_DATA[1]
$TOOL=TOOL_DATA[2]
SPTP PREPOS [ROW,COL]
SLIN PICKPOS[ROW,COL]
WAIT SEC 5
SLIN PREPOS [ROW,COL]
PAL_1_1()
kol6_chern()
kol6_chisto()
;DEPALLETE
;FOR ROW = 1 TO 3
;FOR COL = 1 TO 3
pal_1()
$BASE=BASE_DATA[1]
$TOOL=TOOL_DATA[2]
SPTP PREPOS[ROW,COL]
SLIN PICKPOS[ROW,COL]
WAIT SEC 6
SLIN PREPOS[ROW,COL]
PAL_1_1()
ENDFOR
ENDFOR
END

kuka_man 19.04.2020 16:19

Цитата:

Сообщение от сергей-олевс (Сообщение 12861)
вот собственно программа.

+1
качественный бекстейдж!

andy_18 19.04.2020 17:42

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

Сергей-Олевс 19.04.2020 18:20

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

andy_18 19.04.2020 18:33

это начало вашей программы, но добавлена метка begin

DEF palete( )
begin:
DECL POS PICKPOS [3,3]
DECL POS PREPOS [3,3]
DECL INT ROW,COL
DECL REAL DX,DY,DZ
DX=-80.0



далее конец программы, но добавлены команды wait for $in [1] и goto begin


SLIN PREPOS[ROW,COL]
PAL_1_1()
ENDFOR
ENDFOR

wait for $in [1]
goto begin

END

Сергей-Олевс 19.04.2020 18:42

пробовал примерно так же только не через wait а when- спасибо- завтра протестирую отпишусь

andy_18 19.04.2020 18:44

а если кнопка оператора залипнет ? робот сразу начнет работать с начала программы. Правильнее будет так:

SLIN PREPOS[ROW,COL]
PAL_1_1()
ENDFOR
ENDFOR

wait for not $in [1]
wait for $in [1]
goto begin


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

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