Ответ
 
Опции темы Поиск в этой теме
Старый 09.09.2020, 07:23   #41
Pavel_T
Гуру
 
Регистрация: 04.08.2016
Сообщения: 81
Сказал Спасибо: 0
Сказали Спасибо 29 раз(а) в 19 сообщении
По умолчанию

Наконец то вчера удалось запустить пример на живом роботе. Как и ожидалось, выявилось несколько
досадных багов:
1. Ошибки синтаксиса
CASE #RRET_UP100
вместо
CASE #RET_UP100
2. Думал одно, а написал другое. Обработчики прерывания должны заканчиваться
оператором RESUME, а не RETURN.
3. Перед входом в главный цикл обязательно сбросить счетчик прекомпилятора комманд в 0, иначе
статусы работаю не верно:
$ADVANCE = 0
4. Движения с PTP поменял на LIN для лучшей наглядности.

Вот исправленный пример:
Переменные которые надо вставить в $config.dat

ENUM PROC_STATUS MAIN_UP, MAIN_DOWN, FORWARD200, UP100, RET_FORWARD200, RET_UP100
DECL E6POS UpperPos, LowerPos ;точки главной траектории
DECL PROC_STATUS ACT_STATUS, PRV_STATUS ;задаем переменные для хранения текущего и предыдущего статусов
DECL E6POS RetFw200, RetUp100 ;точки возврата из прерывания на главную траекторию

Сам исправленный пример:

DEF TestIRQ ( )
E6AXIS HOME
DECL INT sts

;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 5 WHEN $MEAS_PULSE[3]==TRUE DO IR_Forward200()
INTERRUPT DECL 4 WHEN $MEAS_PULSE[1]==TRUE DO IR_Up100()

sts = 0
RetFw200 = $NULLFRAME
RetUp100 = $NULLFRAME

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

HOME = {A1 0, A2 -90, A3 90, A4 90, A5 0, A6 0}
PTP HOME ;выйти на главную траекторию

;конвертируем HOME axis pos. в координаты верхней точки
UpperPos = FORWARD(HOME, sts)

;задаем нижнюю точку
LowerPos = UpperPos
LowerPos.Z = LowerPos.Z - 2000

;начальный статус движения (предполагаем, что робот вверху)
ACT_STATUS = #MAIN_DOWN
PRV_STATUS = ACT_STATUS
INTERRUPT ON 5
$ADVANCE = 0

LOOP
;статус менеджер
SWITCH ACT_STATUS
CASE #MAIN_DOWN
MainMoveDown() ;едем вниз и ждем срабатывания 5 прерывания
CASE #MAIN_UP
MainMoveUp() ;едем вверх и ждем срабатывания 5 прерывания
CASE #FORWARD200
Forward200() ;5 прерывание сработало, едем вперед и ждем срабатывания 4 прерывания
CASE #RET_FORWARD200
RetForward200() ;выходим на главную траекторию после движения вперед
CASE #UP100
Up100() ;4 прерывание сработало, движениу вперед остановлено, едем вверх
CASE #RET_UP100
RetUp100() ;возвращаемся вниз к точке срабатывания 4 прерывания
ENDSWITCH

WAIT FOR TRUE
ENDLOOP

END

;вниз по главной траектории
DEF MainMoveDown()
LIN LowerPos
ACT_STATUS = #MAIN_UP
END

;вверх по главной траектории
DEF MainMoveUp()
LIN UpperPos
ACT_STATUS = #MAIN_DOWN
END

;обработчик 5 прерывания
DEF IR_Forward200()
BRAKE F
$OV_PRO=100
INTERRUPT OFF 5
INTERRUPT ON 4
RetFw200 = $POS_RET
PRV_STATUS = ACT_STATUS
ACT_STATUS = #FORWARD200
RESUME
END

;обработчик 4 прерывания
DEF IR_Up100()
BRAKE F
RetUp100 = $POS_RET
ACT_STATUS = #UP100
RESUME
END

;просто вперед на 200 мм
DEF Forward200()
LIN_REL {X 200}
ACT_STATUS = #RET_FORWARD200
END

;назад к точке возврата из 5 прерывания
DEF RetForward200()
LIN RetFw200
INTERRUPT OFF 4
INTERRUPT ON 5
$OV_PRO=80
ACT_STATUS = PRV_STATUS ;продолжить прерванное движение: или вверх или вниз
END

;просто вверх на 100 мм
DEF Up100()
LIN_REL {Z 100}
ACT_STATUS = #RET_UP100
END

;назад к точке возврата из 4 прерывания
DEF RetUp100()
LIN RetUp100
ACT_STATUS = #RET_FORWARD200
END
Pavel_T вне форума   Ответить с цитированием
cказали "Спасибо" Pavel_T за это сообщение:
Ignis (26.10.2020)
Старый 12.09.2020, 17:46   #42
sheppard
Гуру
 
Регистрация: 19.04.2020
Сообщения: 215
Сказал Спасибо: 4
Сказали Спасибо 3 раз(а) в 3 сообщении
По умолчанию

любопытственно! изучаю...
sheppard вне форума   Ответить с цитированием
Ответ
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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


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

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