29.08.2020, 18:07
|
#21
|
Гуру
Регистрация: 15.03.2014
Сообщения: 145
Сказал Спасибо: 0
Сказали Спасибо 18 раз(а) в 15 сообщении
|
доброго времени суток.
тз на программу можете написать? что робот должен делать?
идёт от точки к точке. возникает прерывание робот отходит, что то происходит, по команде возвращается в точку прерывания, возобновляет процесс и доходит до следующей точки траектории и далее?
|
|
|
|
29.08.2020, 19:00
|
#22
|
Мастер
Регистрация: 03.03.2019
Сообщения: 49
Сказал Спасибо: 2
Сказали Спасибо 11 раз(а) в 11 сообщении
|
Сообщение от sheppard
|
не понял от слова совсем ))
---
Тут все ясно:
DECL E6POS MyPoint ;объявляем переменную
E6POS MyPoint={X 0,Y 0,Z 0,A 0,B 0,C 0,S 0,T 0,E1 0.0,E2 0.0,E3 0.0,E4 0.0,E5 0.0,E6 0.0}
...
Если на все вопросы "да", тогда все совершенно понятно Вот только все-таки хотелось бы расшифровку ABCST...
|
Виноват, мой косяк, XP1 надобно заменить на MyPoint
MyPoint.X=MyPoint.X+10 используя оператор выборки "." Как обращение к полю или методу экземпляра класса.
XYZ - координаты точки, но этого мало, так как в этой точке TCP (tool center point) может находиться в бесконечном многообразии вариантов.
Дополнительно используют углы вращения ABC которые однозначно определяют в пространстве положение самого инструмента. Ну вроде как недовектор у него есть конец координат и направление, но нет координат начала.
Е1 - Е6 это положение внешних осей, в данном случае они отсутствуют поэтому можно на них немножко подзабить.
$POS_ACT системное автоотслеживание текущих координат? Не вдаваясь в подробности, что-то вроде того.
|
|
|
|
29.08.2020, 22:53
|
#23
|
Гуру
Регистрация: 19.04.2020
Сообщения: 215
Сказал Спасибо: 4
Сказали Спасибо 3 раз(а) в 3 сообщении
|
Отлично ))
А вот пространственное положение tool'а меня не интересует. Наоборот, мне нужно, чтобы оно оставалось неизменным.
То есть, по идее я могу просто не трогать их, а использовать исключительно MyPoint.X..Z.
Тогда все прекрасно ) в понедельник повеселюсь... Хотя и так уже видно, просто в моем случае одно прерывание работает "отлавливая" инфракрасным датчиком палку и двигаясь к ней, затем возвращаясь на траекторию. Но нужно чтобы второй датчик отловил момент нужного сближения - теперь все ясно, как решить этот момент :
https://www.facebook.com/henry.shepp...73295332708628
|
|
|
|
31.08.2020, 09:04
|
#24
|
Гуру
Регистрация: 19.04.2020
Сообщения: 215
Сказал Спасибо: 4
Сказали Спасибо 3 раз(а) в 3 сообщении
|
Не вытанцовывается каменный гладиолус!
Суть проста: башка робота двигается по главной траектории. На ней два датчика. Прерывание 5 вызывается при срабатывании первого и пусть просто робот запоминает в currentXYZ текущее значение $POS_ACT. И начинает двигаться по мелкой доп.траектории. Предварительно активируется прерывание 4 (когда срабатывает второй датчик), которое просто должно "наплевать" на выполнение текущей доп.траектории и вернуть голову в currentXYZ, выйти из прерывания 4 и затем сразу же из 5 и продолжить главную траекторию.
Но я даже не могу запомнить currentXYZ = $POS_ACT - ошибка. Вроде "нельзя сохранять в главной программе данные, связанные со временем исполнения".
Вот грубо навскидку - выкинул все, что не относится к проблеме.
===
&ACCESS RV
DEF b01( )
E6POS currentXYZ;
;FOLD INI
;FOLD BASISTECH INI
GLOBAL INTERRUPT DECL 5 WHEN $MEAS_PULSE[3]==TRUE DO found()
INTERRUPT ON 5
GLOBAL INTERRUPT DECL 4 WHEN $MEAS_PULSE[1]==TRUE DO stop_heat()
INTERRUPT ON 4
BAS ( #INITMOV,0 )
;ENDFOLD (BASISTECH INI)
;FOLD USER INI
;ENDFOLD (USER INI)
;ENDFOLD (INI)
$BASE = $NULLFRAME;
$TOOL = $NULLFRAME;
$IPO_MODE = #BASE;
$OV_PRO=100
LOOP
PTP {A1 0, A2 -90, A3 90, A4 90, A5 0, A6 0}
LIN_REL {Z -2000}; main trajectory
LIN_REL {Z 2000}
ENDLOOP
END
def found()
BRAKE F
$OV_PRO=100
INTERRUPT OFF 5 ; founded - 1st trigger is ON
INTERRUPT ON 4 ; closeup check on - activate INT for 2nd trigger
currentXYZ = $POS_ACT
PTP_REL {X 200}; added trajectory
INTERRUPT OFF 4
INTERRUPT ON 5
$OV_PRO=80
end
def stop_heat()
BRAKE F
PTP currentXYZ
end
===
|
|
|
|
02.09.2020, 13:31
|
#25
|
Гуру
Регистрация: 04.08.2016
Сообщения: 81
Сказал Спасибо: 0
Сказали Спасибо 29 раз(а) в 19 сообщении
|
Привет !
Тут есть пара вещей:
1. Декларация для: E6POS currentXYZ
выбрана неверно. В данном случае, как локальная переменная в
процедуре DEF b01( ), а используется в процедуре прерывания
def found(). Для правильной работы, переменную currentXYZ,
надо объявить или в файле b01.dat, или в файле $config.dat
(т.е глобально). Так же нужно ее проинициализировать до входа в
главный цикл, например currentXYZ = $NULLFRAME
2. Теперь сами прерывания. Тут мне с логикой не все понятно.
Робот двигается вверх вниз. Срабатывает первым прерывание 5. Робот
двигается вперед на 200 мм. и все. Если второе прирывание, которое его теоритически
должно вернуть на первоначальную траекторию, например запаздывает или не походит,
то робот зависает после команды PTP_REL {X 200}.
Мне кажется, что правильно было бы после команды PTP_REL {X 200} сразу дабавить
команду возврата на первоначальную траекторию PTP $POS_RET, а от прерывания 4 отказаться.
Т.е.
def found()
BRAKE F
$OV_PRO=100
INTERRUPT OFF 5 ; founded - 1st trigger is ON
INTERRUPT ON 4 ; closeup check on - activate INT for 2nd trigger
currentXYZ = $POS_ACT
PTP_REL {X 200}; added trajectory
PTP $POS_RET
INTERRUPT OFF 4
INTERRUPT ON 5
$OV_PRO=80
end
|
|
|
|
03.09.2020, 06:05
|
#26
|
Гуру
Регистрация: 19.04.2020
Сообщения: 215
Сказал Спасибо: 4
Сказали Спасибо 3 раз(а) в 3 сообщении
|
Ага...
С первым пунктом разобрался ) просто я по древней ассемблерной привычке все кодирую прямо в ноутпаде, поэтому бывают старые замашки в программировании резидентных программ эдакий перехват 5го, 9го и особенно 13h прерываний под ДОС
А вот логика второго пункта...
Суть в том, чтобы голова робота ехала вперёд, но не дальше 200мм. Но если срабатывает второй датчик, то нужно чтобы голова немедленно вернулась - то есть я вторым датчиком ищу поверхность. Если нахожу, то возвращаюсь на столько мм, сколько успел проехать вперёд по этому 200отмиллиметровому пути. Иначе я башкой робота просто протараню эту поверхность.
Логично перед началом движения сохранить координаты, затем двигаться и при срабатывании 4го прерывания или достижения 200 мм вернуться на сохраненные координаты, выйти из процедуры прерывания и продолжить основную вертикальную траекторию.
Вот такие пирожки с котятами... ))
|
|
|
|
03.09.2020, 06:26
|
#27
|
Гуру
Регистрация: 19.04.2020
Сообщения: 215
Сказал Спасибо: 4
Сказали Спасибо 3 раз(а) в 3 сообщении
|
и ещё момент. в чем разница между $pos_act и $pos_int? а то тут пока рыгорыч глушит Dns и погуглить толком не удается )) а тут как раз, насколько смутно помню, именно тот случай.
|
|
|
|
03.09.2020, 06:57
|
#28
|
Гуру
Регистрация: 04.08.2016
Сообщения: 81
Сказал Спасибо: 0
Сказали Спасибо 29 раз(а) в 19 сообщении
|
Тогда попробуй так:
def found()
BRAKE F
$OV_PRO=100
INTERRUPT OFF 5 ; founded - 1st trigger is ON
currentXYZ = $POS_RET
INTERRUPT ON 4 ; closeup check on - activate INT for 2nd trigger
PTP_REL {X 200}; added trajectory
INTERRUPT OFF 4
PTP $POS_RET
INTERRUPT ON 5
$OV_PRO=80
end
Про системные переменные реалтайма есть инфа во всех мануалах по прерываниям и
описания системных переменных (с картинками, там все видно).
|
|
|
|
03.09.2020, 07:08
|
#29
|
Гуру
Регистрация: 15.03.2014
Сообщения: 145
Сказал Спасибо: 0
Сказали Спасибо 18 раз(а) в 15 сообщении
|
Сообщение от sheppard
|
и ещё момент. в чем разница между и ? а то тут пока рыгорыч глушит Dns и погуглить толком не удается )) а тут как раз, насколько смутно помню, именно тот случай.
|
$pos_act - текущая позиция, в любом месте программы можно вставить. С момента прерывания до считывания этой переменной робот может проехать по инерции некоторое расстояние. См. рис.
$pos_int - позиция в момент прерывания.
|
|
|
|
03.09.2020, 07:26
|
#30
|
Гуру
Регистрация: 19.04.2020
Сообщения: 215
Сказал Спасибо: 4
Сказали Спасибо 3 раз(а) в 3 сообщении
|
ага! как и догадывался... спасибище ))
|
|
|
|
Опции темы |
Поиск в этой теме |
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +2, время: 18:40.
|
|