Во, примерчик запилил.
Как работает.
Робот выходит на начальную позицию и начинает ездить влево, вправо на 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