программирование цифровых входов/выходов
Здравствуйте. Подскажите пожалуйста кто может правильно написать код.
1) Необходимо написать строку кода по приходу в которую робот останавливается и стоит ждёт если к примеру на 1 входе ничего нет (false), а когда появляется (True) начинает выполнение программы с самого начала. 2) Когда к примеру на 2 вход приходит сигнал останавливался к примеру на 60 сёк, а далее продолжал программу. |
По варианту "1" не понятно, что означает "начинает выполнение программы с самого начала", начало текущей (выбранной) программы или нужен возврат в программу cell ?
По поводу варианта "2" одной строчкой не получится, тут надо а) активировать прерывание в программе Cell б) создать подпрограмму задержки необходимого времени а) кусок кода в программе Cell который нужно дописать до выбора рабочей программы. INTERRUPT DECL 81 WHEN $in[2] DO wait_time() INTERRUPT ON 81 б) Вновь созданная программа "wait_time" содержит всего одну команду Wait sec 60 |
спасибо за решение второго вопроса.
а по первому - нужен непосредственно возврат на начало той программы в которой находится обращение к входу. |
Вот собственно программа. После ее выполнения робот останавливается и стоит. Цель : оператор подходит и жмет на отдельно выведенную кнопку подключенную к входу и робот начинает выполнять программу снова. В этой программе как видите есть переходы на другие программы, а в них еще десяток подпрограмм, но в итоге он вернется обратно в эту программу и должен после нажатия на кнопку начать все с начала выполнять программу 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 |
Цитата:
качественный бекстейдж! |
у вас в программе много разных позиций робота и из любой из них он может вернуться в исходную точку ничего не поломав ? или контроль входа нужен только в конце программы ?
|
да, только в конце программы когда он уже находится в нужной точке.
|
это начало вашей программы, но добавлена метка 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 |
пробовал примерно так же только не через wait а when- спасибо- завтра протестирую отпишусь
|
а если кнопка оператора залипнет ? робот сразу начнет работать с начала программы. Правильнее будет так:
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