Показать сообщение отдельно
Старый 09.07.2020, 11:38   #5
Pavel_T
Гуру
 
Регистрация: 04.08.2016
Сообщения: 81
Сказал Спасибо: 0
Сказали Спасибо 29 раз(а) в 19 сообщении
По умолчанию

Во, примерчик запилил.
Как работает.
Робот выходит на начальную позицию и начинает ездить влево, вправо на 25 см.
по оси Y.
В начале программы объявляется прерывание, по которому робот останавливает
первоначальное движение и меняет его на противоположное. Прерывание в примере
опрашивает просто свободный $OUT[100] выход. Так сделано для того, чтобы можно было
проверить работу программы в режиме робота Т1. Если все нормально, то можно
закоментировать объявление прерывания проверки выхода $OUT[100] и разкоментировать
объявление прерывания проверки для $meas_pulse[1]. Опять проверить в режиме Т1.
Если все работает Ок, запустить в автомате. Программа стартует со скоростью 30%.

!!! ALARM !!!
Надеюсь, что перед запуском будет проверена рабочая зона, положение робота и
гриппера, напоминать не надо.
Общий вид можно посмотреть здесь:
https://yadi.sk/i/jmqyrad5RPYL0g

DEF CheckFastMeas ( )
DECL AXIS HOME
E6POS TempPos
FRAME LeftPos, RightPos

;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)

;INTERRUPT DECL 89 WHEN $meas_pulse[1] == TRUE DO ReplaceDirectionByOn()
INTERRUPT DECL 89 WHEN $OUT[100] == TRUE DO ReplaceDirectionByOn()

$OUT[100] = FALSE
LeftPos = $NULLFRAME
RightPos = $NULLFRAME

$TOOL = TOOL_DATA[1]
$BASE = BASE_DATA[1]

$OV_PRO = 30
HOME = {AXIS: A1 0,A2 -90,A3 90,A4 0,A5 90,A6 -134}
PTP HOME ;BCO run

TempPos = $POS_ACT

LeftPos = TempPos
LeftPos.Y = LeftPos.Y - 250

RightPos = TempPos
RightPos.Y = RightPos.Y + 250

LOOP
MoveRobotLeft(LeftPos)
MoveRobotRight(RightPos)
ENDLOOP
END

DEF ReplaceDirectionByOn()
INTERRUPT OFF 89

MsgNotify("Signal is ON !")

BRAKE ; halt motion
RESUME ; terminate motion, jump program pointer back to Main
END

DEF MoveRobotLeft(point : IN)
FRAME point
INTERRUPT ON 89
LIN point
WAIT FOR TRUE
END

DEF MoveRobotRight(point : IN)
FRAME point
INTERRUPT ON 89
LIN point
WAIT FOR TRUE
END
Pavel_T вне форума   Ответить с цитированием